gitscape 1.4.1 → 1.5

Sign up to get free protection for your applications and to get access to all the features.
data/bin/gitscape CHANGED
@@ -30,34 +30,47 @@ options = {}
30
30
  op = OptionParser.new do |op|
31
31
  op.banner = 'Usage: gitscape [action] [options]'
32
32
  op.separator('Options:')
33
- op.on '--trace', 'Verbose output for debugging' do
34
- options[:trace] = true
33
+
34
+ op.on '--[no-]trace', 'Verbose output for debugging' do |bool|
35
+ options[:trace] = bool
35
36
  end
37
+
36
38
  op.on '-h', '--help', 'Show a list of actions' do
37
39
  puts OVERVIEW
38
40
  exit
39
41
  end
40
- end
41
42
 
42
- args = op.parse(ARGV)
43
+ op.on '-p', '--[no-]push', 'Whether or not to push changes to origin' do |bool|
44
+ options[:push] = bool
45
+ end
46
+
47
+ op.on '-u', '--[no-]update-env', 'Whether to update environment branches when their development branch is updated' do |bool|
48
+ options[:update_env] = bool
49
+ end
50
+
51
+ op.on '-e', '--env-depth=ENV', [:staging, :qa, :live], 'The level of environments to push changes to' do |depth|
52
+ options[:env_depth] = depth
53
+ end
54
+ end
43
55
 
44
- # Get the app name. Note that if the app name is 'app', we have to rename it
45
- # so that it doesn't conflict with the 'app' subdirectory.
56
+ op.parse!(ARGV)
46
57
 
47
58
  if ARGV.size < 1
48
- puts op
49
- exit(1)
59
+ puts OVERVIEW
60
+ exit
50
61
  else
51
- case ARGV[0]
62
+ command_name = ARGV[0]
63
+ case command_name
52
64
  when "hotfix_start"
53
- Gitscape::Base.new.hotfix_start ARGV[1]
65
+ hotfix_branch = ARGV[1]
66
+ Gitscape::Base.new.hotfix_start hotfix_branch, options
54
67
  when "hotfix_finish"
55
- Gitscape::Base.new.hotfix_finish ARGV[1]
68
+ Gitscape::Base.new.hotfix_finish hotfix_branch, options
56
69
  when "release_start"
57
- Gitscape::Base.new.release_start
70
+ Gitscape::Base.new.release_start options
58
71
  when "release_finish"
59
- Gitscape::Base.new.release_finish ARGV[1].to_i
72
+ Gitscape::Base.new.release_finish options
60
73
  else
61
- puts "Unknown command"
74
+ puts "Unknown command: #{command_name}"
62
75
  end
63
76
  end
data/lib/gitscape/base.rb CHANGED
@@ -9,16 +9,24 @@ class Gitscape::Base
9
9
 
10
10
  # Always add a merge commit at the end of a merge
11
11
  @merge_options = "--no-ff"
12
+
12
13
  # Setup additional merge options based on the version of Git we have
13
14
  if git_version_at_least "1.7.4.0"
14
15
  @merge_options += " -s recursive -Xignore-space-change"
15
16
  else
16
17
  warn "Ignoring whitespace changes in merges is only available on Git 1.7.4+"
17
18
  end
18
- end
19
-
20
- def branch_names
21
- @repo.branches.map { |b| b.full }
19
+
20
+ @env_branch_by_dev_branch = Hash.new do |h, k|
21
+ case k
22
+ when "master"
23
+ "staging"
24
+ when /release\/i\d+/
25
+ "qa"
26
+ when "live"
27
+ "live"
28
+ end
29
+ end
22
30
  end
23
31
 
24
32
  def git_working_copy_is_clean puts_changes=true
@@ -80,9 +88,11 @@ class Gitscape::Base
80
88
  puts `git checkout -b #{hotfix_branch}`
81
89
  end
82
90
 
83
- def hotfix_finish(hotfix_branch=nil)
84
- # TODO:
85
- # 1. Tag the new live revision with 'live/<branch_name_without_prefix>'
91
+ def hotfix_finish hotfix_branch="", options={:env_depth=>:staging, :push=>true, :update_env=>true}
92
+ # option defaults
93
+ options[:env_depth] = :staging if options[:env_depth].nil?
94
+ options[:push] = true if options[:push].nil?
95
+ options[:update_env] = true if options[:update_env].nil?
86
96
 
87
97
  usage_string = "expected usage: hotfix_finish [<hotfix_branch>]
88
98
  hotfix_branch: the name of the hotfix branch to finish.
@@ -101,9 +111,12 @@ class Gitscape::Base
101
111
  end
102
112
 
103
113
  # Collect the set of branches we'd like to merge the hotfix into
104
- merge_branches = ["master", current_release_branch_name, "live"]
114
+ merge_branches = ["master"]
115
+ merge_branches << current_release_branch_name if [:qa, :live].include?(options[:env_depth])
116
+ merge_branches << "live" if options[:env_depth] == :live
105
117
 
106
118
  # Merge the hotfix into merge_branches
119
+ puts "=== Merging hotfix into branches #{merge_branches} ==="
107
120
  for branch in merge_branches
108
121
 
109
122
  # Calculate merge_options
@@ -111,17 +124,21 @@ class Gitscape::Base
111
124
  merge_options += " --log" if branch == "master"
112
125
 
113
126
  # Attempt merge
114
- `git checkout #{branch}`
115
- `git merge #{merge_options} #{hotfix_branch}`
127
+ puts `git checkout #{branch}`
128
+ puts `git pull`
129
+ puts `git merge #{merge_options} #{hotfix_branch}`
116
130
 
117
131
  # Bail on failures
118
132
  exit 1 if !$?.success?
119
- raise "Merge on #{branch} has failed.\nResolve the conflicts and run the script again." if git_has_conflicts
120
-
133
+ raise "Merge failure(s) on #{branch}.\nResolve conflicts, and run the script again." if git_has_conflicts
134
+
135
+ puts `git push origin #{branch}` if options[:push]
136
+ puts `git push origin #{branch}:#{@env_branch_by_dev_branch[branch]}` if options[:update_env]
137
+
121
138
  # If we just merged the live branch, tag this revision, and push that tag to origin
122
139
  if branch == "live"
123
- `git tag live/i#{live_iteration}/#{hotfix_branch}`
124
- `git push --tags`
140
+ puts `git tag live/i#{live_iteration}/#{hotfix_branch}`
141
+ puts `git push --tags`
125
142
  end
126
143
 
127
144
  end
@@ -1,3 +1,3 @@
1
1
  module Gitscape
2
- VERSION = '1.4.1'
2
+ VERSION = '1.5'
3
3
  end
metadata CHANGED
@@ -4,9 +4,8 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 1
7
- - 4
8
- - 1
9
- version: 1.4.1
7
+ - 5
8
+ version: "1.5"
10
9
  platform: ruby
11
10
  authors:
12
11
  - Jon Botelho