defunkt-github 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
data/bin/gh CHANGED
@@ -1,5 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require File.dirname(__FILE__) + '/../lib/github'
3
+ lib_dir = File.join(File.dirname(__FILE__), '..', 'lib')
4
+ $LOAD_PATH.unshift lib_dir if File.directory?(lib_dir)
5
+
6
+ require 'github'
4
7
 
5
8
  GitHub.activate ARGV
data/bin/github CHANGED
@@ -1,5 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require File.dirname(__FILE__) + '/../lib/github'
3
+ lib_dir = File.join(File.dirname(__FILE__), '..', 'lib')
4
+ $LOAD_PATH.unshift lib_dir if File.directory?(lib_dir)
5
+
6
+ require 'github'
4
7
 
5
8
  GitHub.activate ARGV
data/github-gem.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "github"
3
- s.version = "0.3.3"
3
+ s.version = "0.3.4"
4
4
 
5
5
  s.specification_version = 2 if s.respond_to? :specification_version=
6
6
 
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
12
12
  s.email = %q{chris@ozmm.org}
13
13
  s.executables = ["github", "gh"]
14
14
  s.extra_rdoc_files = ["bin/github", "bin/gh", "lib/github/extensions.rb", "lib/github/command.rb", "lib/github/helper.rb", "lib/github.rb", "LICENSE", "README"]
15
- s.files = ["bin/github", "commands/network.rb", "commands/commands.rb", "commands/helpers.rb", "lib/github/extensions.rb", "lib/github/command.rb", "lib/github/helper.rb", "lib/github.rb", "LICENSE", "Manifest", "README", "spec/command_spec.rb", "spec/extensions_spec.rb", "spec/github_spec.rb", "spec/helper_spec.rb", "spec/spec_helper.rb", "spec/ui_spec.rb", "spec/windoze_spec.rb", "github-gem.gemspec"]
15
+ s.files = ["bin/github", "lib/commands/network.rb", "lib/commands/commands.rb", "lib/commands/helpers.rb", "lib/github/extensions.rb", "lib/github/command.rb", "lib/github/helper.rb", "lib/github.rb", "LICENSE", "Manifest", "README", "spec/command_spec.rb", "spec/extensions_spec.rb", "spec/github_spec.rb", "spec/helper_spec.rb", "spec/spec_helper.rb", "spec/ui_spec.rb", "spec/windoze_spec.rb", "github-gem.gemspec"]
16
16
  s.has_rdoc = true
