git_pretty_accept 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: baed368a4681ba4cdc080936905f4ec5afdeac40
4
- data.tar.gz: 9c0199114740ec78a142dd764b76fd140a29518d
3
+ metadata.gz: f87f9416e6f2fa9ffab67ff78e28c62052f40584
4
+ data.tar.gz: f7d1cd58d438f24d312236f6bf1d845c3660f6b5
5
5
  SHA512:
6
- metadata.gz: 3de4384cd754693b1d5d2c35db4d7560a1ebd9acf180fc02d9d80c95454597db3aa3ff7a461ff2f1e45f7f92dfba8278217cf1036739e99ecb394b55152bf9c2
7
- data.tar.gz: a2f42af113a5733054f9bbc9f77ecf9f0961e3955856db40ba8d3b1a94b414c701c2b0a79dcf086502fc9b3848b988f7eeff7f8c621af6b9995c06495ec9f70a
6
+ metadata.gz: 050fc7845fa9e5d1998662fa1b9ec13111c6c9c804a5b5ed3ad65c366c652257b220ec3ff7b806daa9c0a659628e6d97c24ab5ad0ae88ecf97055015572001b9
7
+ data.tar.gz: 9aae68dd5f32c4e303415e777b89fa94f8a6a29da8b497938ea1833c8aa8da0146b2ef677e3c8c129c79ca500ce10021e2039551f035067c9c32b35bda95168d
data/CHANGELOG.markdown CHANGED
@@ -1,3 +1,8 @@
1
+ ## 0.3.0 - 2013-12-14
2
+
3
+ * Rebase local PR branch from remote.
4
+ * Revamp test repo object helpers.
5
+
1
6
  ## 0.2.0 - 2013-12-03
2
7
 
3
8
  * Fix: do not force-delete local PR branch.
@@ -14,6 +14,7 @@ module GitPrettyAccept
14
14
  "git fetch origin",
15
15
  "git rebase origin/#{source_branch}",
16
16
  "git checkout #{branch}",
17
+ "git rebase origin/#{branch}",
17
18
  "git rebase origin/#{source_branch}",
18
19
  "git push --force origin #{branch}",
19
20
  "git checkout #{source_branch}",
@@ -1,3 +1,3 @@
1
1
  module GitPrettyAccept
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -12,89 +12,76 @@ describe GitPrettyAccept::App do
12
12
 
13
13
  let(:pr_branch) { 'pr_branch' }
14
14
 
15
+ let(:remote_repo) { RemoteRepo.new(project_path, remote_path) }
16
+ let(:local_repo) do
17
+ LocalRepo.new(project_path, our_path, remote_repo).tap do |result|
18
+ result.add_initial_commit
19
+ end
20
+ end
21
+
22
+ let(:other_repo) { LocalRepo.new(project_path, their_path, remote_repo) }
23
+
15
24
  before do
16
25
  FileUtils.rm_rf tmp_path
17
26
  end
18
27
 
19
28
  Steps "I can accept a pull request... prettily" do
20
- our = nil
29
+ their_change_in_master = 'their_change_in_master'
30
+ our_change_in_pr_branch = 'our_change_in_pr_branch'
21
31
 
22
32
  Given 'I have a local repo tracking a remote repo' do
23
- Git.init remote_path, bare: true
24
-
25
- # Add initial commit. Otherwise, `our.branch(pr_branch)`
26
- # below won't be able to create a new branch.
27
-
28
- Git.clone remote_path, our_path
29
- our = Git.open(our_path)
30
-
31
- File.open("#{our_path}/readme.txt", 'w') { |f| f.write('readme') }
32
- our.add all: true
33
- our.commit 'Add readme'
34
- our.push
33
+ local_repo
35
34
  end
36
35
 
37
36
  And 'I have a PR_BRANCH that is not up-to-date with master' do
38
- Git.clone remote_path, their_path
39
- their = Git.open(their_path)
40
-
41
- File.open("#{their_path}/readme.txt", 'w') { |f| f.write('updated readme') }
42
- their.add all: true
43
- their.commit 'Update readme'
44
- their.push
37
+ other_repo.checkout 'master'
38
+ other_repo.push_some_change their_change_in_master
45
39
 
46
- our.branch(pr_branch).checkout
47
- File.open("#{our_path}/changelog.txt", 'w') { |f| f.write('changelog') }
48
- our.add all: true
49
- our.commit 'Add changelog'
50
- our.push our.remote('origin'), pr_branch
40
+ local_repo.checkout pr_branch
41
+ local_repo.push_some_change our_change_in_pr_branch
51
42
  end
52
43
 
