github 0.1.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +37 -0
- data/Manifest +33 -12
- data/README.md +187 -0
- data/Rakefile +44 -0
- data/bin/gh +8 -0
- data/bin/github +4 -1
- data/github.gemspec +29 -34
- data/lib/commands/commands.rb +249 -0
- data/lib/commands/helpers.rb +486 -0
- data/lib/commands/issues.rb +17 -0
- data/lib/commands/network.rb +110 -0
- data/lib/github.rb +117 -29
- data/lib/github/command.rb +69 -14
- data/lib/github/extensions.rb +39 -0
- data/lib/github/ui.rb +19 -0
- data/setup.rb +1551 -0
- data/spec/command_spec.rb +82 -0
- data/spec/commands/command_browse_spec.rb +36 -0
- data/spec/commands/command_clone_spec.rb +87 -0
- data/spec/commands/command_create-from-local_spec.rb +7 -0
- data/spec/commands/command_fetch_spec.rb +56 -0
- data/spec/commands/command_fork_spec.rb +44 -0
- data/spec/commands/command_helper.rb +170 -0
- data/spec/commands/command_home_spec.rb +20 -0
- data/spec/commands/command_info_spec.rb +23 -0
- data/spec/commands/command_issues_spec.rb +97 -0
- data/spec/commands/command_network_spec.rb +30 -0
- data/spec/commands/command_pull-request_spec.rb +51 -0
- data/spec/commands/command_pull_spec.rb +82 -0
- data/spec/commands/command_search_spec.rb +34 -0
- data/spec/commands/command_track_spec.rb +82 -0
- data/spec/commands_spec.rb +49 -0
- data/spec/extensions_spec.rb +36 -0
- data/spec/github_spec.rb +85 -0
- data/spec/helper_spec.rb +368 -0
- data/spec/spec_helper.rb +160 -4
- data/spec/windoze_spec.rb +38 -0
- metadata +114 -47
- data/README +0 -49
- data/commands/commands.rb +0 -54
- data/commands/helpers.rb +0 -79
- data/spec/helpers/owner_spec.rb +0 -12
- data/spec/helpers/project_spec.rb +0 -12
- data/spec/helpers/public_url_for_spec.rb +0 -12
- data/spec/helpers/repo_for_spec.rb +0 -12
- data/spec/helpers/user_and_repo_from_spec.rb +0 -15
- data/spec/helpers/user_for_spec.rb +0 -12
data/spec/spec_helper.rb
CHANGED
@@ -1,9 +1,165 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'spec'
|
3
|
+
require 'activerecord'
|
3
4
|
|
4
5
|
require File.dirname(__FILE__) + '/../lib/github'
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
end
|
7
|
+
class Module
|
8
|
+
def metaclass
|
9
|
+
class << self;self;end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class Spec::NextInstanceProxy
|
14
|
+
def initialize
|
15
|
+
@deferred = []
|
16
|
+
end
|
17
|
+
|
18
|
+
def method_missing(sym, *args)
|
19
|
+
proxy = Spec::NextInstanceProxy.new
|
20
|
+
@deferred << [sym, args, proxy]
|
21
|
+
proxy
|
22
|
+
end
|
23
|
+
|
24
|
+
def should_receive(*args)
|
25
|
+
method_missing(:should_receive, *args)
|
26
|
+
end
|
27
|
+
alias stub! should_receive
|
28
|
+
|
29
|
+
def invoke(obj)
|
30
|
+
@deferred.each do |(sym, args, proxy)|
|
31
|
+
result = obj.send(sym, *args)
|
32
|
+
proxy.invoke(result)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
class Class
|
38
|
+
def next_instance
|
39
|
+
meth = metaclass.instance_method(:new)
|
40
|
+
proxy = Spec::NextInstanceProxy.new
|
41
|
+
metaclass.send :define_method, :new do |*args|
|
42
|
+
instance = meth.bind(self).call(*args)
|
43
|
+
proxy.invoke(instance)
|
44
|
+
metaclass.send :define_method, :new, meth
|
45
|
+
instance
|
46
|
+
end
|
47
|
+
proxy
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
module Spec::Example::ExampleGroupSubclassMethods
|
52
|
+
def add_guard(klass, name, is_class = false)
|
53
|
+
guarded = nil # define variable now for scoping
|
54
|
+
target = (is_class ? klass.metaclass : klass)
|
55
|
+
sep = (is_class ? "." : "#")
|
56
|
+
target.class_eval do
|
57
|
+
guarded = instance_method(name)
|
58
|
+
define_method name do |*args|
|
59
|
+
raise "Testing guards violated: Cannot call #{klass}#{sep}#{name} with args #{args.inspect}"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
@guards ||= []
|
63
|
+
@guards << [klass, name, is_class, guarded]
|
64
|
+
end
|
65
|
+
|
66
|
+
def add_class_guard(klass, name)
|
67
|
+
add_guard(klass, name, true)
|
68
|
+
end
|
69
|
+
|
70
|
+
def unguard(klass, name, is_class = false)
|
71
|
+
row = @guards.find { |(k,n,i)| k == klass and n == name and i == is_class }
|
72
|
+
raise "#{klass}#{is_class ? "." : "#"}#{name} is not guarded" if row.nil?
|
73
|
+
(is_class ? klass.metaclass : klass).class_eval do
|
74
|
+
define_method name, row.last
|
75
|
+
end
|
76
|
+
@guards.delete row
|
77
|
+
end
|
78
|
+
|
79
|
+
def class_unguard(klass, name)
|
80
|
+
unguard(klass, name, true)
|
81
|
+
end
|
82
|
+
|
83
|
+
def unguard_all
|
84
|
+
@guards ||= []
|
85
|
+
@guards.each do |klass, name, is_class, guarded|
|
86
|
+
(is_class ? klass.metaclass : klass).class_eval do
|
87
|
+
define_method name, guarded
|
88
|
+
end
|
89
|
+
end
|
90
|
+
@guards.clear
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
# prevent the use of `` in tests
|
95
|
+
Spec::Runner.configure do |configuration|
|
96
|
+
# load this here so it's covered by the `` guard
|
97
|
+
configuration.prepend_before(:all) do
|
98
|
+
module GitHub
|
99
|
+
load 'helpers.rb'
|
100
|
+
load 'commands.rb'
|
101
|
+
load 'network.rb'
|
102
|
+
load 'issues.rb'
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
configuration.prepend_after(:each) do
|
107
|
+
GitHub.instance_variable_set :'@options', nil
|
108
|
+
GitHub.instance_variable_set :'@debug', nil
|
109
|
+
end
|
110
|
+
|
111
|
+
configuration.prepend_before(:all) do
|
112
|
+
self.class.send :include, Spec::Example::ExampleGroupSubclassMethods
|
113
|
+
end
|
114
|
+
|
115
|
+
configuration.prepend_before(:each) do
|
116
|
+
add_guard Kernel, :`
|
117
|
+
add_guard Kernel, :system
|
118
|
+
add_guard Kernel, :fork
|
119
|
+
add_guard Kernel, :exec
|
120
|
+
add_class_guard Process, :fork
|
121
|
+
end
|
122
|
+
|
123
|
+
configuration.append_after(:each) do
|
124
|
+
unguard_all
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
# include this in any example group that defines @helper
|
129
|
+
module SetupMethods
|
130
|
+
def setup_url_for(remote = "origin", user = nil, project = "project")
|
131
|
+
if user.nil?
|
132
|
+
user = remote
|
133
|
+
user = "user" if remote == "origin"
|
134
|
+
end
|
135
|
+
@helper.should_receive(:url_for).any_number_of_times.with(remote).and_return("git://github.com/#{user}/#{project}.git")
|
136
|
+
@helper.should_receive(:origin).any_number_of_times.and_return(remote.to_s)
|
137
|
+
end
|
138
|
+
|
139
|
+
def setup_user_and_branch(user = :user, branch = :master)
|
140
|
+
@helper.should_receive(:user_and_branch).any_number_of_times.and_return([user, branch])
|
141
|
+
end
|
142
|
+
|
143
|
+
def setup_github_token(user = 'drnic', token = 'MY_GITHUB_TOKEN')
|
144
|
+
@command.should_receive(:github_user).any_number_of_times.and_return(user)
|
145
|
+
@command.should_receive(:github_token).any_number_of_times.and_return(token)
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
# When running specs in TextMate, provide an rputs method to cleanly print objects into HTML display
|
150
|
+
# From http://talklikeaduck.denhaven2.com/2009/09/23/rspec-textmate-pro-tip
|
151
|
+
module Kernel
|
152
|
+
if ENV.keys.find {|env_var| env_var.index("TM_")}
|
153
|
+
def rputs(*args)
|
154
|
+
require 'cgi'
|
155
|
+
puts( *["<pre>", args.collect {|a| CGI.escapeHTML(a.to_s)}, "</pre>"])
|
156
|
+
end
|
157
|
+
def rp(*args)
|
158
|
+
require 'cgi'
|
159
|
+
puts( *["<pre>", args.collect {|a| CGI.escapeHTML(a.inspect)}, "</pre>"])
|
160
|
+
end
|
161
|
+
else
|
162
|
+
alias_method :rputs, :puts
|
163
|
+
alias_method :rp, :p
|
164
|
+
end
|
165
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# this is an extremely hacky spec
|
2
|
+
# intended purely to test the Windoze-specific code
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'spec'
|
6
|
+
|
7
|
+
describe "github/command.rb" do
|
8
|
+
before(:all) do
|
9
|
+
@orig_platform = RUBY_PLATFORM
|
10
|
+
Object.send :remove_const, :RUBY_PLATFORM
|
11
|
+
Object.const_set :RUBY_PLATFORM, "mswin"
|
12
|
+
end
|
13
|
+
|
14
|
+
after(:all) do
|
15
|
+
Object.send :remove_const, :RUBY_PLATFORM
|
16
|
+
Object.const_set :RUBY_PLATFORM, @orig_platform
|
17
|
+
end
|
18
|
+
|
19
|
+
before(:each) do
|
20
|
+
@filename = File.dirname(__FILE__) + "/../lib/github/command.rb"
|
21
|
+
@data = File.read(@filename)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should require win32/open3 under Windows" do
|
25
|
+
mod = Module.new
|
26
|
+
mod.should_receive(:require).with("fileutils")
|
27
|
+
mod.should_receive(:require).with("win32/open3")
|
28
|
+
mod.class_eval @data, @filename
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should blow up if win32/open3 isn't present under Windows" do
|
32
|
+
mod = Module.new
|
33
|
+
mod.should_receive(:require).with("fileutils")
|
34
|
+
mod.should_receive(:require).with("win32/open3").and_return { raise LoadError }
|
35
|
+
mod.should_receive(:warn).with("You must 'gem install win32-open3' to use the github command on Windows")
|
36
|
+
lambda { mod.class_eval @data, @filename }.should raise_error(SystemExit)
|
37
|
+
end
|
38
|
+
end
|
metadata
CHANGED
@@ -1,63 +1,130 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.4
|
3
|
-
specification_version: 1
|
4
2
|
name: github
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2008-03-26 00:00:00 -04:00
|
8
|
-
summary: The official `github` command line helper for simplifying your GitHub experience.
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email: chris@ozmm.org
|
12
|
-
homepage: http://github.com/
|
13
|
-
rubyforge_project: github
|
14
|
-
description: The official `github` command line helper for simplifying your GitHub experience.
|
15
|
-
autorequire:
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
4
|
+
version: 0.4.0
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
|
-
- Chris Wanstrath
|
31
|
-
|
7
|
+
- Chris Wanstrath, Kevin Ballard, Scott Chacon
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-11-06 00:00:00 +10:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: text-format
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 1.0.0
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: highline
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.5.1
|
34
|
+
version:
|
35
|
+
description: The official `github` command line helper for simplifying your GitHub experience.
|
36
|
+
email: chris@ozmm.org
|
37
|
+
executables:
|
38
|
+
- gh
|
39
|
+
- github
|
40
|
+
extensions: []
|
41
|
+
|
42
|
+
extra_rdoc_files:
|
43
|
+
- LICENSE
|
44
|
+
- README.md
|
45
|
+
- bin/gh
|
32
46
|
- bin/github
|
33
|
-
- commands/commands.rb
|
34
|
-
- commands/helpers.rb
|
47
|
+
- lib/commands/commands.rb
|
48
|
+
- lib/commands/helpers.rb
|
49
|
+
- lib/commands/issues.rb
|
50
|
+
- lib/commands/network.rb
|
51
|
+
- lib/github.rb
|
35
52
|
- lib/github/command.rb
|
53
|
+
- lib/github/extensions.rb
|
36
54
|
- lib/github/helper.rb
|
37
|
-
- lib/github.rb
|
55
|
+
- lib/github/ui.rb
|
56
|
+
files:
|
57
|
+
- History.txt
|
38
58
|
- LICENSE
|
39
|
-
-
|
59
|
+
- Manifest
|
60
|
+
- README.md
|
61
|
+
- Rakefile
|
62
|
+
- bin/gh
|
63
|
+
- bin/github
|
64
|
+
- lib/commands/commands.rb
|
65
|
+
- lib/commands/helpers.rb
|
66
|
+
- lib/commands/issues.rb
|
67
|
+
- lib/commands/network.rb
|
68
|
+
- lib/github.rb
|
69
|
+
- lib/github/command.rb
|
70
|
+
- lib/github/extensions.rb
|
71
|
+
- lib/github/helper.rb
|
72
|
+
- lib/github/ui.rb
|
73
|
+
- setup.rb
|
40
74
|
- spec/command_spec.rb
|
41
|
-
- spec/
|
42
|
-
- spec/
|
43
|
-
- spec/
|
44
|
-
- spec/
|
45
|
-
- spec/
|
46
|
-
- spec/
|
75
|
+
- spec/commands/command_browse_spec.rb
|
76
|
+
- spec/commands/command_clone_spec.rb
|
77
|
+
- spec/commands/command_create-from-local_spec.rb
|
78
|
+
- spec/commands/command_fetch_spec.rb
|
79
|
+
- spec/commands/command_fork_spec.rb
|
80
|
+
- spec/commands/command_helper.rb
|
81
|
+
- spec/commands/command_home_spec.rb
|
82
|
+
- spec/commands/command_info_spec.rb
|
83
|
+
- spec/commands/command_issues_spec.rb
|
84
|
+
- spec/commands/command_network_spec.rb
|
85
|
+
- spec/commands/command_pull-request_spec.rb
|
86
|
+
- spec/commands/command_pull_spec.rb
|
87
|
+
- spec/commands/command_search_spec.rb
|
88
|
+
- spec/commands/command_track_spec.rb
|
89
|
+
- spec/commands_spec.rb
|
90
|
+
- spec/extensions_spec.rb
|
91
|
+
- spec/github_spec.rb
|
92
|
+
- spec/helper_spec.rb
|
47
93
|
- spec/spec_helper.rb
|
48
|
-
-
|
94
|
+
- spec/windoze_spec.rb
|
49
95
|
- github.gemspec
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
extra_rdoc_files: []
|
55
|
-
|
56
|
-
executables:
|
57
|
-
- github
|
58
|
-
extensions: []
|
96
|
+
has_rdoc: true
|
97
|
+
homepage: http://github.com/
|
98
|
+
licenses: []
|
59
99
|
|
100
|
+
post_install_message:
|
101
|
+
rdoc_options:
|
102
|
+
- --line-numbers
|
103
|
+
- --inline-source
|
104
|
+
- --title
|
105
|
+
- Github
|
106
|
+
- --main
|
107
|
+
- README.md
|
108
|
+
require_paths:
|
109
|
+
- lib
|
110
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - ">="
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: "0"
|
115
|
+
version:
|
116
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
117
|
+
requirements:
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: "1.2"
|
121
|
+
version:
|
60
122
|
requirements: []
|
61
123
|
|
62
|
-
|
124
|
+
rubyforge_project: github
|
125
|
+
rubygems_version: 1.3.5
|
126
|
+
signing_key:
|
127
|
+
specification_version: 3
|
128
|
+
summary: The official `github` command line helper for simplifying your GitHub experience.
|
129
|
+
test_files: []
|
63
130
|
|
data/README
DELETED
@@ -1,49 +0,0 @@
|
|
1
|
-
The GitHub Gem
|
2
|
-
=============
|
3
|
-
|
4
|
-
This gem'll work hand-in-hand with GitHub's API to help you out.
|
5
|
-
|
6
|
-
Catch us in the #github room on freenode if you want to get involved. Or just fork and send a pull request.
|
7
|
-
|
8
|
-
===========
|
9
|
-
Getting started
|
10
|
-
===========
|
11
|
-
|
12
|
-
$ gem install github
|
13
|
-
|
14
|
-
Run it:
|
15
|
-
|
16
|
-
$ github <command> <args>
|
17
|
-
|
18
|
-
|
19
|
-
=============
|
20
|
-
Pulling Changes
|
21
|
-
=============
|
22
|
-
|
23
|
-
Let's say you just forked `github-gem` on GitHub from defunkt.
|
24
|
-
|
25
|
-
$ git clone git://github.com/YOU/github-gem.git
|
26
|
-
$ cd github-gem
|
27
|
-
$ github pull defunkt
|
28
|
-
|
29
|
-
This will setup a remote and branch for defunkt's repository at master.
|
30
|
-
In this case, a 'defunkt/master' branch.
|
31
|
-
|
32
|
-
If defunkt makes some changes you want, simply `github pull defunkt`. This will
|
33
|
-
leave you in the 'defunkt/master' branch after pulling changes from defunkt's
|
34
|
-
remote. After confirming that defunkt's changes were what you wanted, run `git
|
35
|
-
checkout master` and then `git merge defunkt/master` to merge defunkt's changes
|
36
|
-
into your own master branch. In summary:
|
37
|
-
|
38
|
-
$ github pull defunkt
|
39
|
-
$ git checkout master
|
40
|
-
$ git merge defunkt/master
|
41
|
-
|
42
|
-
|
43
|
-
==========
|
44
|
-
Contributors
|
45
|
-
==========
|
46
|
-
|
47
|
-
- defunkt
|
48
|
-
- maddox
|
49
|
-
- halorgium
|
data/commands/commands.rb
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
GitHub.register :helper do |name, comma_args|
|
2
|
-
comma_args ||= ''
|
3
|
-
puts helper.send(name, comma_args.split(/,/))
|
4
|
-
end
|
5
|
-
|
6
|
-
GitHub.describe :home => "Open this repo's master branch in a web browser."
|
7
|
-
GitHub.register :home do
|
8
|
-
if helper.project
|
9
|
-
exec "open #{helper.homepage_for(helper.owner, 'master')}"
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
GitHub.describe :browse => "Open this repo in a web browser."
|
14
|
-
GitHub.register :browse do
|
15
|
-
if helper.project
|
16
|
-
exec "open #{helper.homepage_for(helper.branch_user, helper.branch_name)}"
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
GitHub.describe :info => "Info about this project."
|
21
|
-
GitHub.register :info do
|
22
|
-
puts "== Info for #{helper.project}"
|
23
|
-
puts "You are #{helper.owner}"
|
24
|
-
puts "Currently tracking: "
|
25
|
-
helper.tracking.each do |(name,user_or_url)|
|
26
|
-
puts " - #{user_or_url} (as #{name})"
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
GitHub.describe :track => "Track another user's repository."
|
31
|
-
GitHub.register :track do |user|
|
32
|
-
die "Specify a user to track" if user.nil?
|
33
|
-
die "Already tracking #{user}" if helper.tracking?(user)
|
34
|
-
|
35
|
-
git "remote add #{user} #{helper.public_url_for(user)}"
|
36
|
-
end
|
37
|
-
|
38
|
-
GitHub.describe :pull => "Pull from a remote. Pass --merge to automatically merge remote's changes into your master."
|
39
|
-
GitHub.register :pull do |user, branch|
|
40
|
-
die "Specify a user to pull from" if user.nil?
|
41
|
-
GitHub.invoke(:track, user) unless helper.tracking?(user)
|
42
|
-
branch ||= 'master'
|
43
|
-
|
44
|
-
puts "Switching to #{user}/#{branch}"
|
45
|
-
git "checkout #{user}/#{branch}" if git("checkout -b #{user}/#{branch}").error?
|
46
|
-
|
47
|
-
if options[:merge]
|
48
|
-
git "pull #{user} #{branch}"
|
49
|
-
git "checkout master"
|
50
|
-
git_exec "merge #{user}/#{branch}"
|
51
|
-
else
|
52
|
-
git_exec "pull #{user} #{branch}"
|
53
|
-
end
|
54
|
-
end
|