twig 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/.travis.yml +5 -0
- data/CONTRIBUTING.md +5 -1
- data/HISTORY.md +16 -2
- data/README.md +5 -5
- data/bin/twig-gh-update +1 -1
- data/lib/twig/branch.rb +3 -1
- data/lib/twig/cli.rb +2 -2
- data/lib/twig/display.rb +1 -0
- data/lib/twig/version.rb +1 -1
- data/spec/twig/branch_spec.rb +7 -0
- data/spec/twig/cli_spec.rb +22 -10
- data/spec/twig/display_spec.rb +13 -1
- data/spec/twig_spec.rb +1 -1
- data/twig.gemspec +6 -6
- metadata +8 -9
- data/.rvmrc +0 -1
- data/install +0 -18
data/.gitignore
CHANGED
data/.travis.yml
ADDED
data/CONTRIBUTING.md
CHANGED
@@ -13,7 +13,9 @@ If you want to hack on some code, even better! Here are the basics:
|
|
13
13
|
for stable builds only.
|
14
14
|
3. Run the tests to make sure that they pass on your machine: `bundle && rake`
|
15
15
|
4. Add one or more failing tests for your feature or bug fix.
|
16
|
-
5. Write your feature or bug fix to make the test(s) pass.
|
16
|
+
5. Write your feature or bug fix to make the test(s) pass. Tests should pass in
|
17
|
+
the latest **Ruby 1.8.7** and **Ruby 1.9.3**, which you can do with
|
18
|
+
[rvm][rvm] or [rbenv][rbenv].
|
17
19
|
6. Test the change manually:
|
18
20
|
1. `gem build twig.gemspec`
|
19
21
|
2. `gem install twig-x.y.z.gem` (fill in the current version number)
|
@@ -24,3 +26,5 @@ Thanks for contributing!
|
|
24
26
|
[issues]: https://github.com/rondevera/twig/issues
|
25
27
|
[twitter]: https://twitter.com/ronalddevera
|
26
28
|
[dev branch]: https://github.com/rondevera/twig/commits/development
|
29
|
+
[rvm]: https://rvm.io/
|
30
|
+
[rbenv]: http://rbenv.org/
|
data/HISTORY.md
CHANGED
@@ -1,6 +1,20 @@
|
|
1
1
|
Twig
|
2
2
|
====
|
3
3
|
|
4
|
-
1.0
|
5
|
-
|
4
|
+
1.0.1 (2013-02-13)
|
5
|
+
------------------
|
6
|
+
* ENHANCEMENT: Add Travis CI integration for running tests in multiple versions
|
7
|
+
of Ruby.
|
8
|
+
* FIX: Gracefully handle Git config settings where the value is missing.
|
9
|
+
(GH-1. Thanks [chrismanderson](https://github.com/chrismanderson)!)
|
10
|
+
* FIX: Fix failing test in Ruby 1.9.3.
|
11
|
+
(GH-7. Thanks [joelmoss](https://github.com/joelmoss)!)
|
12
|
+
* FIX: Suppress `which` errors.
|
13
|
+
(GH-9. Thanks [badboy](https://github.com/badboy)!)
|
14
|
+
* FIX: Exit with a non-zero status when trying to get a branch property that
|
15
|
+
doesn't exist.
|
16
|
+
* FIX: In list view, render line breaks (in properties) as spaces.
|
17
|
+
|
18
|
+
1.0 (2013-02-05)
|
19
|
+
----------------
|
6
20
|
* Initial release.
|
data/README.md
CHANGED
@@ -212,16 +212,16 @@ it to the [Twig wiki][wiki]!
|
|
212
212
|
More info
|
213
213
|
=========
|
214
214
|
|
215
|
-
|
216
|
-
older software, but it's not guaranteed.
|
217
|
-
|
215
|
+
* **Requirements:** Tested with Git 1.6.5 and Ruby 1.8.7/1.9.2/1.9.3. Probably
|
216
|
+
works with older software, but it's not guaranteed.
|
217
|
+
* **Contributing:** Found a bug or have a suggestion? [Please open an
|
218
218
|
issue][issues] or ping [@ronalddevera on Twitter][twitter]. If you want to
|
219
219
|
hack on some features or contribute a subcommand you've written, feel free to
|
220
220
|
fork and send a pull request for the **[development branch][dev branch]**.
|
221
221
|
(The master branch is for stable builds only.) See the full details in the
|
222
222
|
[Contributing][contributing] instructions.
|
223
|
-
|
224
|
-
|
223
|
+
* **History:** [History/changelog for Twig][history]
|
224
|
+
* **License:** Twig is released under the [MIT License][license].
|
225
225
|
|
226
226
|
[issues]: https://github.com/rondevera/twig/issues
|
227
227
|
[wiki]: https://github.com/rondevera/twig/wiki
|
data/bin/twig-gh-update
CHANGED
@@ -70,7 +70,7 @@ TwigGithubRepo.new do |gh_repo|
|
|
70
70
|
issues[issue_data['number']] = issue_data
|
71
71
|
end
|
72
72
|
else
|
73
|
-
|
73
|
+
abort "\nERROR: Couldn't get open issues from GitHub. " <<
|
74
74
|
"(Response: #{response.code})"
|
75
75
|
end
|
76
76
|
end
|
data/lib/twig/branch.rb
CHANGED
@@ -12,7 +12,9 @@ class Twig
|
|
12
12
|
|
13
13
|
properties = config_lines.map do |line|
|
14
14
|
# Split by rightmost `=`, allowing branch names to contain `=`:
|
15
|
-
key
|
15
|
+
key = value = nil
|
16
|
+
line.match(/(.+)=(.+)/).tap { |m| key, value = m[1..2] if m }
|
17
|
+
next if key.nil?
|
16
18
|
|
17
19
|
key_parts = key.split('.')
|
18
20
|
key_parts.last if key_parts[0] == 'branch' && key_parts.size > 2
|
data/lib/twig/cli.rb
CHANGED
@@ -134,7 +134,7 @@ class Twig
|
|
134
134
|
if args.any?
|
135
135
|
# Run subcommand binary, if any, and exit here
|
136
136
|
possible_subcommand_name = args[0]
|
137
|
-
command_path = Twig.run("which twig-#{possible_subcommand_name}")
|
137
|
+
command_path = Twig.run("which twig-#{possible_subcommand_name} 2>/dev/null")
|
138
138
|
unless command_path.empty?
|
139
139
|
command = ([command_path] + args[1..-1]).join(' ')
|
140
140
|
exec(command)
|
@@ -161,7 +161,7 @@ class Twig
|
|
161
161
|
if value && !value.empty?
|
162
162
|
puts value
|
163
163
|
else
|
164
|
-
|
164
|
+
abort %{The branch "#{branch_name}" does not have the property "#{property_name}".}
|
165
165
|
end
|
166
166
|
end
|
167
167
|
elsif property_to_unset
|
data/lib/twig/display.rb
CHANGED
@@ -77,6 +77,7 @@ class Twig
|
|
77
77
|
properties = Twig::Branch.all_properties.inject({}) do |result, property_name|
|
78
78
|
property = get_branch_property(branch.name, property_name).strip
|
79
79
|
property = column(EMPTY_BRANCH_PROPERTY_INDICATOR) if property.empty?
|
80
|
+
property.gsub!(/[\n\r]+/, ' ')
|
80
81
|
result.merge(property_name => property)
|
81
82
|
end
|
82
83
|
|
data/lib/twig/version.rb
CHANGED
data/spec/twig/branch_spec.rb
CHANGED
@@ -49,6 +49,13 @@ describe Twig::Branch do
|
|
49
49
|
result.should == %w[eqproperty test0 test1 test2]
|
50
50
|
end
|
51
51
|
|
52
|
+
it 'skips path values with an equal sign but no value' do
|
53
|
+
@config << 'foo_path='
|
54
|
+
Twig.should_receive(:run).with('git config --list').and_return(@config)
|
55
|
+
result = Twig::Branch.all_properties
|
56
|
+
result.should_not include 'foo_path'
|
57
|
+
end
|
58
|
+
|
52
59
|
it 'memoizes the result' do
|
53
60
|
Twig.should_receive(:run).once.and_return(@config)
|
54
61
|
2.times { Twig::Branch.all_properties }
|
data/spec/twig/cli_spec.rb
CHANGED
@@ -146,22 +146,34 @@ describe Twig::Cli do
|
|
146
146
|
context 'running a subcommand' do
|
147
147
|
before :each do
|
148
148
|
Twig.stub(:run)
|
149
|
-
@
|
150
|
-
@twig.stub(:
|
149
|
+
@branch_name = 'test'
|
150
|
+
@twig.stub(:current_branch_name => @branch_name)
|
151
151
|
end
|
152
152
|
|
153
153
|
it 'recognizes a subcommand' do
|
154
154
|
command_path = '/path/to/bin/twig-subcommand'
|
155
|
-
Twig.should_receive(:run).with('which twig-subcommand').
|
155
|
+
Twig.should_receive(:run).with('which twig-subcommand 2>/dev/null').
|
156
156
|
and_return(command_path)
|
157
|
-
@twig.should_receive(:exec).with(command_path)
|
157
|
+
@twig.should_receive(:exec).with(command_path) { exit }
|
158
|
+
|
159
|
+
# Since we're stubbing `exec` (with an expectation), we still need it
|
160
|
+
# to exit early like the real implementation. The following handles the
|
161
|
+
# exit somewhat gracefully.
|
162
|
+
expected_exception = nil
|
163
|
+
begin
|
164
|
+
@twig.read_cli_args!(['subcommand'])
|
165
|
+
rescue SystemExit => exception
|
166
|
+
expected_exception = exception
|
167
|
+
end
|
158
168
|
|
159
|
-
|
169
|
+
expected_exception.should_not be_nil
|
170
|
+
expected_exception.status.should == 0
|
160
171
|
end
|
161
172
|
|
162
173
|
it 'does not recognize a subcommand' do
|
163
|
-
Twig.should_receive(:run).with('which twig-subcommand').and_return('')
|
174
|
+
Twig.should_receive(:run).with('which twig-subcommand 2>/dev/null').and_return('')
|
164
175
|
@twig.should_not_receive(:exec)
|
176
|
+
@twig.stub(:abort)
|
165
177
|
|
166
178
|
@twig.read_cli_args!(['subcommand'])
|
167
179
|
end
|
@@ -190,8 +202,8 @@ describe Twig::Cli do
|
|
190
202
|
it 'shows an error if getting a property that is not set' do
|
191
203
|
@twig.should_receive(:get_branch_property).
|
192
204
|
with(@branch_name, @property_name).and_return('')
|
193
|
-
@twig.should_receive(:
|
194
|
-
|
205
|
+
@twig.should_receive(:abort) do |message|
|
206
|
+
message.should include(
|
195
207
|
%{The branch "#{@branch_name}" does not have the property "#{@property_name}"}
|
196
208
|
)
|
197
209
|
end
|
@@ -217,8 +229,8 @@ describe Twig::Cli do
|
|
217
229
|
it 'shows an error if getting a property that is not set' do
|
218
230
|
@twig.should_receive(:get_branch_property).
|
219
231
|
with(@branch_name, @property_name).and_return('')
|
220
|
-
@twig.should_receive(:
|
221
|
-
|
232
|
+
@twig.should_receive(:abort) do |message|
|
233
|
+
message.should include(
|
222
234
|
%{The branch "#{@branch_name}" does not have the property "#{@property_name}"}
|
223
235
|
)
|
224
236
|
end
|
data/spec/twig/display_spec.rb
CHANGED
@@ -59,7 +59,7 @@ describe Twig::Display do
|
|
59
59
|
describe '#branch_list_line' do
|
60
60
|
before :each do
|
61
61
|
@current_branch_name = 'my-branch'
|
62
|
-
Twig::Branch.stub(:all_properties => [
|
62
|
+
Twig::Branch.stub(:all_properties => %w[foo bar])
|
63
63
|
@twig.should_receive(:get_branch_property).
|
64
64
|
with(anything, 'foo').and_return('foo!')
|
65
65
|
@twig.should_receive(:get_branch_property).
|
@@ -89,6 +89,18 @@ describe Twig::Display do
|
|
89
89
|
|
90
90
|
result.should =~ /2000-01-01\s+foo!\s+bar!\s+#{Regexp.escape(branch.name)}/
|
91
91
|
end
|
92
|
+
|
93
|
+
it 'changes line break characters to spaces' do
|
94
|
+
branch = Twig::Branch.new('my-branch')
|
95
|
+
branch.should_receive(:last_commit_time).and_return(@commit_time)
|
96
|
+
Twig::Branch.stub(:all_properties => %w[foo bar linebreaks])
|
97
|
+
@twig.should_receive(:get_branch_property).
|
98
|
+
with(anything, 'linebreaks').and_return("line\r\nbreaks!")
|
99
|
+
|
100
|
+
result = @twig.branch_list_line(branch)
|
101
|
+
|
102
|
+
result.should include('line breaks')
|
103
|
+
end
|
92
104
|
end
|
93
105
|
|
94
106
|
describe '#format_string' do
|
data/spec/twig_spec.rb
CHANGED
@@ -158,7 +158,7 @@ describe Twig do
|
|
158
158
|
end
|
159
159
|
|
160
160
|
it 'returns a message if all branches were filtered out by options' do
|
161
|
-
@twig.stub(:all_branches => %[foo bar])
|
161
|
+
@twig.stub(:all_branches => %w[foo bar])
|
162
162
|
@twig.stub(:branches => [])
|
163
163
|
|
164
164
|
@twig.list_branches.should include(
|
data/twig.gemspec
CHANGED
@@ -6,15 +6,15 @@ require 'twig/version'
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = 'twig'
|
8
8
|
spec.version = Twig::VERSION
|
9
|
-
spec.date = '2012-12-13'
|
10
9
|
spec.authors = ['Ron DeVera']
|
11
10
|
spec.email = ["hello@rondevera.com"]
|
12
|
-
spec.homepage = '
|
13
|
-
spec.summary = %{
|
11
|
+
spec.homepage = 'http://rondevera.github.com/twig'
|
12
|
+
spec.summary = %{Your personal Git branch assistant.}
|
14
13
|
spec.description =
|
15
|
-
'Twig is
|
16
|
-
'branches, remembering ticket ids for
|
17
|
-
'supports subcommands for managing branches
|
14
|
+
'Twig is your personal Git branch assistant. It\'s a command-line tool ' <<
|
15
|
+
'for tracking progress on your branches, remembering ticket ids for ' <<
|
16
|
+
'each branch, and more. Twig supports subcommands for managing branches ' <<
|
17
|
+
'however you want.'
|
18
18
|
spec.post_install_message =
|
19
19
|
"\n**************************************************************" <<
|
20
20
|
"\n* *" <<
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: twig
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- 1
|
10
|
+
version: 1.0.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ron DeVera
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2013-02-13 00:00:00 -08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
version: 2.11.0
|
67
67
|
type: :development
|
68
68
|
version_requirements: *id003
|
69
|
-
description: Twig is a command-line tool for tracking progress on your
|
69
|
+
description: Twig is your personal Git branch assistant. It's a command-line tool for tracking progress on your branches, remembering ticket ids for each branch, and more. Twig supports subcommands for managing branches however you want.
|
70
70
|
email:
|
71
71
|
- hello@rondevera.com
|
72
72
|
executables:
|
@@ -80,7 +80,7 @@ extra_rdoc_files: []
|
|
80
80
|
|
81
81
|
files:
|
82
82
|
- .gitignore
|
83
|
-
- .
|
83
|
+
- .travis.yml
|
84
84
|
- CONTRIBUTING.md
|
85
85
|
- Gemfile
|
86
86
|
- HISTORY.md
|
@@ -91,7 +91,6 @@ files:
|
|
91
91
|
- bin/twig-gh-open
|
92
92
|
- bin/twig-gh-update
|
93
93
|
- bin/twig-help
|
94
|
-
- install
|
95
94
|
- lib/twig.rb
|
96
95
|
- lib/twig/branch.rb
|
97
96
|
- lib/twig/cli.rb
|
@@ -110,7 +109,7 @@ files:
|
|
110
109
|
- spec/twig_spec.rb
|
111
110
|
- twig.gemspec
|
112
111
|
has_rdoc: true
|
113
|
-
homepage:
|
112
|
+
homepage: http://rondevera.github.com/twig
|
114
113
|
licenses: []
|
115
114
|
|
116
115
|
post_install_message: |+
|
@@ -154,7 +153,7 @@ rubyforge_project:
|
|
154
153
|
rubygems_version: 1.5.2
|
155
154
|
signing_key:
|
156
155
|
specification_version: 3
|
157
|
-
summary:
|
156
|
+
summary: Your personal Git branch assistant.
|
158
157
|
test_files:
|
159
158
|
- spec/spec_helper.rb
|
160
159
|
- spec/twig/branch_spec.rb
|
data/.rvmrc
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
rvm use ruby-1.8.7-p358@twig --create
|
data/install
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
twig_bin_path = File.expand_path(File.dirname(__FILE__)) + '/bin/**/twig*'
|
4
|
-
twig_bins = Dir.glob(twig_bin_path)
|
5
|
-
user_bin_path = '~/bin'
|
6
|
-
|
7
|
-
twig_bins.each do |bin|
|
8
|
-
`ln -fs #{bin} #{user_bin_path}`
|
9
|
-
end
|
10
|
-
|
11
|
-
if `which twig` && $?.success?
|
12
|
-
puts 'All set! Run `twig` to list your local branches.'
|
13
|
-
puts 'For more info, run `twig --help`.'
|
14
|
-
else
|
15
|
-
puts 'Argh! Something went wrong. Please try symlinking the files in '
|
16
|
-
puts '`./bin/` to `~/bin/` and ensure that `~/bin/` is in your `$PATH`, or '
|
17
|
-
puts 'contact rondevera on GitHub.'
|
18
|
-
end
|