hub 1.12.0 → 1.12.2

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: 31c0677c16aef1654f0bb45debbd4bb13711b80c
4
+ data.tar.gz: b05264bdc353d8ba0875402951cf5fcb869fe0bd
5
+ SHA512:
6
+ metadata.gz: d5b0533962cce93062ca8e65b29d4c916008b7394d3cddcc700cec8b379e26e7f11fb0ab398cdadea7a6d905d81966f9637ecaa416320b2fdabea8db5e482a31
7
+ data.tar.gz: 87fce8fb1670724bcdb9c169df01998be68fbd260341529a2f8677d669575256e6f5df2a1af900e90f52b67a7172641e8554ece4d296a8111552757895eb9ab7
data/README.md CHANGED
@@ -235,7 +235,7 @@ superpowers:
235
235
  ### git checkout
236
236
 
237
237
  $ git checkout https://github.com/defunkt/hub/pull/73
238
- > git remote add -f -t feature git://github:com/mislav/hub.git
238
+ > git remote add -f -t feature mislav git://github.com/mislav/hub.git
239
239
  > git checkout --track -B mislav-feature mislav/feature
240
240
 
241
241
  $ git checkout https://github.com/defunkt/hub/pull/73 custom-branch-name
data/Rakefile CHANGED
@@ -157,6 +157,7 @@ end
157
157
  desc "Publish to Homebrew"
158
158
  task :homebrew do
159
159
  require File.expand_path('../lib/hub/version', __FILE__)
160
+ ENV['RUBYOPT'] = ''
160
161
  Dir.chdir `brew --prefix`.chomp do
161
162
  sh 'git checkout -q master'
162
163
  sh 'git pull -q origin master'
@@ -172,9 +173,9 @@ task :homebrew do
172
173
 
173
174
  branch = "hub-v#{Hub::VERSION}"
174
175
  sh "git checkout -q -B #{branch}"
175
- sh "git commit -m 'hub v#{Hub::VERSION}' -- #{formula_file}"
176
+ sh "git commit -m 'hub #{Hub::VERSION}' -- #{formula_file}"
176
177
  sh "git push -u mislav #{branch}"
177
- sh "hub pull-request -m 'upgrade hub to v#{Hub::VERSION}'"
178
+ sh "hub pull-request -m 'hub #{Hub::VERSION}'"
178
179
 
179
180
  sh "git checkout -q master"
180
181
  end
data/bin/hub CHANGED
@@ -3,5 +3,7 @@
3
3
  # hub(1)
4
4
  # alias git=hub
5
5
 
6
+ Encoding.default_external = 'UTF-8' if defined?(Encoding)
7
+
6
8
  require 'hub'
7
9
  Hub::Runner.execute(*ARGV)
@@ -1,3 +1,5 @@
1
+ require 'tempfile'
2
+
1
3
  module Hub
2
4
  # The Commands module houses the git commands that hub
3
5
  # lovingly wraps. If a method exists here, it is expected to have a
@@ -220,7 +222,7 @@ module Hub
220
222
  when 0
221
223
  default_message = commit_summary = nil
222
224
  when 1
223
- format = '%w(78,0,0)%s%n%+b'
225
+ format = '%s%n%+b'
224
226
  default_message = git_command "show -s --format='#{format}' #{commits.first}"
225
227
  commit_summary = nil
226
228
  else
@@ -230,14 +232,14 @@ module Hub
230
232
  [format, base_branch, remote_branch]
231
233
  end
232
234
 
