socialcast-git-extensions 3.0.0.pre4 → 3.0.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.
data/bin/git-promote ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'socialcast-git-extensions', 'cli.rb')
4
+ Socialcast::Gitx::CLI.start (['promote'] + ARGV)
data/bin/git-update CHANGED
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require File.join(File.dirname(__FILE__), '..', 'lib', 'socialcast-git-extensions', 'cli.rb')
4
- script = Socialcast::Gitx::CLI.new
5
- script.invoke(:update, ARGV)
4
+ Socialcast::Gitx::CLI.start (['update'] + ARGV)
@@ -115,6 +115,12 @@ module Socialcast
115
115
  post "#worklog integrating #{branch} into #{target_branch} #scgitx"
116
116
  end
117
117
 
118
+ desc 'promote', '(DEPRECATED) promote the current branch into staging'
119
+ def promote
120
+ say 'DEPRECATED: Use `git integrate staging` instead', :red
121
+ integrate 'staging'
122
+ end
123
+
118
124
  desc 'nuke', 'nuke the specified aggregate branch and reset it to a known good state'
119
125
  method_option :destination, :type => :string, :aliases => '-d', :desc => 'destination branch to reset to'
120
126
  def nuke(bad_branch)
@@ -146,46 +152,6 @@ module Socialcast
146
152
 
147
153
  private
148
154
 
