basis 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +15 -0
- data/Manifest.txt +1 -0
- data/README.rdoc +2 -1
- data/Rakefile +5 -2
- data/bin/basis +58 -25
- data/lib/basis.rb +2 -1
- data/lib/basis/hooks.rb +15 -0
- data/lib/basis/repo.rb +23 -7
- data/lib/basis/template.rb +22 -0
- data/test/test_basis_template.rb +2 -2
- metadata +21 -29
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
=== 1.1.0 / 2011-01-03
|
2
|
+
|
3
|
+
* Add 1.x rationale.
|
4
|
+
* Store original git URL and SHA in rendered projects.
|
5
|
+
* Add ill-conceived stab at hooks.
|
6
|
+
* Fix pattern matching on update and list.
|
7
|
+
* 'Improve' error handling.
|
8
|
+
* Don't require RubyGems.
|
9
|
+
* Use open4.
|
10
|
+
* Require Ruby >= 1.8.7.
|
11
|
+
* Update examples in --help.
|
12
|
+
* Add rename/mv.
|
13
|
+
* Remove useless colonification.
|
14
|
+
* Ignore coverage info.
|
15
|
+
|
1
16
|
=== 1.0.0 / 2010-07-21
|
2
17
|
|
3
18
|
* Birthday!
|
data/Manifest.txt
CHANGED
data/README.rdoc
CHANGED
data/Rakefile
CHANGED
@@ -1,14 +1,17 @@
|
|
1
1
|
require "hoe"
|
2
2
|
|
3
|
-
Hoe.plugin :doofus, :git
|
3
|
+
Hoe.plugin :doofus, :git, :isolate
|
4
4
|
|
5
5
|
Hoe.spec "basis" do
|
6
6
|
developer "John Barnette", "jbarnette@gmail.com"
|
7
7
|
|
8
|
+
require_ruby_version ">= 1.8.7"
|
9
|
+
|
8
10
|
self.extra_rdoc_files = Dir["*.rdoc"]
|
9
11
|
self.history_file = "CHANGELOG.rdoc"
|
10
12
|
self.readme_file = "README.rdoc"
|
11
13
|
self.testlib = :minitest
|
12
14
|
|
13
|
-
extra_deps << ["erubis", "
|
15
|
+
extra_deps << ["erubis", "~> 2.0"]
|
16
|
+
extra_deps << ["open4", "~> 1.0"]
|
14
17
|
end
|
data/bin/basis
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require "rubygems"
|
4
3
|
require "basis"
|
5
4
|
require "basis/context"
|
5
|
+
require "basis/hooks"
|
6
6
|
require "basis/my"
|
7
7
|
require "basis/repo"
|
8
8
|
require "optparse"
|
@@ -17,13 +17,14 @@ require "optparse"
|
|
17
17
|
add <git-url> [name] Register a template locally
|
18
18
|
list, ls [pattern] List available templates
|
19
19
|
remove, rm <name> Remove a template
|
20
|
+
rename, mv <old> <new> Rename a template
|
20
21
|
update [pattern] Update local templates
|
21
22
|
|
22
|
-
# add the 'gem
|
23
|
+
# add the 'gem-hoe' template
|
23
24
|
$ basis add git://github.com/jbarnette/basis-gem-hoe.git
|
24
25
|
|
25
|
-
# start a new project `foo' using the `gem
|
26
|
-
$ basis gem
|
26
|
+
# start a new project `foo' using the `gem-hoe' template
|
27
|
+
$ basis gem-hoe foo
|
27
28
|
|
28
29
|
Switches:
|
29
30
|
END
|
@@ -36,7 +37,11 @@ def help
|
|
36
37
|
end
|
37
38
|
|
38
39
|
def help! message = nil
|
39
|
-
|
40
|
+
if message
|
41
|
+
message = "fatal: #{message}" if /^fatal/ !~ message
|
42
|
+
warn message
|
43
|
+
end
|
44
|
+
|
40
45
|
abort @options.help
|
41
46
|
end
|
42
47
|
|
@@ -61,34 +66,62 @@ rescue OptionParser::ParseError => e
|
|
61
66
|
help! e.message
|
62
67
|
end
|
63
68
|
|
69
|
+
|
70
|
+
if File.file?(hooks = File.expand_path("~/.basis/hooks.rb"))
|
71
|
+
Basis::Hooks.module_eval File.read(hooks), hooks, 1
|
72
|
+
end
|
73
|
+
|
64
74
|
@repo = Basis::Repo.new
|
65
75
|
|
66
|
-
|
76
|
+
begin
|
77
|
+
case command = ARGV.shift
|
78
|
+
when "add" then
|
79
|
+
url, name = ARGV
|
80
|
+
help! "Need a url" unless url
|
81
|
+
@repo.add url, name
|
82
|
+
|
83
|
+
when "ls", "list" then
|
84
|
+
templates = @repo.templates ARGV.shift
|
85
|
+
width = templates.keys.map(&:length).max || 0
|
86
|
+
max = 80 - width - 5
|
87
|
+
|
88
|
+
templates.keys.sort.each do |name|
|
89
|
+
template = templates[name]
|
90
|
+
desc = template.description
|
91
|
+
|
92
|
+
if desc.length > max
|
93
|
+
desc = desc[0, max - 3] + "..."
|
94
|
+
end
|
67
95
|
|
68
|
-
|
69
|
-
|
70
|
-
url, name = ARGV
|
71
|
-
help! "Need a url" unless url
|
72
|
-
@repo.add url, name
|
96
|
+
printf "%-#{width}s # #{desc}\n", name
|
97
|
+
end
|
73
98
|
|
74
|
-
when "
|
75
|
-
|
99
|
+
when "mv", "rename" then
|
100
|
+
old, new = ARGV
|
76
101
|
|
77
|
-
|
78
|
-
|
79
|
-
@repo.remove name
|
102
|
+
help! "Need names!" unless old && new
|
103
|
+
@repo.rename old, new
|
80
104
|
|
81
|
-
when "
|
82
|
-
|
105
|
+
when "rm", "remove" then
|
106
|
+
help! "Need a name" unless name = ARGV.shift
|
107
|
+
@repo.remove name
|
83
108
|
|
84
|
-
|
85
|
-
|
109
|
+
when "update" then
|
110
|
+
@repo.update ARGV.shift
|
86
111
|
|
87
|
-
|
88
|
-
|
112
|
+
else
|
113
|
+
help! unless command
|
114
|
+
template = @repo.templates[command]
|
89
115
|
|
90
|
-
|
91
|
-
|
116
|
+
help! "Unknown command or template: #{command}" unless template
|
117
|
+
help! "Need a destination directory" unless destdir = ARGV.shift
|
92
118
|
|
93
|
-
|
119
|
+
my = Basis::My.new File.basename(destdir)
|
120
|
+
ctx = Basis::Context.new my, @overrides
|
121
|
+
|
122
|
+
template.render destdir, ctx
|
123
|
+
Basis::Hooks.fire :rendered, destdir
|
124
|
+
end
|
125
|
+
rescue Basis::Oops => e
|
126
|
+
help! e.message
|
94
127
|
end
|
data/lib/basis.rb
CHANGED
data/lib/basis/hooks.rb
ADDED
data/lib/basis/repo.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
+
require "basis"
|
1
2
|
require "basis/template"
|
2
3
|
require "fileutils"
|
4
|
+
require "open4"
|
3
5
|
|
4
6
|
module Basis
|
5
7
|
class Repo
|
@@ -10,11 +12,10 @@ module Basis
|
|
10
12
|
end
|
11
13
|
|
12
14
|
def add url, name = nil
|
13
|
-
name ||= File.basename(url, ".git").
|
14
|
-
downcase.sub(/^basis[-_]/, "").tr "-", ":"
|
15
|
+
name ||= File.basename(url, ".git").downcase.sub(/^basis[-_]/, "")
|
15
16
|
|
16
17
|
if templates.keys.include? name
|
17
|
-
raise "Template '#{name}' already exists!"
|
18
|
+
raise Basis::Oops, "Template '#{name}' already exists!"
|
18
19
|
end
|
19
20
|
|
20
21
|
FileUtils.mkdir_p template_path
|
@@ -29,6 +30,14 @@ module Basis
|
|
29
30
|
@templates = nil
|
30
31
|
end
|
31
32
|
|
33
|
+
def rename old, new
|
34
|
+
unless File.directory? template_path(old)
|
35
|
+
raise Basis::Oops, "Unknown template: #{old}"
|
36
|
+
end
|
37
|
+
|
38
|
+
FileUtils.mv template_path(old), template_path(new)
|
39
|
+
end
|
40
|
+
|
32
41
|
def templates pattern = nil
|
33
42
|
unless @templates
|
34
43
|
@templates = {}
|
@@ -41,20 +50,27 @@ module Basis
|
|
41
50
|
end
|
42
51
|
end
|
43
52
|
|
44
|
-
Hash[@templates.select { |n, t| pattern.nil? || pattern =~ n }]
|
53
|
+
Hash[@templates.select { |n, t| pattern.nil? || /#{pattern}/ =~ n }]
|
45
54
|
end
|
46
55
|
|
47
56
|
def update pattern = nil
|
48
57
|
templates.each do |name, template|
|
49
|
-
next unless pattern.nil? || pattern =~ name
|
58
|
+
next unless pattern.nil? || /#{pattern}/ =~ name
|
50
59
|
Dir.chdir(template.srcdir) { git :pull }
|
51
60
|
end
|
52
61
|
end
|
53
62
|
|
54
63
|
private
|
55
64
|
|
56
|
-
def git *args
|
57
|
-
|
65
|
+
def git *args
|
66
|
+
out, err = nil
|
67
|
+
|
68
|
+
status = Open4.popen4 "git", *args.map(&:to_s) do |pid, sin, sout, serr|
|
69
|
+
out = sout.read.chomp
|
70
|
+
err = serr.read.chomp
|
71
|
+
end
|
72
|
+
|
73
|
+
raise Basis::Oops, err if 0 != status.exitstatus
|
58
74
|
end
|
59
75
|
|
60
76
|
def template_path *args
|
data/lib/basis/template.rb
CHANGED
@@ -4,12 +4,34 @@ require "fileutils"
|
|
4
4
|
module Basis
|
5
5
|
class Template
|
6
6
|
attr_reader :srcdir
|
7
|
+
attr_reader :origin
|
7
8
|
|
8
9
|
def initialize srcdir
|
9
10
|
@srcdir = File.expand_path srcdir
|
11
|
+
|
12
|
+
Dir.chdir @srcdir do
|
13
|
+
remote = `git remote -v`.split(/\s/)[1]
|
14
|
+
rev = `git rev-parse HEAD`
|
15
|
+
@origin = "#{remote}@#{rev}"
|
16
|
+
end
|
17
|
+
|
18
|
+
if File.exist?(template = "#@srcdir/.basis/template.rb")
|
19
|
+
src = IO.read template
|
20
|
+
extend eval("Module.new do;#{src};end", nil, template, 1)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def description
|
25
|
+
"An awesome template."
|
10
26
|
end
|
11
27
|
|
12
28
|
def render destdir, context
|
29
|
+
FileUtils.mkdir_p File.join(destdir, ".basis")
|
30
|
+
|
31
|
+
File.open File.join(destdir, ".basis", "origin"), "wb" do |f|
|
32
|
+
f.puts origin
|
33
|
+
end
|
34
|
+
|
13
35
|
Dir.glob("#{srcdir}/**/*", File::FNM_DOTMATCH).each do |src|
|
14
36
|
next unless File.file? src
|
15
37
|
|
data/test/test_basis_template.rb
CHANGED
@@ -3,7 +3,7 @@ require "basis/template"
|
|
3
3
|
|
4
4
|
class BasisTemplateTest < MiniTest::Unit::TestCase
|
5
5
|
def test_initialize
|
6
|
-
t = Basis::Template.new "
|
7
|
-
assert_equal "#{File.expand_path '.'}/
|
6
|
+
t = Basis::Template.new "test/fixtures/empty"
|
7
|
+
assert_equal "#{File.expand_path '.'}/test/fixtures/empty", t.srcdir
|
8
8
|
end
|
9
9
|
end
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: basis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 23
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 1
|
7
|
+
- 1
|
8
8
|
- 0
|
9
|
-
|
10
|
-
version: 1.0.0
|
9
|
+
version: 1.1.0
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- John Barnette
|
@@ -15,7 +14,7 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date:
|
17
|
+
date: 2011-01-03 00:00:00 -08:00
|
19
18
|
default_executable:
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
@@ -24,35 +23,27 @@ dependencies:
|
|
24
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
24
|
none: false
|
26
25
|
requirements:
|
27
|
-
- -
|
26
|
+
- - ~>
|
28
27
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 7
|
30
28
|
segments:
|
31
29
|
- 2
|
32
|
-
|
33
|
-
|
34
|
-
- !ruby/object:Gem::Version
|
35
|
-
hash: 5
|
36
|
-
segments:
|
37
|
-
- 3
|
38
|
-
version: "3"
|
30
|
+
- 0
|
31
|
+
version: "2.0"
|
39
32
|
type: :runtime
|
40
33
|
version_requirements: *id001
|
41
34
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
35
|
+
name: open4
|
43
36
|
prerelease: false
|
44
37
|
requirement: &id002 !ruby/object:Gem::Requirement
|
45
38
|
none: false
|
46
39
|
requirements:
|
47
|
-
- -
|
40
|
+
- - ~>
|
48
41
|
- !ruby/object:Gem::Version
|
49
|
-
hash: 7
|
50
42
|
segments:
|
51
|
-
-
|
43
|
+
- 1
|
52
44
|
- 0
|
53
|
-
|
54
|
-
|
55
|
-
type: :development
|
45
|
+
version: "1.0"
|
46
|
+
type: :runtime
|
56
47
|
version_requirements: *id002
|
57
48
|
- !ruby/object:Gem::Dependency
|
58
49
|
name: hoe
|
@@ -62,18 +53,18 @@ dependencies:
|
|
62
53
|
requirements:
|
63
54
|
- - ">="
|
64
55
|
- !ruby/object:Gem::Version
|
65
|
-
hash: 21
|
66
56
|
segments:
|
67
57
|
- 2
|
68
|
-
-
|
69
|
-
-
|
70
|
-
version: 2.
|
58
|
+
- 8
|
59
|
+
- 0
|
60
|
+
version: 2.8.0
|
71
61
|
type: :development
|
72
62
|
version_requirements: *id003
|
73
63
|
description: |-
|
74
64
|
Basis is a project skeleton generator.
|
75
65
|
|
76
|
-
It'll have more docs at some point.
|
66
|
+
It'll have more docs at some point. 1.x releases of Basis are
|
67
|
+
primarily experiments in anticipation of a 2.0.
|
77
68
|
email:
|
78
69
|
- jbarnette@gmail.com
|
79
70
|
executables:
|
@@ -93,6 +84,7 @@ files:
|
|
93
84
|
- bin/basis
|
94
85
|
- lib/basis.rb
|
95
86
|
- lib/basis/context.rb
|
87
|
+
- lib/basis/hooks.rb
|
96
88
|
- lib/basis/my.rb
|
97
89
|
- lib/basis/repo.rb
|
98
90
|
- lib/basis/template.rb
|
@@ -114,16 +106,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
114
106
|
requirements:
|
115
107
|
- - ">="
|
116
108
|
- !ruby/object:Gem::Version
|
117
|
-
hash: 3
|
118
109
|
segments:
|
119
|
-
-
|
120
|
-
|
110
|
+
- 1
|
111
|
+
- 8
|
112
|
+
- 7
|
113
|
+
version: 1.8.7
|
121
114
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
122
115
|
none: false
|
123
116
|
requirements:
|
124
117
|
- - ">="
|
125
118
|
- !ruby/object:Gem::Version
|
126
|
-
hash: 3
|
127
119
|
segments:
|
128
120
|
- 0
|
129
121
|
version: "0"
|