53
44
  And 'the current branch is master' do
54
- our.branch('master').checkout
45
+ local_repo.checkout 'master'
55
46
  end
56
47
 
57
48
  When 'I run `git pretty-accept PR_BRANCH`' do
58
- FileUtils.cd(our_path) do
59
- `bundle exec #{project_path}/bin/git-pretty-accept --no-edit #{pr_branch}`
60
- expect($CHILD_STATUS.exitstatus).to eq(0)
61
- end
49
+ local_repo.git_pretty_accept pr_branch
62
50
  end
63
51
 
64
52
  Then 'it should rebase the PR_BRANCH before merging to master' do
65
- expect(our.log.size).to eq(4)
53
+ expect(local_repo.git.log.size).to eq(4)
66
54
 
67
- expect(our.log[0].message).to eq("Merge branch 'pr_branch'")
68
- expect(our.log[0].parents.size).to eq(2)
55
+ expect(local_repo.git.log[0].message).to eq("Merge branch '#{pr_branch}'")
56
+ expect(local_repo.git.log[0].parents.size).to eq(2)
69
57
 
70
58
  # For some reason, the order of the logs 1 and 2 is indeterminate.
71
- expect(our.log[1 .. 2].map(&:message).sort)
72
- .to eq(['Add changelog', 'Update readme'])
59
+ expect(local_repo.git.log[1 .. 2].map(&:message).sort)
60
+ .to eq([our_change_in_pr_branch, their_change_in_master])
73
61
 
74
- expect(our.log[1].parents.size).to eq(1)
75
- expect(our.log[2].parents.size).to eq(1)
62
+ expect(local_repo.git.log[1].parents.size).to eq(1)
63
+ expect(local_repo.git.log[2].parents.size).to eq(1)
76
64
 
77
- expect(our.log[3].message).to eq('Add readme')
78
- expect(our.log[3].parents.size).to eq(0)
65
+ expect(local_repo.git.log[3].parents.size).to eq(0)
79
66
  end
80
67
 
81
68
  And 'it should push the PR_BRANCH commits' do
82
- expect(our.branches['origin/master'].gcommit.message)
83
- .to eq("Merge branch 'pr_branch'")
69
+ expect(local_repo.git.branches['origin/master'].gcommit.message)
70
+ .to eq("Merge branch '#{pr_branch}'")
84
71
  end
85
72
 
86
73
  And 'it should delete the local PR_BRANCH' do
87
- expect(our.branches[pr_branch]).to be_nil
74
+ expect(local_repo.git.branches[pr_branch]).to be_nil
88
75
  end
89
76
 
90
77
  And 'it should delete the remote PR_BRANCH' do
91
- expect(our.branches["origin/#{pr_branch}"]).to be_nil
78
+ expect(local_repo.git.branches["origin/#{pr_branch}"]).to be_nil
92
79
  end
93
80
  end
94
81
 
95
82
  Steps "should not allow master to be accepted as a PR branch" do
96
83
  Given 'I have a local repo' do
97
- Git.init(our_path)
84
+ local_repo
98
85
  end
99
86
 
100
87
  When 'I run `git pretty-accept master`' do
@@ -113,61 +100,104 @@ describe GitPrettyAccept::App do
113
100
 
114
101
  Steps "should use the .git-pretty-accept-template.txt if available" do
115
102
  merge_message = "hello\nworld!"
116
- repo = TestRepo.new(project_path, tmp_path)
117
103
 
118
104
  Given 'I have a local repo tracking a remote repo' do
119
- repo.build
105
+ local_repo
120
106
  end
121
107
 
122
108
  And 'the local repo has a .git-pretty-accept-template.txt' do
123
- repo.our.add_merge_message_template_file merge_message
109
+ local_repo.add_merge_message_template_file merge_message
124
110
  end
125
111
 
126
112
  And 'I have a PR branch' do
127
- repo.our.add_branch pr_branch
113
+ local_repo.create_branch pr_branch
114
+ local_repo.commit_some_change 'some-change'
128
115
  end
129
116
 
130
117
  And 'the current branch is master' do
131
- repo.our.branch('master').checkout
118
+ local_repo.checkout 'master'
132
119
  end
133
120
 
134
121
  When 'I run `git pretty-accept PR_BRANCH`' do
135
- repo.git_pretty_accept pr_branch
122
+ local_repo.git_pretty_accept pr_branch
136
123
  end
137
124
 
138
125
  Then 'I should see that the .git-pretty-accept-template.txt is the content of
139
126
  the merge message' do
140
- expect(repo.our.log[0].message).to eq(merge_message)
127
+ expect(local_repo.git.log[0].message).to eq(merge_message)
141
128
  end
