cwninja-make-gem-now 0.3
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/README.markdown +11 -0
- data/Rakefile +41 -0
- data/bin/make-gem-now +4 -0
- data/lib/make_gem_now/builder.rb +56 -0
- data/lib/make_gem_now/scanner.rb +22 -0
- data/lib/make_gem_now.rb +33 -0
- metadata +61 -0
data/README.markdown
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Make Gem Now
|
|
2
|
+
|
|
3
|
+
A tool to scan through a whole bunch of checked out repos and build gems for them as needed. It will then index those gems, and make them available for download.
|
|
4
|
+
|
|
5
|
+
## Usage:
|
|
6
|
+
|
|
7
|
+
make-gem-now path/to/my/code /var/www/gems
|
|
8
|
+
|
|
9
|
+
Simple no?
|
|
10
|
+
|
|
11
|
+
Now you can run your own github!
|
data/Rakefile
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'rake'
|
|
3
|
+
require 'rake/testtask'
|
|
4
|
+
require 'rake/rdoctask'
|
|
5
|
+
require 'rake/gempackagetask'
|
|
6
|
+
require 'date'
|
|
7
|
+
|
|
8
|
+
spec = Gem::Specification.new do |s|
|
|
9
|
+
s.name = %q{make-gem-now}
|
|
10
|
+
s.version = "0.3"
|
|
11
|
+
s.summary = %q{A tool to build all gems in a given dir, and index them appropriately.}
|
|
12
|
+
s.description = %q{A tool to build all gems in a given dir, and index them appropriately.}
|
|
13
|
+
|
|
14
|
+
s.files = FileList['[A-Z]*', 'lib/**/*.rb', 'test/**/*.rb', 'rails/*']
|
|
15
|
+
s.require_path = 'lib'
|
|
16
|
+
s.executables = ["make-gem-now"]
|
|
17
|
+
|
|
18
|
+
s.has_rdoc = true
|
|
19
|
+
s.extra_rdoc_files = ["README.markdown"]
|
|
20
|
+
s.rdoc_options = ['--line-numbers', '--inline-source', "--main", "README.markdown"]
|
|
21
|
+
|
|
22
|
+
s.authors = ["Tom Lea"]
|
|
23
|
+
s.email = %q{commits@tomlea.co.uk}
|
|
24
|
+
|
|
25
|
+
s.platform = Gem::Platform::RUBY
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
Rake::GemPackageTask.new spec do |pkg|
|
|
29
|
+
pkg.need_tar = true
|
|
30
|
+
pkg.need_zip = true
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
desc "Clean files generated by rake tasks"
|
|
34
|
+
task :clobber => [:clobber_package]
|
|
35
|
+
|
|
36
|
+
desc "Generate a gemspec file"
|
|
37
|
+
task :gemspec do
|
|
38
|
+
File.open("#{spec.name}.gemspec", 'w') do |f|
|
|
39
|
+
f.write spec.to_ruby
|
|
40
|
+
end
|
|
41
|
+
end
|
data/bin/make-gem-now
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
require "rubygems"
|
|
2
|
+
require "yaml"
|
|
3
|
+
require "rubygems/package"
|
|
4
|
+
require 'timeout'
|
|
5
|
+
|
|
6
|
+
module MakeGemNow
|
|
7
|
+
class Builder
|
|
8
|
+
def initialize(path_to_gemspec, output_path = ".")
|
|
9
|
+
@path_to_gemspec = path_to_gemspec
|
|
10
|
+
@output_path = output_path
|
|
11
|
+
raise "Could not find gemspec!" unless File.exist? @path_to_gemspec
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def generate_spec
|
|
15
|
+
spec_file = File.read(@path_to_gemspec)
|
|
16
|
+
|
|
17
|
+
IO.popen("-"){|yaml_pipe|
|
|
18
|
+
if yaml_pipe
|
|
19
|
+
Timeout.timeout(1){
|
|
20
|
+
@spec = YAML.load(yaml_pipe)
|
|
21
|
+
raise "This isn't a freaking gemspec, what you trying to pull here buddy?" unless @spec.class == Gem::Specification
|
|
22
|
+
}
|
|
23
|
+
else
|
|
24
|
+
puts eval("$SAFE = 3\n (\n#{spec_file}\n).to_yaml")
|
|
25
|
+
end
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
raise "Loading the YAML failed." unless $?.success?
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def build!
|
|
32
|
+
old_pwd = Dir.pwd
|
|
33
|
+
generate_spec
|
|
34
|
+
Dir.chdir(File.dirname(@path_to_gemspec))
|
|
35
|
+
open File.join(@output_path, @spec.file_name), 'wb' do |gem_io|
|
|
36
|
+
Gem::Package.open gem_io, 'w', nil do |pkg|
|
|
37
|
+
pkg.metadata = @spec.to_yaml
|
|
38
|
+
@spec.files.each do |file|
|
|
39
|
+
next if File.directory? file
|
|
40
|
+
next if file == @spec.file_name # Don't add gem onto itself
|
|
41
|
+
|
|
42
|
+
stat = File.stat file
|
|
43
|
+
mode = stat.mode & 0777
|
|
44
|
+
size = stat.size
|
|
45
|
+
|
|
46
|
+
pkg.add_file_simple file, mode, size do |tar_io|
|
|
47
|
+
tar_io.write open(file, "rb") { |f| f.read }
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
ensure
|
|
53
|
+
Dir.chdir(old_pwd)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module MakeGemNow
|
|
2
|
+
class Scanner
|
|
3
|
+
include Enumerable
|
|
4
|
+
def initialize(path)
|
|
5
|
+
@base_path = path
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def each
|
|
9
|
+
Dir.new(@base_path).each do |f|
|
|
10
|
+
next if f =~ /^\./
|
|
11
|
+
|
|
12
|
+
path = File.join(@base_path, f)
|
|
13
|
+
next unless File.directory? path
|
|
14
|
+
|
|
15
|
+
gemspec = File.join(path, File.basename(path)+".gemspec")
|
|
16
|
+
next unless File.exist?( gemspec )
|
|
17
|
+
|
|
18
|
+
yield(gemspec)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
data/lib/make_gem_now.rb
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require "rubygems/indexer"
|
|
2
|
+
require "logger"
|
|
3
|
+
module MakeGemNow
|
|
4
|
+
def make_all(source_paths, output_path = ".")
|
|
5
|
+
gems_path = File.join(output_path, "gems")
|
|
6
|
+
Dir.mkdir(gems_path) unless File.exists? gems_path
|
|
7
|
+
|
|
8
|
+
MakeGemNow::Scanner.new(source_paths).each do |gemspec|
|
|
9
|
+
update_repo(File.dirname(gemspec))
|
|
10
|
+
begin
|
|
11
|
+
MakeGemNow::Builder.new(gemspec, gems_path).build!
|
|
12
|
+
rescue => e
|
|
13
|
+
puts "Could not build #{gemspec}:"
|
|
14
|
+
puts " "+e.message
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
Gem::Indexer.new(output_path).generate_index
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def update_repo(path)
|
|
21
|
+
if File.directory?(File.join(path, ".git"))
|
|
22
|
+
require 'git'
|
|
23
|
+
g = Git.open(path, :log => Logger.new(STDOUT))
|
|
24
|
+
g.fetch
|
|
25
|
+
g.merge "origin/master"
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
extend self
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
require File.join(File.dirname(__FILE__), *%w[make_gem_now builder])
|
|
33
|
+
require File.join(File.dirname(__FILE__), *%w[make_gem_now scanner])
|
metadata
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: cwninja-make-gem-now
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: "0.3"
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Tom Lea
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
|
|
12
|
+
date: 2009-01-30 00:00:00 -08:00
|
|
13
|
+
default_executable: make-gem-now
|
|
14
|
+
dependencies: []
|
|
15
|
+
|
|
16
|
+
description: A tool to build all gems in a given dir, and index them appropriately.
|
|
17
|
+
email: commits@tomlea.co.uk
|
|
18
|
+
executables:
|
|
19
|
+
- make-gem-now
|
|
20
|
+
extensions: []
|
|
21
|
+
|
|
22
|
+
extra_rdoc_files:
|
|
23
|
+
- README.markdown
|
|
24
|
+
files:
|
|
25
|
+
- Rakefile
|
|
26
|
+
- README.markdown
|
|
27
|
+
- lib/make_gem_now/builder.rb
|
|
28
|
+
- lib/make_gem_now/scanner.rb
|
|
29
|
+
- lib/make_gem_now.rb
|
|
30
|
+
- bin/make-gem-now
|
|
31
|
+
has_rdoc: true
|
|
32
|
+
homepage:
|
|
33
|
+
post_install_message:
|
|
34
|
+
rdoc_options:
|
|
35
|
+
- --line-numbers
|
|
36
|
+
- --inline-source
|
|
37
|
+
- --main
|
|
38
|
+
- README.markdown
|
|
39
|
+
require_paths:
|
|
40
|
+
- lib
|
|
41
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
42
|
+
requirements:
|
|
43
|
+
- - ">="
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
version: "0"
|
|
46
|
+
version:
|
|
47
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
48
|
+
requirements:
|
|
49
|
+
- - ">="
|
|
50
|
+
- !ruby/object:Gem::Version
|
|
51
|
+
version: "0"
|
|
52
|
+
version:
|
|
53
|
+
requirements: []
|
|
54
|
+
|
|
55
|
+
rubyforge_project:
|
|
56
|
+
rubygems_version: 1.2.0
|
|
57
|
+
signing_key:
|
|
58
|
+
specification_version: 2
|
|
59
|
+
summary: A tool to build all gems in a given dir, and index them appropriately.
|
|
60
|
+
test_files: []
|
|
61
|
+
|