149
- # build a summary of changes
150
- def changelog_summary(branch)
151
- changes = `git diff --stat origin/#{Socialcast::Gitx::BASE_BRANCH}...#{branch}`.split("\n")
152
- stats = changes.pop
153
- if changes.length > 5
154
- dirs = changes.map do |file_change|
155
- filename = "#{file_change.split.first}"
156
- dir = filename.gsub(/\/[^\/]+$/, '')
157
- dir
158
- end
159
- dir_counts = Hash.new(0)
160
- dirs.each {|dir| dir_counts[dir] += 1 }
161
- changes = dir_counts.to_a.sort_by {|k,v| v}.reverse.first(5).map {|k,v| "#{k} (#{v} file#{'s' if v > 1})"}
162
- end
163
- (changes + [stats]).join("\n")
164
- end
165
-
166
- # launch configured editor to retreive message/string
167
- def editor_input(initial_text = '')
168
- require 'tempfile'
169
- Tempfile.open('reviewrequest.md') do |f|
170
- f << initial_text
171
- f.flush
172
-
173
- editor = ENV['EDITOR'] || 'vi'
174
- flags = case editor
175
- when 'mate', 'emacs'
176
- '-w'
177
- when 'mvim'
178
- '-f'
179
- else
180
- ''
181
- end
182
- pid = fork { exec "#{editor} #{flags} #{f.path}" }
183
- Process.waitpid(pid)
184
- description = File.read(f.path)
185
- description.gsub(/^\#.*/, '').chomp.strip
186
- end
187
- end
188
-
189
155
  # post a message in socialcast
190
156
  # skip sharing message if CLI quiet option is present
191
157
  def post(message, params = {})
@@ -3,7 +3,8 @@ require 'grit'
3
3
  module Socialcast
4
4
  module Gitx
5
5
  module Git
6
- RESERVED_BRANCHES = %w{ HEAD master staging prototype next_release }
6
+ AGGREGATE_BRANCHES = %w{ staging prototype }
7
+ RESERVED_BRANCHES = %w{ HEAD master next_release } + AGGREGATE_BRANCHES
7
8
 
8
9
  private
9
10
  def assert_not_protected_branch!(branch, action)
@@ -38,7 +39,6 @@ module Socialcast
38
39
  branches.uniq
39
40
  end
40
41
 
41
- AGGREGATE_BRANCHES = %w{ staging prototype }
42
42
  # reset the specified branch to the same set of commits as the destination branch
43
43
  # used to revert commits on aggregate branches back to a known good state
44
44
  def reset_branch(branch, head_branch)
@@ -77,10 +77,49 @@ module Socialcast
77
77
  run_cmd "git checkout #{branch}"
78
78
  end
79
79
 
80
- private
81
80
  def aggregate_branch?(branch)
82
81
  AGGREGATE_BRANCHES.include?(branch) || branch.starts_with?('last_known_good')
83
82
  end
83
+
84
+ # build a summary of changes
85
+ def changelog_summary(branch)
86
+ changes = `git diff --stat origin/#{Socialcast::Gitx::BASE_BRANCH}...#{branch}`.split("\n")
87
+ stats = changes.pop
88
+ if changes.length > 5
89
+ dirs = changes.map do |file_change|
90
+ filename = "#{file_change.split.first}"
91
+ dir = filename.gsub(/\/[^\/]+$/, '')
92
+ dir
93
+ end
94
+ dir_counts = Hash.new(0)
95
+ dirs.each {|dir| dir_counts[dir] += 1 }
96
+ changes = dir_counts.to_a.sort_by {|k,v| v}.reverse.first(5).map {|k,v| "#{k} (#{v} file#{'s' if v > 1})"}
97
+ end
98
+ (changes + [stats]).join("\n")
99
+ end
100
+
101
+ # launch configured editor to retreive message/string
102
+ def editor_input(initial_text = '')
103
+ require 'tempfile'
104
+ Tempfile.open('reviewrequest.md') do |f|
105
+ f << initial_text
106
+ f.flush
107
+
108
+ editor = ENV['EDITOR'] || 'vi'
109
+ flags = case editor
110
+ when 'mate', 'emacs'
111
+ '-w'
112
+ when 'mvim'
113
+ '-f'
114
+ else
115
+ ''
116
+ end
117
+ pid = fork { exec "#{editor} #{flags} #{f.path}" }
118
+ Process.waitpid(pid)
119
+ description = File.read(f.path)
120
+ description.gsub(/^\#.*/, '').chomp.strip
121
+ end
122
+ end
84
123
  end
85
124
  end
86
125
  end
@@ -1,5 +1,5 @@
1
1
  module Socialcast
2
2
  module Gitx
3
- VERSION = "3.0.0.pre4"
3
+ VERSION = "3.0.0"
4
4
  end
5
5
  end
data/spec/cli_spec.rb CHANGED
@@ -76,7 +76,7 @@ describe Socialcast::Gitx::CLI do
76
76
  before do
77
77
  Socialcast::Gitx::CLI.start ['integrate', 'staging']
78
78
  end
79
- it 'should run expected commands' do
79
+ it 'should also integrate into prototype and run expected commands' do
80
80
  Socialcast::Gitx::CLI.stubbed_executed_commands.should == [
81
81
  "git pull origin FOO",
82
82
  "git pull origin master",
@@ -163,14 +163,14 @@ describe Socialcast::Gitx::CLI do
163
163
  "git checkout last_known_good_master",
164
164
  "git pull",
165
165
  "git branch -D prototype",
166
- "git push origin :prototype",
166
+ "git push origin --delete prototype",
167
167
  "git checkout -b prototype",
168
168
  "grb publish prototype",
169
169
  "git checkout last_known_good_master",
170
170
  "git checkout last_known_good_master",
171
171
  "git pull",
172
172
  "git branch -D last_known_good_prototype",
173
- "git push origin :last_known_good_prototype",
173
+ "git push origin --delete last_known_good_prototype",
174
174
  "git checkout -b last_known_good_prototype",
175
175
  "grb publish last_known_good_prototype",
176
176
  "git checkout last_known_good_master"
@@ -186,7 +186,7 @@ describe Socialcast::Gitx::CLI do
186
186
  "git checkout last_known_good_staging",
187
187
  "git pull",
188
188
  "git branch -D staging",
189
- "git push origin :staging",
189
+ "git push origin --delete staging",
190
190
  "git checkout -b staging",
191
191
  "grb publish staging",
192
192
  "git checkout last_known_good_staging"
@@ -203,7 +203,7 @@ describe Socialcast::Gitx::CLI do
203
203
  "git checkout last_known_good_prototype",
204
204
  "git pull",
205
205
  "git branch -D prototype",
206
- "git push origin :prototype",
206
+ "git push origin --delete prototype",
207
207
  "git checkout -b prototype",
208
208
  "grb publish prototype",
209
209
  "git checkout last_known_good_prototype"
@@ -220,14 +220,14 @@ describe Socialcast::Gitx::CLI do
220
220
  "git checkout last_known_good_master",
221
221
  "git pull",
222
222
  "git branch -D prototype",
223
- "git push origin :prototype",
223
+ "git push origin --delete prototype",
224
224
  "git checkout -b prototype",
225
225
  "grb publish prototype",
226
226
  "git checkout last_known_good_master",
227
227
  "git checkout last_known_good_master",
228
228
  "git pull",
229
229
  "git branch -D last_known_good_prototype",
230
- "git push origin :last_known_good_prototype",
230
+ "git push origin --delete last_known_good_prototype",
231
231
  "git checkout -b last_known_good_prototype",
232
232
  "grb publish last_known_good_prototype",
233
233
  "git checkout last_known_good_master"
@@ -243,4 +243,29 @@ describe Socialcast::Gitx::CLI do
243
243
  end
244
244
  end
245
245
  end
246
+
247
+ describe '#promote' do
248
+ before do
249
+ Socialcast::Gitx::CLI.start ['promote']
250
+ end
251
+ it 'should integrate into staging' do
252
+ Socialcast::Gitx::CLI.stubbed_executed_commands.should == [
253
+ "git pull origin FOO",
254
+ "git pull origin master",
255
+ "git push origin HEAD",
256
+ "git remote prune origin",
257
+ "git remote prune origin",
258
+ "git checkout staging",
259
+ "git pull . FOO",
260
+ "git push origin HEAD",
261
+ "git checkout FOO",
262
+ "git remote prune origin",
263
+ "git checkout prototype",
264
+ "git pull . staging",
265
+ "git push origin HEAD",
266
+ "git checkout staging",
267
+ "git checkout FOO"
268
+ ]
269
+ end
270
+ end
246
271
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: socialcast-git-extensions
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0.pre4
5
- prerelease: 6
4
+ version: 3.0.0
5
+ prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Ryan Sonnek
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-30 00:00:00.000000000 Z
12
+ date: 2012-09-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: grit
@@ -178,6 +178,7 @@ executables:
178
178
  - git-cleanup
179
179
  - git-integrate
180
180
  - git-nuke
181
+ - git-promote
181
182
  - git-release
182
183
  - git-reviewrequest
183
184
  - git-share
@@ -198,6 +199,7 @@ files:
198
199
  - bin/git-cleanup
199
200
  - bin/git-integrate
200
201
  - bin/git-nuke
202
+ - bin/git-promote
201
203
  - bin/git-release
202
204
  - bin/git-reviewrequest
203
205
  - bin/git-share
@@ -228,13 +230,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
228
230
  version: '0'
229
231
  segments:
230
232
  - 0
231
- hash: 3452558432038293622
233
+ hash: -1464484862352811039
232
234
  required_rubygems_version: !ruby/object:Gem::Requirement
233
235
  none: false
234
236
  requirements:
235
- - - ! '>'
237
+ - - ! '>='
236
238
  - !ruby/object:Gem::Version
237
- version: 1.3.1
239
+ version: '0'
240
+ segments:
241
+ - 0
242
+ hash: -1464484862352811039
238
243
  requirements: []
239
244
  rubyforge_project: socialcast-git-extensions
240
245
  rubygems_version: 1.8.24