Class: Braid::Commands::Push
- Inherits:
-
Braid::Command
- Object
- Braid::Command
- Braid::Commands::Push
- Defined in:
- lib/braid/commands/push.rb
Instance Method Summary collapse
Methods inherited from Braid::Command
#config, msg, #msg, run, #verbose?
Methods included from Operations::VersionControl
#git, #git_cache, #git_svn, #svn
Instance Method Details
#run(path, options = {}) ⇒ Object
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 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/braid/commands/push.rb', line 7 def run(path, = {}) mirror = config.get!(path) #mirror.fetch base_revision = git.rev_parse(mirror.remote) unless mirror.merged?(base_revision) msg "Mirror is not up to date. Stopping." return end diff = mirror.diff if diff.empty? msg "No local changes found. Stopping." return end clone_dir = Dir.tmpdir + "/braid_push.#{$$}" Dir.mkdir(clone_dir) source_dir = Dir.pwd remote_url = git.remote_url(mirror.remote) if remote_url == mirror.cached_url remote_url = mirror.url elsif File.directory?(remote_url) remote_url = File.(remote_url) end Dir.chdir(clone_dir) do msg "Cloning mirror with local changes." git.init git.fetch(source_dir) git.fetch(remote_url) git.checkout(base_revision) git.apply(diff) system("git commit -v") msg "Pushing changes to remote." git.push(remote_url, "HEAD:#{mirror.branch}") end FileUtils.rm_r(clone_dir) end |