git-ticket 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +0 -2
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/bin/git-ticket +78 -25
- metadata +16 -5
data/.gitignore
CHANGED
data/Rakefile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/bin/git-ticket
CHANGED
@@ -1,22 +1,41 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require 'rubygems'
|
1
|
+
#!/usr/bin/env ruby -rubygems
|
3
2
|
require 'nokogiri'
|
4
3
|
require 'readline'
|
4
|
+
require 'commandant'
|
5
5
|
|
6
|
-
|
6
|
+
include Commandant
|
7
7
|
|
8
8
|
URL = "http://projects.reductivelabs.com/issues/%d.xml"
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
10
|
+
trap('INT') { abort "Exiting..."}
|
11
|
+
|
12
|
+
def parse_args(args)
|
13
|
+
# Flags
|
14
|
+
$help = args.delete('--help') || args.delete('-h') || args.empty?
|
15
|
+
$branch = args.delete('--branch') || args.delete('-b')
|
16
|
+
$interactive = args.delete('--interactive') || args.delete('-i')
|
17
|
+
$delete = args.delete('--delete') || args.delete('-d')
|
18
|
+
$list = args.delete('--list') || args.delete('-l')
|
19
|
+
|
20
|
+
$id = args.grep(/^\d+$/).first && args.grep(/^\d+$/).first.to_i
|
21
|
+
end
|
22
|
+
|
23
|
+
def existing_branch
|
24
|
+
`git branch`.gsub(/^\*?\s+/,'').split(/\n/).grep(/^(?:bug\-)?#{$id}\-/)
|
25
|
+
end
|
26
|
+
|
27
|
+
def assert_id_provided
|
28
|
+
abort "Error: ticket number required" unless $id
|
29
|
+
end
|
16
30
|
|
17
|
-
|
31
|
+
def assert_branch_exists
|
32
|
+
assert_id_provided
|
33
|
+
abort "Error: no ticket branch for #$id" if existing_branch.empty?
|
34
|
+
end
|
35
|
+
|
36
|
+
command :help do
|
18
37
|
puts <<USAGE
|
19
|
-
Usage: git-ticket [
|
38
|
+
Usage: git-ticket [COMMAND] [OPTIONS] [TICKET]
|
20
39
|
|
21
40
|
Checkout, create, delete or list ticket branches.
|
22
41
|
|
@@ -30,6 +49,16 @@ Synopsis:
|
|
30
49
|
git ticket [-i, --interactive] (-b, --branch) <ticket>
|
31
50
|
git ticket (-d, --delete) <ticket>
|
32
51
|
git ticket (-l, --list)
|
52
|
+
git ticket list
|
53
|
+
git ticket branch [-i, --interactive] <ticket>
|
54
|
+
git ticket delete <ticket>
|
55
|
+
git ticket checkout <ticket>
|
56
|
+
|
57
|
+
Aliases:
|
58
|
+
br => branch
|
59
|
+
co => checkout
|
60
|
+
ls => list
|
61
|
+
rm => delete
|
33
62
|
|
34
63
|
Options:
|
35
64
|
-i, --interactive Interactive mode.
|
@@ -42,26 +71,31 @@ USAGE
|
|
42
71
|
exit 0
|
43
72
|
end
|
44
73
|
|
45
|
-
|
74
|
+
command :list do
|
46
75
|
branches = `git branch`.gsub(/^\*?\s+/,'').split(/\n/).grep(/^(?:bug\-)?\d+\-/)
|
47
76
|
puts branches.empty? ? "No ticket branches" : branches
|
48
77
|
exit 0
|
49
78
|
end
|
50
79
|
|
51
|
-
|
80
|
+
command :branch do |args|
|
81
|
+
parse_args(args)
|
82
|
+
assert_id_provided
|
52
83
|
|
53
|
-
|
54
|
-
doc = Nokogiri::XML(`curl -s #{URL % id}`)
|
84
|
+
doc = Nokogiri::XML(`curl -s #{URL % $id}`)
|
55
85
|
|
56
|
-
|
86
|
+
ticket = doc.search('issue tracker').first
|
87
|
+
|
88
|
+
abort "Error: no such ticket #$id" unless ticket
|
89
|
+
|
90
|
+
type = ticket['name'].downcase
|
57
91
|
title = doc.search('issue subject').first.text.gsub(/\s+/, '-')
|
58
92
|
|
59
|
-
branch_name_root = "#{'bug-' if type=="bug"}#{id}-"
|
93
|
+
branch_name_root = "#{'bug-' if type=="bug"}#{$id}-"
|
60
94
|
branch_name = "#{branch_name_root}#{title}".downcase
|
61
95
|
def branch_name.too_long?; length > 50 end
|
62
96
|
|
63
97
|
|
64
|
-
if interactive || branch_name.too_long?
|
98
|
+
if $interactive || branch_name.too_long?
|
65
99
|
puts "Branch name: #{branch_name}"
|
66
100
|
new_branch_name = Readline.readline "New branch name: #{branch_name_root}"
|
67
101
|
branch_name = branch_name_root + new_branch_name unless new_branch_name.empty?
|
@@ -71,16 +105,35 @@ if branch
|
|
71
105
|
exit 0
|
72
106
|
end
|
73
107
|
|
74
|
-
|
108
|
+
command :delete do |args|
|
109
|
+
parse_args(args)
|
110
|
+
assert_branch_exists
|
75
111
|
|
76
|
-
|
77
|
-
puts "No such ticket branch"
|
112
|
+
puts `git branch -d #{existing_branch}`
|
78
113
|
exit 0
|
79
114
|
end
|
80
115
|
|
81
|
-
|
82
|
-
|
83
|
-
|
116
|
+
command :checkout do |args|
|
117
|
+
parse_args(args)
|
118
|
+
assert_branch_exists
|
119
|
+
|
120
|
+
`git checkout #{existing_branch}`
|
84
121
|
end
|
85
122
|
|
86
|
-
|
123
|
+
command :main do |args|
|
124
|
+
parse_args(args)
|
125
|
+
|
126
|
+
Commandant.run(:help) if $help
|
127
|
+
Commandant.run(:branch) if $branch
|
128
|
+
Commandant.run(:list) if $list
|
129
|
+
Commandant.run(:delete) if $delete
|
130
|
+
|
131
|
+
puts "Error: Unknown command #{args.first}"
|
132
|
+
puts "Available commands: #{Commandant::COMMANDS.keys.sort_by{|k| k.to_s} * ', '}"
|
133
|
+
puts
|
134
|
+
Commandant.run(:help)
|
135
|
+
end
|
136
|
+
|
137
|
+
add_alias :br => :branch, :co => :checkout, :ls => :list, :rm => :delete
|
138
|
+
|
139
|
+
run
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
7
|
+
- 2
|
8
8
|
- 0
|
9
|
-
version: 0.
|
9
|
+
version: 0.2.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Rein Henrichs
|
@@ -14,10 +14,21 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-05-21 00:00:00 -07:00
|
18
18
|
default_executable: git-ticket
|
19
|
-
dependencies:
|
20
|
-
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: commandant
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
version: "0"
|
30
|
+
type: :runtime
|
31
|
+
version_requirements: *id001
|
21
32
|
description: Checkout, create, delete or list ticket branches
|
22
33
|
email: reinh@reinh.com
|
23
34
|
executables:
|