17
17
  s.homepage = %q{http://github.com/}
18
18
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Github", "--main", "README"]
@@ -22,5 +22,5 @@ Gem::Specification.new do |s|
22
22
  s.summary = %q{The official `github` command line helper for simplifying your GitHub experience.}
23
23
 
24
24
  # s.add_dependency(%q<launchy>, [">= 0"])
25
- s.add_dependency('json', [">= 0"])
25
+ s.add_dependency('json_pure', [">= 0"])
26
26
  end
@@ -37,7 +37,7 @@ command :info do
37
37
  puts "== Info for #{helper.project}"
38
38
  puts "You are #{helper.owner}"
39
39
  puts "Currently tracking:"
40
- helper.tracking.sort { |(a,),(b,)| a == :origin ? -1 : b == :origin ? 1 : a.to_s <=> b.to_s }.each do |(name,user_or_url)|
40
+ helper.tracking.sort { |(a,),(b,)| a == helper.origin ? -1 : b == helper.origin ? 1 : a.to_s <=> b.to_s }.each do |(name,user_or_url)|
41
41
  puts " - #{user_or_url} (as #{name})"
42
42
  end
43
43
  end
@@ -108,9 +108,9 @@ command :pull do |user, branch|
108
108
  if options[:merge]
109
109
  git_exec "pull #{user} #{branch}"
110
110
  else
111
- puts "Switching to #{user}/#{branch}"
112
- git "update-ref refs/heads/#{user}/#{branch} HEAD"
113
- git "checkout #{user}/#{branch}"
111
+ puts "Switching to #{user}-#{branch}"
112
+ git "fetch #{user}"
113
+ git_exec "checkout -b #{user}/#{branch} #{user}/#{branch}"
114
114
  end
115
115
  end
116
116
 
@@ -135,13 +135,57 @@ end
135
135
 
136
136
  desc "Generate the text for a pull request."
137
137
  usage "github pull-request [user] [branch]"
138
- command :'pull-request' do |user, branch|
138
+ command 'pull-request' do |user, branch|
139
139
  if helper.project
140
140
  die "Specify a user for the pull request" if user.nil?
141
141
  user, branch = user.split('/', 2) if branch.nil?
142
142
  branch ||= 'master'
143
143
  GitHub.invoke(:track, user) unless helper.tracking?(user)
144
144
 
145
- git_exec "request-pull #{user}/#{branch} origin"
145
+ git_exec "request-pull #{user}/#{branch} #{helper.origin}"
146
146
  end
147
147
  end
148
+
149
+ desc "Create a new, empty GitHub repository"
150
+ usage "github create [repo]"
151
+ flags :markdown => 'Create README.markdown'
152
+ flags :mdown => 'Create README.mdown'
153
+ flags :textile => 'Create README.textile'
154
+ flags :rdoc => 'Create README.rdoc'
155
+ flags :rst => 'Create README.rst'
156
+ command :create do |repo|
157
+ sh "curl -F 'repository[name]=#{repo}' -F 'login=#{github_user}' -F 'token=#{github_token}' http://github.com/repositories"
158
+ mkdir repo
159
+ cd repo
160
+ git "init"
161
+ extension = options.keys.first
162
+ touch extension ? "README.#{extension}" : "README"
163
+ git "add *"
164
+ git "commit -m 'First commit!'"
165
+ git "remote add origin git@github.com:#{github_user}/#{repo}.git"
166
+ git_exec "push origin master"
167
+ end
168
+
169
+ desc "Forks a GitHub repository"
170
+ usage "github fork [user]/[repo]"
171
+ command :fork do |user, repo|
172
+ if repo.nil?
173
+ user, repo = user.split('/')
174
+ end
175
+
176
+ sh "curl -F 'login=#{github_user}' -F 'token=#{github_token}' http://github.com/#{user}/#{repo}/fork"
177
+ puts "Giving GitHub a moment to create the fork..."
178
+ sleep 3
179
+ git_exec "clone git@github.com:#{github_user}/#{repo}.git"
180
+ end
181
+
182
+ desc "Create a new GitHub repository from the current local repository"
183
+ command 'create-from-local' do
184
+ cwd = sh "pwd"
185
+ repo = File.basename(cwd)
186
+ is_repo = !git("status").match(/fatal/)
187
+ raise "Not a git repository. Use gh create instead" unless is_repo
188
+ sh "curl -F 'repository[name]=#{repo}' -F 'login=#{github_user}' -F 'token=#{github_token}' http://github.com/repositories"
189
+ git "remote add origin git@github.com:#{github_user}/#{repo}.git"
190
+ git_exec "push origin master"
191
+ end
@@ -1,3 +1,5 @@
1
+ DEV_NULL = File.exist?("/dev/null") ? "/dev/null" : "nul:"
2
+
1
3
  helper :user_and_repo_from do |url|
2
4
  case url
3
5
  when %r|^git://github\.com/([^/]+/[^/]+)$|: $1.split('/')
@@ -17,10 +19,16 @@ helper :repo_for do |remote|
17
19
  user_and_repo_for(remote).try.last
18
20
  end
19
21
 
22
+ helper :origin do
23
+ orig = `git config --get github.origin`.chomp
24
+ orig = nil if orig.empty?
25
+ orig || 'origin'
26
+ end
27
+
20
28
  helper :project do
21
- repo = repo_for(:origin)
29
+ repo = repo_for(origin)
22
30
  if repo.nil?
23
- if url_for(:origin) == ""
31
+ if url_for(origin) == ""
24
32
  STDERR.puts "Error: missing remote 'origin'"
25
33
  else
26
34
  STDERR.puts "Error: remote 'origin' is not a github URL"
@@ -39,7 +47,7 @@ helper :local_heads do
39
47
  end
40
48
 
41
49
  helper :has_commit? do |sha|
42
- `git show #{sha} >/dev/null 2>/dev/null`
50
+ `git show #{sha} >#{DEV_NULL} 2>#{DEV_NULL}`
43
51
  $?.exitstatus == 0
44
52
  end
45
53
 
@@ -135,7 +143,7 @@ helper :print_commits do |our_commits, options|
135
143
  end
136
144
 
137
145
  helper :applies_cleanly do |sha|
138
- `git diff ...#{sha} | git apply --check >/dev/null 2>/dev/null`
146
+ `git diff ...#{sha} | git apply --check >#{DEV_NULL} 2>#{DEV_NULL}`
139
147
  $?.exitstatus == 0
140
148
  end
141
149
 
@@ -150,7 +158,7 @@ helper :remotes do
150
158
  end
151
159
 
152
160
  helper :remote_branches_for do |user|
153
- `git ls-remote -h #{user} 2> /dev/null`.split(/\n/).inject({}) do |memo, line|
161
+ `git ls-remote -h #{user} 2> #{DEV_NULL}`.split(/\n/).inject({}) do |memo, line|
154
162
  hash, head = line.split(/\t/, 2)
155
163
  head = head[%r{refs/heads/(.+)$},1] unless head.nil?
156
164
  memo[head] = hash unless head.nil?
@@ -167,7 +175,7 @@ helper :branch_dirty? do
167
175
  # originally, we were going to use git-ls-files but that could only
168
176
  # report modified track files...not files that have been staged
169
177
  # for committal
170
- !(system("git diff --quiet 2>/dev/null") or !system("git diff --cached --quiet 2>/dev/null"))
178
+ !(system("git diff --quiet 2>#{DEV_NULL}") or !system("git diff --cached --quiet 2>#{DEV_NULL}"))
171
179
  end
172
180
 
173
181
  helper :tracking do
@@ -186,7 +194,7 @@ helper :tracking? do |user|
186
194
  end
187
195
 
188
196
  helper :owner do
189
- user_for(:origin)
197
+ user_for(origin)
190
198
  end
191
199
 
192
200
  helper :current_branch do
@@ -239,6 +247,9 @@ helper :network_meta_for do |user|
239
247
  "http://github.com/#{user}/#{project}/network_meta"
240
248
  end
241
249
 
250
+ helper :network_members_for do |user|
251
+ "http://github.com/#{user}/#{project}/network/members.json"
252
+ end
242
253
 
243
254
  helper :has_launchy? do |blk|
244
255
  begin
@@ -290,8 +301,8 @@ These are all the commits that other people have pushed that you have not
290
301
  applied or ignored yet (see 'github ignore'). Some things you might want to do:
291
302
 
292
303
  * You can run 'github fetch user/branch' (sans '~N') to pull into a local branch for testing
293
- * You can run 'git cherry-pick [SHA]' to apply a single patch
294
- * You can run 'git merge user/branch' to merge a commit and all the '~N' variants.
304
+ * You can run 'github cherry-pick [SHA]' to apply a single patch
305
+ * You can run 'github merge user/branch' to merge a commit and all the '~N' variants.
295
306
  * You can ignore all of a projects commits with 'github ignore ..user/branch'
296
307
  =========================================================================================
297
308
 
@@ -303,9 +314,7 @@ helper :argv do
303
314
  end
304
315
 
305
316
  helper :network_members do
306
- get_network_data(owner, {})['users'].map do |hash|
307
- hash['name']
308
- end
317
+ get_network_members(owner, {}).map {|member| member['owner']['login'] }
309
318
  end
310
319
 
311
320
 
@@ -314,12 +323,24 @@ helper :get_network_data do |user, options|
314
323
  return get_cache
315
324
  end
316
325
  if cache_network_data(options)
317
- return cache_data(user)
326
+ begin
327
+ return cache_data(user)
328
+ rescue SocketError
329
+ STDERR.puts "*** Warning: There was a problem accessing the network."
330
+ rv = get_cache
331
+ STDERR.puts "Using cached data."
332
+ rv
333
+ end
318
334
  else
319
335
  return get_cache
320
336
  end
321
337
  end
322
338
 
339
+ helper :get_network_members do |user, options|
340
+ json = Kernel.open(network_members_for(user)).read
341
+ JSON.parse(json)["users"]
342
+ end
343
+
323
344
  helper :cache_commits do |commits|
324
345
  File.open( commits_cache_path, 'w' ) do |out|
325
346
  out.write(commits.to_yaml)
@@ -20,9 +20,9 @@ command :network do |command, user|
20
20
  when 'web'
21
21
  helper.open helper.network_page_for(user)
22
22
  when 'list'
23
- data = helper.get_network_data(user, options)
24
- data['users'].each do |hsh|
25
- puts [ hsh['name'].ljust(20), hsh['heads'].map {|a| a['name']}.uniq.join(', ') ].join(' ')
23
+ members = helper.get_network_members(user, options)
24
+ members.each do |hsh|
25
+ puts hsh["owner"]["login"]
26
26
  end
27
27
  when 'fetch'
28
28
  # fetch each remote we don't have
data/lib/github.rb CHANGED
@@ -21,9 +21,10 @@ require 'yaml'
21
21
  module GitHub
22
22
  extend self
23
23
 
24
- BasePath = File.expand_path(File.dirname(__FILE__) + '/..')
24
+ BasePath = File.expand_path(File.dirname(__FILE__))
25
25
 
26
26
  def command(command, options = {}, &block)
27
+ command = command.to_s
27
28
  debug "Registered `#{command}`"
28
29
  descriptions[command] = @next_description if @next_description
29
30
  @next_description = nil
@@ -31,7 +32,7 @@ module GitHub
31
32
  usage_descriptions[command] = @next_usage if @next_usage
32
33
  @next_flags = nil
33
34
  @next_usage = []
34
- commands[command.to_s] = Command.new(block)
35
+ commands[command] = Command.new(block)
35
36
  Array(options[:alias] || options[:aliases]).each do |command_alias|
36
37
  commands[command_alias.to_s] = commands[command.to_s]
37
38
  end
@@ -143,7 +144,7 @@ module GitHub
143
144
  end
144
145
 
145
146
  def load(file)
146
- file[0] == ?/ ? path = file : path = BasePath + "/commands/#{file}"
147
+ file[0] =~ /^\// ? path = file : path = BasePath + "/commands/#{File.basename(file)}"
147
148
  data = File.read(path)
148
149
  GitHub.module_eval data, path
149
150
  end
@@ -1,3 +1,5 @@
1
+ require 'fileutils'
2
+
1
3
  if RUBY_PLATFORM =~ /mswin|mingw/
2
4
  begin
3
5
  require 'win32/open3'
@@ -11,6 +13,8 @@ end
11
13
 
12
14
  module GitHub
13
15
  class Command
16
+ include FileUtils
17
+
14
18
  def initialize(block)
15
19
  (class << self;self end).send :define_method, :command, &block
16
20
  end
@@ -66,6 +70,10 @@ module GitHub
66
70
  git("config --get github.user")
67
71
  end
68
72
 
73
+ def github_token
74
+ git("config --get github.token")
75
+ end
76
+
69
77
  def shell_user
70
78
  ENV['USER']
71
79
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: defunkt-github
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Wanstrath, Kevin Ballard, Scott Chacon
@@ -13,7 +13,7 @@ date: 2008-05-18 00:00:00 -07:00
13
13
  default_executable: gh
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: json
16
+ name: json_pure
17
17
  version_requirement:
18
18
  version_requirements: !ruby/object:Gem::Requirement
19
19
  requirements:
@@ -39,9 +39,9 @@ extra_rdoc_files:
39
39
  - README
40
40
  files:
41
41
  - bin/github
42
- - commands/network.rb
43
- - commands/commands.rb
44
- - commands/helpers.rb
42
+ - lib/commands/network.rb
43
+ - lib/commands/commands.rb
44
+ - lib/commands/helpers.rb
45
45
  - lib/github/extensions.rb
46
46
  - lib/github/command.rb
47
47
  - lib/github/helper.rb