twig 1.5 → 1.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 360381819d893fa2d71b315d1c19a0c48e98132e
4
+ data.tar.gz: 82c42e49a983d5a0539b29b9784b19daf35a21e4
5
+ SHA512:
6
+ metadata.gz: d9b7ddf8e5904fc1a76bad82461d33e3e7b729a7ef243a65dcca2c22978c7ba2c0ede1cd35ca900674b3d0bb86ca3001600eb008ffe6c746364162c58a1d0aa2
7
+ data.tar.gz: 8df02602a640c113ac00dd28f8321515ae2409f22d080d2cadec234c987c2dd8375e07e147faf1879a40e8673f7d87e32533424bad8b273ad7932ad7ec91e751
data/.gitignore CHANGED
@@ -1,4 +1,6 @@
1
1
  *.gem
2
+ .bundle/
3
+ .ruby-gemset
2
4
  .rvmrc
3
5
  Gemfile.lock
4
6
  _site/
@@ -1,5 +1,7 @@
1
1
  language: ruby
2
2
  rvm:
3
+ - 2.1.0
4
+ - 2.0.0
3
5
  - 1.9.3
4
6
  - 1.9.2
5
7
  - 1.8.7
@@ -1,7 +1,7 @@
1
1
  How to contribute
2
2
  =================
3
3
 
4
- Let's make life easier for people with lots of Git branches.
4
+ Let's make life easier for people who have lots of Git branches.
5
5
 
6
6
  Found a bug or have a suggestion? [Please open an issue][issues] or ping
7
7
  [@ronalddevera on Twitter][twitter].
@@ -17,8 +17,9 @@ If you want to hack on some code, even better! Here are the basics:
17
17
  4. Run the tests to make sure that they pass on your machine: `bundle && rake`
18
18
  5. Add one or more failing tests for your feature or bug fix.
19
19
  6. Write your feature or bug fix to make the test(s) pass.
20
- * Tests should pass in the latest **Ruby 1.8.7** and **Ruby 1.9.3**, which
21
- you can do with [rvm][rvm] or [rbenv][rbenv].
20
+ * Tests should pass for the Ruby versions listed in
21
+ [.travis.yml][travis.yml], which you can confirm with [rvm][rvm] or
22
+ [rbenv][rbenv].
22
23
  * Keep the branch focused on a single topic, rather than covering multiple
23
24
  features or bug fixes in a single branch. This makes branches quicker to
24
25
  review and merge.
@@ -34,3 +35,4 @@ Thanks for contributing!
34
35
  [dev branch]: https://github.com/rondevera/twig/commits/development
35
36
  [rvm]: https://rvm.io/
36
37
  [rbenv]: http://rbenv.org/
38
+ [travis.yml]: https://github.com/rondevera/twig/blob/master/.travis.yml
data/HISTORY.md CHANGED
@@ -1,6 +1,29 @@
1
1
  Twig
2
2
  ====
3
3
 
