git-process 0.9.1.pre3 → 0.9.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +0 -0
- data/Gemfile +2 -2
- data/Gemfile.lock +2 -0
- data/README.md +27 -9
- data/bin/git-new-fb +42 -13
- data/bin/git-pull-request +79 -13
- data/bin/git-sync +47 -13
- data/bin/git-to-master +56 -13
- data/git-process.gemspec +1 -1
- data/lib/git-process/{abstract-error-builder.rb → abstract_error_builder.rb} +13 -3
- data/lib/git-process/{git-abstract-merge-error-builder.rb → git_abstract_merge_error_builder.rb} +15 -5
- data/lib/git-process/{git-branch.rb → git_branch.rb} +13 -1
- data/lib/git-process/git_branches.rb +72 -0
- data/lib/git-process/{git-lib.rb → git_lib.rb} +82 -70
- data/lib/git-process/git_merge_error.rb +38 -0
- data/lib/git-process/git_process.rb +124 -0
- data/lib/git-process/git_process_error.rb +18 -0
- data/lib/git-process/git_process_options.rb +101 -0
- data/lib/git-process/git_rebase_error.rb +38 -0
- data/lib/git-process/{git-status.rb → git_status.rb} +13 -1
- data/lib/git-process/{github-client.rb → github_client.rb} +13 -1
- data/lib/git-process/github_pull_request.rb +107 -0
- data/lib/git-process/{github-service.rb → github_service.rb} +39 -21
- data/lib/git-process/new_fb.rb +40 -0
- data/lib/git-process/parked_changes_error.rb +40 -0
- data/lib/git-process/pull_request.rb +61 -0
- data/lib/git-process/rebase_to_master.rb +110 -0
- data/lib/git-process/sync.rb +63 -0
- data/lib/git-process/uncommitted_changes_error.rb +23 -0
- data/lib/git-process/version.rb +19 -9
- data/spec/GitRepoHelper.rb +35 -21
- data/spec/{git-abstract-merge-error-builder_spec.rb → git_abstract_merge_error_builder_spec.rb} +3 -3
- data/spec/{git-lib_spec.rb → git_lib_spec.rb} +79 -16
- data/spec/git_process_spec.rb +36 -0
- data/spec/{git-status_spec.rb → git_status_spec.rb} +28 -29
- data/spec/github_pull_request_spec.rb +91 -0
- data/spec/{github-service_spec.rb → github_service_spec.rb} +1 -1
- data/spec/new_fb_spec.rb +80 -0
- data/spec/rebase_to_master_spec.rb +314 -0
- data/spec/spec_helper.rb +1 -1
- data/spec/sync_spec.rb +149 -0
- metadata +46 -43
- data/lib/git-process/git-branches.rb +0 -53
- data/lib/git-process/git-merge-error.rb +0 -31
- data/lib/git-process/git-new-fb-options.rb +0 -34
- data/lib/git-process/git-process-error.rb +0 -10
- data/lib/git-process/git-process-options.rb +0 -82
- data/lib/git-process/git-process.rb +0 -194
- data/lib/git-process/git-pull-request-options.rb +0 -42
- data/lib/git-process/git-rebase-error.rb +0 -31
- data/lib/git-process/git-sync-options.rb +0 -34
- data/lib/git-process/git-to-master-options.rb +0 -18
- data/lib/git-process/parked-changes-error.rb +0 -32
- data/lib/git-process/pull-request.rb +0 -38
- data/lib/git-process/uncommitted-changes-error.rb +0 -15
- data/spec/git-process_spec.rb +0 -328
- data/spec/pull-request_spec.rb +0 -57
data/spec/GitRepoHelper.rb
CHANGED
@@ -1,16 +1,13 @@
|
|
1
1
|
require 'FileHelpers'
|
2
|
-
require 'git-
|
2
|
+
require 'git-process/git_process'
|
3
3
|
|
4
4
|
module GitRepoHelper
|
5
5
|
|
6
|
-
|
7
|
-
def gitlib
|
8
|
-
@gitlib ||= Git::GitLib.new(tmpdir, :log_level => log_level)
|
9
|
-
end
|
10
|
-
|
11
|
-
|
12
6
|
def gitprocess
|
13
|
-
|
7
|
+
opts = {}
|
8
|
+
opts[:quiet] = true if log_level == Logger::ERROR
|
9
|
+
opts[:verbose] = true if log_level == Logger::DEBUG
|
10
|
+
@gitprocess ||= create_process(tmpdir, opts)
|
14
11
|
end
|
15
12
|
|
16
13
|
|
@@ -20,7 +17,7 @@ module GitRepoHelper
|
|
20
17
|
|
21
18
|
|
22
19
|
def commit_count
|
23
|
-
|
20
|
+
gitprocess.log_count
|
24
21
|
end
|
25
22
|
|
26
23
|
|
@@ -30,46 +27,63 @@ module GitRepoHelper
|
|
30
27
|
|
31
28
|
|
32
29
|
def logger
|
33
|
-
|
30
|
+
gitprocess.logger
|
34
31
|
end
|
35
32
|
|
36
33
|
|
37
34
|
def create_files(file_names)
|
38
|
-
Dir.chdir(
|
35
|
+
Dir.chdir(gitprocess.workdir) do |dir|
|
39
36
|
file_names.each do |fn|
|
40
|
-
|
37
|
+
gitprocess.logger.debug {"Creating #{dir}/#{fn}"}
|
41
38
|
FileUtils.touch fn
|
42
39
|
end
|
43
40
|
end
|
44
|
-
|
41
|
+
gitprocess.add(file_names)
|
45
42
|
end
|
46
43
|
|
47
44
|
|
48
|
-
def change_file(filename, contents, lib =
|
45
|
+
def change_file(filename, contents, lib = gitprocess)
|
49
46
|
Dir.chdir(lib.workdir) do
|
50
47
|
File.open(filename, 'w') {|f| f.puts contents}
|
51
48
|
end
|
52
49
|
end
|
53
50
|
|
54
51
|
|
55
|
-
def change_file_and_add(filename, contents, lib =
|
52
|
+
def change_file_and_add(filename, contents, lib = gitprocess)
|
56
53
|
change_file(filename, contents, lib)
|
57
54
|
lib.add(filename)
|
58
55
|
end
|
59
56
|
|
60
57
|
|
61
|
-
def change_file_and_commit(filename, contents, lib =
|
58
|
+
def change_file_and_commit(filename, contents, lib = gitprocess)
|
62
59
|
change_file_and_add(filename, contents, lib)
|
63
60
|
lib.commit("#{filename} - #{contents}")
|
64
61
|
end
|
65
62
|
|
66
63
|
|
67
|
-
def
|
64
|
+
def create_process(dir, opts)
|
65
|
+
GitProc::Process.new(dir, opts)
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
def clone(branch='master', remote_name = 'origin', &block)
|
68
70
|
td = Dir.mktmpdir
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
71
|
+
|
72
|
+
logger.debug {"Cloning '#{tmpdir}' to '#{td}'"}
|
73
|
+
|
74
|
+
opts = {}
|
75
|
+
opts[:quiet] = true if log_level == Logger::ERROR
|
76
|
+
opts[:verbose] = true if log_level == Logger::DEBUG
|
77
|
+
gl = create_process(td, opts)
|
78
|
+
gl.add_remote(remote_name, "file://#{tmpdir}")
|
79
|
+
gl.fetch(remote_name)
|
80
|
+
|
81
|
+
if branch == 'master'
|
82
|
+
gl.reset("#{remote_name}/#{branch}", :hard => true)
|
83
|
+
else
|
84
|
+
gl.checkout(branch, :new_branch => "#{remote_name}/#{branch}")
|
85
|
+
end
|
86
|
+
|
73
87
|
if block_given?
|
74
88
|
begin
|
75
89
|
block.arity < 1 ? gl.instance_eval(&block) : block.call(gl)
|
data/spec/{git-abstract-merge-error-builder_spec.rb → git_abstract_merge_error_builder_spec.rb}
RENAMED
@@ -1,11 +1,11 @@
|
|
1
|
-
require 'git-
|
1
|
+
require 'git-process/git_abstract_merge_error_builder'
|
2
2
|
|
3
|
-
describe
|
3
|
+
describe GitProc::AbstractMergeErrorBuilder do
|
4
4
|
|
5
5
|
def builder
|
6
6
|
unless @builder
|
7
7
|
@builder = Object.new
|
8
|
-
@builder.extend(
|
8
|
+
@builder.extend(GitProc::AbstractMergeErrorBuilder)
|
9
9
|
@builder.stub(:lib).and_return(lib)
|
10
10
|
@builder.stub(:continue_command).and_return(nil)
|
11
11
|
@builder.stub(:error_message).and_return('')
|
@@ -1,7 +1,46 @@
|
|
1
|
-
require 'git-
|
1
|
+
require 'git-process/git_lib'
|
2
2
|
require 'GitRepoHelper'
|
3
3
|
|
4
|
-
describe
|
4
|
+
describe GitProc::GitLib do
|
5
|
+
|
6
|
+
class GLStub
|
7
|
+
include GitProc::GitLib
|
8
|
+
|
9
|
+
def initialize(workdir, log_level)
|
10
|
+
@logger = Logger.new(STDOUT)
|
11
|
+
@logger.level = log_level || Logger::WARN
|
12
|
+
@logger.datetime_format = "%Y-%m-%d %H:%M:%S"
|
13
|
+
f = Logger::Formatter.new
|
14
|
+
@logger.formatter = proc do |severity, datetime, progname, msg|
|
15
|
+
"#{msg}\n"
|
16
|
+
end
|
17
|
+
|
18
|
+
@workdir = workdir
|
19
|
+
if workdir
|
20
|
+
unless File.directory?(File.join(workdir, '.git'))
|
21
|
+
logger.info { "Initializing new repository at #{workdir}" }
|
22
|
+
command(:init)
|
23
|
+
else
|
24
|
+
logger.debug { "Opening existing repository at #{workdir}" }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
def workdir
|
31
|
+
@workdir
|
32
|
+
end
|
33
|
+
|
34
|
+
def logger
|
35
|
+
@logger
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
def gitlib
|
41
|
+
gitprocess
|
42
|
+
end
|
43
|
+
|
5
44
|
|
6
45
|
describe "branches" do
|
7
46
|
include GitRepoHelper
|
@@ -24,7 +63,7 @@ describe Git::GitLib do
|
|
24
63
|
attr_reader :lib
|
25
64
|
|
26
65
|
before(:each) do
|
27
|
-
@lib =
|
66
|
+
@lib = GLStub.new(nil, nil)
|
28
67
|
end
|
29
68
|
|
30
69
|
|
@@ -58,7 +97,7 @@ describe Git::GitLib do
|
|
58
97
|
attr_reader :lib
|
59
98
|
|
60
99
|
before(:each) do
|
61
|
-
@lib =
|
100
|
+
@lib = GLStub.new(nil, nil)
|
62
101
|
end
|
63
102
|
|
64
103
|
|
@@ -83,6 +122,8 @@ describe Git::GitLib do
|
|
83
122
|
|
84
123
|
|
85
124
|
it "should remove named branch on remote" do
|
125
|
+
lib.stub(:remote_name).and_return('remote')
|
126
|
+
lib.stub(:config).and_return('master')
|
86
127
|
lib.should_receive(:command).with(:push, ['remote', '--delete', 'my_branch'])
|
87
128
|
|
88
129
|
lib.push('remote', 'my_branch', nil, :delete => true)
|
@@ -90,28 +131,50 @@ describe Git::GitLib do
|
|
90
131
|
|
91
132
|
|
92
133
|
it "should remove current branch on remote" do
|
134
|
+
lib.stub(:remote_name).and_return('remote')
|
135
|
+
lib.stub(:config).and_return('master')
|
93
136
|
lib.should_receive(:command).with(:push, ['remote', '--delete', 'my_branch'])
|
94
137
|
|
95
138
|
lib.push('remote', nil, nil, :delete => 'my_branch')
|
96
139
|
end
|
97
140
|
|
98
141
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
142
|
+
it "should not remove integration branch on remote" do
|
143
|
+
lib.stub(:remote_name).and_return('remote')
|
144
|
+
lib.stub(:config).and_return('master')
|
145
|
+
|
146
|
+
expect {lib.push('remote', nil, nil, :delete => 'master')}.should raise_error GitProc::GitProcessError
|
147
|
+
end
|
148
|
+
|
149
|
+
end
|
150
|
+
|
103
151
|
|
152
|
+
describe "#remote_name" do
|
153
|
+
include GitRepoHelper
|
104
154
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
# end
|
155
|
+
def log_level
|
156
|
+
Logger::ERROR
|
157
|
+
end
|
109
158
|
|
110
159
|
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
160
|
+
it "should work with origin" do
|
161
|
+
change_file_and_commit('a', '')
|
162
|
+
|
163
|
+
clone('master', 'origin') do |gl|
|
164
|
+
gl.remote_name.should == 'origin'
|
165
|
+
gl.branches.include?('origin/master').should be_true
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
|
170
|
+
it "should work with a different remote name" do
|
171
|
+
change_file_and_commit('a', '')
|
172
|
+
|
173
|
+
clone('master', 'a_remote') do |gl|
|
174
|
+
gl.remote_name.should == 'a_remote'
|
175
|
+
gl.branches.include?('a_remote/master').should be_true
|
176
|
+
end
|
177
|
+
end
|
115
178
|
|
116
179
|
end
|
117
180
|
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'git-process/git_process'
|
2
|
+
require 'GitRepoHelper'
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
describe GitProc::Process do
|
6
|
+
include GitRepoHelper
|
7
|
+
|
8
|
+
before(:each) do
|
9
|
+
create_files(['.gitignore'])
|
10
|
+
gitprocess.commit('initial')
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
after(:each) do
|
15
|
+
rm_rf(tmpdir)
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
describe "workdir" do
|
20
|
+
|
21
|
+
it "should use the passed in directory when the top level is a git workdir" do
|
22
|
+
proc = GitProc::Process.new(tmpdir)
|
23
|
+
proc.workdir.should == tmpdir
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
it "should find the parent git workdir" do
|
28
|
+
dir = "#{tmpdir}/a/b/c/d/e/f/g"
|
29
|
+
mkdir_p dir
|
30
|
+
proc = GitProc::Process.new(dir)
|
31
|
+
proc.workdir.should == tmpdir
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -1,13 +1,12 @@
|
|
1
|
-
require 'git-
|
1
|
+
require 'git-process/git_status'
|
2
2
|
require 'GitRepoHelper'
|
3
3
|
|
4
|
-
describe
|
5
|
-
|
4
|
+
describe GitProc::GitStatus do
|
6
5
|
include GitRepoHelper
|
7
6
|
|
8
7
|
before(:each) do
|
9
8
|
create_files(['.gitignore'])
|
10
|
-
|
9
|
+
gitprocess.commit('initial')
|
11
10
|
end
|
12
11
|
|
13
12
|
|
@@ -19,37 +18,37 @@ describe Git::GitStatus do
|
|
19
18
|
it "should handle added files" do
|
20
19
|
create_files(['a', 'b', 'c'])
|
21
20
|
|
22
|
-
|
21
|
+
gitprocess.status.added.should == ['a', 'b', 'c']
|
23
22
|
end
|
24
23
|
|
25
24
|
|
26
25
|
it "should handle a modification on both sides" do
|
27
26
|
change_file_and_commit('a', '')
|
28
27
|
|
29
|
-
|
28
|
+
gitprocess.checkout('fb', :new_branch => 'master')
|
30
29
|
change_file_and_commit('a', 'hello')
|
31
30
|
|
32
|
-
|
31
|
+
gitprocess.checkout('master')
|
33
32
|
change_file_and_commit('a', 'goodbye')
|
34
33
|
|
35
|
-
|
34
|
+
gitprocess.merge('fb') rescue
|
36
35
|
|
37
|
-
status =
|
36
|
+
status = gitprocess.status
|
38
37
|
status.unmerged.should == ['a']
|
39
38
|
status.modified.should == ['a']
|
40
39
|
end
|
41
40
|
|
42
41
|
|
43
42
|
it "should handle an addition on both sides" do
|
44
|
-
|
43
|
+
gitprocess.checkout('fb', :new_branch => 'master')
|
45
44
|
change_file_and_commit('a', 'hello')
|
46
45
|
|
47
|
-
|
46
|
+
gitprocess.checkout('master')
|
48
47
|
change_file_and_commit('a', 'goodbye')
|
49
48
|
|
50
|
-
|
49
|
+
gitprocess.merge('fb') rescue
|
51
50
|
|
52
|
-
status =
|
51
|
+
status = gitprocess.status
|
53
52
|
status.unmerged.should == ['a']
|
54
53
|
status.added.should == ['a']
|
55
54
|
end
|
@@ -58,16 +57,16 @@ describe Git::GitStatus do
|
|
58
57
|
it "should handle a merge deletion on fb" do
|
59
58
|
change_file_and_commit('a', '')
|
60
59
|
|
61
|
-
|
62
|
-
|
63
|
-
|
60
|
+
gitprocess.checkout('fb', :new_branch => 'master')
|
61
|
+
gitprocess.remove('a', :force => true)
|
62
|
+
gitprocess.commit('removed a')
|
64
63
|
|
65
|
-
|
64
|
+
gitprocess.checkout('master')
|
66
65
|
change_file_and_commit('a', 'goodbye')
|
67
66
|
|
68
|
-
|
67
|
+
gitprocess.merge('fb') rescue
|
69
68
|
|
70
|
-
status =
|
69
|
+
status = gitprocess.status
|
71
70
|
status.unmerged.should == ['a']
|
72
71
|
status.deleted.should == ['a']
|
73
72
|
end
|
@@ -76,26 +75,26 @@ describe Git::GitStatus do
|
|
76
75
|
it "should handle a merge deletion on master" do
|
77
76
|
change_file_and_commit('a', '')
|
78
77
|
|
79
|
-
|
78
|
+
gitprocess.checkout('fb', :new_branch => 'master')
|
80
79
|
change_file_and_commit('a', 'hello')
|
81
80
|
|
82
|
-
|
83
|
-
|
84
|
-
|
81
|
+
gitprocess.checkout('master')
|
82
|
+
gitprocess.remove('a', :force => true)
|
83
|
+
gitprocess.commit('removed a')
|
85
84
|
|
86
|
-
|
85
|
+
gitprocess.merge('fb') rescue
|
87
86
|
|
88
|
-
status =
|
87
|
+
status = gitprocess.status
|
89
88
|
status.unmerged.should == ['a']
|
90
89
|
status.deleted.should == ['a']
|
91
90
|
end
|
92
91
|
|
93
92
|
|
94
93
|
it "should return an empty result" do
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
94
|
+
gitprocess.status.added.should == []
|
95
|
+
gitprocess.status.deleted.should == []
|
96
|
+
gitprocess.status.modified.should == []
|
97
|
+
gitprocess.status.unmerged.should == []
|
99
98
|
end
|
100
99
|
|
101
100
|
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'git-process/pull_request'
|
2
|
+
require 'GitRepoHelper'
|
3
|
+
require 'webmock/rspec'
|
4
|
+
require 'json'
|
5
|
+
require 'octokit'
|
6
|
+
require 'tempfile'
|
7
|
+
|
8
|
+
|
9
|
+
describe GitHub::PullRequest do
|
10
|
+
include GitRepoHelper
|
11
|
+
|
12
|
+
def lib
|
13
|
+
unless @lib
|
14
|
+
@lib = double('lib')
|
15
|
+
@lib.stub(:logger).and_return(logger)
|
16
|
+
end
|
17
|
+
@lib
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
def test_token
|
22
|
+
'hfgkdjfgksjhdfkls'
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
def pull_request
|
27
|
+
@pr ||= GitHub::PullRequest.new(lib, 'test_repo', :user => 'test_user')
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
before(:each) do
|
32
|
+
lib.stub(:config).with('gitProcess.github.authToken').and_return(test_token)
|
33
|
+
lib.stub(:config).with('remote.origin.url').and_return('git@github.com:jdigger/git-process.git')
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
describe "#create" do
|
38
|
+
|
39
|
+
it "should return a pull request for a good request" do
|
40
|
+
stub_request(:post, "https://api.github.com/repos/test_repo/pulls?access_token=#{test_token}").
|
41
|
+
to_return(:status => 200, :body => JSON({:number => 1, :state => 'open'}))
|
42
|
+
|
43
|
+
pull_request.create('test_base', 'test_head', 'test title', 'test body')[:state].should == 'open'
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
it "should handle asking for a duplicate pull request" do
|
48
|
+
# trying to create the request should return "HTTP 422: Unprocessable Entity" because it already exists
|
49
|
+
stub_request(:post, "https://api.github.com/repos/test_repo/pulls?access_token=#{test_token}").
|
50
|
+
to_return(:status => 422)
|
51
|
+
|
52
|
+
# listing all existing pull requests should contain the current branch
|
53
|
+
stub_request(:get, /test_repo\/pulls\?access_token=/).
|
54
|
+
to_return(:status => 200, :body => JSON([{:html_url => 'test_url', :head => {:ref => 'test_head'}, :base => {:ref => 'test_base'}}]))
|
55
|
+
|
56
|
+
pull_request.create('test_base', 'test_head', 'test title', 'test body')[:html_url].should == 'test_url'
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
describe "#close" do
|
63
|
+
|
64
|
+
it "should close a good current pull request" do
|
65
|
+
stub_request(:get, /test_repo\/pulls\?access_token=/).
|
66
|
+
to_return(:status => 200, :body => JSON([{:number => 1, :state => 'open', :html_url => 'test_url', :head => {:ref => 'test_head'}, :base => {:ref => 'test_base'}}]))
|
67
|
+
stub_request(:patch, /test_repo\/pulls\/1\?access_token=/).with(:body => JSON({:state => 'closed'})).
|
68
|
+
to_return(:status => 200, :body => JSON({:number => 1, :state => 'closed', :html_url => 'test_url', :head => {:ref => 'test_head'}, :base => {:ref => 'test_base'}}))
|
69
|
+
|
70
|
+
pull_request.close('test_base', 'test_head')[:state].should == 'closed'
|
71
|
+
end
|
72
|
+
|
73
|
+
|
74
|
+
it "should close a good current pull request using the pull request number" do
|
75
|
+
stub_request(:patch, /test_repo\/pulls\/1\?access_token=/).with(:body => JSON({:state => 'closed'})).
|
76
|
+
to_return(:status => 200, :body => JSON({:number => 1, :state => 'closed', :html_url => 'test_url', :head => {:ref => 'test_head'}, :base => {:ref => 'test_base'}}))
|
77
|
+
|
78
|
+
pull_request.close(1)[:state].should == 'closed'
|
79
|
+
end
|
80
|
+
|
81
|
+
|
82
|
+
it "should complain about a missing pull request" do
|
83
|
+
stub_request(:get, /test_repo\/pulls\?access_token=/).
|
84
|
+
to_return(:status => 200, :body => JSON([{:number => 1, :state => 'open', :html_url => 'test_url', :head => {:ref => 'test_head'}, :base => {:ref => 'test_base'}}]))
|
85
|
+
|
86
|
+
expect {pull_request.close('test_base', 'missing_head')}.should raise_error GitHub::PullRequest::NotFoundError
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
data/spec/new_fb_spec.rb
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
require 'git-process/new_fb'
|
2
|
+
require 'GitRepoHelper'
|
3
|
+
|
4
|
+
describe GitProc::NewFeatureBranch do
|
5
|
+
include GitRepoHelper
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
create_files(['.gitignore'])
|
9
|
+
gitprocess.commit('initial')
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
after(:each) do
|
14
|
+
rm_rf(tmpdir)
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
def create_process(dir, opts)
|
19
|
+
opts[:branch_name] = 'test_branch'
|
20
|
+
GitProc::NewFeatureBranch.new(dir, opts)
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
describe "#new_feature_branch" do
|
25
|
+
|
26
|
+
def log_level
|
27
|
+
Logger::ERROR
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
it "should create the named branch against origin/master" do
|
32
|
+
clone do |gp|
|
33
|
+
new_branch = gp.run
|
34
|
+
|
35
|
+
new_branch.name.should == 'test_branch'
|
36
|
+
new_branch.sha.should == gp.branches['origin/master'].sha
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
it "should bring committed changes on _parking_ over to the new branch" do
|
42
|
+
gitprocess.branch('origin/master', :base_branch => 'master')
|
43
|
+
gitprocess.checkout('_parking_', :new_branch => 'master')
|
44
|
+
change_file_and_commit('a', '')
|
45
|
+
change_file_and_commit('b', '')
|
46
|
+
|
47
|
+
new_branch = gitprocess.run
|
48
|
+
|
49
|
+
new_branch.name.should == 'test_branch'
|
50
|
+
Dir.chdir(gitprocess.workdir) do |dir|
|
51
|
+
File.exists?('a').should be_true
|
52
|
+
File.exists?('b').should be_true
|
53
|
+
end
|
54
|
+
|
55
|
+
gitprocess.branches.parking.should be_nil
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
it "should bring new/uncommitted changes on _parking_ over to the new branch" do
|
60
|
+
gitprocess.branch('origin/master', :base_branch => 'master')
|
61
|
+
gitprocess.checkout('_parking_', :new_branch => 'master')
|
62
|
+
change_file_and_commit('a', '')
|
63
|
+
change_file_and_add('b', '')
|
64
|
+
change_file('c', '')
|
65
|
+
|
66
|
+
new_branch = gitprocess.run
|
67
|
+
|
68
|
+
new_branch.name.should == 'test_branch'
|
69
|
+
Dir.chdir(gitprocess.workdir) do |dir|
|
70
|
+
File.exists?('a').should be_true
|
71
|
+
File.exists?('b').should be_true
|
72
|
+
File.exists?('c').should be_true
|
73
|
+
end
|
74
|
+
|
75
|
+
gitprocess.branches.parking.should be_nil
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|