gitscape 1.3.9 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/gitscape/base.rb +53 -50
- data/lib/gitscape/version.rb +1 -1
- metadata +4 -4
data/lib/gitscape/base.rb
CHANGED
@@ -22,39 +22,46 @@ class Gitscape::Base
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def checkout(branch_name)
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
end
|
30
|
-
puts "Switching to branch '#{branch_name}'..."
|
31
|
-
@repo.checkout(branch_name)
|
25
|
+
puts "--- Switching to branch '#{branch_name}' ---"
|
26
|
+
`git checkout -b #{branch_name}`
|
27
|
+
|
28
|
+
throw "!!! Failed to switch to branch #{branch_name} !!!" if current_branch_name != branch_name
|
32
29
|
end
|
33
30
|
|
34
31
|
def git_working_copy_is_clean puts_changes=true
|
32
|
+
|
35
33
|
# Check if the working copy is clean, if not, exit
|
34
|
+
|
36
35
|
changes = `git status -uno --ignore-submodules=all --porcelain`
|
37
36
|
working_copy_clean = changes.length == 0
|
38
37
|
if !working_copy_clean && puts_changes
|
39
|
-
puts "Your working copy is not clean, either commit, stash, or reset your changes then try again."
|
38
|
+
puts "*** Your working copy is not clean, either commit, stash, or reset your changes then try again. ***"
|
40
39
|
puts changes
|
41
40
|
end
|
42
41
|
|
43
42
|
working_copy_clean
|
44
43
|
end
|
45
44
|
|
46
|
-
def
|
47
|
-
|
48
|
-
|
45
|
+
def live_iteration
|
46
|
+
toRet = `git branch -a --merged live`.split("\n").select{|b| /release\/i(\d+)$/.match b}.map{|b| b.scan(/release\/i(\d+)$/).flatten[0].to_i}.sort.last
|
47
|
+
toRet
|
48
|
+
end
|
49
49
|
|
50
|
-
|
50
|
+
def current_branch_name
|
51
|
+
toRet = `git status --porcelain -b`.scan(/## (.*)/).flatten[0]
|
52
|
+
toRet
|
53
|
+
end
|
51
54
|
|
52
|
-
|
53
|
-
|
55
|
+
def current_release_branch_number
|
56
|
+
unmerged_into_live_branch_names = `git branch -a --no-merged live`.split("\n")
|
57
|
+
release_branch_regex = /release\/i(\d+)$/
|
54
58
|
|
55
|
-
|
59
|
+
candidates = unmerged_into_live_branch_names.select{ |b| release_branch_regex.match b}.map{|b| b.scan(release_branch_regex).flatten[0].to_i}.sort
|
60
|
+
candidates.last
|
61
|
+
end
|
56
62
|
|
57
|
-
|
63
|
+
def current_release_branch_name
|
64
|
+
"release/i#{current_release_branch_number}"
|
58
65
|
end
|
59
66
|
|
60
67
|
def git_has_conflicts puts_conflicts=true
|
@@ -66,67 +73,63 @@ class Gitscape::Base
|
|
66
73
|
has_conflicts
|
67
74
|
end
|
68
75
|
|
69
|
-
def hotfix_start(
|
76
|
+
def hotfix_start(hotfix_branch=nil)
|
70
77
|
checkout "live"
|
71
78
|
|
72
|
-
if
|
73
|
-
exception_message = "*** Improper Usage ***\nExpected Usage: hotfix_start <
|
79
|
+
if hotfix_branch.length == 0
|
80
|
+
exception_message = "*** Improper Usage ***\nExpected Usage: hotfix_start <hotfix_branch>"
|
74
81
|
raise exception_message
|
75
82
|
end
|
76
83
|
|
77
|
-
|
78
|
-
puts "Creating hotfix branch '#{
|
84
|
+
hotfix_branch = "hotfix/#{hotfix_branch}"
|
85
|
+
puts "=== Creating hotfix branch '#{hotfix_branch}' ==="
|
79
86
|
|
80
|
-
|
81
|
-
`git checkout -b #{hotfix_branch.full}`
|
82
|
-
@repo.checkout(hotfix_branch)
|
87
|
+
puts `git checkout -b #{hotfix_branch}`
|
83
88
|
end
|
84
89
|
|
85
|
-
def hotfix_finish(
|
90
|
+
def hotfix_finish(hotfix_branch=nil)
|
86
91
|
# TODO:
|
87
92
|
# 1. Tag the new live revision with 'live/<branch_name_without_prefix>'
|
88
93
|
|
89
|
-
usage_string = "expected usage: hotfix_finish [<
|
90
|
-
|
94
|
+
usage_string = "expected usage: hotfix_finish [<hotfix_branch>]
|
95
|
+
hotfix_branch: the name of the hotfix branch to finish.
|
91
96
|
if ommitted, you must currently be on a hotfix branch"
|
92
97
|
|
93
|
-
previous_branch =
|
98
|
+
previous_branch = current_branch_name
|
94
99
|
|
95
100
|
if previous_branch.start_with? "hotfix"
|
96
|
-
|
101
|
+
hotfix_branch ||= previous_branch
|
97
102
|
end
|
98
103
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
merge_master = true
|
103
|
-
master_branch = @repo.branch "master"
|
104
|
-
|
105
|
-
if hotfix_branch_name.to_s.empty?
|
106
|
-
puts "!!! not currently on a hotfix branch, and no branch name was provided as an argument !!!"
|
104
|
+
if hotfix_branch.to_s.empty?
|
105
|
+
puts "!!! Not currently on a hotfix branch, and no branch name was provided as an argument !!!"
|
107
106
|
puts usage_string
|
108
107
|
exit 1
|
109
108
|
end
|
110
109
|
|
111
|
-
hotfix_branch = @repo.branch hotfix_branch_name
|
112
|
-
# TODO The next line breaks at iteration 100
|
113
|
-
development_branch = @repo.branches.select {|branch| branch.full.start_with? "release/"}.sort{|a, b| a.name <=> b.name}.last
|
114
|
-
development_branch = master_branch if development_branch == nil
|
115
|
-
live_branch = @repo.branch "live"
|
116
|
-
|
117
110
|
# Collect the set of branches we'd like to merge the hotfix into
|
118
|
-
merge_branches = [
|
119
|
-
merge_branches << master_branch if !(merge_branches.include? master_branch) && merge_master
|
111
|
+
merge_branches = ["master", current_release_branch_name, "live"]
|
120
112
|
|
121
|
-
# Merge the hotfix into
|
113
|
+
# Merge the hotfix into merge_branches
|
122
114
|
for branch in merge_branches
|
115
|
+
|
116
|
+
# Calculate merge_options
|
123
117
|
merge_options = @merge_options
|
124
118
|
merge_options += " --log" if branch == "master"
|
125
119
|
|
126
|
-
|
127
|
-
`git
|
120
|
+
# Attempt merge
|
121
|
+
`git checkout #{branch}`
|
122
|
+
`git merge #{merge_options} #{hotfix_branch}`
|
123
|
+
|
124
|
+
# Bail on failures
|
128
125
|
exit 1 if !$?.success?
|
129
|
-
raise "Merge on #{branch
|
126
|
+
raise "Merge on #{branch} has failed.\nResolve the conflicts and run the script again." if git_has_conflicts
|
127
|
+
|
128
|
+
# If we just merged the live branch, tag this revision
|
129
|
+
if branch == "live"
|
130
|
+
`git tag live/i#{live_iteration}/#{hotfix_branch}`
|
131
|
+
end
|
132
|
+
|
130
133
|
end
|
131
134
|
|
132
135
|
# Checkout previous branch for user convenience
|
@@ -177,7 +180,7 @@ class Gitscape::Base
|
|
177
180
|
# Get the right release_branch_name to merge
|
178
181
|
current_version_number = new_version_number - 1
|
179
182
|
if new_version_number == 0
|
180
|
-
current_version_number =
|
183
|
+
current_version_number = live_iteration
|
181
184
|
new_version_number = current_version_number + 1
|
182
185
|
end
|
183
186
|
release_branch_name = "release/i#{new_version_number}"
|
data/lib/gitscape/version.rb
CHANGED
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 1
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 1.
|
7
|
+
- 4
|
8
|
+
- 0
|
9
|
+
version: 1.4.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Jon Botelho
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2013-03-
|
18
|
+
date: 2013-03-28 00:00:00 -04:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|