4
+ 1.6 (2014-03-04)
5
+ ----------------
6
+ * ENHANCEMENT: Add `--only-property <pattern>` and `--except-property <pattern>`
7
+ for including/excluding property names in list view and JSON view. Useful for
8
+ hiding properties that are frequently too long to show in list view (e.g.,
9
+ `todo`), or for hiding groups of properties that are just issue tracker
10
+ metadata. (GH-25. Thanks [slucero](https://github.com/slucero) for the idea!)
11
+ * ENHANCEMENT: Add `twig init` subcommand, the new recommended way to set up
12
+ Twig after installing the gem.
13
+ * ENHANCEMENT: Add `twig checkout-parent` subcommand, which checks out the
14
+ current branch's parent branch, if any, based on its `diff-branch` property.
15
+ (GH-34)
16
+ * ENHANCEMENT: Add `twig checkout-child` subcommand, which checks out the
17
+ current branch's child branch, if any, based on the child's `diff-branch`
18
+ property. If the current branch has multiple child branches, this subcommand
19
+ lists all of them and prompts for a selection. (GH-35)
20
+ * ENHANCEMENT: Add `twig create-branch` subcommand, which creates a branch off
21
+ of the current branch, and sets the child branch's `diff-branch` property
22
+ automatically.
23
+ * FIX: Fix `(1y ago)` (previously displayed as `(1 ago)`) in branch list view.
24
+ * FIX: Make `property` a reserved property name, along with `branch`, `merge`,
25
+ `rebase`, and `remote`.
26
+
4
27
  1.5 (2013-11-21)
5
28
  ----------------
6
29
  * ENHANCEMENT: Add `--format=json` option for printing branch data as JSON
data/LICENSE.md CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2013 Ron DeVera
1
+ Copyright (c) 2014 Ron DeVera
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -27,11 +27,15 @@ Here's how Twig looks in action:
27
27
  2013-01-20 19:45:42 (6d ago) - - - master
28
28
 
29
29
 
30
- Installation
31
- ============
30
+ Quick start
31
+ ===========
32
32
 
33
33
  gem install twig
34
34
 
35
+ twig init # Sets up tab completion; one run works across all repos
36
+ twig # Lists your branches
37
+ twig --help # More info
38
+
35
39
 
36
40
  Usage
37
41
  =====
@@ -46,7 +50,7 @@ chronologically with their properties.
46
50
  * `twig <property> -b <branch>`: Get property for any branch
47
51
  * `twig <property> <value> -b <branch>`: Set property for any branch
48
52
  * `twig --unset <property> -b <branch>`: Unset property for any branch
49
- * `twig init-completion`: Set up tab completion for `-b` and `--branch`
53
+ * `twig init`: Set up tab completion for `-b` and `--branch`; one run works across all repos
50
54
  * `twig init-completion --force`: Update to the latest tab completion script
51
55
  * `twig --help`: More info
52
56
 
@@ -86,6 +90,7 @@ be automatically included when you run `twig`. Example:
86
90
  except-branch: staging
87
91
  header-style: green bold
88
92
  max-days-old: 30
93
+ reverse: true
89
94
 
90
95
 
91
96
  Examples
@@ -161,6 +166,87 @@ properties. You can [write your own](#writing-a-subcommand), but here are some
161
166
  subcommands that Twig comes with.
162
167
 
163
168
 
169
+ twig checkout-child
170
+ -------------------
171
+
172
+ Twig uses each branch's `diff-branch` property to remember its parent branch so
173
+ you don't have to. If you need to check out one of the child branches for your
174
+ current branch, you can use `twig checkout-child`:
175
+
176
+ $ git checkout feature-branch
177
+
178
+ # Look for any branch whose `diff-branch` property is `feature-branch`, and
179
+ # checkout that branch:
180
+ $ twig checkout-child
181
+
182
+ # If the current branch has multiple child, Twig asks what to do:
183
+ Checkout which child branch?
184
+ 1. child-branch-1
185
+ 2. child-branch-2
186
+ 3. child-branch-3
187
+ > 3
188
+ Switched to branch 'child-branch-3'
189
+
190
+ More advanced usage:
191
+
192
+ # Switch to a child branch of any other branch:
193
+ $ twig checkout-child -b other-feature-branch
194
+ Switched to branch 'other-child-branch'
195
+
196
+ You can use this with `twig checkout-parent` and `twig create-branch` to
197
+ traverse your tree of branches.
198
+
199
+
200
+ twig checkout-parent
201
+ --------------------
202
+
203
+ If your branch has a `diff-branch` property, you can use `twig checkout-parent`
204
+ to quickly switch to that branch:
205
+
206
+ $ git checkout branch2
207
+
208
+ # Remember your branch's diff branch:
209
+ $ twig diff-branch branch1
210
+ Saved property "diff-branch" as "branch1" for branch "branch2".
211
+
212
+ # Later, switch from branch2 (the current branch) to its parent branch:
213
+ $ twig checkout-parent
214
+ Switched to branch 'branch1'
215
+
216
+ More advanced usage:
217
+
218
+ # Switch to the parent branch of any other branch:
219
+ $ twig checkout-parent -b other-branch-2
220
+ Switched to branch 'other-branch-1'
221
+
222
+ You can use this with `twig checkout-child` and `twig create-branch` to traverse
223
+ your tree of branches.
224
+
225
+
226
+ twig create-branch
227
+ ------------------
228
+
229
+ When creating a branch, you can use `twig create-branch` to create a child
230
+ branch and set its `diff-branch` property automatically:
231
+
232
+ $ git checkout master
233
+ $ twig create-branch my-branch
234
+ Branch my-branch set up to track local branch master.
235
+ Switched to a new branch 'my-branch'
236
+ Saved property "diff-branch" as "master" for branch "my-branch".
237
+
238
+ # Confirm that the new branch's `diff-branch` is its parent:
239
+ $ twig diff-branch
240
+ master
241
+
242
+ # Check out the new branch's parent:
243
+ $ twig checkout-parent
244
+ Switched to branch 'master'
245
+
246
+ You can use this with `twig checkout-child` and `twig checkout-parent` to
247
+ traverse your tree of branches.
248
+
249
+
164
250
  twig diff
165
251
  ---------
166
252
 
@@ -176,7 +262,7 @@ to remember which branch to diff against. `twig diff` makes it easy:
176
262
  # Generate a diff between branch1 (the current branch) and branch2:
177
263
  $ twig diff
178
264
 
179
- More usage:
265
+ More advanced usage:
180
266
 
181
267
  # Generate a diff between any given branch and its `diff-branch`:
182
268
  $ twig diff my-other-branch
@@ -191,8 +277,8 @@ More usage:
191
277
  twig rebase
192
278
  -----------
193
279
 
194
- If you have a stack of branches that you need to rebase in the same order,
195
- `twig rebase` simplifies the process:
280
+ If you have a stack of branches that you need to rebase in the same order every
281
+ time, `twig rebase` simplifies the process:
196
282
 
197
283
  $ git checkout branch2
198
284
 
@@ -204,7 +290,7 @@ If you have a stack of branches that you need to rebase in the same order,
204
290
  $ twig rebase
205
291
  Rebase "branch2" onto "development"? (y/n)
206
292
 
207
- More usage:
293
+ More advanced usage:
208
294
 
209
295
  # Rebase any given branch onto its `diff-branch`:
210
296
  $ twig rebase my-other-branch
@@ -292,15 +378,15 @@ Writing a subcommand
292
378
  You can write any Twig subcommand that fits your own Git workflow. To write a
293
379
  Twig subcommand:
294
380
 
295
- 1. Write a script. Any language will do. (If you want to take advantage of
381
+ 1. Write a script—any language will do. (If you want to take advantage of
296
382
  Twig's option parsing and branch processing, you'll need Ruby. See
297
- [`bin/twig-gh-update`][twig-gh-update] for an example.)
383
+ [`bin/twig-checkout-parent`][twig-checkout-parent] for an example.)
298
384
  2. Save it with the `twig-` prefix in your `$PATH`,
299
385
  e.g., `~/bin/twig-my-subcommand`.
300
386
  3. Make it executable: `chmod ugo+x ~/bin/twig-my-subcommand`
301
387
  4. Run your subcommand: `twig my-subcommand` (with a *space* after `twig`)
302
388
 
303
- [twig-gh-update]: https://github.com/rondevera/twig/blob/master/bin/twig-gh-update
389
+ [twig-checkout-parent]: https://github.com/rondevera/twig/blob/master/bin/twig-checkout-parent
304
390
 
305
391
  Some ideas for subcommands:
306
392
 
@@ -322,8 +408,8 @@ add it to the [Twig wiki][wiki]!
322
408
  More info
323
409
  =========
324
410
 
325
- * **Requirements:** Tested with Git 1.6.5+ and Ruby 1.8.7/1.9.2/1.9.3. Probably
326
- works with older software, but it's not guaranteed.
411
+ * **Requirements:** Tested with Git 1.7.12+ and Ruby 1.8.7, 1.9.2, 1.9.3, 2.0.0,
412
+ and 2.1.0. Probably works with older software, but it's not guaranteed.
327
413
  * **Contributing:** Found a bug or have a suggestion? [Please open an
328
414
  issue][issues] or ping [@ronalddevera on Twitter][twitter]. If you want to
329
415
  hack on some features or contribute a subcommand you've written, feel free to
data/bin/twig CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  # Entry point for Twig: <http://rondevera.github.io/twig/>
4
+ # More info: `twig --help`
4
5
 
5
6
  require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'twig'))
6
7
 
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Synopsis:
4
+ #
5
+ # twig checkout-child [-b|--branch <branch>]
6
+ #
7
+ # Description:
8
+ #
9
+ # Checks out the current branch's child branch, if any, based on the child's
10
+ # `diff-branch` property. If the current branch has multiple child branches,
11
+ # this subcommand lists all of them and prompts for a selection.
12
+ #
13
+ # You can use this with `twig checkout-parent` to traverse your tree of
14
+ # branches.
15
+ #
16
+ # Options:
17
+ #
18
+ # `-b` or `--branch`: Checks out the child branch for the given branch, rather
19
+ # than the current branch.
20
+ #
21
+ # Subcommand for Twig: <http://rondevera.github.io/twig/>
22
+ # Author: Ron DeVera <http://rondevera.com>
23
+
24
+ require 'rubygems'
25
+ require 'twig'
26
+
27
+ def checkout_branch(branch_name)
28
+ `git checkout "#{branch_name}"`
29
+ end
30
+
31
+ twig = Twig.new(:read_options => true)
32
+ target_branch = twig.target_branch_name
33
+ target_branch_regexp = Regexp.new("\\A#{target_branch}\\z")
34
+ twig.set_option(:property_only, :'diff-branch' => target_branch_regexp)
35
+ child_branch_names = twig.branches
36
+
37
+ if child_branch_names.size > 1
38
+ prompt = 'Checkout which child branch?'
39
+ child_branch_name = Twig::Cli.prompt_with_choices(prompt, child_branch_names)
40
+
41
+ if child_branch_name
42
+ checkout_branch(child_branch_name)
43
+ else
44
+ abort 'No child branch selected.'
45
+ end
46
+ elsif child_branch_names.size == 1
47
+ checkout_branch(child_branch_names.first)
48
+ else
49
+ abort "There are no branches whose `diff-branch` property is `#{target_branch}`."
50
+ end
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Synopsis:
4
+ #
5
+ # twig checkout-parent [-b|--branch <branch>]
6
+ #
7
+ # Description:
8
+ #
9
+ # Checks out the current branch's parent branch, if any, based on the current
10
+ # branch's `diff-branch` property.
11
+ #
12
+ # You can use this with `twig checkout-child` to traverse your tree of
13
+ # branches.
14
+ #
15
+ # Options:
16
+ #
17
+ # `-b` or `--branch`: Checks out the parent branch of the given branch, rather
18
+ # than the current branch.
19
+ #
20
+ # Subcommand for Twig: <http://rondevera.github.io/twig/>
21
+ # Author: Ron DeVera <http://rondevera.com>
22
+
23
+ require 'rubygems'
24
+ require 'twig'
25
+
26
+ twig = Twig.new(:read_options => true)
27
+ parent_property = 'diff-branch'
28
+ target_branch = twig.target_branch_name
29
+ parent_branch = twig.get_branch_property(target_branch, parent_property) || ''
30
+
31
+ if parent_branch.empty?
32
+ abort %{The branch "#{target_branch}" does not have the property "#{parent_property}".}
33
+ else
34
+ exec %{git checkout "#{parent_branch}"}
35
+ end
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Synopsis:
4
+ #
5
+ # twig create-branch <branch>
6
+ #
7
+ # Description:
8
+ #
9
+ # Creates a branch with the given name, and sets the new branch's
10
+ # `diff-branch` property to the previous branch's name. This allows for
11
+ # traversing the branch tree with `twig checkout-parent` and
12
+ # `twig checkout-child`.
13
+ #
14
+ # Subcommand for Twig: <http://rondevera.github.io/twig/>
15
+ # Author: Ron DeVera <http://rondevera.com>
16
+
17
+ new_branch_name = (ARGV[0] || '').strip
18
+ abort 'Usage: twig create-branch <branch name>' if new_branch_name.empty?
19
+
20
+ current_branch_name = `git rev-parse --abbrev-ref HEAD`.strip
21
+
22
+ cmd = %{git checkout -b "#{new_branch_name}"}
23
+ cmd << %{ && twig diff-branch "#{current_branch_name}"}
24
+ exec(cmd)
@@ -1,24 +1,27 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- # Summary:
3
+ # Synopsis:
4
4
  #
5
- # `twig diff [<branch>] [<options>]`
5
+ # twig diff [<branch>] [<options>]
6
6
  #
7
- # Usage:
7
+ # Description:
8
8
  #
9
- # - `twig diff`:
10
9
  # Shows the diff between the current branch and its `diff-branch` property.
10
+ # All options are passed through to `git-diff`.
11
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`.
12
+ # Examples:
15
13
  #
16
- # - `twig diff <branch>`:
17
- # Shows the diff between the given branch and its `diff-branch` property.
14
+ # Show diff stats between the current branch and its `diff-branch`:
18
15
  #
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`.
16
+ # twig diff --stat
17
+ #
18
+ # Show the diff between the given branch and its `diff-branch`:
19
+ #
20
+ # twig diff my_branch
21
+ #
22
+ # Show diff stats between the given branch and its `diff-branch`:
23
+ #
24
+ # twig diff my_branch --stat
22
25
  #
23
26
  # Subcommand for Twig: <http://rondevera.github.io/twig/>
24
27
  # Author: Ron DeVera <http://rondevera.com>
@@ -1,6 +1,18 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- # Opens a browser window for the current GitHub repo.
3
+ # Synopsis:
4
+ #
5
+ # twig gh-open
6
+ #
7
+ # Description:
8
+ #
9
+ # Opens a browser window for the current GitHub repo.
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>
@@ -10,10 +22,7 @@ require 'twig'
10
22
  require 'launchy'
11
23
 
12
24
  Twig::GithubRepo.new do |gh_repo|
13
- twig = Twig.new
14
- twig.read_config_file!
15
- twig.read_cli_options!(ARGV)
16
-
25
+ twig = Twig.new(:read_options => true)
17
26
  gh_uri_prefix = twig.options[:github_uri_prefix]
18
27
  url = "#{gh_uri_prefix}/#{gh_repo.username}/#{gh_repo.repository}"
19
28