142
129
  end
143
130
 
144
131
  Steps "should be able to use a .git-pretty-accept-template.txt with an apostrophe" do
145
132
  merge_message = "hello apostrophe (')"
146
- repo = TestRepo.new(project_path, tmp_path)
147
133
 
148
134
  Given 'I have a local repo tracking a remote repo' do
149
- repo.build
135
+ local_repo
150
136
  end
151
137
 
152
138
  And 'the local repo has a .git-pretty-accept-template.txt' do
153
- repo.our.add_merge_message_template_file merge_message
139
+ local_repo.add_merge_message_template_file merge_message
154
140
  end
155
141
 
156
142
  And 'I have a PR branch' do
157
- repo.our.add_branch pr_branch
143
+ local_repo.create_branch pr_branch
144
+ local_repo.commit_some_change 'some-change'
158
145
  end
159
146
 
160
147
  And 'the current branch is master' do
161
- repo.our.branch('master').checkout
148
+ local_repo.checkout 'master'
162
149
  end
163
150
 
164
151
  When 'I run `git pretty-accept PR_BRANCH`' do
165
- repo.git_pretty_accept pr_branch
152
+ local_repo.git_pretty_accept pr_branch
166
153
  end
167
154
 
168
155
  Then 'I should see that the .git-pretty-accept-template.txt is the content of
169
156
  the merge message' do
170
- expect(repo.our.log[0].message).to eq(merge_message)
157
+ expect(local_repo.git.log[0].message).to eq(merge_message)
158
+ end
159
+ end
160
+
161
+ Steps 'should rebase the branch from its remote branch' do
162
+ local_pr_message = 'local-pr-branch-change.txt'
163
+ remote_pr_message = 'remote-pr-branch-change.txt'
164
+
165
+ Given 'I have a local repo tracking a remote repo' do
166
+ local_repo
167
+ end
168
+
169
+ And 'I have a PR branch tracking a remote PR branch' do
170
+ other_repo.create_branch pr_branch
171
+ local_repo.track pr_branch
172
+ end
173
+
174
+ And 'both local and remote PR branch have been updated' do
175
+ local_repo.commit_some_change local_pr_message
176
+
177
+ other_repo.checkout pr_branch
178
+ other_repo.push_some_change remote_pr_message
179
+ end
180
+
181
+ And 'the current branch is master' do
182
+ local_repo.checkout 'master'
183
+ end
184
+
185
+ When 'I run `git pretty-accept PR_BRANCH`' do
186
+ local_repo.git_pretty_accept pr_branch
187
+ end
188
+
189
+ Then 'I should see the commit in the remote PR branch incorporated to master' do
190
+ expect(local_repo.git.log.size).to eq(4)
191
+
192
+ expect(local_repo.git.log[0].message).to eq("Merge branch '#{pr_branch}'")
193
+ expect(local_repo.git.log[0].parents.size).to eq(2)
194
+
195
+ expect(local_repo.git.log[1].message).to eq(local_pr_message)
196
+ expect(local_repo.git.log[1].parents.size).to eq(1)
197
+
198
+ # For some reason, the order of the logs 2 and 3 is indeterminate.
199
+ expect(local_repo.git.log[2 .. 3].map(&:message).sort)
200
+ .to include(remote_pr_message)
171
201
  end
172
202
  end
173
203
  end
data/spec/spec_helper.rb CHANGED
@@ -7,8 +7,8 @@ require 'git_pretty_accept'
7
7
  #
8
8
  # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
9
9
 
10
- require 'support/test_repo'
11
- require 'support/test_repo/local_repo'
10
+ require 'support/local_repo'
11
+ require 'support/remote_repo'
12
12
 
13
13
  RSpec.configure do |config|
14
14
  config.treat_symbols_as_metadata_keys_with_true_values = true
