forkreadme 0.0.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.
- data/.gitignore +1 -0
- data/Gemfile +5 -0
- data/bin/forkreadme +25 -0
- data/forkreadme.gemspec +22 -0
- data/lib/forkreadme/errors.rb +13 -0
- data/lib/forkreadme/generator.rb +119 -0
- data/lib/forkreadme/version.rb +6 -0
- data/lib/forkreadme.rb +9 -0
- metadata +76 -0
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Gemfile.lock
|
data/Gemfile
ADDED
data/bin/forkreadme
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# vim: et ts=2 sw=2
|
3
|
+
|
4
|
+
require "forkreadme"
|
5
|
+
require "thor"
|
6
|
+
|
7
|
+
module ForkReadme
|
8
|
+
class App < Thor
|
9
|
+
|
10
|
+
desc "generate [DIR]", "Generate a README for a GitHub fork repo"
|
11
|
+
method_option :path, :default=>"."
|
12
|
+
def generate path=""
|
13
|
+
begin
|
14
|
+
dir = File.expand_path path, Dir.pwd
|
15
|
+
puts Generator.new(dir).readme
|
16
|
+
|
17
|
+
rescue ForkReadme::Error => err
|
18
|
+
$stderr.puts err
|
19
|
+
exit false
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
ForkReadme::App.start
|
data/forkreadme.gemspec
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# vim: et ts=2 sw=2
|
3
|
+
|
4
|
+
require File.expand_path("../lib/forkreadme/version", __FILE__)
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "forkreadme"
|
8
|
+
gem.version = ForkReadme::VERSION
|
9
|
+
|
10
|
+
gem.authors = ["Adam Mckaig"]
|
11
|
+
gem.email = ["adam.mckaig@gmail.com"]
|
12
|
+
gem.summary = %q{Generate useful READMEs for GitHub forks}
|
13
|
+
gem.homepage = "https://github.com/adammck/forkreadme"
|
14
|
+
|
15
|
+
gem.add_dependency "thor", "~> 0.14.6"
|
16
|
+
gem.add_dependency "octokit", "~> 1.0.2"
|
17
|
+
|
18
|
+
gem.files = `git ls-files`.split($\)
|
19
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
20
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
21
|
+
gem.require_paths = ["lib"]
|
22
|
+
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# vim: et ts=2 sw=2
|
3
|
+
|
4
|
+
require "uri"
|
5
|
+
require "octokit"
|
6
|
+
|
7
|
+
module ForkReadme
|
8
|
+
class Generator
|
9
|
+
include URI::REGEXP::PATTERN
|
10
|
+
|
11
|
+
def initialize dir
|
12
|
+
@dir = dir
|
13
|
+
end
|
14
|
+
|
15
|
+
def readme
|
16
|
+
repo_name = github_repo_name @dir
|
17
|
+
|
18
|
+
if repo_name.empty?
|
19
|
+
raise NotRepo.new "Not a GitHub repo: #{@dir}"
|
20
|
+
end
|
21
|
+
|
22
|
+
repo = octokit.repo repo_name
|
23
|
+
|
24
|
+
unless repo.fork
|
25
|
+
raise NotFork.new "Not a GitHub fork: #{repo_name}"
|
26
|
+
end
|
27
|
+
|
28
|
+
parent_name = full_name repo.parent
|
29
|
+
parent = octokit.repo parent_name
|
30
|
+
|
31
|
+
s = []
|
32
|
+
s << "This is a fork of [#{parent.name}] (#{parent.html_url}), with pull requests:"
|
33
|
+
s << ""
|
34
|
+
|
35
|
+
logins = collaborator_logins repo
|
36
|
+
my_pulls = pull_requests(parent).select do |pull|
|
37
|
+
pull.user and logins.include?(pull.user.login)
|
38
|
+
end
|
39
|
+
|
40
|
+
my_pulls.each do |short_pull|
|
41
|
+
pull = pull_request(parent, short_pull.number)
|
42
|
+
if repo_name == full_name(pull.head.repo)
|
43
|
+
s << " * [#{pull.title}] (#{pull.html_url})"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
s.join "\n"
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
# Private: Returns an Array containing the logins of all collaborators for an
|
54
|
+
# Octokit repo.
|
55
|
+
def collaborator_logins repo
|
56
|
+
octokit.collabs(full_name repo).map do |user|
|
57
|
+
user.login
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# Private: Returns all pull request summaries (as returned by the "List pull
|
62
|
+
# requests" API, and wrapped by Octokit) for an Octokit repo.
|
63
|
+
def pull_requests repo
|
64
|
+
name = full_name repo
|
65
|
+
|
66
|
+
%w[open closed].reduce([]) do |memo, state|
|
67
|
+
memo | octokit.pulls(name, state, :per_page=>100)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# Private: Return full pull request (as returned by the "Get a single pull
|
72
|
+
# request" API, and wrapped by Octokit) to an Octokit repo and pull number.
|
73
|
+
def pull_request repo, number
|
74
|
+
octokit.pull full_name(repo), number
|
75
|
+
end
|
76
|
+
|
77
|
+
# Private: Returns the full GitHub repo name of a Git working directory.
|
78
|
+
def github_repo_name path
|
79
|
+
clone_url = parse_url remote_url path
|
80
|
+
chop_extension clone_url.path
|
81
|
+
end
|
82
|
+
|
83
|
+
# Private: Returns the full GitHub repo name of an Octokit repo.
|
84
|
+
def full_name repo
|
85
|
+
"#{repo.owner.login}/#{repo.name}"
|
86
|
+
end
|
87
|
+
|
88
|
+
# Private: Returns a configured Octokit client.
|
89
|
+
def octokit
|
90
|
+
@ok ||= Octokit.new(:auto_traversal=>true)
|
91
|
+
end
|
92
|
+
|
93
|
+
# Private: Returns the remote url of a Git working directory.
|
94
|
+
def remote_url path
|
95
|
+
%x{git config --file #{path}/.git/config --get remote.origin.url}
|
96
|
+
end
|
97
|
+
|
98
|
+
# Private: Returns a parsed URL. Wraps `URI.parse` with support for Git's
|
99
|
+
# SCP-like syntax (look like: git@github.com:adammck/whatever.git).
|
100
|
+
def parse_url url
|
101
|
+
begin
|
102
|
+
URI.parse(url)
|
103
|
+
|
104
|
+
rescue URI::InvalidURIError
|
105
|
+
if m = url.match("^(#{USERINFO})@(#{HOST}):(#{REL_PATH})$")
|
106
|
+
URI::Generic.new "ssh", m[1], m[2], 22, nil, m[3], nil, nil, nil
|
107
|
+
|
108
|
+
else
|
109
|
+
raise
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
# Private: Returns a filename with the extension removed.
|
115
|
+
def chop_extension filename
|
116
|
+
filename.sub /\.\w+$/, ""
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
data/lib/forkreadme.rb
ADDED
metadata
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: forkreadme
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Adam Mckaig
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-04-26 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: thor
|
16
|
+
requirement: &70204084253700 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.14.6
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70204084253700
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: octokit
|
27
|
+
requirement: &70204084253100 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ~>
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.0.2
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70204084253100
|
36
|
+
description:
|
37
|
+
email:
|
38
|
+
- adam.mckaig@gmail.com
|
39
|
+
executables:
|
40
|
+
- forkreadme
|
41
|
+
extensions: []
|
42
|
+
extra_rdoc_files: []
|
43
|
+
files:
|
44
|
+
- .gitignore
|
45
|
+
- Gemfile
|
46
|
+
- bin/forkreadme
|
47
|
+
- forkreadme.gemspec
|
48
|
+
- lib/forkreadme.rb
|
49
|
+
- lib/forkreadme/errors.rb
|
50
|
+
- lib/forkreadme/generator.rb
|
51
|
+
- lib/forkreadme/version.rb
|
52
|
+
homepage: https://github.com/adammck/forkreadme
|
53
|
+
licenses: []
|
54
|
+
post_install_message:
|
55
|
+
rdoc_options: []
|
56
|
+
require_paths:
|
57
|
+
- lib
|
58
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
60
|
+
requirements:
|
61
|
+
- - ! '>='
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0'
|
64
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
requirements: []
|
71
|
+
rubyforge_project:
|
72
|
+
rubygems_version: 1.8.15
|
73
|
+
signing_key:
|
74
|
+
specification_version: 3
|
75
|
+
summary: Generate useful READMEs for GitHub forks
|
76
|
+
test_files: []
|