socialcast-git-extensions 3.0.0.pre4 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
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