@@ -0,0 +1,59 @@
1
+ class LocalRepo
2
+ attr_reader :git, :project_path, :path
3
+
4
+ def initialize(project_path, path, remote_repo)
5
+ @project_path = project_path
6
+ @path = path
7
+ @remote_repo = remote_repo
8
+
9
+ Git.clone remote_repo.path, path
10
+ @git = Git.open(path)
11
+ end
12
+
13
+ def add_initial_commit
14
+ File.open("#{path}/readme.txt", 'w') { |f| f.write('readme') }
15
+ File.open("#{path}/.gitignore", 'w') do |f|
16
+ f.write('.git-pretty-accept-template.txt')
17
+ end
18
+
19
+ git.add all: true
20
+ git.commit 'Initial commit.'
21
+ git.push
22
+ end
23
+
24
+ def add_merge_message_template_file(message)
25
+ File.open("#{path}/.git-pretty-accept-template.txt", 'w') do |file|
26
+ file.write message
27
+ end
28
+ end
29
+
30
+ def checkout(branch)
31
+ git.branch(branch).checkout
32
+ end
33
+
34
+ def commit_some_change(message)
35
+ File.open("#{path}/#{message}.txt", 'w') { |f| f.write(message) }
36
+ git.add all: true
37
+ git.commit message
38
+ end
39
+
40
+ def create_branch(branch)
41
+ git.branch(branch).checkout
42
+ git.push git.remote('origin'), branch
43
+ end
44
+
45
+ def git_pretty_accept(branch)
46
+ FileUtils.cd(path) do
47
+ puts `bundle exec #{project_path}/bin/git-pretty-accept --no-edit #{branch}`
48
+ end
49
+ end
50
+
51
+ def push_some_change(message)
52
+ commit_some_change message
53
+ git.push git.remote('origin'), git.branches.local.find(&:current)
54
+ end
55
+
56
+ def track(branch)
57
+ git.branch(branch).checkout
58
+ end
59
+ end
@@ -0,0 +1,10 @@
1
+ class RemoteRepo
2
+ attr_reader :path
3
+
4
+ def initialize(project_path, path)
5
+ @project_path = project_path
6
+ @path = path
7
+
8
+ Git.init path, bare: true
9
+ end
10
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git_pretty_accept
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - George Mendoza
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-03 00:00:00.000000000 Z
11
+ date: 2013-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: git
@@ -176,8 +176,8 @@ files:
176
176
  - lib/git_pretty_accept/version.rb
177
177
  - spec/git_pretty_accept/app_spec.rb
178
178
  - spec/spec_helper.rb
179
- - spec/support/test_repo.rb
180
- - spec/support/test_repo/local_repo.rb
179
+ - spec/support/local_repo.rb
180
+ - spec/support/remote_repo.rb
181
181
  homepage: https://github.com/gsmendoza/git_pretty_accept
182
182
  licenses:
183
183
  - MIT
@@ -205,5 +205,5 @@ summary: Accept pull requests, the pretty way
205
205
  test_files:
206
206
  - spec/git_pretty_accept/app_spec.rb
207
207
  - spec/spec_helper.rb
208
- - spec/support/test_repo.rb
209
- - spec/support/test_repo/local_repo.rb
208
+ - spec/support/local_repo.rb
209
+ - spec/support/remote_repo.rb
@@ -1,38 +0,0 @@
1
- class TestRepo
2
- attr_reader :project_path, :tmp_path
3
-
4
- def initialize(project_path, tmp_path)
5
- @project_path = project_path
6
- @tmp_path = tmp_path
7
- end
8
-
9
- def build
10
- Git.init remote_path, bare: true
11
-
12
- # Add initial commit. Otherwise, `our.branch(pr_branch)`
13
- # below won't be able to create a new branch.
14
-
15
- our.add_initial_commit
16
- end
17
-
18
- def our
19
- return @our if @our
20
-
21
- Git.clone remote_path, our_path
22
- @our = LocalRepo.new(Git.open(our_path))
23
- end
24
-
25
- def our_path
26
- "#{tmp_path}/our"
27
- end
28
-
29
- def remote_path
30
- "#{tmp_path}/remote"
31
- end
32
-
33
- def git_pretty_accept(branch)
34
- FileUtils.cd(our_path) do
35
- puts `bundle exec #{project_path}/bin/git-pretty-accept --no-edit #{branch}`
36
- end
37
- end
38
- end
@@ -1,32 +0,0 @@
1
- class TestRepo
2
- class LocalRepo < SimpleDelegator
3
- def add_initial_commit
4
- File.open("#{path}/readme.txt", 'w') { |f| f.write('readme') }
5
- File.open("#{path}/.gitignore", 'w') do |f|
6
- f.write('.git-pretty-accept-template.txt')
7
- end
8
-
9
- add all: true
10
- commit 'Initial commit.'
11
- push
12
- end
13
-
14
- def add_branch(branch)
15
- branch(branch).checkout
16
- File.open("#{path}/changelog.txt", 'w') { |f| f.write('changelog') }
17
- add all: true
18
- commit 'Add changelog'
19
- push remote('origin'), branch
20
- end
21
-
22
- def add_merge_message_template_file(message)
23
- File.open("#{path}/.git-pretty-accept-template.txt", 'w') do |file|
24
- file.write message
25
- end
26
- end
27
-
28
- def path
29
- @path ||= dir.path
30
- end
31
- end
32
- end