ghtorrent 0.8 → 0.8.1
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.
- checksums.yaml +7 -0
- data/CHANGELOG +9 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +32 -20
- data/README.md +50 -34
- data/Rakefile +3 -3
- data/bin/ght-retrieve-dependents +6 -0
- data/bin/ght-retrieve-repos +6 -0
- data/lib/ghtorrent.rb +3 -0
- data/lib/ghtorrent/adapters/mongo_persister.rb +3 -3
- data/lib/ghtorrent/api_client.rb +6 -4
- data/lib/ghtorrent/command.rb +2 -28
- data/lib/ghtorrent/commands/ght_data_retrieval.rb +3 -2
- data/lib/ghtorrent/commands/ght_load.rb +7 -5
- data/lib/ghtorrent/commands/ght_retrieve_dependents.rb +84 -0
- data/lib/ghtorrent/commands/ght_retrieve_repo.rb +1 -70
- data/lib/ghtorrent/commands/ght_retrieve_repos.rb +206 -0
- data/lib/ghtorrent/commands/ght_retrieve_user.rb +9 -2
- data/lib/ghtorrent/ghtorrent.rb +103 -82
- data/lib/ghtorrent/logging.rb +2 -1
- data/lib/ghtorrent/migrations/015_fix_table_issue_labels.rb +17 -5
- data/lib/ghtorrent/migrations/016_add_actor_pull_request_history.rb +1 -1
- data/lib/ghtorrent/retriever.rb +8 -17
- data/lib/ghtorrent/settings.rb +9 -5
- data/lib/ghtorrent/transacted_ghtorrent.rb +91 -0
- data/lib/version.rb +1 -1
- data/spec/api_client_spec.rb +42 -0
- data/spec/spec_helper.rb +21 -0
- metadata +46 -52
data/lib/ghtorrent/logging.rb
CHANGED
@@ -6,12 +6,24 @@ Sequel.migration do
|
|
6
6
|
up do
|
7
7
|
puts "Fixing table issue_labels"
|
8
8
|
|
9
|
-
alter_table :issue_labels do
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
#alter_table :issue_labels do
|
10
|
+
# drop_constraint 'issue_labels_ibfk_1'
|
11
|
+
# drop_constraint 'issue_labels_ibfk_2'
|
12
|
+
# drop_column :repo_id
|
13
|
+
# drop_column :ext_ref_id
|
14
|
+
# drop_column :label_id
|
15
|
+
#add_foreign_key :label_id, :repo_labels
|
16
|
+
#add_foreign_key :issue_id, :issues
|
17
|
+
#add_primary_key ([:issue_id, :label_id])
|
18
|
+
#end
|
19
|
+
|
20
|
+
drop_table :issue_labels
|
21
|
+
create_table :issue_labels do
|
22
|
+
foreign_key :label_id, :repo_labels
|
23
|
+
foreign_key :issue_id, :issues
|
24
|
+
primary_key [:issue_id, :label_id]
|
14
25
|
end
|
26
|
+
|
15
27
|
end
|
16
28
|
|
17
29
|
down do
|
data/lib/ghtorrent/retriever.rb
CHANGED
@@ -216,16 +216,11 @@ module GHTorrent
|
|
216
216
|
end
|
217
217
|
|
218
218
|
# Retrieve all comments for a single commit
|
219
|
-
def retrieve_commit_comments(
|
220
|
-
retrieved_comments = paged_api_request(ghurl "repos/#{
|
219
|
+
def retrieve_commit_comments(owner, repo, sha)
|
220
|
+
retrieved_comments = paged_api_request(ghurl "repos/#{owner}/#{repo}/commits/#{sha}/comments")
|
221
221
|
|
222
222
|
retrieved_comments.each { |x|
|
223
|
-
x['
|
224
|
-
x['user'] = user
|
225
|
-
x['commit_id'] = sha
|
226
|
-
|
227
|
-
if persister.find(:commit_comments, {'repo' => repo,
|
228
|
-
'user' => user,
|
223
|
+
if persister.find(:commit_comments, { 'commit_id' => x['commit_id'],
|
229
224
|
'id' => x['id']}).empty?
|
230
225
|
persister.store(:commit_comments, x)
|
231
226
|
end
|
@@ -234,25 +229,21 @@ module GHTorrent
|
|
234
229
|
end
|
235
230
|
|
236
231
|
# Retrieve a single comment
|
237
|
-
def retrieve_commit_comment(
|
232
|
+
def retrieve_commit_comment(owner, repo, sha, id)
|
238
233
|
|
239
|
-
comment = persister.find(:commit_comments, {'
|
240
|
-
|
241
|
-
'id' => id}).first
|
234
|
+
comment = persister.find(:commit_comments, {'commit_id' => sha,
|
235
|
+
'id' => id}).first
|
242
236
|
if comment.nil?
|
243
|
-
r = api_request(ghurl "repos/#{
|
237
|
+
r = api_request(ghurl "repos/#{owner}/#{repo}/comments/#{id}")
|
244
238
|
|
245
239
|
if r.empty?
|
246
240
|
debug "Retriever: Commit comment #{id} deleted"
|
247
241
|
return
|
248
242
|
end
|
249
243
|
|
250
|
-
r['repo'] = repo
|
251
|
-
r['user'] = user
|
252
244
|
persister.store(:commit_comments, r)
|
253
245
|
info "Retriever: Added commit comment #{r['commit_id']} -> #{r['id']}"
|
254
|
-
persister.find(:commit_comments, {'
|
255
|
-
'id' => id}).first
|
246
|
+
persister.find(:commit_comments, {'commit_id' => sha, 'id' => id}).first
|
256
247
|
else
|
257
248
|
debug "Retriever: Commit comment #{comment['commit_id']} -> #{comment['id']} exists"
|
258
249
|
comment
|
data/lib/ghtorrent/settings.rb
CHANGED
@@ -34,7 +34,9 @@ module GHTorrent
|
|
34
34
|
|
35
35
|
:respect_api_ratelimit => 'mirror.respect_api_ratelimit',
|
36
36
|
|
37
|
-
:attach_ip => 'mirror.attach_ip'
|
37
|
+
:attach_ip => 'mirror.attach_ip',
|
38
|
+
|
39
|
+
:rescue_loops => 'mirror.rescue_loops'
|
38
40
|
}
|
39
41
|
|
40
42
|
DEFAULTS = {
|
@@ -63,7 +65,9 @@ module GHTorrent
|
|
63
65
|
|
64
66
|
:respect_api_ratelimit => 'true',
|
65
67
|
|
66
|
-
:attach_ip => '0.0.0.0'
|
68
|
+
:attach_ip => '0.0.0.0',
|
69
|
+
|
70
|
+
:rescue_loops => 'true'
|
67
71
|
}
|
68
72
|
|
69
73
|
def config(key, use_default = true)
|
@@ -87,9 +91,9 @@ module GHTorrent
|
|
87
91
|
more_keys.each {|k,v| CONFIGKEYS[k] = v}
|
88
92
|
end
|
89
93
|
|
90
|
-
def merge_config_values(values)
|
91
|
-
values.reduce(
|
92
|
-
acc.merge_recursive write_value(
|
94
|
+
def merge_config_values(config, values)
|
95
|
+
values.reduce(config) {|acc, k|
|
96
|
+
acc.merge_recursive write_value(config, CONFIGKEYS[k[0]], k[1])
|
93
97
|
}
|
94
98
|
end
|
95
99
|
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'ghtorrent/ghtorrent'
|
2
|
+
|
3
|
+
|
4
|
+
# A version of the GHTorrent class that creates a transaction per processed
|
5
|
+
# item
|
6
|
+
class TransactedGhtorrent < GHTorrent::Mirror
|
7
|
+
|
8
|
+
def ensure_commit(repo, sha, user, comments = true)
|
9
|
+
check_transaction do
|
10
|
+
super(repo, sha, user, comments)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def ensure_commit_comment(owner, repo, sha, comment_id)
|
15
|
+
check_transaction do
|
16
|
+
super(owner, repo, sha, comment_id)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def ensure_fork(owner, repo, fork_id)
|
21
|
+
check_transaction do
|
22
|
+
super(owner, repo, fork_id)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def ensure_pull_request(owner, repo, pullreq_id,
|
27
|
+
comments = true, commits = true, history = true,
|
28
|
+
state = nil, actor = nil, created_at = nil)
|
29
|
+
check_transaction do
|
30
|
+
super(owner, repo, pullreq_id, comments, commits, history, state, actor, created_at)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def ensure_pullreq_comment(owner, repo, pullreq_id, comment_id)
|
35
|
+
check_transaction do
|
36
|
+
super(owner, repo, pullreq_id, comment_id)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def ensure_issue(owner, repo, issue_id, events = true, comments = true, labels = true)
|
41
|
+
check_transaction do
|
42
|
+
super(owner, repo, issue_id, events, comments, labels)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def ensure_issue_event(owner, repo, issue_id, event_id)
|
47
|
+
check_transaction do
|
48
|
+
super(owner, repo, issue_id, event_id)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def ensure_issue_comment(owner, repo, issue_id, comment_id, pull_req_id = nil)
|
53
|
+
check_transaction do
|
54
|
+
super(owner, repo, issue_id, comment_id, pull_req_id)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def ensure_issue_label(owner, repo, issue_id, name)
|
59
|
+
check_transaction do
|
60
|
+
super(owner, repo, issue_id, name)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def ensure_project_member(owner, repo, new_member, date_added)
|
65
|
+
check_transaction do
|
66
|
+
super(owner, repo, new_member, date_added)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def ensure_watcher(owner, repo, watcher, date_added = nil)
|
71
|
+
check_transaction do
|
72
|
+
super(owner, repo, watcher, date_added)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def ensure_repo_label(owner, repo, name)
|
77
|
+
check_transaction do
|
78
|
+
super(owner, repo, name)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def check_transaction(&block)
|
83
|
+
if @db.in_transaction?
|
84
|
+
yield block
|
85
|
+
else
|
86
|
+
transaction do
|
87
|
+
yield block
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
data/lib/version.rb
CHANGED
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
include GHTorrent::Settings
|
4
|
+
include GHTorrent::APIClient
|
5
|
+
|
6
|
+
describe 'The API client' do
|
7
|
+
|
8
|
+
def stub_config(remaining, reset)
|
9
|
+
stub_request(:get, "https://#{config(:github_username)}:#{config(:github_passwd)}@api.github.com/events").
|
10
|
+
with(:headers => {'Accept'=>'*/*', 'User-Agent'=>'ghtorrent'}).
|
11
|
+
to_return(:status => 200, :body => (1..30).to_a,
|
12
|
+
:headers => {'x-ratelimit-remaining' => remaining,
|
13
|
+
'x-ratelimit-reset' => reset})
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'call /events should return 30 results' do
|
17
|
+
stub_config(1000, 1000)
|
18
|
+
r = api_request 'https://api.github.com/events', false
|
19
|
+
expect(r.size).to eq(30)
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should resume from sleep' do
|
23
|
+
time = Time.now.to_i
|
24
|
+
stub_config(2, Time.now.to_i + 1)
|
25
|
+
api_request 'https://api.github.com/events', false
|
26
|
+
|
27
|
+
|
28
|
+
stub_config(1000, 1000)
|
29
|
+
api_request 'https://api.github.com/events', false
|
30
|
+
expect(Time.now.to_i - time).to be_within(0.3).of(3)
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'should sleep for 7 seconds' do
|
34
|
+
stub_config(2, Time.now.to_i + 5)
|
35
|
+
|
36
|
+
time = Time.now.to_i
|
37
|
+
api_request 'https://api.github.com/events', false
|
38
|
+
expect(Time.now.to_i - time).to be_within(0.3).of(7)
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
require 'webmock/rspec'
|
3
|
+
|
4
|
+
require 'ghtorrent'
|
5
|
+
|
6
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
7
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
8
|
+
|
9
|
+
RSpec.configure do |config|
|
10
|
+
config.expect_with :rspec do |c|
|
11
|
+
c.syntax = :expect
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def settings
|
16
|
+
YAML::load_file('config.yaml')
|
17
|
+
end
|
18
|
+
|
19
|
+
def logger
|
20
|
+
Logger.new(STDERR)
|
21
|
+
end
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ghtorrent
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
5
|
-
prerelease:
|
4
|
+
version: 0.8.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Georgios Gousios
|
@@ -10,60 +9,53 @@ authors:
|
|
10
9
|
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date: 2013-
|
12
|
+
date: 2013-12-17 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: amqp
|
17
16
|
requirement: !ruby/object:Gem::Requirement
|
18
|
-
none: false
|
19
17
|
requirements:
|
20
18
|
- - ~>
|
21
19
|
- !ruby/object:Gem::Version
|
22
|
-
version: 1.
|
20
|
+
version: 1.1.0
|
23
21
|
type: :runtime
|
24
22
|
prerelease: false
|
25
23
|
version_requirements: !ruby/object:Gem::Requirement
|
26
|
-
none: false
|
27
24
|
requirements:
|
28
25
|
- - ~>
|
29
26
|
- !ruby/object:Gem::Version
|
30
|
-
version: 1.
|
27
|
+
version: 1.1.0
|
31
28
|
- !ruby/object:Gem::Dependency
|
32
29
|
name: mongo
|
33
30
|
requirement: !ruby/object:Gem::Requirement
|
34
|
-
none: false
|
35
31
|
requirements:
|
36
32
|
- - ~>
|
37
33
|
- !ruby/object:Gem::Version
|
38
|
-
version: 1.
|
34
|
+
version: 1.9.0
|
39
35
|
type: :runtime
|
40
36
|
prerelease: false
|
41
37
|
version_requirements: !ruby/object:Gem::Requirement
|
42
|
-
none: false
|
43
38
|
requirements:
|
44
39
|
- - ~>
|
45
40
|
- !ruby/object:Gem::Version
|
46
|
-
version: 1.
|
41
|
+
version: 1.9.0
|
47
42
|
- !ruby/object:Gem::Dependency
|
48
43
|
name: bson_ext
|
49
44
|
requirement: !ruby/object:Gem::Requirement
|
50
|
-
none: false
|
51
45
|
requirements:
|
52
46
|
- - ~>
|
53
47
|
- !ruby/object:Gem::Version
|
54
|
-
version: 1.
|
48
|
+
version: 1.9.0
|
55
49
|
type: :runtime
|
56
50
|
prerelease: false
|
57
51
|
version_requirements: !ruby/object:Gem::Requirement
|
58
|
-
none: false
|
59
52
|
requirements:
|
60
53
|
- - ~>
|
61
54
|
- !ruby/object:Gem::Version
|
62
|
-
version: 1.
|
55
|
+
version: 1.9.0
|
63
56
|
- !ruby/object:Gem::Dependency
|
64
57
|
name: trollop
|
65
58
|
requirement: !ruby/object:Gem::Requirement
|
66
|
-
none: false
|
67
59
|
requirements:
|
68
60
|
- - ~>
|
69
61
|
- !ruby/object:Gem::Version
|
@@ -71,7 +63,6 @@ dependencies:
|
|
71
63
|
type: :runtime
|
72
64
|
prerelease: false
|
73
65
|
version_requirements: !ruby/object:Gem::Requirement
|
74
|
-
none: false
|
75
66
|
requirements:
|
76
67
|
- - ~>
|
77
68
|
- !ruby/object:Gem::Version
|
@@ -79,37 +70,48 @@ dependencies:
|
|
79
70
|
- !ruby/object:Gem::Dependency
|
80
71
|
name: sequel
|
81
72
|
requirement: !ruby/object:Gem::Requirement
|
82
|
-
none: false
|
83
73
|
requirements:
|
84
74
|
- - ~>
|
85
75
|
- !ruby/object:Gem::Version
|
86
|
-
version:
|
76
|
+
version: 4.5.0
|
87
77
|
type: :runtime
|
88
78
|
prerelease: false
|
89
79
|
version_requirements: !ruby/object:Gem::Requirement
|
90
|
-
none: false
|
91
80
|
requirements:
|
92
81
|
- - ~>
|
93
82
|
- !ruby/object:Gem::Version
|
94
|
-
version:
|
83
|
+
version: 4.5.0
|
95
84
|
- !ruby/object:Gem::Dependency
|
96
|
-
name:
|
85
|
+
name: rspec
|
97
86
|
requirement: !ruby/object:Gem::Requirement
|
98
|
-
none: false
|
99
87
|
requirements:
|
100
88
|
- - ~>
|
101
89
|
- !ruby/object:Gem::Version
|
102
|
-
version:
|
103
|
-
type: :
|
90
|
+
version: 2.14.0
|
91
|
+
type: :development
|
104
92
|
prerelease: false
|
105
93
|
version_requirements: !ruby/object:Gem::Requirement
|
106
|
-
none: false
|
107
94
|
requirements:
|
108
95
|
- - ~>
|
109
96
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
111
|
-
|
112
|
-
|
97
|
+
version: 2.14.0
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: webmock
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ~>
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '1.16'
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ~>
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '1.16'
|
112
|
+
description: |-
|
113
|
+
A library and a collection of associated programs
|
114
|
+
to mirror and process Github data
|
113
115
|
email: gousiosg@gmail.com
|
114
116
|
executables:
|
115
117
|
- ght-data-retrieval
|
@@ -123,6 +125,7 @@ executables:
|
|
123
125
|
extensions: []
|
124
126
|
extra_rdoc_files: []
|
125
127
|
files:
|
128
|
+
- lib/ghtorrent.rb
|
126
129
|
- lib/ghtorrent/adapters/base_adapter.rb
|
127
130
|
- lib/ghtorrent/adapters/mongo_persister.rb
|
128
131
|
- lib/ghtorrent/adapters/noop_persister.rb
|
@@ -134,7 +137,9 @@ files:
|
|
134
137
|
- lib/ghtorrent/commands/ght_get_more_commits.rb
|
135
138
|
- lib/ghtorrent/commands/ght_load.rb
|
136
139
|
- lib/ghtorrent/commands/ght_mirror_events.rb
|
140
|
+
- lib/ghtorrent/commands/ght_retrieve_dependents.rb
|
137
141
|
- lib/ghtorrent/commands/ght_retrieve_repo.rb
|
142
|
+
- lib/ghtorrent/commands/ght_retrieve_repos.rb
|
138
143
|
- lib/ghtorrent/commands/ght_retrieve_user.rb
|
139
144
|
- lib/ghtorrent/commands/ght_rm_dupl.rb
|
140
145
|
- lib/ghtorrent/gh_torrent_exception.rb
|
@@ -162,60 +167,49 @@ files:
|
|
162
167
|
- lib/ghtorrent/retriever.rb
|
163
168
|
- lib/ghtorrent/settings.rb
|
164
169
|
- lib/ghtorrent/time.rb
|
170
|
+
- lib/ghtorrent/transacted_ghtorrent.rb
|
165
171
|
- lib/ghtorrent/utils.rb
|
166
|
-
- lib/ghtorrent.rb
|
167
172
|
- lib/version.rb
|
168
173
|
- bin/ght-data-retrieval
|
169
174
|
- bin/ght-get-more-commits
|
170
175
|
- bin/ght-load
|
171
176
|
- bin/ght-mirror-events
|
172
177
|
- bin/ght-process-event
|
178
|
+
- bin/ght-retrieve-dependents
|
173
179
|
- bin/ght-retrieve-repo
|
180
|
+
- bin/ght-retrieve-repos
|
174
181
|
- bin/ght-retrieve-user
|
175
182
|
- bin/ght-rm-dupl
|
176
183
|
- CHANGELOG
|
177
184
|
- Gemfile
|
178
185
|
- Gemfile.lock
|
179
186
|
- LICENSE
|
180
|
-
- Rakefile
|
181
187
|
- README.md
|
188
|
+
- Rakefile
|
189
|
+
- spec/api_client_spec.rb
|
190
|
+
- spec/spec_helper.rb
|
182
191
|
homepage: https://github.com/gousiosg/github-mirror
|
183
192
|
licenses: []
|
184
|
-
|
185
|
-
|
186
|
-
c3N1ZSBsYWJlbHMKWxtbMzJtVmVyc2lvbiAwLjgbWzBtXSBSZXRyaXZlIGFu
|
187
|
-
ZCBwcm9jZXNzIGFjdG9ycyBmb3IgcHVsbCByZXF1ZXN0IGV2ZW50cwpbG1sz
|
188
|
-
Mm1WZXJzaW9uIDAuOBtbMG1dIFJldHJpZXZlIHB1bGxyZXEgY29tbWVudHMg
|
189
|
-
Zm9yIHByb2plY3RzIHdpdGggbm8gaXNzdWV0cmFja2VyClsbWzMybVZlcnNp
|
190
|
-
b24gMC44G1swbV0gQmV0dGVyIGhldXJpc3RpY3MgZm9yIGF2b2lkaW5nIGR1
|
191
|
-
bHBpY2F0ZSBlbnRyaWVzIGluIHB1bGwgcmVxdWVzdCBoaXN0b3JpZXMKWxtb
|
192
|
-
MzJtVmVyc2lvbiAwLjgbWzBtXSBUaGUgZXZlbnQgbG9hZGVyIG5vdyBsb2Fk
|
193
|
-
cyBldmVudHMgYnkgSURzIHRvIHJlZHVjZSBwcmVzc3VyZSB0byB0aGUgcXVl
|
194
|
-
dWUKWxtbMzJtVmVyc2lvbiAwLjgbWzBtXSBDb21wb3VuZCBpbmRleGVzIGlu
|
195
|
-
IE1vbmdvREIgYnkgZGVmYXVsdApbG1szMm1WZXJzaW9uIDAuOBtbMG1dIFgt
|
196
|
-
UmF0ZUxpbWl0LVJlc2V0IGhlYWRlciBzdXBwb3J0ClsbWzMybVZlcnNpb24g
|
197
|
-
MC44G1swbV0gUmVtb3ZlIGxvdHMgb2YgZGVhZCBjb2RlLCBnZW5lcmFsIGNs
|
198
|
-
ZWFudXBzCg==
|
193
|
+
metadata: {}
|
194
|
+
post_install_message:
|
199
195
|
rdoc_options:
|
200
196
|
- --charset=UTF-8
|
201
197
|
require_paths:
|
202
198
|
- lib
|
203
199
|
required_ruby_version: !ruby/object:Gem::Requirement
|
204
|
-
none: false
|
205
200
|
requirements:
|
206
|
-
- -
|
201
|
+
- - '>='
|
207
202
|
- !ruby/object:Gem::Version
|
208
203
|
version: '0'
|
209
204
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
210
|
-
none: false
|
211
205
|
requirements:
|
212
|
-
- -
|
206
|
+
- - '>='
|
213
207
|
- !ruby/object:Gem::Version
|
214
208
|
version: '0'
|
215
209
|
requirements: []
|
216
210
|
rubyforge_project:
|
217
|
-
rubygems_version:
|
211
|
+
rubygems_version: 2.0.3
|
218
212
|
signing_key:
|
219
|
-
specification_version:
|
213
|
+
specification_version: 4
|
220
214
|
summary: Mirror and process Github data
|
221
215
|
test_files: []
|