octo_merge 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +17 -0
- data/TODO.md +11 -0
- data/exe/octo-merge +1 -1
- data/lib/{octo_merge/git.rb → git.rb} +0 -1
- data/lib/octo_merge/interactive_pull_requests.rb +12 -4
- data/lib/octo_merge/strategy/base.rb +38 -0
- data/lib/octo_merge/strategy/merge_with_rebase.rb +20 -0
- data/lib/octo_merge/strategy/merge_with_rebase_and_message.rb +89 -0
- data/lib/octo_merge/strategy/merge_without_rebase.rb +17 -0
- data/lib/octo_merge/strategy/rebase.rb +20 -0
- data/lib/octo_merge/strategy.rb +11 -0
- data/lib/octo_merge/version.rb +1 -1
- data/lib/octo_merge.rb +3 -6
- data/octo_merge.gemspec +1 -0
- metadata +24 -7
- data/lib/octo_merge/abstract_merge.rb +0 -32
- data/lib/octo_merge/merge_with_rebase.rb +0 -22
- data/lib/octo_merge/merge_with_rebase_and_message.rb +0 -87
- data/lib/octo_merge/merge_without_rebase.rb +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5f99ec38437701d28091542a65cf259e028b5f82
|
4
|
+
data.tar.gz: bbbc0e41c04fefde9a480b918ed0dda0633ab1f0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b5958a05ec2db085d9294c0c347dc2c74c9c878351b94e288cb714134aee4c86b751b6d7a4120df805a26963d8afa77e3c4ac8e2a5917d1bff0b8f69c00dd050
|
7
|
+
data.tar.gz: ef24a2c90b7683514e1c29e43bb3e37c81e8d4b8cc175cc362b6fe07a951f61e942bc74655a249185c45ac7d540e67a0de4466b8b8204f06ef03a853d04bacfc
|
data/README.md
CHANGED
@@ -74,6 +74,23 @@ pull_requests.each do |pull_request|
|
|
74
74
|
end
|
75
75
|
```
|
76
76
|
|
77
|
+
### Rebase
|
78
|
+
|
79
|
+
```ruby
|
80
|
+
git.checkout(master)
|
81
|
+
git.fetch(upstream)
|
82
|
+
git.reset_hard("#{upstream}/#{master}")
|
83
|
+
|
84
|
+
pull_requests.each do |pull_request|
|
85
|
+
git.remote_add("#{pull_request.remote} #{pull_request.remote_url}")
|
86
|
+
git.fetch(pull_request.remote)
|
87
|
+
git.checkout(pull_request.branch)
|
88
|
+
git.rebase(master)
|
89
|
+
git.checkout(master)
|
90
|
+
git.rebase("#{pull_request.branch}")
|
91
|
+
end
|
92
|
+
```
|
93
|
+
|
77
94
|
## Development
|
78
95
|
|
79
96
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/TODO.md
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
# TODO
|
2
|
+
|
3
|
+
Before we release `v1.0.0` the following tasks needs to be done:
|
4
|
+
|
5
|
+
* [ ] Move logic from `exe/octo-merge` into a testable class
|
6
|
+
* [ ] Add specs for `InteractivePullRequests`
|
7
|
+
* [ ] Create a setup task
|
8
|
+
* [ ] Complete docs (`README.md`)
|
9
|
+
* [ ] Try to get rid of external dependencies (`octokit`, `inquirer`)
|
10
|
+
* [ ] Decide on gem name (`octo_merge` VS `octo-merge`)
|
11
|
+
* [ ] Use GitHubs `secret` pull requests branches instead of adding new remotes
|
data/exe/octo-merge
CHANGED
@@ -77,7 +77,7 @@ end
|
|
77
77
|
|
78
78
|
options[:dir] = File.expand_path(options[:dir])
|
79
79
|
|
80
|
-
options[:strategy] = Object.const_get("OctoMerge::#{options[:strategy]}")
|
80
|
+
options[:strategy] = Object.const_get("OctoMerge::Strategy::#{options[:strategy]}")
|
81
81
|
|
82
82
|
options[:pull_requests] = OctoMerge::InteractivePullRequests.get(options) if options[:interactive]
|
83
83
|
options[:pull_requests] = options[:pull_requests].to_s.split(",")
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'inquirer'
|
2
|
+
|
1
3
|
module OctoMerge
|
2
4
|
# TODO: Write specs
|
3
5
|
class InteractivePullRequests
|
@@ -11,10 +13,16 @@ module OctoMerge
|
|
11
13
|
end
|
12
14
|
|
13
15
|
def pull_requests
|
14
|
-
|
15
|
-
|
16
|
+
prs = list.all
|
17
|
+
|
18
|
+
formatted_prs = prs.map do |pull_request|
|
19
|
+
format_pull_request(pull_request)
|
20
|
+
end
|
21
|
+
|
22
|
+
system("clear")
|
23
|
+
idx = Ask.checkbox "Select the pull requests you want to merge", formatted_prs
|
16
24
|
|
17
|
-
|
25
|
+
idx.zip(prs).select { |e| e[0] }.map { |e| e[1][:number] }.join(",")
|
18
26
|
end
|
19
27
|
|
20
28
|
private
|
@@ -35,7 +43,7 @@ module OctoMerge
|
|
35
43
|
end
|
36
44
|
|
37
45
|
def format_pull_request(pull_request)
|
38
|
-
"
|
46
|
+
"#{pull_request.number}: \"#{pull_request.title}\" by @#{pull_request.user.login}"
|
39
47
|
end
|
40
48
|
|
41
49
|
def list
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# == Links
|
2
|
+
#
|
3
|
+
# * https://www.atlassian.com/git/tutorials/merging-vs-rebasing/workflow-walkthrough
|
4
|
+
# * https://www.atlassian.com/git/articles/git-team-workflows-merge-or-rebase/
|
5
|
+
module OctoMerge
|
6
|
+
module Strategy
|
7
|
+
class Base
|
8
|
+
attr_reader :working_directory, :pull_requests
|
9
|
+
|
10
|
+
def initialize(working_directory:, pull_requests:)
|
11
|
+
@working_directory = working_directory
|
12
|
+
@pull_requests = pull_requests
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.run(*args)
|
16
|
+
new(*args).tap { |strategy| strategy.run }
|
17
|
+
end
|
18
|
+
|
19
|
+
def run
|
20
|
+
fail NotImplementedError
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def git
|
26
|
+
@git ||= Git.new(working_directory)
|
27
|
+
end
|
28
|
+
|
29
|
+
def upstream
|
30
|
+
:upstream
|
31
|
+
end
|
32
|
+
|
33
|
+
def master
|
34
|
+
:master
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module OctoMerge
|
2
|
+
module Strategy
|
3
|
+
class MergeWithRebase < Base
|
4
|
+
def run
|
5
|
+
git.checkout(master)
|
6
|
+
git.fetch(upstream)
|
7
|
+
git.reset_hard("#{upstream}/#{master}")
|
8
|
+
|
9
|
+
pull_requests.each do |pull_request|
|
10
|
+
git.remote_add("#{pull_request.remote} #{pull_request.remote_url}")
|
11
|
+
git.fetch(pull_request.remote)
|
12
|
+
git.checkout(pull_request.branch)
|
13
|
+
git.rebase(master)
|
14
|
+
git.checkout(master)
|
15
|
+
git.merge_no_ff(pull_request.branch)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
require 'tempfile'
|
2
|
+
|
3
|
+
module OctoMerge
|
4
|
+
module Strategy
|
5
|
+
class MergeWithRebaseAndMessage < Base
|
6
|
+
def run
|
7
|
+
git.checkout(master)
|
8
|
+
git.fetch(upstream)
|
9
|
+
git.reset_hard("#{upstream}/#{master}")
|
10
|
+
|
11
|
+
pull_requests.each do |pull_request|
|
12
|
+
git.remote_add("#{pull_request.remote} #{pull_request.remote_url}")
|
13
|
+
git.fetch(pull_request.remote)
|
14
|
+
git.checkout(pull_request.branch)
|
15
|
+
git.rebase(master)
|
16
|
+
git.checkout(master)
|
17
|
+
git.merge_no_ff(pull_request.branch)
|
18
|
+
|
19
|
+
add_merge_message(pull_request)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
# TODO: Can we add a custom message to a merge commit in an easier way?
|
26
|
+
#
|
27
|
+
# Note: It's hard to add a multiline message with `merge --message`.
|
28
|
+
#
|
29
|
+
# The `--file` options does not work for `git --merge` so we abuse
|
30
|
+
# `git commit --amend` to apply this message to the merge commit.
|
31
|
+
def add_merge_message(pull_request)
|
32
|
+
MergeMessageFile.path_for(pull_request) do |path|
|
33
|
+
git.commit("--amend --file=#{path}")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
class MergeMessageFile
|
38
|
+
def initialize(pull_request)
|
39
|
+
@pull_request = pull_request
|
40
|
+
file.write(body)
|
41
|
+
file.close
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.path_for(pull_request)
|
45
|
+
new(pull_request).tap do |file|
|
46
|
+
yield(file.path)
|
47
|
+
file.delete
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def path
|
52
|
+
file.path
|
53
|
+
end
|
54
|
+
|
55
|
+
def delete
|
56
|
+
file.unlink
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
attr_reader :pull_request
|
62
|
+
|
63
|
+
def file
|
64
|
+
@file ||= Tempfile.new('merge_commit_message')
|
65
|
+
end
|
66
|
+
|
67
|
+
def body
|
68
|
+
sanitize <<-BODY
|
69
|
+
Merge branch '#{pull_request.branch}'
|
70
|
+
|
71
|
+
Resolves and closes: #{pull_request.url}
|
72
|
+
|
73
|
+
= #{pull_request.title}
|
74
|
+
|
75
|
+
#{pull_request.body}
|
76
|
+
BODY
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
def sanitize(body)
|
81
|
+
# Replace leading "#" and replace with "="
|
82
|
+
body.gsub(/^#+/) { |s| "=" * s.length }
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
private_constant :MergeMessageFile
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module OctoMerge
|
2
|
+
module Strategy
|
3
|
+
class MergeWithoutRebase < Base
|
4
|
+
def run
|
5
|
+
git.checkout(master)
|
6
|
+
git.fetch(upstream)
|
7
|
+
git.reset_hard("#{upstream}/#{master}")
|
8
|
+
|
9
|
+
pull_requests.each do |pull_request|
|
10
|
+
git.remote_add("#{pull_request.remote} #{pull_request.remote_url}")
|
11
|
+
git.fetch(pull_request.remote)
|
12
|
+
git.merge_no_ff("#{pull_request.remote}/#{pull_request.branch}")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module OctoMerge
|
2
|
+
module Strategy
|
3
|
+
class Rebase < Base
|
4
|
+
def run
|
5
|
+
git.checkout(master)
|
6
|
+
git.fetch(upstream)
|
7
|
+
git.reset_hard("#{upstream}/#{master}")
|
8
|
+
|
9
|
+
pull_requests.each do |pull_request|
|
10
|
+
git.remote_add("#{pull_request.remote} #{pull_request.remote_url}")
|
11
|
+
git.fetch(pull_request.remote)
|
12
|
+
git.checkout(pull_request.branch)
|
13
|
+
git.rebase(master)
|
14
|
+
git.checkout(master)
|
15
|
+
git.rebase("#{pull_request.branch}")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require "octo_merge/strategy/base"
|
2
|
+
|
3
|
+
require "octo_merge/strategy/merge_with_rebase"
|
4
|
+
require "octo_merge/strategy/merge_with_rebase_and_message"
|
5
|
+
require "octo_merge/strategy/merge_without_rebase"
|
6
|
+
require "octo_merge/strategy/rebase"
|
7
|
+
|
8
|
+
module OctoMerge
|
9
|
+
module Strategy
|
10
|
+
end
|
11
|
+
end
|
data/lib/octo_merge/version.rb
CHANGED
data/lib/octo_merge.rb
CHANGED
@@ -1,17 +1,14 @@
|
|
1
1
|
require "octo_merge/version"
|
2
2
|
|
3
|
+
require "git"
|
4
|
+
|
3
5
|
require "octo_merge/configuration"
|
4
6
|
require "octo_merge/context"
|
5
7
|
require "octo_merge/execute"
|
6
|
-
require "octo_merge/git"
|
7
8
|
require "octo_merge/interactive_pull_requests"
|
8
9
|
require "octo_merge/list_pull_requests"
|
9
10
|
require "octo_merge/pull_request"
|
10
|
-
|
11
|
-
require "octo_merge/abstract_merge"
|
12
|
-
require "octo_merge/merge_with_rebase"
|
13
|
-
require "octo_merge/merge_with_rebase_and_message"
|
14
|
-
require "octo_merge/merge_without_rebase"
|
11
|
+
require "octo_merge/strategy"
|
15
12
|
|
16
13
|
module OctoMerge
|
17
14
|
class << self
|
data/octo_merge.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: octo_merge
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Patrick Helm
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: octokit
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '4.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: inquirer
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.2.1
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.2.1
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: bundler
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -125,21 +139,24 @@ files:
|
|
125
139
|
- LICENSE.txt
|
126
140
|
- README.md
|
127
141
|
- Rakefile
|
142
|
+
- TODO.md
|
128
143
|
- bin/console
|
129
144
|
- bin/setup
|
130
145
|
- exe/octo-merge
|
146
|
+
- lib/git.rb
|
131
147
|
- lib/octo_merge.rb
|
132
|
-
- lib/octo_merge/abstract_merge.rb
|
133
148
|
- lib/octo_merge/configuration.rb
|
134
149
|
- lib/octo_merge/context.rb
|
135
150
|
- lib/octo_merge/execute.rb
|
136
|
-
- lib/octo_merge/git.rb
|
137
151
|
- lib/octo_merge/interactive_pull_requests.rb
|
138
152
|
- lib/octo_merge/list_pull_requests.rb
|
139
|
-
- lib/octo_merge/merge_with_rebase.rb
|
140
|
-
- lib/octo_merge/merge_with_rebase_and_message.rb
|
141
|
-
- lib/octo_merge/merge_without_rebase.rb
|
142
153
|
- lib/octo_merge/pull_request.rb
|
154
|
+
- lib/octo_merge/strategy.rb
|
155
|
+
- lib/octo_merge/strategy/base.rb
|
156
|
+
- lib/octo_merge/strategy/merge_with_rebase.rb
|
157
|
+
- lib/octo_merge/strategy/merge_with_rebase_and_message.rb
|
158
|
+
- lib/octo_merge/strategy/merge_without_rebase.rb
|
159
|
+
- lib/octo_merge/strategy/rebase.rb
|
143
160
|
- lib/octo_merge/version.rb
|
144
161
|
- octo_merge.gemspec
|
145
162
|
homepage: https://github.com/Deradon/octo_merge
|
@@ -1,32 +0,0 @@
|
|
1
|
-
module OctoMerge
|
2
|
-
class AbstractMerge
|
3
|
-
attr_reader :working_directory, :pull_requests
|
4
|
-
|
5
|
-
def initialize(working_directory:, pull_requests:)
|
6
|
-
@working_directory = working_directory
|
7
|
-
@pull_requests = pull_requests
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.run(*args)
|
11
|
-
new(*args).tap { |merge| merge.run }
|
12
|
-
end
|
13
|
-
|
14
|
-
def run
|
15
|
-
fail "NotImplementedYet"
|
16
|
-
end
|
17
|
-
|
18
|
-
private
|
19
|
-
|
20
|
-
def git
|
21
|
-
@git ||= Git.new(working_directory)
|
22
|
-
end
|
23
|
-
|
24
|
-
def upstream
|
25
|
-
:upstream
|
26
|
-
end
|
27
|
-
|
28
|
-
def master
|
29
|
-
:master
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
# == Links
|
2
|
-
#
|
3
|
-
# * https://www.atlassian.com/git/tutorials/merging-vs-rebasing/workflow-walkthrough
|
4
|
-
# * https://www.atlassian.com/git/articles/git-team-workflows-merge-or-rebase/
|
5
|
-
module OctoMerge
|
6
|
-
class MergeWithRebase < AbstractMerge
|
7
|
-
def run
|
8
|
-
git.checkout(master)
|
9
|
-
git.fetch(upstream)
|
10
|
-
git.reset_hard("#{upstream}/#{master}")
|
11
|
-
|
12
|
-
pull_requests.each do |pull_request|
|
13
|
-
git.remote_add("#{pull_request.remote} #{pull_request.remote_url}")
|
14
|
-
git.fetch(pull_request.remote)
|
15
|
-
git.checkout(pull_request.branch)
|
16
|
-
git.rebase(master)
|
17
|
-
git.checkout(master)
|
18
|
-
git.merge_no_ff(pull_request.branch)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,87 +0,0 @@
|
|
1
|
-
require 'tempfile'
|
2
|
-
|
3
|
-
module OctoMerge
|
4
|
-
class MergeWithRebaseAndMessage < AbstractMerge
|
5
|
-
def run
|
6
|
-
git.checkout(master)
|
7
|
-
git.fetch(upstream)
|
8
|
-
git.reset_hard("#{upstream}/#{master}")
|
9
|
-
|
10
|
-
pull_requests.each do |pull_request|
|
11
|
-
git.remote_add("#{pull_request.remote} #{pull_request.remote_url}")
|
12
|
-
git.fetch(pull_request.remote)
|
13
|
-
git.checkout(pull_request.branch)
|
14
|
-
git.rebase(master)
|
15
|
-
git.checkout(master)
|
16
|
-
git.merge_no_ff(pull_request.branch)
|
17
|
-
|
18
|
-
add_merge_message(pull_request)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
|
24
|
-
# TODO: Can we add a custom message to a merge commit in an easier way?
|
25
|
-
#
|
26
|
-
# Note: It's hard to add a multiline message with `merge --message`.
|
27
|
-
#
|
28
|
-
# The `--file` options does not work for `git --merge` so we abuse
|
29
|
-
# `git commit --amend` to apply this message to the merge commit.
|
30
|
-
def add_merge_message(pull_request)
|
31
|
-
MergeMessageFile.path_for(pull_request) do |path|
|
32
|
-
git.commit("--amend --file=#{path}")
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
class MergeMessageFile
|
37
|
-
def initialize(pull_request)
|
38
|
-
@pull_request = pull_request
|
39
|
-
file.write(body)
|
40
|
-
file.close
|
41
|
-
end
|
42
|
-
|
43
|
-
def self.path_for(pull_request)
|
44
|
-
new(pull_request).tap do |file|
|
45
|
-
yield(file.path)
|
46
|
-
file.delete
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def path
|
51
|
-
file.path
|
52
|
-
end
|
53
|
-
|
54
|
-
def delete
|
55
|
-
file.unlink
|
56
|
-
end
|
57
|
-
|
58
|
-
private
|
59
|
-
|
60
|
-
attr_reader :pull_request
|
61
|
-
|
62
|
-
def file
|
63
|
-
@file ||= Tempfile.new('merge_commit_message')
|
64
|
-
end
|
65
|
-
|
66
|
-
def body
|
67
|
-
sanitize <<-BODY
|
68
|
-
Merge branch '#{pull_request.branch}'
|
69
|
-
|
70
|
-
Resolves and closes: #{pull_request.url}
|
71
|
-
|
72
|
-
= #{pull_request.title}
|
73
|
-
|
74
|
-
#{pull_request.body}
|
75
|
-
BODY
|
76
|
-
|
77
|
-
end
|
78
|
-
|
79
|
-
def sanitize(body)
|
80
|
-
# Replace leading "#" and replace with "="
|
81
|
-
body.gsub(/^#+/) { |s| "=" * s.length }
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
private_constant :MergeMessageFile
|
86
|
-
end
|
87
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
module OctoMerge
|
2
|
-
class MergeWithoutRebase < AbstractMerge
|
3
|
-
def run
|
4
|
-
git.checkout(master)
|
5
|
-
git.fetch(upstream)
|
6
|
-
git.reset_hard("#{upstream}/#{master}")
|
7
|
-
|
8
|
-
pull_requests.each do |pull_request|
|
9
|
-
git.remote_add("#{pull_request.remote} #{pull_request.remote_url}")
|
10
|
-
git.fetch(pull_request.remote)
|
11
|
-
git.merge_no_ff("#{pull_request.remote}/#{pull_request.branch}")
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|