git-hub 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/HISTORY.md CHANGED
@@ -1,4 +1,9 @@
1
- ## 0.2.0 (2009-??-??)
1
+ ## 0.2.1 (2010-??-??)
2
+
3
+ * Bugfix: `git clone` flags are now passed through.
4
+ * Bugfix: `git clone` with url and path works.
5
+
6
+ ## 0.2.0 (2009-12-24)
2
7
 
3
8
  * Respected GIT_PAGER and core.pager
4
9
  * Aliased `--help` to `help`
data/README.md CHANGED
@@ -36,7 +36,8 @@ Install
36
36
 
37
37
  `hub` is most easily installed as a standalone script:
38
38
 
39
- curl -s http://defunkt.github.com/hub/standalone > ~/bin/hub && chmod 755 !#:4
39
+ curl -s http://defunkt.github.com/hub/standalone > ~/bin/hub &&
40
+ chmod 755 ~/bin/hub
40
41
 
41
42
  Assuming `~/bin/` is in your `$PATH`, you're ready to roll:
42
43
 
@@ -56,6 +57,17 @@ Though not recommended, `hub` can also be installed as a RubyGem:
56
57
 
57
58
  (Yes, the gem name is `git-hub`.)
58
59
 
60
+ (It's not recommended because of the RubyGems startup time. See [this
61
+ gist][speed] for information.)
62
+
63
+ ### Standalone via RubyGems
64
+
65
+ Yes, the gem name is still `git-hub`:
66
+
67
+ $ gem install git-hub
68
+ $ hub hub standalone > ~/bin/hub && chmod 755 ~/bin/hub
69
+ $ gem uninstall git-hub
70
+
59
71
  ### Source
60
72
 
61
73
  You can also install from source:
@@ -129,6 +141,20 @@ superpowers:
129
141
  > git push staging bert_timeout
130
142
  > git push qa bert_timeout
131
143
 
144
+ ### git browse
145
+
146
+ $ git browse schacon/ticgit
147
+ > open http://github.com/schacon/ticgit
148
+
149
+ $ git browse -p schacon/ticgit
150
+ > open http://github.com/schacon/ticgit
151
+
152
+ $ git browse resque
153
+ > open http://github.com/YOUR_USER/resque
154
+
155
+ $ git browse -p resque
156
+ > open https://github.com:YOUR_USER/resque
157
+
132
158
  ### git help
133
159
 
134
160
  $ git help
@@ -216,3 +242,4 @@ Chris Wanstrath :: chris@ozmm.org :: @defunkt
216
242
 
217
243
  [0]: http://help.github.com/forking/
218
244
  [1]: http://github.com/defunkt/hub/issues
245
+ [speed]: http://gist.github.com/284823
data/lib/hub/commands.rb CHANGED
@@ -44,7 +44,7 @@ module Hub
44
44
  if ORIGIN =~ %r{\bgithub\.com[:/](.+)/(.+).git$}
45
45
  REPO = $2
46
46
  else
47
- REPO = `basename $(pwd)`.chomp
47
+ REPO = File.basename(Dir.pwd)
48
48
  end
49
49
 
50
50
  # $ hub clone rtomayko/tilt
@@ -52,17 +52,35 @@ module Hub
52
52
  #
53
53
  # $ hub clone -p kneath/hemingway
54
54
  # > git clone git@github.com:kneath/hemingway.git
55
+ #
56
+ # $ hub clone tilt
57
+ # > git clone git://github.com/YOUR_LOGIN/tilt.
58
+ #
59
+ # $ hub clone -p github
60
+ # > git clone git@github.com:YOUR_LOGIN/hemingway.git
55
61
  def clone(args)
56
62
  ssh = args.delete('-p')
