socialcast-git-extensions 3.2 → 3.3
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/.ruby-version +1 -1
- data/.travis.yml +1 -1
- data/README.md +4 -0
- data/bin/git-branchdiff +4 -0
- data/lib/socialcast-git-extensions/cli.rb +12 -0
- data/lib/socialcast-git-extensions/git.rb +8 -3
- data/lib/socialcast-git-extensions/version.rb +1 -1
- data/spec/cli_spec.rb +41 -0
- data/spec/git_spec.rb +17 -3
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 283e0ebc38ce457e94ca898703a5ab8df99835b6
|
4
|
+
data.tar.gz: 61d4adc96c8f42e659a03320f2182d844c0aa4ef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 310fc3393cfae32881d2b4e5ce1ae3fe1645ba9aeff0a2278b60991a89eff7ccd8d4742e4a2191c1ac7424746063ccad0f8828d0dc681f0357796ef31b0ad0a8
|
7
|
+
data.tar.gz: 2f8234257b185d9b817be64b9c9c1ca21b790bc2bf867513f66f795f3c6e253fe7141dcd76e3cf34e9b0cdcad381cb45d62df88c8aaf3e37427641edb7b723bd
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ruby-2.2.
|
1
|
+
ruby-2.2.4
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -46,6 +46,10 @@ integrate the current feature branch into an aggregate branch (ex: prototype, st
|
|
46
46
|
|
47
47
|
Find pull requests on github including a given commit
|
48
48
|
|
49
|
+
## git branchdiff <branch> <base_branch (optional, default: master)>
|
50
|
+
|
51
|
+
List branches merged into remote origin/`branch` and not also merged into origin/`base_branch`
|
52
|
+
|
49
53
|
## git reviewrequest
|
50
54
|
|
51
55
|
create a pull request on github for peer review of the current branch.
|
data/bin/git-branchdiff
ADDED
@@ -233,6 +233,18 @@ module Socialcast
|
|
233
233
|
post message.strip
|
234
234
|
end
|
235
235
|
|
236
|
+
desc 'branchdiff', 'show branches merged into one remote branch but not merged into another (default = master)'
|
237
|
+
def branchdiff(branch = nil, other_branch = 'master')
|
238
|
+
branch ||= ask "What remote branch would you like to compare against '#{other_branch}' (ex: staging)?"
|
239
|
+
run_cmd "git fetch origin"
|
240
|
+
results = branch_difference(branch, other_branch)
|
241
|
+
if results.any?
|
242
|
+
say "\nBranches in origin/#{branch} and not in origin/#{other_branch}:\n\n#{results.join("\n")}\n\n"
|
243
|
+
else
|
244
|
+
say "\nNo branches found in origin/#{branch} that are not also in origin/#{other_branch}\n\n"
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
236
248
|
desc 'release', 'release the current branch to production'
|
237
249
|
def release
|
238
250
|
branch = current_branch
|
@@ -74,6 +74,11 @@ module Socialcast
|
|
74
74
|
branches.uniq
|
75
75
|
end
|
76
76
|
|
77
|
+
# retrieve a list of branches merged into one remote branch but not merged into another
|
78
|
+
def branch_difference(branch, other_branch)
|
79
|
+
branches(:remote => true, :merged => "origin/#{branch}") - branches(:remote => true, :merged => "origin/#{other_branch}")
|
80
|
+
end
|
81
|
+
|
77
82
|
# reset the specified branch to the same set of commits as the destination branch
|
78
83
|
# reverts commits on aggregate branches back to a known good state
|
79
84
|
# returns list of branches that were removed
|
@@ -87,7 +92,7 @@ module Socialcast
|
|
87
92
|
|
88
93
|
run_cmd "git checkout #{base_branch}"
|
89
94
|
refresh_branch_from_remote head_branch
|
90
|
-
removed_branches =
|
95
|
+
removed_branches = branch_difference(branch, head_branch)
|
91
96
|
run_cmd "git branch -D #{branch}" rescue nil
|
92
97
|
run_cmd "git push origin --delete #{branch}" rescue nil
|
93
98
|
run_cmd "git checkout -b #{branch}"
|
@@ -151,8 +156,8 @@ module Socialcast
|
|
151
156
|
dir
|
152
157
|
end
|
153
158
|
dir_counts = Hash.new(0)
|
154
|
-
dirs.each {|dir| dir_counts[dir] += 1 }
|
155
|
-
changes = dir_counts.to_a.sort_by {|k,v| v}.
|
159
|
+
dirs.each { |dir| dir_counts[dir] += 1 }
|
160
|
+
changes = dir_counts.to_a.sort_by { |k, v| [-v, k] }.first(5).map { |k, v| "#{k} (#{v} file#{'s' if v > 1})" }
|
156
161
|
else
|
157
162
|
changes = changes.map do |line|
|
158
163
|
added, removed, filename = line.split
|
data/spec/cli_spec.rb
CHANGED
@@ -365,6 +365,47 @@ describe Socialcast::Gitx::CLI do
|
|
365
365
|
end
|
366
366
|
end
|
367
367
|
|
368
|
+
describe '#branchdiff' do
|
369
|
+
subject(:branchdiff) { Socialcast::Gitx::CLI.start(['branchdiff'] + args) }
|
370
|
+
let(:said_messages) { [] }
|
371
|
+
before do
|
372
|
+
expect_any_instance_of(Socialcast::Gitx::CLI).to receive(:run_cmd).with('git fetch origin')
|
373
|
+
allow_any_instance_of(Socialcast::Gitx::CLI).to receive(:say) do |_instance, msg|
|
374
|
+
said_messages << msg
|
375
|
+
end
|
376
|
+
end
|
377
|
+
context 'with one branch-name argument' do
|
378
|
+
let(:args) { ['my-branch'] }
|
379
|
+
before do
|
380
|
+
expect_any_instance_of(Socialcast::Gitx::CLI).to receive(:branch_difference).with('my-branch', 'master').and_return(['dummy_branch'])
|
381
|
+
branchdiff
|
382
|
+
end
|
383
|
+
it do
|
384
|
+
expect(said_messages).to eq ["\nBranches in origin/my-branch and not in origin/master:\n\ndummy_branch\n\n"]
|
385
|
+
end
|
386
|
+
end
|
387
|
+
context 'with two branch-name arguments' do
|
388
|
+
let(:args) { ['my-branch', 'other-branch'] }
|
389
|
+
before do
|
390
|
+
expect_any_instance_of(Socialcast::Gitx::CLI).to receive(:branch_difference).with('my-branch', 'other-branch').and_return(['dummy_branch'])
|
391
|
+
branchdiff
|
392
|
+
end
|
393
|
+
it do
|
394
|
+
expect(said_messages).to eq ["\nBranches in origin/my-branch and not in origin/other-branch:\n\ndummy_branch\n\n"]
|
395
|
+
end
|
396
|
+
end
|
397
|
+
context 'when no results are found' do
|
398
|
+
let(:args) { ['my-branch'] }
|
399
|
+
before do
|
400
|
+
expect_any_instance_of(Socialcast::Gitx::CLI).to receive(:branch_difference).with('my-branch', 'master').and_return([])
|
401
|
+
branchdiff
|
402
|
+
end
|
403
|
+
it do
|
404
|
+
expect(said_messages).to eq ["\nNo branches found in origin/my-branch that are not also in origin/master\n\n"]
|
405
|
+
end
|
406
|
+
end
|
407
|
+
end
|
408
|
+
|
368
409
|
describe '#nuke' do
|
369
410
|
before { allow_any_instance_of(Socialcast::Gitx::CLI).to receive(:branches).and_return([]) }
|
370
411
|
context 'when target branch == staging and --destination == last_known_good_staging' do
|
data/spec/git_spec.rb
CHANGED
@@ -10,6 +10,20 @@ describe Socialcast::Gitx::Git do
|
|
10
10
|
let(:test_instance) { TestClass.new }
|
11
11
|
subject { test_instance }
|
12
12
|
|
13
|
+
describe '#branch_difference' do
|
14
|
+
subject { test_instance.send(:branch_difference, branch, other_branch) }
|
15
|
+
let(:other_branch) { 'master' }
|
16
|
+
let(:branch) { 'my-branch' }
|
17
|
+
before do
|
18
|
+
allow(test_instance).to receive(:branches) do |options|
|
19
|
+
expect(options[:remote]).to be_truthy
|
20
|
+
next %w(branch_a branch_b branch_c branch_z) if options[:merged] == "origin/#{branch}"
|
21
|
+
%w(branch_b branch_d branch_e branch_z) if options[:merged] == "origin/#{other_branch}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
it { is_expected.to eq %w(branch_a branch_c) }
|
25
|
+
end
|
26
|
+
|
13
27
|
describe '#changelog_summary' do
|
14
28
|
subject { test_instance.send(:changelog_summary, branch) }
|
15
29
|
let(:base_branch) { 'master' }
|
@@ -64,13 +78,13 @@ describe Socialcast::Gitx::Git do
|
|
64
78
|
1 0 doc/images.md
|
65
79
|
EOS
|
66
80
|
end
|
67
|
-
it 'summarizes the changes by directory' do
|
81
|
+
it 'summarizes the changes by directory, sorting by count desc then alpha asc' do
|
68
82
|
is_expected.to eq <<-EOS.strip_heredoc
|
69
83
|
engines/shoelaces/spec/models (2 files)
|
70
|
-
lib/tasks (1 file)
|
71
|
-
script (1 file)
|
72
84
|
doc (1 file)
|
73
85
|
engines/shoelaces/app/models (1 file)
|
86
|
+
lib/tasks (1 file)
|
87
|
+
script (1 file)
|
74
88
|
6 files changed, 35 insertions(+), 129 deletions(-)
|
75
89
|
EOS
|
76
90
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: socialcast-git-extensions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '3.
|
4
|
+
version: '3.3'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Socialcast
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rugged
|
@@ -141,6 +141,7 @@ email:
|
|
141
141
|
- developers@socialcast.com
|
142
142
|
executables:
|
143
143
|
- git-backportpr
|
144
|
+
- git-branchdiff
|
144
145
|
- git-cleanup
|
145
146
|
- git-findpr
|
146
147
|
- git-integrate
|
@@ -166,6 +167,7 @@ files:
|
|
166
167
|
- README.md
|
167
168
|
- Rakefile
|
168
169
|
- bin/git-backportpr
|
170
|
+
- bin/git-branchdiff
|
169
171
|
- bin/git-cleanup
|
170
172
|
- bin/git-findpr
|
171
173
|
- bin/git-integrate
|