summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElvin Efendi <elvin.efendiev@shopify.com>2015-12-07 14:46:40 -0500
committerElvin Efendi <elvin.efendiev@shopify.com>2015-12-07 14:46:40 -0500
commitd2e8c0e96460b34371bbb72f0ecf878321fbf8e3 (patch)
tree3069e05cd253d512f64d8d8ec5b47af51ef7525a
parentd0105ef311a9bfd0ecd23efe77678670d6042e02 (diff)
pull origin/master before pushing
-rw-r--r--lib/oxidized/hook/githubrepo.rb20
1 files changed, 19 insertions, 1 deletions
diff --git a/lib/oxidized/hook/githubrepo.rb b/lib/oxidized/hook/githubrepo.rb
index bf33b89..83e1078 100644
--- a/lib/oxidized/hook/githubrepo.rb
+++ b/lib/oxidized/hook/githubrepo.rb
@@ -9,6 +9,24 @@ class GithubRepo < Oxidized::Hook
log "Pushing local repository(#{repo.path})..."
remote = repo.remotes['origin'] || repo.remotes.create('origin', cfg.remote_repo)
log "to remote: #{remote.url}"
- remote.push(['+refs/heads/master'], credentials: credentials)
+
+ fetch_and_merge_remote(repo, credentials)
+
+ remote.push([repo.head.name], credentials: credentials)
+ end
+
+ def fetch_and_merge_remote(repo, credentials)
+ their_branch = repo.branches["origin/master"] or return
+
+ repo.fetch('origin', [repo.head.name], credentials: credentials)
+
+ merge_index = repo.merge_commits(repo.head.target_id, their_branch.target_id)
+
+ Rugged::Commit.create(repo, {
+ parents: [repo.head.target, their_branch.target],
+ tree: merge_index.write_tree(repo),
+ message: "Merge remote-tracking branch '#{their_branch.name}'",
+ update_ref: "HEAD"
+ })
end
end