Class: Braid::Commands::Add

Inherits:
Braid::Command show all
Defined in:
lib/braid/commands/add.rb

Instance Method Summary collapse

Methods inherited from Braid::Command

#config, #force?, msg, #msg, run, #verbose?

Methods included from Operations::VersionControl

#git, #git_cache

Instance Method Details

#run(url, options = {}) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/braid/commands/add.rb', line 4

def run(url, options = {})
  with_reset_on_error do
    mirror           = config.add_from_options(url, options)

    branch_message   = (mirror.branch == 'master') ? '' : " branch '#{mirror.branch}'"
    revision_message = options['revision'] ? " at #{display_revision(mirror, options['revision'])}" : ''
    msg "Adding mirror of '#{mirror.url}'#{branch_message}#{revision_message}."

    # these commands are explained in the subtree merge guide
    # http://www.kernel.org/pub/software/scm/git/docs/howto/using-merge-subtree.html

    setup_remote(mirror)
    mirror.fetch

    new_revision    = validate_new_revision(mirror, options['revision'])
    target_revision = determine_target_revision(new_revision)

    unless mirror.squashed?
      git.merge_ours(target_revision)
    end
    git.read_tree_prefix(target_revision, mirror.path)

    mirror.revision = new_revision
    mirror.lock = new_revision if options['revision']
    config.update(mirror)
    add_config_file

    git.commit("Add mirror '#{mirror.path}' at #{display_revision(mirror)}")
    msg "Added mirror at #{display_revision(mirror)}."
  end
end