twig 1.5 → 1.6
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.
- checksums.yaml +7 -0
- data/.gitignore +2 -0
- data/.travis.yml +2 -0
- data/CONTRIBUTING.md +5 -3
- data/HISTORY.md +23 -0
- data/LICENSE.md +1 -1
- data/README.md +98 -12
- data/bin/twig +1 -0
- data/bin/twig-checkout-child +50 -0
- data/bin/twig-checkout-parent +35 -0
- data/bin/twig-create-branch +24 -0
- data/bin/twig-diff +15 -12
- data/bin/twig-gh-open +14 -5
- data/bin/twig-gh-open-issue +19 -12
- data/bin/twig-gh-update +14 -4
- data/bin/twig-init +15 -0
- data/bin/twig-init-completion +14 -2
- data/bin/twig-init-completion-bash +11 -3
- data/bin/twig-rebase +15 -12
- data/lib/twig.rb +40 -20
- data/lib/twig/branch.rb +34 -13
- data/lib/twig/cli.rb +52 -9
- data/lib/twig/commit_time.rb +1 -1
- data/lib/twig/display.rb +6 -8
- data/lib/twig/options.rb +25 -24
- data/lib/twig/version.rb +1 -1
- data/spec/spec_helper.rb +1 -0
- data/spec/twig/branch_spec.rb +85 -6
- data/spec/twig/cli_spec.rb +90 -35
- data/spec/twig/commit_time_spec.rb +4 -0
- data/spec/twig/display_spec.rb +57 -7
- data/spec/twig/options_spec.rb +33 -16
- data/spec/twig_spec.rb +53 -50
- data/twig.gemspec +17 -10
- metadata +32 -48
data/bin/twig-gh-open-issue
CHANGED
@@ -1,12 +1,22 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
#
|
3
|
+
# Synopsis:
|
4
4
|
#
|
5
|
-
#
|
6
|
-
# Opens a browser window for the GitHub issue, if any, for the current branch.
|
5
|
+
# twig gh-open-issue [-b|--branch <branch>]
|
7
6
|
#
|
8
|
-
#
|
9
|
-
#
|
7
|
+
# Description:
|
8
|
+
#
|
9
|
+
# Opens a browser window the GitHub issue, if any, for the current branch.
|
10
|
+
#
|
11
|
+
# To customize the GitHub URI prefix (e.g., for GitHub Enterprise
|
12
|
+
# installations), set GitHub options in `~/.twigconfig`:
|
13
|
+
#
|
14
|
+
# github-uri-prefix: http://example-enterprise.github.com
|
15
|
+
# github-api-uri-prefix: http://example-enterprise.github.com
|
16
|
+
#
|
17
|
+
# Options:
|
18
|
+
#
|
19
|
+
# `-b` or `--branch`: Opens the GitHub issue, if any, for the given branch.
|
10
20
|
#
|
11
21
|
# Subcommand for Twig: <http://rondevera.github.io/twig/>
|
12
22
|
# Author: Ron DeVera <http://rondevera.com>
|
@@ -16,15 +26,12 @@ require 'twig'
|
|
16
26
|
require 'launchy'
|
17
27
|
|
18
28
|
Twig::GithubRepo.new do |gh_repo|
|
19
|
-
twig = Twig.new
|
20
|
-
twig.
|
21
|
-
twig.
|
22
|
-
|
23
|
-
branch_name = twig.options[:branch] || twig.current_branch_name
|
24
|
-
issue_id = twig.get_branch_property(branch_name, 'issue')
|
29
|
+
twig = Twig.new(:read_options => true)
|
30
|
+
target_branch_name = twig.target_branch_name
|
31
|
+
issue_id = twig.get_branch_property(target_branch_name, 'issue')
|
25
32
|
|
26
33
|
unless issue_id
|
27
|
-
abort %{The branch "#{
|
34
|
+
abort %{The branch "#{target_branch_name}" doesn't have an "issue" property.}
|
28
35
|
end
|
29
36
|
|
30
37
|
gh_uri_prefix = twig.options[:github_uri_prefix]
|
data/bin/twig-gh-update
CHANGED
@@ -1,6 +1,18 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
#
|
3
|
+
# Synopsis:
|
4
|
+
#
|
5
|
+
# twig gh-update
|
6
|
+
#
|
7
|
+
# Description:
|
8
|
+
#
|
9
|
+
# Updates each branch with the latest issue status on GitHub.
|
10
|
+
#
|
11
|
+
# To customize the GitHub URI prefix (e.g., for GitHub Enterprise
|
12
|
+
# installations), set GitHub options in `~/.twigconfig`:
|
13
|
+
#
|
14
|
+
# github-uri-prefix: http://example-enterprise.github.com
|
15
|
+
# github-api-uri-prefix: http://example-enterprise.github.com
|
4
16
|
#
|
5
17
|
# Subcommand for Twig: <http://rondevera.github.io/twig/>
|
6
18
|
# Author: Ron DeVera <http://rondevera.com>
|
@@ -11,9 +23,7 @@ require 'json'
|
|
11
23
|
require 'net/https'
|
12
24
|
require 'uri'
|
13
25
|
|
14
|
-
twig = Twig.new
|
15
|
-
twig.read_config_file!
|
16
|
-
twig.read_cli_options!(ARGV)
|
26
|
+
twig = Twig.new(:read_options => true)
|
17
27
|
|
18
28
|
Twig::GithubRepo.new do |gh_repo|
|
19
29
|
$stdout.sync = true
|
data/bin/twig-init
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# Synopsis:
|
4
|
+
#
|
5
|
+
# twig init
|
6
|
+
#
|
7
|
+
# Description:
|
8
|
+
#
|
9
|
+
# Runs all initialization commands. This is only needed once after installing
|
10
|
+
# Twig, and affects all Git repositories.
|
11
|
+
#
|
12
|
+
# Subcommand for Twig: <http://rondevera.github.io/twig/>
|
13
|
+
# Author: Ron DeVera <http://rondevera.com>
|
14
|
+
|
15
|
+
exec('twig init-completion')
|
data/bin/twig-init-completion
CHANGED
@@ -1,7 +1,19 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
#
|
4
|
-
#
|
3
|
+
# Synopsis:
|
4
|
+
#
|
5
|
+
# twig init-completion [--force]
|
6
|
+
#
|
7
|
+
# Description:
|
8
|
+
#
|
9
|
+
# Initializes tab completion for Twig. Instead of running this directly,
|
10
|
+
# run `twig init` to run all setup tasks.
|
11
|
+
#
|
12
|
+
# Options:
|
13
|
+
#
|
14
|
+
# `--force`: By default, `twig init-completion` preserves the existing tab
|
15
|
+
# completion script, if any. If this option is used, the command will
|
16
|
+
# overwrite any existing tab completion script.
|
5
17
|
#
|
6
18
|
# Subcommand for Twig: <http://rondevera.github.io/twig/>
|
7
19
|
# Author: Ron DeVera <http://rondevera.com>
|
@@ -1,7 +1,14 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
#
|
4
|
-
#
|
3
|
+
# Synopsis:
|
4
|
+
#
|
5
|
+
# twig init-completion-bash
|
6
|
+
#
|
7
|
+
# Description:
|
8
|
+
#
|
9
|
+
# Initializes bash tab completion for Twig. Instead of running this directly,
|
10
|
+
# run `twig init` to run all setup tasks for the current shell. Uses all
|
11
|
+
# options available for `twig init-completion`.
|
5
12
|
#
|
6
13
|
# Subcommand for Twig: <http://rondevera.github.io/twig/>
|
7
14
|
# Author: Ron DeVera <http://rondevera.com>
|
@@ -84,7 +91,8 @@ full_script_path = File.expand_path(script_path)
|
|
84
91
|
script_exists = File.exists?(full_script_path)
|
85
92
|
|
86
93
|
if script_exists && !force
|
87
|
-
|
94
|
+
twig = Twig.new
|
95
|
+
puts twig.format_string("The file `#{script_path}` already exists.", :color => :red)
|
88
96
|
puts "To overwrite it, run `twig init-completion --force`."
|
89
97
|
else
|
90
98
|
File.open(full_script_path, 'w') do |file|
|
data/bin/twig-rebase
CHANGED
@@ -1,24 +1,27 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
#
|
3
|
+
# Synopsis:
|
4
4
|
#
|
5
|
-
#
|
5
|
+
# twig rebase [<branch>] [<options>]
|
6
6
|
#
|
7
|
-
#
|
7
|
+
# Description:
|
8
8
|
#
|
9
|
-
# - `twig rebase`:
|
10
9
|
# Rebases the current branch onto the branch in its `diff-branch` property.
|
10
|
+
# All options are passed through to `git-rebase`.
|
11
11
|
#
|
12
|
-
#
|
13
|
-
# Rebases the current branch onto its `diff-branch`, and passes options
|
14
|
-
# through to `git-rebase`, e.g., `twig rebase -i`.
|
12
|
+
# Examples:
|
15
13
|
#
|
16
|
-
#
|
17
|
-
# Rebases the given branch onto its `diff-branch`.
|
14
|
+
# Rebase the current branch onto its `diff-branch` interactively:
|
18
15
|
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
16
|
+
# twig rebase -i
|
17
|
+
#
|
18
|
+
# Rebase the given branch onto its `diff-branch`:
|
19
|
+
#
|
20
|
+
# twig rebase my_branch
|
21
|
+
#
|
22
|
+
# Rebase the given branch onto its `diff-branch` interactively:
|
23
|
+
#
|
24
|
+
# twig rebase my_branch -i
|
22
25
|
#
|
23
26
|
# Subcommand for Twig: <http://rondevera.github.io/twig/>
|
24
27
|
# Author: Ron DeVera <http://rondevera.com>
|
data/lib/twig.rb
CHANGED
@@ -1,4 +1,15 @@
|
|
1
|
-
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__)) # For gem development
|
2
|
+
require 'twig/branch'
|
3
|
+
require 'twig/cli'
|
4
|
+
require 'twig/commit_time'
|
5
|
+
require 'twig/display'
|
6
|
+
require 'twig/github'
|
7
|
+
require 'twig/homepage'
|
8
|
+
require 'twig/options'
|
9
|
+
require 'twig/subcommands'
|
10
|
+
require 'twig/system'
|
11
|
+
require 'twig/util'
|
12
|
+
require 'twig/version'
|
2
13
|
require 'time'
|
3
14
|
|
4
15
|
# The main class.
|
@@ -26,37 +37,32 @@ class Twig
|
|
26
37
|
$?.success?
|
27
38
|
end
|
28
39
|
|
29
|
-
def initialize
|
40
|
+
def initialize(options = {})
|
30
41
|
self.options = {}
|
31
42
|
|
32
43
|
# Set defaults
|
33
44
|
set_option(:github_api_uri_prefix, DEFAULT_GITHUB_API_URI_PREFIX)
|
34
45
|
set_option(:github_uri_prefix, DEFAULT_GITHUB_URI_PREFIX)
|
35
46
|
set_option(:header_style, DEFAULT_HEADER_COLOR.to_s)
|
47
|
+
|
48
|
+
if options[:read_options]
|
49
|
+
read_config_file!
|
50
|
+
read_cli_options!(ARGV)
|
51
|
+
end
|
36
52
|
end
|
37
53
|
|
38
54
|
def current_branch_name
|
55
|
+
# Returns the name of the branch that is currently checked out in Git.
|
39
56
|
@_current_branch_name ||= Twig.run('git rev-parse --abbrev-ref HEAD')
|
40
57
|
end
|
41
58
|
|
42
|
-
def
|
43
|
-
|
44
|
-
|
45
|
-
run(%{git for-each-ref #{ REF_PREFIX } --format="#{ REF_FORMAT }"}).
|
46
|
-
split("\n")
|
47
|
-
|
48
|
-
branch_tuples.inject([]) do |result, branch_tuple|
|
49
|
-
ref, time_string, time_ago = branch_tuple.split(REF_FORMAT_SEPARATOR)
|
50
|
-
time = Time.parse(time_string)
|
51
|
-
commit_time = Twig::CommitTime.new(time, time_ago)
|
52
|
-
branch = Branch.new(ref, :last_commit_time => commit_time)
|
53
|
-
result << branch
|
54
|
-
end
|
55
|
-
end
|
59
|
+
def target_branch_name
|
60
|
+
# Returns the name of the branch to work on, e.g., for setting a property.
|
61
|
+
options[:branch] || current_branch_name
|
56
62
|
end
|
57
63
|
|
58
64
|
def branches
|
59
|
-
branches = all_branches
|
65
|
+
branches = Twig::Branch.all_branches
|
60
66
|
now = Time.now
|
61
67
|
max_days_old = options[:max_days_old]
|
62
68
|
max_seconds_old = max_days_old * 86400 if max_days_old
|
@@ -99,8 +105,22 @@ class Twig
|
|
99
105
|
branches
|
100
106
|
end
|
101
107
|
|
102
|
-
def
|
103
|
-
|
108
|
+
def property_names
|
109
|
+
@_property_names ||= begin
|
110
|
+
property_names = Twig::Branch.all_property_names
|
111
|
+
only_name = options[:property_only_name]
|
112
|
+
except_name = options[:property_except_name]
|
113
|
+
|
114
|
+
if only_name
|
115
|
+
property_names = property_names.select { |name| name =~ only_name }
|
116
|
+
end
|
117
|
+
|
118
|
+
if except_name
|
119
|
+
property_names = property_names.select { |name| name !~ except_name }
|
120
|
+
end
|
121
|
+
|
122
|
+
property_names
|
123
|
+
end
|
104
124
|
end
|
105
125
|
|
106
126
|
|
@@ -109,7 +129,7 @@ class Twig
|
|
109
129
|
|
110
130
|
def list_branches
|
111
131
|
if branches.empty?
|
112
|
-
if all_branches.any?
|
132
|
+
if Twig::Branch.all_branches.any?
|
113
133
|
return 'There are no branches matching your selected options.'
|
114
134
|
else
|
115
135
|
return 'This repository has no branches.'
|
data/lib/twig/branch.rb
CHANGED
@@ -5,7 +5,7 @@ class Twig
|
|
5
5
|
|
6
6
|
EMPTY_PROPERTY_NAME_ERROR = 'Branch property names cannot be empty strings.'
|
7
7
|
PROPERTY_NAME_FROM_GIT_CONFIG = /^branch\.[^.]+\.([^=]+)=.*$/
|
8
|
-
RESERVED_BRANCH_PROPERTY_NAMES = %w[branch merge rebase remote]
|
8
|
+
RESERVED_BRANCH_PROPERTY_NAMES = %w[branch merge property rebase remote]
|
9
9
|
|
10
10
|
class EmptyPropertyNameError < ArgumentError
|
11
11
|
def initialize(message = nil)
|
@@ -17,14 +17,34 @@ class Twig
|
|
17
17
|
|
18
18
|
attr_accessor :name, :last_commit_time
|
19
19
|
|
20
|
+
def self.all_branches
|
21
|
+
@_all_branches ||= begin
|
22
|
+
branch_tuples = Twig.
|
23
|
+
run(%{git for-each-ref #{ REF_PREFIX } --format="#{ REF_FORMAT }"}).
|
24
|
+
split("\n")
|
25
|
+
|
26
|
+
branch_tuples.inject([]) do |result, branch_tuple|
|
27
|
+
name, time_string, time_ago = branch_tuple.split(REF_FORMAT_SEPARATOR)
|
28
|
+
time = Time.parse(time_string)
|
29
|
+
commit_time = Twig::CommitTime.new(time, time_ago)
|
30
|
+
branch = Branch.new(name, :last_commit_time => commit_time)
|
31
|
+
result << branch
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.all_branch_names
|
37
|
+
@_all_branch_names ||= self.all_branches.map { |branch| branch.name }
|
38
|
+
end
|
39
|
+
|
20
40
|
def self.all_property_names
|
21
41
|
@_all_property_names ||= begin
|
22
42
|
config_lines = Twig.run('git config --list').split("\n")
|
23
43
|
|
24
44
|
properties = config_lines.map do |line|
|
25
|
-
# Split by rightmost `=`, allowing branch names to contain
|
26
|
-
|
27
|
-
|
45
|
+
# Split by rightmost `=`, allowing branch names to contain `=`
|
46
|
+
match_data = line.match(/(.+)=(.+)/)
|
47
|
+
key, value = match_data[1..2] if match_data
|
28
48
|
next unless key
|
29
49
|
|
30
50
|
key_parts = key.split('.')
|
@@ -35,6 +55,10 @@ class Twig
|
|
35
55
|
end
|
36
56
|
end
|
37
57
|
|
58
|
+
def self.validate_property_name(property_name)
|
59
|
+
raise EmptyPropertyNameError if property_name.empty?
|
60
|
+
end
|
61
|
+
|
38
62
|
def initialize(name, attrs = {})
|
39
63
|
self.name = name
|
40
64
|
raise ArgumentError, '`name` is required' if name.empty?
|
@@ -44,13 +68,11 @@ class Twig
|
|
44
68
|
|
45
69
|
def to_s ; name ; end
|
46
70
|
|
47
|
-
def to_hash
|
48
|
-
all_property_names = Twig::Branch.all_property_names
|
49
|
-
|
71
|
+
def to_hash(property_names)
|
50
72
|
{
|
51
73
|
'name' => name,
|
52
74
|
'last-commit-time' => last_commit_time.iso8601,
|
53
|
-
'properties' => get_properties(
|
75
|
+
'properties' => get_properties(property_names)
|
54
76
|
}
|
55
77
|
end
|
56
78
|
|
@@ -61,7 +83,7 @@ class Twig
|
|
61
83
|
def escaped_property_names(property_names)
|
62
84
|
property_names.map do |property_name|
|
63
85
|
property_name = sanitize_property(property_name)
|
64
|
-
|
86
|
+
Branch.validate_property_name(property_name)
|
65
87
|
Regexp.escape(property_name)
|
66
88
|
end
|
67
89
|
end
|
@@ -103,10 +125,9 @@ class Twig
|
|
103
125
|
def set_property(property_name, value)
|
104
126
|
property_name = sanitize_property(property_name)
|
105
127
|
value = value.to_s.strip
|
128
|
+
Branch.validate_property_name(property_name)
|
106
129
|
|
107
|
-
if
|
108
|
-
raise EmptyPropertyNameError
|
109
|
-
elsif RESERVED_BRANCH_PROPERTY_NAMES.include?(property_name)
|
130
|
+
if RESERVED_BRANCH_PROPERTY_NAMES.include?(property_name)
|
110
131
|
raise ArgumentError,
|
111
132
|
%{Can't modify the reserved property "#{property_name}".}
|
112
133
|
elsif value.empty?
|
@@ -126,7 +147,7 @@ class Twig
|
|
126
147
|
|
127
148
|
def unset_property(property_name)
|
128
149
|
property_name = sanitize_property(property_name)
|
129
|
-
|
150
|
+
Branch.validate_property_name(property_name)
|
130
151
|
|
131
152
|
value = get_property(property_name)
|
132
153
|
|
data/lib/twig/cli.rb
CHANGED
@@ -4,13 +4,33 @@ require 'rbconfig'
|
|
4
4
|
class Twig
|
5
5
|
module Cli
|
6
6
|
|
7
|
+
def self.prompt_with_choices(prompt, choices)
|
8
|
+
# Prints the given string `prompt` and the array `choices` numbered, and
|
9
|
+
# prompts the user to enter a number. Returns the matching value, or nil
|
10
|
+
# if the user input is invalid.
|
11
|
+
|
12
|
+
if choices.size < 2
|
13
|
+
raise ArgumentError, 'At least two choices required'
|
14
|
+
end
|
15
|
+
|
16
|
+
puts prompt
|
17
|
+
choices.each_with_index do |choice, index|
|
18
|
+
puts "#{sprintf('%3s', index + 1)}. #{choice}"
|
19
|
+
end
|
20
|
+
print '> '
|
21
|
+
|
22
|
+
input = $stdin.gets.to_i
|
23
|
+
choices[input - 1]
|
24
|
+
end
|
25
|
+
|
7
26
|
def help_intro
|
8
27
|
version_string = "Twig v#{Twig::VERSION}"
|
9
28
|
|
10
29
|
intro = help_paragraph(%{
|
11
|
-
Twig is your personal Git branch assistant. It
|
12
|
-
recent branches, and
|
13
|
-
for
|
30
|
+
Twig is your personal Git branch assistant. It's a command-line tool for
|
31
|
+
listing your most recent branches, and for remembering branch details
|
32
|
+
for you, like issue tracker ids and todos. It also supports subcommands,
|
33
|
+
like automatically fetching statuses from your issue tracking system.
|
14
34
|
})
|
15
35
|
|
16
36
|
intro = <<-BANNER.gsub(/^[ ]+/, '')
|
@@ -78,11 +98,13 @@ class Twig
|
|
78
98
|
is_custom_property_except = (
|
79
99
|
line.include?('--except-') &&
|
80
100
|
!line.include?('--except-branch') &&
|
101
|
+
!line.include?('--except-property') &&
|
81
102
|
!line.include?('--except-PROPERTY')
|
82
103
|
)
|
83
104
|
is_custom_property_only = (
|
84
105
|
line.include?('--only-') &&
|
85
106
|
!line.include?('--only-branch') &&
|
107
|
+
!line.include?('--only-property') &&
|
86
108
|
!line.include?('--only-PROPERTY')
|
87
109
|
)
|
88
110
|
is_custom_property_width = (
|
@@ -212,7 +234,7 @@ class Twig
|
|
212
234
|
end
|
213
235
|
help_description_for_custom_property(opts, [
|
214
236
|
['--only-PROPERTY PATTERN', 'Only list branches with a given property'],
|
215
|
-
['', 'that matches a given pattern.']
|
237
|
+
['', 'that matches a given pattern.']
|
216
238
|
], :trailing => '')
|
217
239
|
help_description_for_custom_property(opts, [
|
218
240
|
['--except-PROPERTY PATTERN', 'Do not list branches with a given property'],
|
@@ -260,6 +282,28 @@ class Twig
|
|
260
282
|
['', "(Default: #{Twig::DEFAULT_PROPERTY_COLUMN_WIDTH})"]
|
261
283
|
])
|
262
284
|
|
285
|
+
desc = <<-DESC
|
286
|
+
Only include properties where the property name matches the given
|
287
|
+
regular expression.
|
288
|
+
DESC
|
289
|
+
opts.on(
|
290
|
+
'--only-property PATTERN',
|
291
|
+
*help_description(desc, :add_separator => true)
|
292
|
+
) do |pattern|
|
293
|
+
set_option(:property_only_name, pattern)
|
294
|
+
end
|
295
|
+
|
296
|
+
desc = <<-DESC
|
297
|
+
Exclude properties where the property name matches the given regular
|
298
|
+
expression.
|
299
|
+
DESC
|
300
|
+
opts.on(
|
301
|
+
'--except-property PATTERN',
|
302
|
+
*help_description(desc, :add_separator => true)
|
303
|
+
) do |pattern|
|
304
|
+
set_option(:property_except_name, pattern)
|
305
|
+
end
|
306
|
+
|
263
307
|
colors = Twig::Display::COLORS.keys.map do |value|
|
264
308
|
format_string(value, :color => value)
|
265
309
|
end.join(', ')
|
@@ -326,7 +370,7 @@ class Twig
|
|
326
370
|
' except-branch: staging',
|
327
371
|
' header-style: green bold',
|
328
372
|
' max-days-old: 30',
|
329
|
-
' reverse: true'
|
373
|
+
' reverse: true'
|
330
374
|
].join("\n"), :trailing => '')
|
331
375
|
|
332
376
|
help_separator(opts, help_paragraph(%{
|
@@ -343,9 +387,8 @@ class Twig
|
|
343
387
|
end
|
344
388
|
|
345
389
|
def abort_for_option_exception(exception)
|
346
|
-
puts exception.message
|
347
|
-
|
348
|
-
exit
|
390
|
+
puts exception.message + "\nFor a list of options, run `twig --help`."
|
391
|
+
exit 1
|
349
392
|
end
|
350
393
|
|
351
394
|
def exec_subcommand_if_any(args)
|
@@ -362,7 +405,7 @@ class Twig
|
|
362
405
|
exec_subcommand_if_any(args) if args.any?
|
363
406
|
|
364
407
|
args = read_cli_options!(args)
|
365
|
-
branch_name =
|
408
|
+
branch_name = target_branch_name
|
366
409
|
format = options.delete(:format)
|
367
410
|
property_to_unset = options.delete(:unset_property)
|
368
411
|
|