git-process 1.0.4 → 1.0.5
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.
- data/CHANGELOG.md +11 -1
- data/README.md +2 -8
- data/lib/git-process/abstract_error_builder.rb +2 -2
- data/lib/git-process/changed_file_helper.rb +1 -1
- data/lib/git-process/git_abstract_merge_error_builder.rb +2 -1
- data/lib/git-process/git_branch.rb +3 -2
- data/lib/git-process/git_branches.rb +9 -8
- data/lib/git-process/git_lib.rb +18 -19
- data/lib/git-process/git_merge_error.rb +2 -1
- data/lib/git-process/git_process.rb +8 -6
- data/lib/git-process/git_process_error.rb +1 -1
- data/lib/git-process/git_process_options.rb +6 -8
- data/lib/git-process/git_rebase_error.rb +2 -1
- data/lib/git-process/git_status.rb +37 -36
- data/lib/git-process/github_client.rb +8 -10
- data/lib/git-process/github_pull_request.rb +9 -7
- data/lib/git-process/github_service.rb +7 -7
- data/lib/git-process/new_fb.rb +1 -1
- data/lib/git-process/parked_changes_error.rb +2 -1
- data/lib/git-process/pull_request.rb +1 -1
- data/lib/git-process/rebase_to_master.rb +10 -9
- data/lib/git-process/sync.rb +17 -5
- data/lib/git-process/uncommitted_changes_error.rb +1 -1
- data/lib/git-process/version.rb +2 -2
- data/spec/FileHelpers.rb +1 -0
- data/spec/GitRepoHelper.rb +3 -3
- data/spec/changed_file_helper_spec.rb +2 -2
- data/spec/git_abstract_merge_error_builder_spec.rb +32 -28
- data/spec/git_lib_spec.rb +16 -13
- data/spec/git_process_spec.rb +2 -1
- data/spec/git_status_spec.rb +5 -4
- data/spec/github_pull_request_spec.rb +9 -8
- data/spec/github_service_spec.rb +10 -8
- data/spec/rebase_to_master_spec.rb +7 -6
- data/spec/sync_spec.rb +56 -22
- metadata +30 -17
@@ -8,7 +8,7 @@
|
|
8
8
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
9
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
10
|
# See the License for the specific language governing permissions and
|
11
|
-
# limitations under the License.
|
11
|
+
# limitations under the License.
|
12
12
|
|
13
13
|
require 'octokit'
|
14
14
|
|
@@ -23,19 +23,16 @@ module Octokit
|
|
23
23
|
def connection(authenticate=true, raw=false, version=3, force_urlencoded=false)
|
24
24
|
if site
|
25
25
|
url = site
|
26
|
+
elsif version == 2
|
27
|
+
url = "https://github.com"
|
26
28
|
else
|
27
|
-
|
28
|
-
when 2
|
29
|
-
url = "https://github.com"
|
30
|
-
when 3
|
31
|
-
url = "https://api.github.com"
|
32
|
-
end
|
29
|
+
url = "https://api.github.com"
|
33
30
|
end
|
34
31
|
|
35
32
|
options = {
|
36
|
-
|
37
|
-
|
38
|
-
|
33
|
+
:proxy => proxy,
|
34
|
+
:ssl => {:verify => false},
|
35
|
+
:url => url,
|
39
36
|
}
|
40
37
|
|
41
38
|
options.merge!(:params => {:access_token => oauth_token}) if oauthed? && !authenticated?
|
@@ -75,6 +72,7 @@ class GitHubClient < Octokit::Client
|
|
75
72
|
|
76
73
|
alias :old_request :request
|
77
74
|
|
75
|
+
|
78
76
|
def request(method, path, options, version, authenticate, raw, force_urlencoded)
|
79
77
|
if /api.github.com/ !~ site
|
80
78
|
path = "/api/v3/#{path}"
|
@@ -8,7 +8,7 @@
|
|
8
8
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
9
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
10
|
# See the License for the specific language governing permissions and
|
11
|
-
# limitations under the License.
|
11
|
+
# limitations under the License.
|
12
12
|
|
13
13
|
require 'git-process/github_service'
|
14
14
|
require 'octokit'
|
@@ -22,6 +22,7 @@ module GitHub
|
|
22
22
|
|
23
23
|
attr_reader :lib, :repo
|
24
24
|
|
25
|
+
|
25
26
|
def initialize(lib, repo, opts = {})
|
26
27
|
@lib = lib
|
27
28
|
@repo = repo
|
@@ -39,8 +40,8 @@ module GitHub
|
|
39
40
|
logger.info { "Creating a pull request asking for '#{head}' to be merged into '#{base}' on #{repo}." }
|
40
41
|
begin
|
41
42
|
client.create_pull_request(repo, base, head, title, body)
|
42
|
-
rescue Octokit::UnprocessableEntity
|
43
|
-
pull = pull_requests.find {|p| p[:head][:ref] == head and p[:base][:ref] == base}
|
43
|
+
rescue Octokit::UnprocessableEntity
|
44
|
+
pull = pull_requests.find { |p| p[:head][:ref] == head and p[:base][:ref] == base }
|
44
45
|
logger.warn { "Pull request already exists. See #{pull[:html_url]}" }
|
45
46
|
pull
|
46
47
|
end
|
@@ -49,7 +50,7 @@ module GitHub
|
|
49
50
|
|
50
51
|
def find_pull_request(base, head)
|
51
52
|
json = pull_requests
|
52
|
-
json.find {|p| p[:head][:ref] == head and p[:base][:ref] == base}
|
53
|
+
json.find { |p| p[:head][:ref] == head and p[:base][:ref] == base }
|
53
54
|
end
|
54
55
|
|
55
56
|
|
@@ -62,7 +63,7 @@ module GitHub
|
|
62
63
|
logger.info { "Closing a pull request asking for '#{head}' to be merged into '#{base}' on #{repo}." }
|
63
64
|
|
64
65
|
json = pull_requests
|
65
|
-
pull = json.find {|p| p[:head][:ref] == head and p[:base][:ref] == base}
|
66
|
+
pull = json.find { |p| p[:head][:ref] == head and p[:base][:ref] == base }
|
66
67
|
|
67
68
|
raise NotFoundError.new(base, head, repo, json) if pull.nil?
|
68
69
|
|
@@ -72,13 +73,14 @@ module GitHub
|
|
72
73
|
logger.info { "Closing a pull request \##{pull_number} on #{repo}." }
|
73
74
|
end
|
74
75
|
|
75
|
-
client.patch("repos/#{Octokit::Repository.new(repo)}/pulls/#{pull_number}", {:state
|
76
|
+
client.patch("repos/#{Octokit::Repository.new(repo)}/pulls/#{pull_number}", {:state => 'closed'})
|
76
77
|
end
|
77
78
|
|
78
79
|
|
79
80
|
class NotFoundError < StandardError
|
80
81
|
attr_reader :base, :head, :repo
|
81
82
|
|
83
|
+
|
82
84
|
def initialize(base, head, repo, pull_requests_json)
|
83
85
|
@base = base
|
84
86
|
@head = head
|
@@ -90,7 +92,7 @@ module GitHub
|
|
90
92
|
|
91
93
|
msg = "Could not find a pull request for '#{head}' to be merged with '#{base}' on #{repo}."
|
92
94
|
msg += "\n\nExisting Pull Requests:"
|
93
|
-
msg = pull_requests.inject(msg) {|a,v| "#{a}\n #{v[:head]} -> #{v[:base]}" }
|
95
|
+
msg = pull_requests.inject(msg) { |a, v| "#{a}\n #{v[:head]} -> #{v[:base]}" }
|
94
96
|
|
95
97
|
super(msg)
|
96
98
|
end
|
@@ -8,7 +8,7 @@
|
|
8
8
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
9
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
10
|
# See the License for the specific language governing permissions and
|
11
|
-
# limitations under the License.
|
11
|
+
# limitations under the License.
|
12
12
|
|
13
13
|
require 'highline/import'
|
14
14
|
require 'git-process/github_client'
|
@@ -21,7 +21,7 @@ module GitHubService
|
|
21
21
|
if @client.nil?
|
22
22
|
auth_token
|
23
23
|
logger.debug { "Creating GitHub client for user #{user} using token '#{auth_token}'" }
|
24
|
-
@client = GitHubClient.new(:login => user, :oauth_token=> auth_token)
|
24
|
+
@client = GitHubClient.new(:login => user, :oauth_token => auth_token)
|
25
25
|
@client.site = site
|
26
26
|
end
|
27
27
|
@client
|
@@ -38,8 +38,8 @@ module GitHubService
|
|
38
38
|
|
39
39
|
raise GitHubService::NoRemoteRepository.new("There is no value set for 'remote.origin.url'") if origin_url.empty?
|
40
40
|
|
41
|
-
if /^git
|
42
|
-
host = origin_url.sub(/^git
|
41
|
+
if /^git@/ =~ origin_url
|
42
|
+
host = origin_url.sub(/^git@(.*?):.*$/, '\1')
|
43
43
|
site = host_to_site(host, false)
|
44
44
|
else
|
45
45
|
uri = URI.parse(origin_url)
|
@@ -68,10 +68,10 @@ module GitHubService
|
|
68
68
|
in_host_section = false
|
69
69
|
host_name = nil
|
70
70
|
|
71
|
-
|
71
|
+
config_lines.each do |line|
|
72
72
|
line.chop!
|
73
73
|
if /^\s*Host\s+#{host_alias}\s*$/ =~ line
|
74
|
-
|
74
|
+
in_host_section = true
|
75
75
|
next
|
76
76
|
end
|
77
77
|
if in_host_section and (/^\s*HostName\s+\S+\s*$/ =~ line)
|
@@ -141,7 +141,7 @@ module GitHubService
|
|
141
141
|
|
142
142
|
def create_authorization
|
143
143
|
logger.info("Authorizing #{user} to work with #{site}.")
|
144
|
-
auth = pw_client.create_authorization(:scopes =>
|
144
|
+
auth = pw_client.create_authorization(:scopes => %w(repo user gist),
|
145
145
|
:note => 'Git-Process',
|
146
146
|
:note_url => 'http://jdigger.github.com/git-process')
|
147
147
|
config_auth_token = auth['token']
|
data/lib/git-process/new_fb.rb
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
9
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
10
|
# See the License for the specific language governing permissions and
|
11
|
-
# limitations under the License.
|
11
|
+
# limitations under the License.
|
12
12
|
|
13
13
|
require 'git-process/git_process'
|
14
14
|
|
@@ -8,7 +8,7 @@
|
|
8
8
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
9
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
10
|
# See the License for the specific language governing permissions and
|
11
|
-
# limitations under the License.
|
11
|
+
# limitations under the License.
|
12
12
|
|
13
13
|
require 'git-process/git_process_error'
|
14
14
|
|
@@ -19,6 +19,7 @@ module GitProc
|
|
19
19
|
|
20
20
|
attr_reader :error_message, :lib
|
21
21
|
|
22
|
+
|
22
23
|
def initialize(lib)
|
23
24
|
@lib = lib
|
24
25
|
msg = build_message
|
@@ -8,7 +8,7 @@
|
|
8
8
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
9
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
10
|
# See the License for the specific language governing permissions and
|
11
|
-
# limitations under the License.
|
11
|
+
# limitations under the License.
|
12
12
|
|
13
13
|
require 'git-process/git_process'
|
14
14
|
require 'git-process/github_pull_request'
|
@@ -8,7 +8,7 @@
|
|
8
8
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
9
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
10
|
# See the License for the specific language governing permissions and
|
11
|
-
# limitations under the License.
|
11
|
+
# limitations under the License.
|
12
12
|
|
13
13
|
require 'git-process/git_process'
|
14
14
|
require 'git-process/git_rebase_error'
|
@@ -36,6 +36,7 @@ module GitProc
|
|
36
36
|
end
|
37
37
|
|
38
38
|
|
39
|
+
#noinspection RubyControlFlowConversionInspection
|
39
40
|
def runner
|
40
41
|
if has_a_remote?
|
41
42
|
fetch(server_name)
|
@@ -65,12 +66,12 @@ module GitProc
|
|
65
66
|
|
66
67
|
parking_branch = mybranches['_parking_']
|
67
68
|
if parking_branch
|
68
|
-
if
|
69
|
-
!current_branch.contains_all_of(parking_branch.name)
|
69
|
+
if parking_branch.is_ahead_of(remote_master.name) and
|
70
|
+
!current_branch.contains_all_of(parking_branch.name)
|
70
71
|
|
71
72
|
parking_branch.rename('_parking_OLD_')
|
72
73
|
|
73
|
-
logger.warn {bad_parking_branch_msg}
|
74
|
+
logger.warn { bad_parking_branch_msg }
|
74
75
|
else
|
75
76
|
parking_branch.delete!
|
76
77
|
end
|
@@ -114,11 +115,11 @@ module GitProc
|
|
114
115
|
def bad_parking_branch_msg
|
115
116
|
hl = HighLine.new
|
116
117
|
hl.color("\n***********************************************************************************************\n\n"+
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
118
|
+
"There is an old '_parking_' branch with unacounted changes in it.\n"+
|
119
|
+
"It has been renamed to '_parking_OLD_'.\n"+
|
120
|
+
"Please rename the branch to what the changes are about (`git branch -m _parking_OLD_ my_fb_name`),\n"+
|
121
|
+
" or remove it altogher (`git branch -D _parking_OLD_`).\n\n"+
|
122
|
+
"***********************************************************************************************\n", :red, :bold)
|
122
123
|
end
|
123
124
|
|
124
125
|
end
|
data/lib/git-process/sync.rb
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
9
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
10
|
# See the License for the specific language governing permissions and
|
11
|
-
# limitations under the License.
|
11
|
+
# limitations under the License.
|
12
12
|
|
13
13
|
require 'git-process/git_lib'
|
14
14
|
require 'git-process/git_process'
|
@@ -22,6 +22,7 @@ module GitProc
|
|
22
22
|
class Sync < Process
|
23
23
|
include ChangeFileHelper
|
24
24
|
|
25
|
+
|
25
26
|
def initialize(dir, opts)
|
26
27
|
opts[:force] = true if opts[:rebase]
|
27
28
|
|
@@ -38,6 +39,7 @@ module GitProc
|
|
38
39
|
end
|
39
40
|
|
40
41
|
|
42
|
+
#noinspection RubyControlFlowConversionInspection
|
41
43
|
def verify_preconditions
|
42
44
|
super
|
43
45
|
|
@@ -56,9 +58,17 @@ module GitProc
|
|
56
58
|
|
57
59
|
def runner
|
58
60
|
@current_branch ||= branches.current
|
59
|
-
@remote_branch ||= "#{server_name}
|
61
|
+
@remote_branch ||= "#{server_name}/#@current_branch"
|
60
62
|
|
61
|
-
|
63
|
+
# if the remote branch has changed, merge those changes in before
|
64
|
+
# doing anything with the integration branch
|
65
|
+
old_sha = rev_parse(@remote_branch) rescue ''
|
66
|
+
fetch(server_name) if has_a_remote?
|
67
|
+
new_sha = rev_parse(@remote_branch) rescue ''
|
68
|
+
unless old_sha == new_sha
|
69
|
+
logger.info('There have been changes on this remote branch, so will merge them in.')
|
70
|
+
proc_merge(@remote_branch)
|
71
|
+
end
|
62
72
|
|
63
73
|
if @do_rebase
|
64
74
|
proc_rebase(integration_branch)
|
@@ -68,6 +78,8 @@ module GitProc
|
|
68
78
|
|
69
79
|
if @local
|
70
80
|
logger.debug("Not pushing to the server because the user selected local-only.")
|
81
|
+
elsif not has_a_remote?
|
82
|
+
logger.debug("Not pushing to the server because there is no remote.")
|
71
83
|
elsif @current_branch == master_branch
|
72
84
|
logger.warn("Not pushing to the server because the current branch is the mainline branch.")
|
73
85
|
else
|
@@ -87,8 +99,8 @@ module GitProc
|
|
87
99
|
fetch(server_name)
|
88
100
|
new_sha = rev_parse(@remote_branch) rescue ''
|
89
101
|
unless old_sha == new_sha
|
90
|
-
logger.warn("'
|
91
|
-
|
102
|
+
logger.warn("'#@current_branch' changed on '#{server_name}'"+
|
103
|
+
" [#{old_sha[0..5]}->#{new_sha[0..5]}]; trying sync again.")
|
92
104
|
runner # try again
|
93
105
|
end
|
94
106
|
end
|
@@ -8,7 +8,7 @@
|
|
8
8
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
9
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
10
|
# See the License for the specific language governing permissions and
|
11
|
-
# limitations under the License.
|
11
|
+
# limitations under the License.
|
12
12
|
|
13
13
|
require 'git-process/git_process_error'
|
14
14
|
|
data/lib/git-process/version.rb
CHANGED
@@ -8,13 +8,13 @@
|
|
8
8
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
9
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
10
|
# See the License for the specific language governing permissions and
|
11
|
-
# limitations under the License.
|
11
|
+
# limitations under the License.
|
12
12
|
|
13
13
|
module GitProc
|
14
14
|
module Version
|
15
15
|
MAJOR = 1
|
16
16
|
MINOR = 0
|
17
|
-
PATCH =
|
17
|
+
PATCH = 5
|
18
18
|
BUILD = nil
|
19
19
|
|
20
20
|
STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
|
data/spec/FileHelpers.rb
CHANGED
data/spec/GitRepoHelper.rb
CHANGED
@@ -34,7 +34,7 @@ module GitRepoHelper
|
|
34
34
|
def create_files(file_names)
|
35
35
|
Dir.chdir(gitprocess.workdir) do |dir|
|
36
36
|
file_names.each do |fn|
|
37
|
-
gitprocess.logger.debug {"Creating #{dir}/#{fn}"}
|
37
|
+
gitprocess.logger.debug { "Creating #{dir}/#{fn}" }
|
38
38
|
FileUtils.touch fn
|
39
39
|
end
|
40
40
|
end
|
@@ -44,7 +44,7 @@ module GitRepoHelper
|
|
44
44
|
|
45
45
|
def change_file(filename, contents, lib = gitprocess)
|
46
46
|
Dir.chdir(lib.workdir) do
|
47
|
-
File.open(filename, 'w') {|f| f.puts contents}
|
47
|
+
File.open(filename, 'w') { |f| f.puts contents }
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
@@ -69,7 +69,7 @@ module GitRepoHelper
|
|
69
69
|
def clone(branch='master', remote_name = 'origin', &block)
|
70
70
|
td = Dir.mktmpdir
|
71
71
|
|
72
|
-
logger.debug {"Cloning '#{tmpdir}' to '#{td}'"}
|
72
|
+
logger.debug { "Cloning '#{tmpdir}' to '#{td}'" }
|
73
73
|
|
74
74
|
opts = {}
|
75
75
|
opts[:quiet] = true if log_level == Logger::ERROR
|
@@ -20,7 +20,7 @@ describe GitProc::ChangeFileHelper do
|
|
20
20
|
include GitRepoHelper
|
21
21
|
|
22
22
|
before(:each) do
|
23
|
-
create_files(
|
23
|
+
create_files(%w(.gitignore))
|
24
24
|
gitprocess.commit('initial')
|
25
25
|
end
|
26
26
|
|
@@ -52,7 +52,7 @@ describe GitProc::ChangeFileHelper do
|
|
52
52
|
|
53
53
|
gp.merge('origin/master') rescue ''
|
54
54
|
|
55
|
-
expect {gp.offer_to_help_uncommitted_changes}.should raise_error GitProc::UncommittedChangesError
|
55
|
+
expect { gp.offer_to_help_uncommitted_changes }.should raise_error GitProc::UncommittedChangesError
|
56
56
|
end
|
57
57
|
|
58
58
|
|
@@ -52,13 +52,14 @@ describe GitProc::AbstractMergeErrorBuilder do
|
|
52
52
|
|
53
53
|
builder.resolved_files.should == []
|
54
54
|
builder.unresolved_files.should == ['a', 'b c']
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
55
|
+
c = [
|
56
|
+
'git config --global rerere.enabled true',
|
57
|
+
'git mergetool a b\ c',
|
58
|
+
'# Verify \'a\' merged correctly.',
|
59
|
+
'# Verify \'b c\' merged correctly.',
|
60
|
+
'git add a b\ c',
|
61
61
|
]
|
62
|
+
match_commands c
|
62
63
|
end
|
63
64
|
|
64
65
|
|
@@ -67,14 +68,15 @@ describe GitProc::AbstractMergeErrorBuilder do
|
|
67
68
|
status.stub(:modified).and_return(['a', 'b c'])
|
68
69
|
builder.stub(:error_message).and_return("\nResolved 'a' using previous resolution.\n")
|
69
70
|
|
70
|
-
builder.resolved_files.should ==
|
71
|
+
builder.resolved_files.should == %w(a)
|
71
72
|
builder.unresolved_files.should == ['b c']
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
73
|
+
c = [
|
74
|
+
'# Verify that \'rerere\' did the right thing for \'a\'.',
|
75
|
+
'git mergetool b\ c',
|
76
|
+
'# Verify \'b c\' merged correctly.',
|
77
|
+
'git add b\ c',
|
77
78
|
]
|
79
|
+
match_commands c
|
78
80
|
end
|
79
81
|
|
80
82
|
|
@@ -84,30 +86,32 @@ describe GitProc::AbstractMergeErrorBuilder do
|
|
84
86
|
status.stub(:modified).and_return(['a', 'b c'])
|
85
87
|
builder.stub(:error_message).and_return("\nResolved 'a' using previous resolution.\n")
|
86
88
|
|
87
|
-
builder.resolved_files.should ==
|
89
|
+
builder.resolved_files.should == %w(a)
|
88
90
|
builder.unresolved_files.should == ['b c']
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
91
|
+
c = [
|
92
|
+
'# Verify that \'rerere\' did the right thing for \'a\'.',
|
93
|
+
'git add a',
|
94
|
+
'git mergetool b\ c',
|
95
|
+
'# Verify \'b c\' merged correctly.',
|
96
|
+
'git add b\ c',
|
95
97
|
]
|
98
|
+
match_commands c
|
96
99
|
end
|
97
100
|
|
98
101
|
|
99
102
|
it "merged with a file added in both branches" do
|
100
103
|
lib.stub(:rerere_autoupdate?).and_return(false)
|
101
|
-
status.stub(:unmerged).and_return(
|
102
|
-
status.stub(:modified).and_return(
|
103
|
-
status.stub(:added).and_return(
|
104
|
-
|
105
|
-
builder.resolved_files.should ==
|
106
|
-
builder.unresolved_files.should ==
|
107
|
-
|
108
|
-
|
109
|
-
|
104
|
+
status.stub(:unmerged).and_return(%w(a))
|
105
|
+
status.stub(:modified).and_return(%w(b))
|
106
|
+
status.stub(:added).and_return(%w(a c))
|
107
|
+
|
108
|
+
builder.resolved_files.should == %w()
|
109
|
+
builder.unresolved_files.should == %w(a)
|
110
|
+
c = [
|
111
|
+
'# \'a\' was added in both branches; Fix the conflict.',
|
112
|
+
'git add a',
|
110
113
|
]
|
114
|
+
match_commands c
|
111
115
|
end
|
112
116
|
|
113
117
|
end
|