57
- args[1..-1].each_with_index do |arg, i|
58
- i += 1
59
- if arg.scan('/').size == 1 && !arg.include?(':')
63
+
64
+ last_args = args[1..-1].reject { |arg| arg == "--" }.last(3)
65
+ last_args.each do |arg|
66
+ if arg =~ /^-/
67
+ # Skip mandatory arguments.
68
+ last_args.shift if arg =~ /^(--(ref|o|br|u|t|d)[^=]+|-(o|b|u|d))$/
69
+ next
70
+ end
71
+
72
+ if arg =~ %r{.+?://|.+?@} || File.directory?(arg)
73
+ # Bail out early for URLs and local paths.
74
+ break
75
+ elsif arg.scan('/').size == 1 && !arg.include?(':')
76
+ # $ hub clone rtomayko/tilt
60
77
  url = ssh ? PRIVATE : PUBLIC
61
- args[i] = url % arg.split('/')
78
+ args[args.index(arg)] = url % arg.split('/')
62
79
  break
63
80
  elsif arg !~ /:|\//
81
+ # $ hub clone tilt
64
82
  url = ssh ? PRIVATE : PUBLIC
65
- args[i] = url % [ github_user, arg ]
83
+ args[args.index(arg)] = url % [ github_user, arg ]
66
84
  break
67
85
  end
68
86
  end
@@ -117,6 +135,49 @@ module Hub
117
135
  args.after after
118
136
  end
119
137
 
138
+ # $ hub browse pjhyett/github-services
139
+ # > open http://github.com/pjhyett/github-services
140
+ #
141
+ # $ hub browse -p pjhyett/github-fi
142
+ # > open https://github.com/pjhyett/github-fi
143
+ #
144
+ # $ hub browse github-services
145
+ # > open http://github.com/YOUR_LOGIN/github-services
146
+ #
147
+ # $ hub browse -p github-fi
148
+ # > open https://github.com/YOUR_LOGIN/github-fi
149
+ def browse(args)
150
+ protocol = args.delete('-p') ? 'https' : 'http'
151
+
152
+ if args.last.include? '/'
153
+ # $ hub browse pjhyett/github-services
154
+ user, repo = args.last.split('/')
155
+ else
156
+ # $ hub browse github-services
157
+ user = github_user
158
+ repo = args.last
159
+ end
160
+
161
+ browser = ENV['BROWSER'] || "open"
162
+ exec "#{browser} #{protocol}://github.com/#{user}/#{repo}"
163
+ end
164
+
165
+ # $ hub hub standalone
166
+ # Prints the "standalone" version of hub for an easy, memorable
167
+ # installation sequence:
168
+ #
169
+ # $ gem install git-hub
170
+ # $ hub standalone > ~/bin/standalone
171
+ # $ gem uninstall git-hub
172
+ def hub(args)
173
+ return help(args) unless args[1] == 'standalone'
174
+ require 'hub/standalone'
175
+ puts Hub::Standalone.build
176
+ exit
177
+ rescue LoadError
178
+ abort "hub is running in standalone mode."
179
+ end
180
+
120
181
  def alias(args)
121
182
  shells = {
122
183
  'sh' => 'alias git=hub',
data/lib/hub/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Hub
2
- Version = '0.2.0'
2
+ Version = '0.3.0'
3
3
  end
data/man/hub.1 CHANGED
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ron/v0.3
2
2
  .\" http://github.com/rtomayko/ron/
3
3
  .
4
- .TH "HUB" "1" "December 2009" "DEFUNKT" "Git Manual"
4
+ .TH "HUB" "1" "January 2010" "DEFUNKT" "Git Manual"
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBhub\fR \-\- git + hub = github
@@ -24,6 +24,9 @@
24
24
  \fBgit remote add\fR [\fB\-p\fR] \fIOPTIONS\fR \fIUSER\fR[/\fIREPOSITORY\fR]
25
25
  .
26
26
  .br
27
+ \fBgit browse\fR [\fB\-p\fR] [\fIUSER\fR/]\fIREPOSITORY\fR
28
+ .
29
+ .br
27
30
  .
28
31
  .SH "DESCRIPTION"
29
32
  \fBhub\fR enhances various \fBgit\fR commands with GitHub remote expansion. The
@@ -61,6 +64,12 @@ Push \fIREF\fR to each of \fIREMOTE\-1\fR through \fIREMOTE\-N\fR by executing
61
64
  multiple \fBgit push\fR commands.
62
65
  .
63
66
  .TP
67
+ \fBgit browse\fR [\fB\-p\fR] [\fIUSER\fR\fB/\fR]\fIREPOSITORY\fR
68
+ Open repository's GitHub page in the system's default web browser
69
+ using \fBopen(1)\fR or the \fBBROWSER\fR env variable. Use \fB\-p\fR to open a
70
+ page with https.
71
+ .
72
+ .TP
64
73
  \fBgit help\fR
65
74
  Display enhanced git\-help(1).
66
75
  .
@@ -159,6 +168,23 @@ $ git push origin,staging,qa bert_timeout
159
168
  .
160
169
  .fi
161
170
  .
171
+ .SS "git browse"
172
+ .
173
+ .nf
174
+
175
+ $ git browse schacon/ticgit
176
+ > open http://github.com/schacon/ticgit
177
+ $ git browse \-p schacon/ticgit
178
+ > open http://github.com/schacon/ticgit
179
+
180
+ $ git browse resque
181
+ > open http://github.com/YOUR_USER/resque
182
+
183
+ $ git browse \-p resque
184
+ > open https://github.com:YOUR_USER/resque
185
+ .
186
+ .fi
187
+ .
162
188
  .SS "git help"
163
189
  .
164
190
  .nf
data/man/hub.1.html CHANGED
@@ -73,6 +73,7 @@
73
73
  <p><code>git init -g</code> <var>OPTIONS</var> <br>
74
74
  <code>git clone</code> [<code>-p</code>] <var>OPTIONS</var> [<var>USER</var>/]<var>REPOSITORY</var> <var>DIRECTORY</var> <br>
75
75
  <code>git remote add</code> [<code>-p</code>] <var>OPTIONS</var> <var>USER</var>[/<var>REPOSITORY</var>] <br>
76
+ <code>git browse</code> [<code>-p</code>] [<var>USER</var>/]<var>REPOSITORY</var> <br>
76
77
  </p>
77
78
 
78
79
  <h2>DESCRIPTION</h2>
@@ -119,6 +120,12 @@ current working directory is used. With <code>-p</code>, use private remote
119
120
  </dt>
120
121
  <dd><p>Push <var>REF</var> to each of <var>REMOTE-1</var> through <var>REMOTE-N</var> by executing
121
122
  multiple <code>git push</code> commands.</p></dd>
123
+ <dt>
124
+ <code>git browse</code> [<code>-p</code>] [<var>USER</var><code>/</code>]<var>REPOSITORY</var>
125
+ </dt>
126
+ <dd><p>Open repository's GitHub page in the system's default web browser
127
+ using <code>open(1)</code> or the <code>BROWSER</code> env variable. Use <code>-p</code> to open a
128
+ page with https.</p></dd>
122
129
  <dt><code>git help</code></dt>
123
130
  <dd><p>Display enhanced git-help(1).</p></dd>
124
131
  </dl>
@@ -186,6 +193,21 @@ $ git remote add -p rtomayko
186
193
  &gt; git push qa bert_timeout
187
194
  </code></pre>
188
195
 
196
+ <h3>git browse</h3>
197
+
198
+ <pre><code>$ git browse schacon/ticgit
199
+ &gt; open http://github.com/schacon/ticgit
200
+
201
+ $ git browse -p schacon/ticgit
202
+ &gt; open http://github.com/schacon/ticgit
203
+
204
+ $ git browse resque
205
+ &gt; open http://github.com/YOUR_USER/resque
206
+
207
+ $ git browse -p resque
208
+ &gt; open https://github.com:YOUR_USER/resque
209
+ </code></pre>
210
+
189
211
  <h3>git help</h3>
190
212
 
191
213
  <pre><code>$ git help
@@ -210,7 +232,7 @@ $ git help hub
210
232
 
211
233
  <ol class='foot man'>
212
234
  <li class='tl'>DEFUNKT</li>
213
- <li class='tc'>December 2009</li>
235
+ <li class='tc'>January 2010</li>
214
236
  <li class='tr'>hub(1)</li>
215
237
  </ol>
216
238
 
data/man/hub.1.ron CHANGED
@@ -9,6 +9,7 @@ hub(1) -- git + hub = github
9
9
  `git init -g` <OPTIONS>
10
10
  `git clone` [`-p`] <OPTIONS> [<USER>/]<REPOSITORY> <DIRECTORY>
11
11
  `git remote add` [`-p`] <OPTIONS> <USER>[/<REPOSITORY>]
12
+ `git browse` [`-p`] [<USER>/]<REPOSITORY>
12
13
 
13
14
  ## DESCRIPTION
14
15
 
@@ -44,6 +45,11 @@ After configuring the alias, the following commands have superpowers:
44
45
  Push <REF> to each of <REMOTE-1> through <REMOTE-N> by executing
45
46
  multiple `git push` commands.
46
47
 
48
+ * `git browse` [`-p`] [<USER>`/`]<REPOSITORY>:
49
+ Open repository's GitHub page in the system's default web browser
50
+ using `open(1)` or the `BROWSER` env variable. Use `-p` to open a
51
+ page with https.
52
+
47
53
  * `git help`:
48
54
  Display enhanced git-help(1).
49
55
 
@@ -102,6 +108,20 @@ cloning:
102
108
  > git push staging bert_timeout
103
109
  > git push qa bert_timeout
104
110
 
111
+ ### git browse
112
+
113
+ $ git browse schacon/ticgit
114
+ > open http://github.com/schacon/ticgit
115
+
116
+ $ git browse -p schacon/ticgit
117
+ > open http://github.com/schacon/ticgit
118
+
119
+ $ git browse resque
120
+ > open http://github.com/YOUR_USER/resque
121
+
122
+ $ git browse -p resque
123
+ > open https://github.com:YOUR_USER/resque
124
+
105
125
  ### git help
106
126
 
107
127
  $ git help
data/test/hub_test.rb CHANGED
@@ -30,6 +30,12 @@ class HubTest < Test::Unit::TestCase
30
30
  assert_command input, command
31
31
  end
32
32
 
33
+ def test_clone_with_arguments_and_path
34
+ input = "clone --bare -o master -- resque"
35
+ command = "git clone --bare -o master -- git://github.com/tpw/resque.git"
36
+ assert_command input, command
37
+ end
38
+
33
39
  def test_your_private_clone_fails_without_config
34
40
  out = hub("clone -p mustache") do
35
41
  Hub::Commands::USER.replace("")
@@ -58,6 +64,18 @@ class HubTest < Test::Unit::TestCase
58
64
  assert_command input, command
59
65
  end
60
66
 
67
+ def test_normal_public_clone_with_path
68
+ input = "clone git://github.com/rtomayko/ron.git ron-dev"
69
+ command = "git clone git://github.com/rtomayko/ron.git ron-dev"
70
+ assert_command input, command
71
+ end
72
+
73
+ def test_normal_clone_from_path
74
+ input = "clone ./test"
75
+ command = "git clone ./test"
76
+ assert_command input, command
77
+ end
78
+
61
79
  def test_private_remote
62
80
  input = "remote add -p rtomayko"
63
81
  command = "git remote add rtomayko git@github.com:rtomayko/hub.git"
@@ -99,7 +117,7 @@ class HubTest < Test::Unit::TestCase
99
117
  def test_version
100
118
  out = hub('--version')
101
119
  assert_includes "git version 1.6", out
102
- assert_includes "hub version 0.2", out
120
+ assert_includes "hub version #{Hub::Version}", out
103
121
  end
104
122
 
105
123
  def test_help
@@ -128,4 +146,33 @@ config
128
146
  end
129
147
  assert_equal "** Can't find groff(1)\n", help_manpage
130
148
  end
149
+
150
+ def test_hub_standalone
151
+ help_standalone = hub("hub standalone")
152
+ assert_equal Hub::Standalone.build, help_standalone
153
+ end
154
+
155
+ def test_hub_open
156
+ input = "browse mojombo/bert"
157
+ command = "http://github.com/mojombo/bert\n"
158
+ assert_equal command, hub(input) { ENV['BROWSER'] = 'echo' }
159
+ end
160
+
161
+ def test_hub_open_private
162
+ input = "browse -p bmizerany/sinatra"
163
+ command = "https://github.com/bmizerany/sinatra\n"
164
+ assert_equal command, hub(input) { ENV['BROWSER'] = 'echo' }
165
+ end
166
+
167
+ def test_hub_open_self
168
+ input = "browse resque"
169
+ command = "http://github.com/tpw/resque\n"
170
+ assert_equal command, hub(input) { ENV['BROWSER'] = 'echo' }
171
+ end
172
+
173
+ def test_hub_open_self_private
174
+ input = "browse -p github"
175
+ command = "https://github.com/tpw/github\n"
176
+ assert_equal command, hub(input) { ENV['BROWSER'] = 'echo' }
177
+ end
131
178
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git-hub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Wanstrath
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-12-24 00:00:00 -05:00
12
+ date: 2010-01-23 00:00:00 -08:00
13
13
  default_executable: hub
14
14
  dependencies: []
15
15