twig 1.3 → 1.4
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/HISTORY.md +17 -1
- data/README.md +91 -20
- data/bin/twig +2 -0
- data/bin/twig-diff +38 -0
- data/bin/twig-gh-open +8 -1
- data/bin/twig-gh-open-issue +7 -1
- data/bin/twig-gh-update +9 -3
- data/bin/twig-help +1 -0
- data/bin/twig-init-completion +4 -2
- data/bin/twig-init-completion-bash +24 -5
- data/bin/twig-rebase +43 -0
- data/lib/twig/branch.rb +46 -13
- data/lib/twig/cli.rb +31 -4
- data/lib/twig/display.rb +17 -11
- data/lib/twig/github.rb +5 -1
- data/lib/twig/options.rb +32 -13
- data/lib/twig/version.rb +1 -1
- data/spec/twig/branch_spec.rb +89 -32
- data/spec/twig/cli_spec.rb +25 -7
- data/spec/twig/display_spec.rb +32 -33
- data/spec/twig/options_spec.rb +60 -12
- metadata +8 -4
data/HISTORY.md
CHANGED
@@ -1,6 +1,22 @@
|
|
1
1
|
Twig
|
2
2
|
====
|
3
3
|
|
4
|
+
1.4 (2013-08-07)
|
5
|
+
----------------
|
6
|
+
* ENHANCEMENT: Speed up listing branches by 3–4x.
|
7
|
+
* ENHANCEMENT: Add `twig diff`, which diffs the current branch against its
|
8
|
+
`diff-branch` property, and `twig diff <branch>`, which diffs the given branch
|
9
|
+
against its `diff-branch` property.
|
10
|
+
* ENHANCEMENT: Add `twig rebase`, which rebases the current branch onto the
|
11
|
+
branch in its `diff-branch` property, and `twig rebase <branch>`, which
|
12
|
+
rebases the given branch onto its `diff-branch`.
|
13
|
+
* ENHANCEMENT: Add `twig init-completion --force` for overwriting existing
|
14
|
+
completion scripts. Useful for upgrading to the latest Twig completion
|
15
|
+
scripts.
|
16
|
+
* ENHANCEMENT: Improve `twig gh-update` error reporting by listing the affected
|
17
|
+
API endpoints upon failure.
|
18
|
+
* FIX: Deprecate `~/.twigrc` in favor of `~/.twigconfig`.
|
19
|
+
|
4
20
|
1.3 (2013-05-22)
|
5
21
|
----------------
|
6
22
|
* ENHANCEMENT: Add `--branch-width` and `--<property>-width` options for setting
|
@@ -43,7 +59,7 @@ Twig
|
|
43
59
|
* FIX: Handle line breaks gracefully in `~/.twigrc` config file.
|
44
60
|
* FIX: Exit with a non-zero status when trying to get or unset a branch property
|
45
61
|
that isn't set, or trying to set a branch property to an invalid value.
|
46
|
-
* FIX
|
62
|
+
* FIX: Don't allow getting/setting/unsetting a branch property whose name is an
|
47
63
|
empty string.
|
48
64
|
|
49
65
|
1.0.1 (2013-02-13)
|
data/README.md
CHANGED
@@ -44,6 +44,7 @@ chronologically with their properties.
|
|
44
44
|
* `twig <property> <value> -b <branch>`: Set property for any branch
|
45
45
|
* `twig --unset <property> -b <branch>`: Unset property for any branch
|
46
46
|
* `twig init-completion`: Set up tab completion for `-b` and `--branch`
|
47
|
+
* `twig init-completion --force`: Update to the latest tab completion script
|
47
48
|
* `twig --help`: More info
|
48
49
|
|
49
50
|
|
@@ -131,15 +132,15 @@ Remember the order in which you were rebasing your stack of branches:
|
|
131
132
|
$ git checkout master
|
132
133
|
Switched to branch 'master'.
|
133
134
|
|
134
|
-
$ twig
|
135
|
-
Saved property "
|
135
|
+
$ twig diff-branch branch2 -b branch3
|
136
|
+
Saved property "diff-branch" as "branch2" for branch "branch3".
|
136
137
|
|
137
|
-
$ twig
|
138
|
-
Saved property "
|
138
|
+
$ twig diff-branch branch1 -b branch2
|
139
|
+
Saved property "diff-branch" as "branch1" for branch "branch2".
|
139
140
|
|
140
141
|
$ twig
|
141
142
|
|
142
|
-
|
143
|
+
diff-branch branch
|
143
144
|
----------- ------
|
144
145
|
2013-01-26 18:00:25 (7m ago) branch2 branch3
|
145
146
|
2013-01-26 16:49:47 (2h ago) branch1 branch2
|
@@ -152,17 +153,93 @@ You can set just about any custom property you need to remember for each branch.
|
|
152
153
|
Subcommands
|
153
154
|
===========
|
154
155
|
|
155
|
-
Twig
|
156
|
-
|
156
|
+
A Twig subcommand is a little script that makes use of a branch's Twig
|
157
|
+
properties. You can [write your own](#writing-a-subcommand), but here are some
|
158
|
+
subcommands that Twig comes with.
|
157
159
|
|
158
|
-
|
159
|
-
|
160
|
+
|
161
|
+
twig diff
|
162
|
+
---------
|
163
|
+
|
164
|
+
If you have a stack of branches with different parent branches, it gets tricky
|
165
|
+
to remember which branch to diff against. `twig diff` makes it easy:
|
166
|
+
|
167
|
+
$ git checkout branch2
|
168
|
+
|
169
|
+
# Remember your branch's diff branch:
|
170
|
+
$ twig diff-branch branch1
|
171
|
+
Saved property "diff-branch" as "branch1" for branch "branch2".
|
172
|
+
|
173
|
+
# Generate a diff between branch1 (the current branch) and branch2:
|
174
|
+
$ twig diff
|
175
|
+
|
176
|
+
More usage:
|
177
|
+
|
178
|
+
# Generate a diff between any given branch and its `diff-branch`:
|
179
|
+
$ twig diff my-other-branch
|
180
|
+
|
181
|
+
# Pass options through to `git diff`:
|
182
|
+
$ twig diff --stat
|
183
|
+
|
184
|
+
# Pipe results to a diff viewer:
|
185
|
+
$ twig diff | gitx
|
186
|
+
|
187
|
+
|
188
|
+
twig rebase
|
189
|
+
-----------
|
190
|
+
|
191
|
+
If you have a stack of branches that you need to rebase in the same order,
|
192
|
+
`twig rebase` simplifies the process:
|
193
|
+
|
194
|
+
$ git checkout branch2
|
195
|
+
|
196
|
+
# Remember your branches' diff (parent) branches:
|
197
|
+
$ twig diff-branch branch1
|
198
|
+
Saved property "diff-branch" as "branch1" for branch "branch2".
|
199
|
+
|
200
|
+
# Rebase branch2 (the current branch) onto branch1:
|
201
|
+
$ twig rebase
|
202
|
+
Rebase "branch2" onto "development"? (y/n)
|
203
|
+
|
204
|
+
More usage:
|
205
|
+
|
206
|
+
# Rebase any given branch onto its `diff-branch`:
|
207
|
+
$ twig rebase my-other-branch
|
208
|
+
|
209
|
+
# Pass options through to `git rebase`:
|
210
|
+
$ twig rebase -i
|
211
|
+
|
212
|
+
|
213
|
+
twig gh-open
|
214
|
+
------------
|
215
|
+
|
216
|
+
While inside a GitHub repo, run `twig gh-open` to see the repo's GitHub URL, and
|
217
|
+
open a browser window if possible:
|
160
218
|
|
161
219
|
$ cd myproject
|
162
220
|
|
163
221
|
$ twig gh-open
|
164
222
|
GitHub URL: https://github.com/myname/myproject
|
165
223
|
|
224
|
+
|
225
|
+
twig gh-open-issue
|
226
|
+
------------------
|
227
|
+
|
228
|
+
For any branch that has an `issue` property, you can use the `gh-open-issue`
|
229
|
+
subcommand to view that issue on GitHub:
|
230
|
+
|
231
|
+
# Current branch:
|
232
|
+
$ twig gh-open-issue
|
233
|
+
GitHub issue URL: https://github.com/myname/myproject/issues/111
|
234
|
+
|
235
|
+
# Any branch:
|
236
|
+
$ twig gh-open-issue -b <branch name>
|
237
|
+
GitHub issue URL: https://github.com/myname/myproject/issues/222
|
238
|
+
|
239
|
+
|
240
|
+
twig gh-update
|
241
|
+
--------------
|
242
|
+
|
166
243
|
If you're working on an issue for a GitHub repository, the `gh-update`
|
167
244
|
subcommand syncs issue statuses with GitHub:
|
168
245
|
|
@@ -181,6 +258,7 @@ subcommand syncs issue statuses with GitHub:
|
|
181
258
|
2013-01-22 17:12:23 (4d ago) - - master
|
182
259
|
|
183
260
|
$ twig gh-update
|
261
|
+
Getting latest states for GitHub issues...
|
184
262
|
# Automatically looks up the GitHub issue status for each
|
185
263
|
# of your local branches, and saves it locally.
|
186
264
|
|
@@ -194,16 +272,9 @@ subcommand syncs issue statuses with GitHub:
|
|
194
272
|
|
195
273
|
Run `twig gh-update` periodically to keep up with GitHub issues locally.
|
196
274
|
|
197
|
-
For any branch that has an `issue` property, you can use the `gh-open-issue`
|
198
|
-
subcommand to view that issue on GitHub:
|
199
275
|
|
200
|
-
|
201
|
-
|
202
|
-
GitHub issue URL: https://github.com/myname/myproject/issues/111
|
203
|
-
|
204
|
-
# Any branch:
|
205
|
-
$ twig gh-open-issue -b <branch name>
|
206
|
-
GitHub issue URL: https://github.com/myname/myproject/issues/222
|
276
|
+
Writing a subcommand
|
277
|
+
--------------------
|
207
278
|
|
208
279
|
You can write any Twig subcommand that fits your own Git workflow. To write a
|
209
280
|
Twig subcommand:
|
@@ -231,8 +302,8 @@ Some ideas for subcommands:
|
|
231
302
|
emailing your team about what you're up to.
|
232
303
|
* Create a gem that contains your team's favorite custom Twig subcommands.
|
233
304
|
|
234
|
-
If you write a subcommand that others
|
235
|
-
it to the [Twig wiki][wiki]!
|
305
|
+
If you write a subcommand that others might appreciate, send a pull request or
|
306
|
+
add it to the [Twig wiki][wiki]!
|
236
307
|
|
237
308
|
|
238
309
|
More info
|
data/bin/twig
CHANGED
data/bin/twig-diff
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# Summary:
|
4
|
+
#
|
5
|
+
# `twig diff [<branch>] [<options>]`
|
6
|
+
#
|
7
|
+
# Usage:
|
8
|
+
#
|
9
|
+
# - `twig diff`:
|
10
|
+
# Shows the diff between the current branch and its `diff-branch` property.
|
11
|
+
#
|
12
|
+
# - `twig diff <options>`:
|
13
|
+
# Shows the diff between the current branch and its `diff-branch`, and passes
|
14
|
+
# options through to `git-diff`, e.g., `twig diff --stat`.
|
15
|
+
#
|
16
|
+
# - `twig diff <branch>`:
|
17
|
+
# Shows the diff between the given branch and its `diff-branch` property.
|
18
|
+
#
|
19
|
+
# - `twig diff <branch> <options>`:
|
20
|
+
# Shows the diff between the given branch and its `diff-branch`, and passes
|
21
|
+
# options through to `git-diff`, e.g., `twig diff my_branch --stat`.
|
22
|
+
#
|
23
|
+
# Subcommand for Twig: <http://rondevera.github.io/twig/>
|
24
|
+
# Author: Ron DeVera <http://rondevera.com>
|
25
|
+
|
26
|
+
args = ARGV.dup
|
27
|
+
|
28
|
+
branch_given = args.any? && args.first[0, 1] != '-'
|
29
|
+
topic_branch = args.shift.strip if branch_given # Use given branch
|
30
|
+
topic_branch ||= `git rev-parse --abbrev-ref HEAD`.strip # Use current branch
|
31
|
+
|
32
|
+
diff_branch = `twig diff-branch -b "#{topic_branch}"`.strip
|
33
|
+
diff_options = args.join(' ') # Pass remaining options to `git-diff`
|
34
|
+
|
35
|
+
abort if diff_branch.empty?
|
36
|
+
|
37
|
+
puts %{Getting diff of "#{topic_branch}" against "#{diff_branch}"...}
|
38
|
+
exec %{git diff "#{diff_branch}" "#{topic_branch}" #{diff_options}}
|
data/bin/twig-gh-open
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
# Opens a browser window for the current GitHub repo.
|
4
4
|
#
|
5
|
+
# Subcommand for Twig: <http://rondevera.github.io/twig/>
|
5
6
|
# Author: Ron DeVera <http://rondevera.com>
|
6
7
|
|
7
8
|
require 'rubygems'
|
@@ -9,7 +10,13 @@ require 'twig'
|
|
9
10
|
require 'launchy'
|
10
11
|
|
11
12
|
Twig::GithubRepo.new do |gh_repo|
|
12
|
-
|
13
|
+
twig = Twig.new
|
14
|
+
twig.read_config_file!
|
15
|
+
twig.read_cli_options!(ARGV)
|
16
|
+
|
17
|
+
gh_uri_prefix = twig.options[:github_uri_prefix] || 'https://github.com'
|
18
|
+
url = "#{gh_uri_prefix}/#{gh_repo.username}/#{gh_repo.repository}"
|
19
|
+
|
13
20
|
puts "GitHub URL: #{url}"
|
14
21
|
Launchy.open(url) rescue nil
|
15
22
|
end
|
data/bin/twig-gh-open-issue
CHANGED
@@ -1,11 +1,14 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
# Usage:
|
4
|
+
#
|
4
5
|
# - `twig gh-open-issue`:
|
5
6
|
# Opens a browser window for the GitHub issue, if any, for the current branch.
|
7
|
+
#
|
6
8
|
# - `twig gh-open-issue -b <branch>`:
|
7
9
|
# Opens the GitHub issue, if any, for the specified branch.
|
8
10
|
#
|
11
|
+
# Subcommand for Twig: <http://rondevera.github.io/twig/>
|
9
12
|
# Author: Ron DeVera <http://rondevera.com>
|
10
13
|
|
11
14
|
require 'rubygems'
|
@@ -14,7 +17,9 @@ require 'launchy'
|
|
14
17
|
|
15
18
|
Twig::GithubRepo.new do |gh_repo|
|
16
19
|
twig = Twig.new
|
20
|
+
twig.read_config_file!
|
17
21
|
twig.read_cli_options!(ARGV)
|
22
|
+
|
18
23
|
branch_name = twig.options[:branch] || twig.current_branch_name
|
19
24
|
issue_id = twig.get_branch_property(branch_name, 'issue')
|
20
25
|
|
@@ -22,7 +27,8 @@ Twig::GithubRepo.new do |gh_repo|
|
|
22
27
|
abort %{The branch "#{branch_name}" doesn't have an "issue" property.}
|
23
28
|
end
|
24
29
|
|
25
|
-
|
30
|
+
gh_uri_prefix = twig.options[:github_uri_prefix] || 'https://github.com'
|
31
|
+
url = "#{gh_uri_prefix}/#{gh_repo.username}/#{gh_repo.repository}"
|
26
32
|
url << "/issues/#{issue_id}"
|
27
33
|
|
28
34
|
puts "GitHub issue URL: #{url}"
|
data/bin/twig-gh-update
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
# Updates each branch with the latest issue status on GitHub.
|
4
4
|
#
|
5
|
+
# Subcommand for Twig: <http://rondevera.github.io/twig/>
|
5
6
|
# Author: Ron DeVera <http://rondevera.com>
|
6
7
|
|
7
8
|
require File.join(File.dirname(__FILE__), '..', 'lib', 'twig')
|
@@ -19,14 +20,18 @@ Twig::GithubRepo.new do |gh_repo|
|
|
19
20
|
print 'Getting latest states for GitHub issues...'
|
20
21
|
|
21
22
|
issues = {}
|
23
|
+
issues_uri_prefix = twig.options[:github_api_uri_prefix] || 'https://api.github.com'
|
22
24
|
issues_uri_base =
|
23
|
-
"
|
25
|
+
"#{issues_uri_prefix}/repos/#{gh_repo.username}/#{gh_repo.repository}/issues"
|
24
26
|
issues_uris = [
|
25
27
|
URI.parse("#{issues_uri_base}?state=open"),
|
26
28
|
URI.parse("#{issues_uri_base}?state=closed")
|
27
29
|
]
|
28
30
|
user_agent = "Twig/#{Twig::VERSION} (for Git; <#{Twig::HOMEPAGE}>)"
|
29
31
|
|
32
|
+
error = "\n\nERROR: Couldn't get open issues from GitHub." <<
|
33
|
+
"\n- API endpoints: " << issues_uris.map { |uri| "<#{uri}>" }.join(', ')
|
34
|
+
|
30
35
|
begin
|
31
36
|
issues_uris.each do |issues_uri|
|
32
37
|
http = Net::HTTP.new(issues_uri.host, issues_uri.port)
|
@@ -44,10 +49,11 @@ Twig::GithubRepo.new do |gh_repo|
|
|
44
49
|
issues[issue_data['number']] = issue_data
|
45
50
|
end
|
46
51
|
else
|
47
|
-
abort "\
|
48
|
-
"(Response: #{response.code})"
|
52
|
+
abort error + "\n- Response: #{response.code}"
|
49
53
|
end
|
50
54
|
end
|
55
|
+
rescue OpenSSL::SSL::SSLError => exception
|
56
|
+
abort error
|
51
57
|
end
|
52
58
|
|
53
59
|
twig.branches.each do |branch|
|
data/bin/twig-help
CHANGED
data/bin/twig-init-completion
CHANGED
@@ -3,9 +3,11 @@
|
|
3
3
|
# Initializes tab completion for Twig. To use this, run
|
4
4
|
# `twig init-completion` and follow the instructions.
|
5
5
|
#
|
6
|
+
# Subcommand for Twig: <http://rondevera.github.io/twig/>
|
6
7
|
# Author: Ron DeVera <http://rondevera.com>
|
7
8
|
|
8
|
-
|
9
|
+
args = ARGV.dup
|
10
|
+
debug = args.delete('--debug')
|
9
11
|
bash_version = `bash -c 'echo $BASH_VERSION'`.strip
|
10
12
|
|
11
13
|
if debug
|
@@ -13,5 +15,5 @@ if debug
|
|
13
15
|
puts "- bash_version: #{bash_version.inspect}"
|
14
16
|
end
|
15
17
|
|
16
|
-
exec('twig-init-completion-bash') if bash_version != ''
|
18
|
+
exec('twig-init-completion-bash ' + args.join(' ')) if bash_version != ''
|
17
19
|
abort 'Could not initialize Twig tab completion for this shell.'
|
@@ -3,6 +3,7 @@
|
|
3
3
|
# Initializes bash tab completion for Twig. To use this, run
|
4
4
|
# `twig init-completion` and follow the instructions.
|
5
5
|
#
|
6
|
+
# Subcommand for Twig: <http://rondevera.github.io/twig/>
|
6
7
|
# Author: Ron DeVera <http://rondevera.com>
|
7
8
|
|
8
9
|
require 'fileutils'
|
@@ -12,17 +13,19 @@ script = <<-SCRIPT
|
|
12
13
|
|
13
14
|
#!/usr/bin/env bash
|
14
15
|
|
15
|
-
# AUTO-GENERATED with Twig v#{version}. Regenerate with
|
16
|
+
# AUTO-GENERATED with Twig v#{version}. Regenerate with
|
17
|
+
# `twig init-completion --force`.
|
16
18
|
#
|
17
19
|
# Initializes bash tab completion for Twig. To use this, run
|
18
20
|
# `twig init-completion` and follow the instructions.
|
19
21
|
#
|
22
|
+
# Twig: <http://rondevera.github.io/twig/>
|
20
23
|
# Author: Ron DeVera <http://rondevera.com>
|
21
24
|
|
22
25
|
__twig_branches() {
|
23
26
|
local current words
|
24
27
|
current="${COMP_WORDS[COMP_CWORD]}"
|
25
|
-
words="$(git for-each-ref refs/heads/ --format="%(refname:short)" | tr '
|
28
|
+
words="$(git for-each-ref refs/heads/ --format="%(refname:short)" | tr '\\n' ' ')"
|
26
29
|
COMPREPLY=($(compgen -W "$words" -- "$current"))
|
27
30
|
return 0
|
28
31
|
}
|
@@ -36,6 +39,9 @@ __twig() {
|
|
36
39
|
|
37
40
|
case "${previous}" in
|
38
41
|
-b|--branch) __twig_branches ;;
|
42
|
+
diff) __twig_branches ;;
|
43
|
+
diff-branch) __twig_branches ;;
|
44
|
+
rebase) __twig_branches ;;
|
39
45
|
esac
|
40
46
|
|
41
47
|
return 0
|
@@ -48,16 +54,29 @@ script = script.strip + "\n"
|
|
48
54
|
|
49
55
|
|
50
56
|
|
57
|
+
args = ARGV.dup
|
58
|
+
force = args.delete('--force')
|
59
|
+
|
51
60
|
twig_dir = '~/.twig'
|
52
61
|
FileUtils.mkdir_p(File.expand_path(twig_dir))
|
53
62
|
|
54
|
-
script_path
|
63
|
+
script_path = File.join(twig_dir, '/twig-completion.bash')
|
55
64
|
full_script_path = File.expand_path(script_path)
|
56
|
-
|
65
|
+
script_exists = File.exists?(full_script_path)
|
66
|
+
|
67
|
+
if script_exists && !force
|
68
|
+
puts "The file `#{script_path}` already exists."
|
69
|
+
puts "To overwrite it, run `twig init-completion --force`."
|
70
|
+
else
|
57
71
|
File.open(full_script_path, 'w') do |file|
|
58
72
|
file.write script
|
59
73
|
end
|
60
|
-
|
74
|
+
|
75
|
+
if script_exists
|
76
|
+
puts "Overwrote #{script_path}."
|
77
|
+
else
|
78
|
+
puts "Created #{script_path}."
|
79
|
+
end
|
61
80
|
end
|
62
81
|
|
63
82
|
puts
|
data/bin/twig-rebase
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# Summary:
|
4
|
+
#
|
5
|
+
# `twig rebase [<branch>] [<options>]`
|
6
|
+
#
|
7
|
+
# Usage:
|
8
|
+
#
|
9
|
+
# - `twig rebase`:
|
10
|
+
# Rebases the current branch onto the branch in its `diff-branch` property.
|
11
|
+
#
|
12
|
+
# - `twig rebase <options>`:
|
13
|
+
# Rebases the current branch onto its `diff-branch`, and passes options
|
14
|
+
# through to `git-rebase`, e.g., `twig rebase -i`.
|
15
|
+
#
|
16
|
+
# - `twig rebase <branch>`:
|
17
|
+
# Rebases the given branch onto its `diff-branch`.
|
18
|
+
#
|
19
|
+
# - `twig rebase <branch> <options>`:
|
20
|
+
# Rebases the given branch and its `diff-branch`, and passes options
|
21
|
+
# through to `git-rebase`, e.g., `twig rebase my_branch -i`.
|
22
|
+
#
|
23
|
+
# Subcommand for Twig: <http://rondevera.github.io/twig/>
|
24
|
+
# Author: Ron DeVera <http://rondevera.com>
|
25
|
+
|
26
|
+
args = ARGV.dup
|
27
|
+
|
28
|
+
branch_given = args.any? && args.first[0, 1] != '-'
|
29
|
+
topic_branch = args.shift.strip if branch_given # Use given branch
|
30
|
+
topic_branch ||= `git rev-parse --abbrev-ref HEAD`.strip # Use current branch
|
31
|
+
|
32
|
+
base_branch = `twig diff-branch -b "#{topic_branch}"`.strip
|
33
|
+
rebase_options = args.join(' ') # Pass remaining options to `git-rebase`
|
34
|
+
|
35
|
+
abort if base_branch.empty?
|
36
|
+
|
37
|
+
print %{Rebase "#{topic_branch}" onto "#{base_branch}"? (y/n) }
|
38
|
+
input = STDIN.gets.strip.downcase
|
39
|
+
if input == 'y' || input == 'yes'
|
40
|
+
exec %{git rebase #{rebase_options} "#{base_branch}" "#{topic_branch}"}
|
41
|
+
else
|
42
|
+
puts 'Cancelled.'
|
43
|
+
end
|