233
- options[:title], options[:body] = pullrequest_editmsg(commit_summary) { |msg, initial_message|
235
+ options[:title], options[:body] = pullrequest_editmsg(commit_summary) { |msg, initial_message, cc|
234
236
  initial_message ||= default_message
235
237
  msg.puts initial_message if initial_message
236
238
  msg.puts ""
237
- msg.puts "# Requesting a pull to #{base_project.owner}:#{options[:base]} from #{options[:head]}"
238
- msg.puts "#"
239
- msg.puts "# Write a message for this pull request. The first block"
240
- msg.puts "# of text is the title and the rest is description."
239
+ msg.puts "#{cc} Requesting a pull to #{base_project.owner}:#{options[:base]} from #{options[:head]}"
240
+ msg.puts "#{cc}"
241
+ msg.puts "#{cc} Write a message for this pull request. The first block"
242
+ msg.puts "#{cc} of text is the title and the rest is description."
241
243
  }
242
244
  end
243
245
 
@@ -443,8 +445,9 @@ module Hub
443
445
  user, branch = pull_data['head']['label'].split(':', 2)
444
446
  abort "Error: #{user}'s fork is not available anymore" unless pull_data['head']['repo']
445
447
 
446
- url = github_project(url.project_name, user).git_url(:private => pull_data['head']['repo']['private'],
447
- :https => https_protocol?)
448
+ repo_name = pull_data['head']['repo']['name']
449
+ url = github_project(repo_name, user).git_url(:private => pull_data['head']['repo']['private'],
450
+ :https => https_protocol?)
448
451
 
449
452
  merge_head = "#{user}/#{branch}"
450
453
  args.before ['fetch', url, "+refs/heads/#{branch}:refs/remotes/#{merge_head}"]
@@ -495,15 +498,19 @@ module Hub
495
498
  # ... downloads patch via API ...
496
499
  # > git am /tmp/55.patch
497
500
  def am(args)
498
- if url = args.find { |a| a =~ %r{^https?://(gist\.)?github\.com/} }
499
- idx = args.index(url)
500
- if $1 == 'gist.'
501
- path_parts = $'.sub(/#.*/, '').split('/')
502
- gist_id = path_parts.last
501
+ gh_url = nil
502
+ idx = args.index { |arg|
503
+ gh_url = if arg =~ %r{^https?://gist\.github\.com/} then URI(arg)
504
+ else resolve_github_url(arg)
505
+ end
506
+ }
507
+
508
+ if gh_url
509
+ if "gist.github.com" == gh_url.host
510
+ gist_id = gh_url.path.split('/').last
503
511
  patch_name = "gist-#{gist_id}.txt"
504
512
  patch = api_client.gist_raw(gist_id)
505
513
  else
506
- gh_url = resolve_github_url(url)
507
514
  case gh_url.project_path
508
515
  when /^pull\/(\d+)/
509
516
  pull_id = $1.to_i
@@ -518,7 +525,7 @@ module Hub
518
525
  end
519
526
  end
520
527
 
521
- patch_file = File.join(tmp_dir, patch_name)
528
+ patch_file = Tempfile.new(patch_name).path
522
529
  File.open(patch_file, 'w') { |file| file.write(patch) }
523
530
  args[idx] = patch_file
524
531
  end
@@ -685,7 +692,7 @@ module Hub
685
692
  project = local_repo.main_project
686
693
  else
687
694
  # $ hub browse
688
- prefer_upstream = current_branch.master?
695
+ prefer_upstream = current_branch && current_branch.master?
689
696
  branch, project = remote_branch_and_project(method(:github_user), prefer_upstream)
690
697
  branch ||= master_branch
691
698
  end
@@ -732,7 +739,7 @@ module Hub
732
739
  end
733
740
  end
734
741
 
735
- path = '/compare/%s' % range.tr('/', ';')
742
+ path = '/compare/%s' % range
736
743
  project.web_url(path, api_client.config.method(:protocol))
737
744
  end
738
745
  end
@@ -807,7 +814,7 @@ module Hub
807
814
  command = args.words[1]
808
815
 
809
816
  if command == 'hub' || custom_command?(command)
810
- puts hub_manpage
817
+ paginated_puts hub_manpage
811
818
  exit
812
819
  elsif command.nil?
813
820
  if args.has_flag?('-a', '--all')
@@ -815,8 +822,11 @@ module Hub
815
822
  args.after 'echo', ["\nhub custom commands\n"]
816
823
  args.after 'echo', CUSTOM_COMMANDS.map {|cmd| " #{cmd}" }
817
824
  else
818
- ENV['GIT_PAGER'] = '' unless args.has_flag?('-p', '--paginate') # Use `cat`.
819
- puts improved_help_text
825
+ if args.has_flag?('-p', '--paginate')
826
+ paginated_puts improved_help_text
827
+ else
828
+ puts improved_help_text
829
+ end
820
830
  exit
821
831
  end
822
832
  end
@@ -861,14 +871,13 @@ module Hub
861
871
  pattern = /(git|hub) #{Regexp.escape args[0].gsub('-', '\-')}/
862
872
  hub_raw_manpage.each_line { |line|
863
873
  if line =~ pattern
864
- $stderr.print "Usage: "
865
- $stderr.puts line.gsub(/\\f./, '').gsub('\-', '-')
874
+ puts "Usage: " + line.gsub(/\\f./, '').gsub('\-', '-')
866
875
  abort
867
876
  end
868
877
  }
869
878
  abort "Error: couldn't find usage help for #{args[0]}"
870
879
  when '--help'
871
- puts hub_manpage
880
+ paginated_puts hub_manpage
872
881
  exit
873
882
  end
874
883
  end
@@ -1004,7 +1013,7 @@ help
1004
1013
  # in order to turn our raw roff (manpage markup) into something
1005
1014
  # readable on the terminal.
1006
1015
  def groff_command
1007
- cols = terminal_width
1016
+ cols = [terminal_width - 1, 120].min
1008
1017
  "groff -Wall -mtty-char -mandoc -Tascii -rLL=#{cols}n -rLT=#{cols}n"
1009
1018
  end
1010
1019
 
@@ -1023,11 +1032,9 @@ help
1023
1032
  end
1024
1033
  end
1025
1034
 
1026
- # All calls to `puts` in after hooks or commands are paged,
1027
- # git-style.
1028
- def puts(*args)
1035
+ def paginated_puts(*args)
1029
1036
  page_stdout
1030
- super
1037
+ puts(*args)
1031
1038
  end
1032
1039
 
1033
1040
  # http://nex-3.com/posts/73-git-style-automatic-paging-in-ruby
@@ -1042,8 +1049,9 @@ help
1042
1049
  read.close
1043
1050
  write.close
1044
1051
 
1045
- # Don't page if the input is short enough
1046
- ENV['LESS'] = 'FSR'
1052
+ # S: chop long lines
1053
+ # R: support ANSI color escape sequences
1054
+ ENV['LESS'] = 'SR'
1047
1055
 
1048
1056
  # Wait until we have input before we start the pager
1049
1057
  Kernel.select [STDIN]
@@ -1069,17 +1077,18 @@ help
1069
1077
 
1070
1078
  def pullrequest_editmsg(changes)
1071
1079
  message_file = pullrequest_editmsg_file
1080
+ cc = git_commentchar
1072
1081
 
1073
1082
  if valid_editmsg_file?(message_file)
1074
- title, body = read_editmsg(message_file)
1083
+ title, body = read_editmsg(message_file, cc)
1075
1084
  previous_message = [title, body].compact.join("\n\n") if title
1076
1085
  end
1077
1086
 
1078
1087
  File.open(message_file, 'w') { |msg|
1079
- yield msg, previous_message
1088
+ yield msg, previous_message, cc
1080
1089
  if changes
1081
- msg.puts "#\n# Changes:\n#"
1082
- msg.puts changes.gsub(/^/, '# ').gsub(/ +$/, '')
1090
+ msg.puts "#{cc}\n#{cc} Changes:\n#{cc}"
1091
+ msg.puts changes.gsub(/^/, "#{cc} ").gsub(/ +$/, '')
1083
1092
  end
1084
1093
  }
1085
1094
 
@@ -1094,7 +1103,7 @@ help
1094
1103
  abort "error using text editor for pull request message"
1095
1104
  end
1096
1105
 
1097
- title, body = read_editmsg(message_file)
1106
+ title, body = read_editmsg(message_file, cc)
1098
1107
  abort "Aborting due to empty pull request title" unless title
1099
1108
  [title, body]
1100
1109
  end
@@ -1115,11 +1124,11 @@ help
1115
1124
  File.join(git_dir, 'PULLREQ_EDITMSG')
1116
1125
  end
1117
1126
 
1118
- def read_editmsg(file)
1127
+ def read_editmsg(file, commentchar)
1119
1128
  title, body = '', ''
1120
1129
  File.open(file, 'r') { |msg|
1121
1130
  msg.each_line do |line|
1122
- next if line.index('#') == 0
1131
+ next if line.index(commentchar) == 0
1123
1132
  ((title.empty? and line =~ /\S/) ? title : body) << line
1124
1133
  end
1125
1134
  }
@@ -504,6 +504,12 @@ module Hub
504
504
  end
505
505
  end
506
506
 
507
+ def git_commentchar
508
+ if str = git_config('core.commentchar') then str[0,1]
509
+ else '#'
510
+ end
511
+ end
512
+
507
513
  module System
508
514
  # Cross-platform web browser command; respects the value set in $BROWSER.
509
515
  #
@@ -556,10 +562,6 @@ module Hub
556
562
  !which(name).nil?
557
563
  end
558
564
 
559
- def tmp_dir
560
- ENV['TMPDIR'] || ENV['TEMP'] || '/tmp'
561
- end
562
-
563
565
  def terminal_width
564
566
  if unix?
565
567
  width = %x{stty size 2>#{NULL}}.split[1].to_i
@@ -192,12 +192,33 @@ module Hub
192
192
  end
193
193
  end.compact if data['errors']
194
194
  end
195
+ def links
196
+ @links ||= self['link'].to_s.scan(/<(.+?)>; rel="(.+?)"/).inject({}) do |map, (url, rel)|
197
+ map.update(rel.to_sym => URI.parse(url))
198
+ end
199
+ end
200
+ def next_url() links[:next] end
195
201
  end
196
202
 
197
203
  def get url, &block
198
204
  perform_request url, :Get, &block
199
205
  end
200
206
 
207
+ def get_all url, &block
208
+ previous_res = nil
209
+ user = url.user
210
+ while url
211
+ res = get(url, &block)
212
+ if url = res.next_url
213
+ url = url.dup
214
+ url.user = user
215
+ end
216
+ res.data.unshift(*previous_res.data) if res.success? && previous_res
217
+ previous_res = res
218
+ end
219
+ res
220
+ end
221
+
201
222
  def post url, params = nil
202
223
  perform_request url, :Post do |req|
203
224
  if params
@@ -299,7 +320,7 @@ module Hub
299
320
 
300
321
  module OAuth
301
322
  def apply_authentication req, url
302
- if req.path =~ %r{^(/api/v3)?/authorizations$}
323
+ if req.path =~ %r{^(/api/v3)?/authorizations\b}
303
324
  super
304
325
  else
305
326
  user = url.user ? CGI.unescape(url.user) : config.username(url.host)
@@ -317,7 +338,7 @@ module Hub
317
338
  post(auth_url) if !two_factor_code
318
339
 
319
340
  # first try to fetch existing authorization
320
- res = get(auth_url) do |req|
341
+ res = get_all(auth_url) do |req|
321
342
  req['X-GitHub-OTP'] = two_factor_code if two_factor_code
322
343
  end
323
344
  unless res.success?
@@ -25,6 +25,7 @@ preamble
25
25
  def build io
26
26
  io.puts "#!#{ruby_shebang}"
27
27
  io << PREAMBLE
28
+ io.puts "Encoding.default_external = 'UTF-8' if defined?(Encoding)"
28
29
 
29
30
  each_source_file do |filename|
30
31
  File.open(filename, 'r') do |source|
@@ -76,7 +77,7 @@ preamble
76
77
 
77
78
  def ruby_shebang
78
79
  ruby = ruby_executable
79
- `#{ruby_executable} --disable-gems -e0 2>/dev/null`
80
+ `RUBYOPT= #{ruby_executable} --disable-gems -e0 2>/dev/null`
80
81
  if $?.success?
81
82
  "#{ruby} --disable-gems"
82
83
  else
@@ -1,3 +1,3 @@
1
1
  module Hub
2
- Version = VERSION = '1.12.0'
2
+ Version = VERSION = '1.12.2'
3
3
  end
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hub
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.12.0
5
- prerelease:
4
+ version: 1.12.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - Chris Wanstrath
@@ -10,22 +9,37 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2014-03-01 00:00:00.000000000 Z
12
+ date: 2014-07-11 00:00:00.000000000 Z
14
13
  dependencies: []
15
- description: ! " `hub` is a command line utility which adds GitHub knowledge to `git`.\n\n
16
- \ It can used on its own or as a `git` wrapper.\n\n Normal:\n\n $ hub clone
17
- rtomayko/tilt\n\n Expands to:\n $ git clone git://github.com/rtomayko/tilt.git\n\n
18
- \ Wrapping `git`:\n\n $ git clone rack/rack\n\n Expands to:\n $ git
19
- clone git://github.com/rack/rack.git\n"
14
+ description: |2
15
+ `hub` is a command line utility which adds GitHub knowledge to `git`.
16
+
17
+ It can used on its own or as a `git` wrapper.
18
+
19
+ Normal:
20
+
21
+ $ hub clone rtomayko/tilt
22
+
23
+ Expands to:
24
+ $ git clone git://github.com/rtomayko/tilt.git
25
+
26
+ Wrapping `git`:
27
+
28
+ $ git clone rack/rack
29
+
30
+ Expands to:
31
+ $ git clone git://github.com/rack/rack.git
20
32
  email: mislav.marohnic@gmail.com
21
33
  executables:
22
34
  - hub
23
35
  extensions: []
24
36
  extra_rdoc_files: []
25
37
  files:
38
+ - LICENSE
26
39
  - README.md
27
40
  - Rakefile
28
- - LICENSE
41
+ - bin/hub
42
+ - lib/hub.rb
29
43
  - lib/hub/args.rb
30
44
  - lib/hub/commands.rb
31
45
  - lib/hub/context.rb
@@ -36,39 +50,50 @@ files:
36
50
  - lib/hub/ssh_config.rb
37
51
  - lib/hub/standalone.rb
38
52
  - lib/hub/version.rb
39
- - lib/hub.rb
40
- - bin/hub
41
53
  - man/hub.1
42
54
  - man/hub.1.html
43
55
  - man/hub.1.ronn
44
56
  homepage: http://hub.github.com/
45
57
  licenses:
46
58
  - MIT
47
- post_install_message: ! "\n------------------------------------------------------------\n\n
48
- \ You there! Wait, I say!\n =======================\n\n
49
- \ If you are a heavy user of `git` on the command\n line you may want
50
- \ to install `hub` the old\n fashioned way. Faster startup time, you
51
- see.\n\n Check out the installation instructions at\n https://github.com/github/hub#readme
52
- \ under the\n \"Standalone\" section.\n\n Cheers,\n defunkt\n\n------------------------------------------------------------\n\n"
59
+ metadata: {}
60
+ post_install_message: |2+
61
+
62
+ ------------------------------------------------------------
63
+
64
+ You there! Wait, I say!
65
+ =======================
66
+
67
+ If you are a heavy user of `git` on the command
68
+ line you may want to install `hub` the old
69
+ fashioned way. Faster startup time, you see.
70
+
71
+ Check out the installation instructions at
72
+ https://github.com/github/hub#readme under the
73
+ "Standalone" section.
74
+
75
+ Cheers,
76
+ defunkt
77
+
78
+ ------------------------------------------------------------
79
+
53
80
  rdoc_options: []
54
81
  require_paths:
55
82
  - lib
56
83
  required_ruby_version: !ruby/object:Gem::Requirement
57
- none: false
58
84
  requirements:
59
- - - ! '>='
85
+ - - ">="
60
86
  - !ruby/object:Gem::Version
61
87
  version: '0'
62
88
  required_rubygems_version: !ruby/object:Gem::Requirement
63
- none: false
64
89
  requirements:
65
- - - ! '>='
90
+ - - ">="
66
91
  - !ruby/object:Gem::Version
67
92
  version: '0'
68
93
  requirements: []
69
94
  rubyforge_project:
70
- rubygems_version: 1.8.23
95
+ rubygems_version: 2.2.0
71
96
  signing_key:
72
- specification_version: 3
97
+ specification_version: 4
73
98
  summary: Command-line wrapper for git and GitHub
74
99
  test_files: []