falsework 2.1.1 → 3.0.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/README.rdoc +19 -59
- data/Rakefile +28 -20
- data/bin/falsework +266 -73
- data/doc/NEWS.rdoc +24 -0
- data/doc/README.rdoc +19 -59
- data/doc/TODO.org +16 -6
- data/doc/template-tutorial.rdoc +49 -12
- data/dynamic.yaml +4 -0
- data/falsework.gemspec +10 -1
- data/lib/falsework/cliconfig.rb +14 -9
- data/lib/falsework/cliutils.rb +0 -2
- data/lib/falsework/meta.rb +2 -1
- data/lib/falsework/mould.rb +121 -192
- data/lib/falsework/upgrader.rb +120 -0
- data/lib/falsework/utils.rb +23 -0
- data/templates/c-glib/#config.yaml +18 -0
- data/{lib/falsework/templates → templates}/c-glib/README +0 -0
- data/{lib/falsework/templates → templates}/c-glib/doc/#doc.ascii +0 -0
- data/{lib/falsework/templates → templates}/c-glib/doc/%%@project%%.1.asciidoc +0 -0
- data/{lib/falsework/templates → templates}/c-glib/doc/LICENSE +0 -0
- data/{lib/falsework/templates → templates}/c-glib/doc/Makefile +0 -0
- data/{lib/falsework/templates → templates}/c-glib/src/#exe.c +0 -0
- data/{lib/falsework/templates → templates}/c-glib/src/#exe.h +0 -0
- data/{lib/falsework/templates → templates}/c-glib/src/%%@project%%.c +0 -0
- data/{lib/falsework/templates → templates}/c-glib/src/%%@project%%.h +0 -0
- data/{lib/falsework/templates → templates}/c-glib/src/Makefile +0 -0
- data/{lib/falsework/templates → templates}/c-glib/src/untest.c +0 -0
- data/{lib/falsework/templates → templates}/c-glib/src/untest.h +0 -0
- data/{lib/falsework/templates → templates}/c-glib/src/utils.c +0 -0
- data/{lib/falsework/templates → templates}/c-glib/src/utils.h +0 -0
- data/{lib/falsework/templates → templates}/c-glib/test/#test.c +0 -0
- data/{lib/falsework/templates → templates}/c-glib/test/Makefile +0 -0
- data/{lib/falsework/templates → templates}/c-glib/test/Makefile.test.mk +0 -0
- data/{lib/falsework/templates → templates}/c-glib/test/mycat.c +0 -0
- data/{lib/falsework/templates → templates}/c-glib/test/semis/text/empty.txt +0 -0
- data/{lib/falsework/templates → templates}/c-glib/test/test_utils.c +0 -0
- data/templates/ruby-cli/#config.yaml +26 -0
- data/{lib/falsework/templates → templates}/ruby-cli/%%@project%%.gemspec +0 -0
- data/{lib/falsework/templates → templates}/ruby-cli/.gitignore +0 -0
- data/{lib/falsework/templates → templates}/ruby-cli/.gitignore.#erb +0 -0
- data/{lib/falsework/templates → templates}/ruby-cli/Gemfile +0 -0
- data/{lib/falsework/templates → templates}/ruby-cli/README.rdoc +17 -19
- data/{lib/falsework/templates → templates}/ruby-cli/Rakefile +0 -0
- data/{lib/falsework/templates → templates}/ruby-cli/bin/%%@project%% +3 -3
- data/{lib/falsework/templates → templates}/ruby-cli/doc/#doc.rdoc +16 -18
- data/{lib/falsework/templates → templates}/ruby-cli/doc/LICENSE +0 -0
- data/{lib/falsework/templates → templates}/ruby-cli/doc/NEWS.rdoc +0 -0
- data/{lib/falsework/templates → templates}/ruby-cli/doc/README.rdoc +17 -19
- data/templates/ruby-cli/etc/%%@project%%.yaml +2 -0
- data/{lib/falsework/templates → templates}/ruby-cli/lib/%%@project%%/cliconfig.rb +14 -11
- data/{lib/falsework/templates → templates}/ruby-cli/lib/%%@project%%/cliutils.rb +0 -4
- data/{lib/falsework/templates → templates}/ruby-cli/lib/%%@project%%/meta.rb +1 -0
- data/{lib/falsework/templates → templates}/ruby-cli/test/helper.rb +0 -0
- data/{lib/falsework/templates → templates}/ruby-cli/test/helper_cliutils.rb +0 -3
- data/{lib/falsework/templates → templates}/ruby-cli/test/test_%%@project%%.rb +0 -0
- data/test/example/note/full +10 -0
- data/test/example/note/project-too-old +8 -0
- data/test/example/note/template-unknown +8 -0
- data/test/helper.rb +11 -0
- data/test/helper_cliutils.rb +0 -1
- data/test/templates/config-01.yaml +1 -1
- data/test/{test_exe.rb → test_cli.rb} +52 -29
- data/test/test_mould.rb +41 -16
- data/test/test_upgrader.rb +96 -0
- metadata +76 -50
- data/dynamic.ruby-cli +0 -3
- data/lib/falsework/templates/c-glib/#config.yaml +0 -18
- data/lib/falsework/templates/ruby-cli/#config.yaml +0 -15
- data/lib/falsework/templates/ruby-cli/etc/%%@project%%.yaml +0 -2
- data/test/rake_erb_templates.rb +0 -60
- data/test/templates/config-02.yaml +0 -2
- data/test/test_cl.rb +0 -33
data/README.rdoc
CHANGED
@@ -17,21 +17,23 @@ Initially the template spec was designed only for Ruby projects but
|
|
17
17
|
later (from version 1.3.0) hard-coded Ruby staff was removed which added
|
18
18
|
more flexibility.
|
19
19
|
|
20
|
-
|
21
|
-
can also add skeletons for tests end executables <
|
20
|
+
Generated projects <b>are not dependent</b> on falsework. The utility
|
21
|
+
can also add skeletons for tests end executables <b>after</b> the
|
22
22
|
project generation.
|
23
23
|
|
24
24
|
|
25
25
|
==Ruby Template
|
26
26
|
|
27
|
-
... is default. It generates a scaffold which
|
27
|
+
... is default. It generates a scaffold which has:
|
28
28
|
|
29
29
|
* auto-created git (but not github) project;
|
30
30
|
|
31
|
-
* <tt>
|
32
|
-
|
31
|
+
* <tt>gemspec</tt> (a file list is pulled from the git repository),
|
32
|
+
<tt>doc</tt>, <tt>test</tt> targets; +build+, +install+ & +release+
|
33
|
+
bundler targets.
|
33
34
|
|
34
|
-
* easy to use configuration parser/loader. This includes scanning
|
35
|
+
* easy to use configuration parser/loader. This includes auto-scanning
|
36
|
+
for:
|
35
37
|
|
36
38
|
* env variable(s);
|
37
39
|
* the flat YAML configuration file;
|
@@ -45,83 +47,41 @@ Version & name of your project can be located at generated
|
|
45
47
|
|
46
48
|
==Options
|
47
49
|
|
48
|
-
|
50
|
+
Run
|
49
51
|
|
50
|
-
|
51
|
-
templates. You can add your own templates in
|
52
|
-
<tt>~/.falsework/templates</tt> directory.
|
52
|
+
$ falsework -h
|
53
53
|
|
54
|
-
|
55
|
-
|
56
|
-
directory by modifying <tt>tdir</tt> option
|
57
|
-
in the config file. (<tt>tdir</tt> is an
|
58
|
-
array).
|
59
|
-
|
60
|
-
new NAME:: Create a new project. It creates a directory
|
61
|
-
<i>NAME</i> and populates it with files.
|
54
|
+
to read all possible commands & global options. All of them, except
|
55
|
+
+new+ & +list+, work from the root project directory.
|
62
56
|
|
63
|
-
|
57
|
+
Some of the commands support <tt>-h</tt> option too, for example:
|
64
58
|
|
65
|
-
|
66
|
-
project and a corresponding doc in
|
67
|
-
<tt>doc</tt> sub-directory.
|
68
|
-
|
69
|
-
doc NAME:: Add a new doc file in
|
70
|
-
<tt>doc</tt> sub-directory.
|
71
|
-
|
72
|
-
test NAME:: Add a new test in
|
73
|
-
<tt>test</tt> sub-directory.
|
74
|
-
|
75
|
-
upgrade:: 'Inject' or upgrade some vital files from the
|
76
|
-
template into the project. Currently only
|
77
|
-
'ruby-cli' template supports this.
|
78
|
-
|
79
|
-
The options are as follows:
|
80
|
-
|
81
|
-
-t:: A template name.
|
82
|
-
|
83
|
-
-b:: A batch mode. (No questions asked.)
|
84
|
-
|
85
|
-
--no-git:: Don't create a Git repository. Don't use
|
86
|
-
this for 'ruby-cli' template.
|
87
|
-
|
88
|
-
--config-dirs:: List all possible locations for the
|
89
|
-
configuration file. The first found wins.
|
90
|
-
|
91
|
-
--config NAME:: The name of the configuration file. If
|
92
|
-
it contains <tt>/</tt> in it, the list from
|
93
|
-
<tt>--config-dirs</tt> is ignored.
|
94
|
-
|
95
|
-
-V:: Show falsework version and exit.
|
96
|
-
|
97
|
-
-v:: Be more verbose. You can supply it several
|
98
|
-
times, viz. <tt>-vv</tt> dumps even more
|
99
|
-
debug info.
|
59
|
+
$ falsework upgrade -h
|
100
60
|
|
101
61
|
|
102
62
|
==Examples
|
103
63
|
|
104
64
|
Create a new project:
|
105
65
|
|
106
|
-
|
66
|
+
$ falsework -v new foobar
|
107
67
|
|
108
68
|
Add another CL util to the existing project:
|
109
69
|
|
110
|
-
|
70
|
+
$ pwd
|
111
71
|
.../foobar
|
112
|
-
|
72
|
+
$ falsework exe foo
|
113
73
|
|
114
74
|
(It will appear in <tt>bin/</tt> sub-directory.)
|
115
75
|
|
116
76
|
Add another test file:
|
117
77
|
|
118
|
-
|
78
|
+
$ falsework test foo
|
119
79
|
|
120
80
|
(It will appear in <tt>test/</tt> sub-directory.)
|
121
81
|
|
122
82
|
Create a project from another template:
|
123
83
|
|
124
|
-
|
84
|
+
$ falsework -t c-glib -v new foo-bar
|
125
85
|
|
126
86
|
|
127
87
|
==Bugs
|
data/Rakefile
CHANGED
@@ -2,31 +2,39 @@
|
|
2
2
|
|
3
3
|
require 'rake/clean'
|
4
4
|
require 'rake/testtask'
|
5
|
-
require 'bundler/gem_tasks'
|
6
5
|
gem 'rdoc'
|
7
6
|
require 'rdoc/task'
|
8
7
|
|
9
|
-
|
10
|
-
require_relative '
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
}
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
8
|
+
require 'yaml'
|
9
|
+
require_relative 'lib/falsework/mould'
|
10
|
+
|
11
|
+
def src2template target, prerequisite
|
12
|
+
src = File.read prerequisite
|
13
|
+
src.gsub! /#{Meta::NAME}/, '<%= @project %>'
|
14
|
+
src.gsub! /#{Mould.name_camelcase(Meta::NAME)}/, '<%= @camelcase %>'
|
15
|
+
|
16
|
+
File.open(target, 'w+') {|fp| fp.puts src }
|
17
|
+
puts "Created: #{target}"
|
18
|
+
end
|
19
|
+
|
20
|
+
# Create a dynamic target list
|
21
|
+
def dynTargets
|
22
|
+
YAML.load_file 'dynamic.yaml'
|
23
|
+
end
|
24
|
+
|
25
|
+
DYNAMICS = dynTargets
|
26
|
+
|
27
|
+
desc "Generate some dynamic template files"
|
28
|
+
task :dynamic do
|
29
|
+
DYNAMICS.each {|key, val|
|
30
|
+
src2template key, val
|
25
31
|
}
|
26
32
|
end
|
27
33
|
|
28
34
|
# add rubi-cli dynamic files to a clobber target
|
29
|
-
CLOBBER.concat
|
35
|
+
CLOBBER.concat DYNAMICS.keys
|
36
|
+
|
37
|
+
require 'bundler/gem_tasks'
|
30
38
|
|
31
39
|
task default: [:test]
|
32
40
|
|
@@ -40,5 +48,5 @@ Rake::TestTask.new do |i|
|
|
40
48
|
i.test_files = FileList['test/test_*.rb']
|
41
49
|
end
|
42
50
|
|
43
|
-
task test: [
|
44
|
-
task build: [
|
51
|
+
task test: [:dynamic]
|
52
|
+
task build: [:dynamic]
|
data/bin/falsework
CHANGED
@@ -2,28 +2,216 @@
|
|
2
2
|
# -*-ruby-*-
|
3
3
|
|
4
4
|
require_relative '../lib/falsework/cliconfig'
|
5
|
-
require_relative '../lib/falsework/
|
5
|
+
require_relative '../lib/falsework/upgrader'
|
6
6
|
|
7
7
|
include Falsework
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
$
|
9
|
+
module Commands
|
10
|
+
extend self
|
11
|
+
|
12
|
+
FORMAT = {
|
13
|
+
'new' => {
|
14
|
+
:help => 'Create a new project',
|
15
|
+
:arg => true,
|
16
|
+
:code => Proc.new {|arg| newProject arg },
|
17
|
+
:optionparse => Proc.new {|arg|
|
18
|
+
OptionParser.new do |o|
|
19
|
+
o.banner = "Usage: #{File.basename($0)} [options] new [options] NAME"
|
20
|
+
o.separator ""
|
21
|
+
|
22
|
+
o.on('--no-git', "Don't create a git repo.",
|
23
|
+
"(Will break 'ruby-cli'.)") { $conf[:git] = false }
|
24
|
+
o.on('--no-note', "Don't create a note file.") {
|
25
|
+
$conf[:note] = false
|
26
|
+
}
|
27
|
+
|
28
|
+
o.parse!(arg)
|
29
|
+
end
|
30
|
+
}
|
31
|
+
},
|
32
|
+
|
33
|
+
'list' => {
|
34
|
+
:help => 'List all available templates',
|
35
|
+
:code => Proc.new {|arg| list arg},
|
36
|
+
|
37
|
+
'dirs' => {
|
38
|
+
:help => 'List all reachable template directories',
|
39
|
+
:code => Proc.new {|arg| listDirs arg}
|
40
|
+
}
|
41
|
+
},
|
42
|
+
|
43
|
+
'upgrade' => {
|
44
|
+
:help => 'Upgrade current project',
|
45
|
+
:optionparse => Proc.new {|arg|
|
46
|
+
OptionParser.new do |o|
|
47
|
+
o.banner = "Usage: #{File.basename($0)} [options] upgrade [options] [command [command]]"
|
48
|
+
o.separator ""
|
49
|
+
o.on('-b', "Don't ask any questions.") {
|
50
|
+
$conf[:upgrader][:batch] = true
|
51
|
+
}
|
52
|
+
o.on('--save', "Keep old files as a copy with .orig", "extension.") {
|
53
|
+
$conf[:upgrader][:save] = true
|
54
|
+
}
|
55
|
+
|
56
|
+
o.parse!(arg)
|
57
|
+
end
|
58
|
+
},
|
59
|
+
:code => Proc.new {|arg| upgrade arg},
|
60
|
+
|
61
|
+
'check' => {
|
62
|
+
:help => 'Check if project can be upgraded',
|
63
|
+
:code => Proc.new {|arg| upgradeCheck arg}
|
64
|
+
},
|
65
|
+
'list' => {
|
66
|
+
:help => 'List files that will be updated',
|
67
|
+
:code => Proc.new {|arg| upgradeListFiles arg },
|
68
|
+
'obsolete' => {
|
69
|
+
:help => 'List files that can be deleted',
|
70
|
+
:code => Proc.new {|arg| upgradeListObsolete arg }
|
71
|
+
}
|
72
|
+
}
|
73
|
+
},
|
74
|
+
|
75
|
+
'exe' => {
|
76
|
+
:help => 'Add a new executable to an existing project',
|
77
|
+
:arg => true,
|
78
|
+
:code => Proc.new {|arg| addFiles 'exe', arg }
|
79
|
+
},
|
80
|
+
'doc' => {
|
81
|
+
:help => 'Add a new documentation file to an existing project',
|
82
|
+
:arg => true,
|
83
|
+
:code => Proc.new {|arg| addFiles 'doc', arg }
|
84
|
+
},
|
85
|
+
'test' => {
|
86
|
+
:help => 'Add a new test file to an existing project',
|
87
|
+
:arg => true,
|
88
|
+
:code => Proc.new {|arg| addFiles 'test', arg }
|
89
|
+
},
|
90
|
+
'file' => {
|
91
|
+
:help => 'Add a new file to an existing project',
|
92
|
+
:arg => true,
|
93
|
+
:code => Proc.new {|arg| addFiles 'file', arg }
|
94
|
+
}
|
95
|
+
}
|
96
|
+
|
97
|
+
DELIM = '~<x>~'
|
98
|
+
|
99
|
+
def tree start, r, indent = ''
|
100
|
+
start.each {|key, val|
|
101
|
+
next if key.is_a?(Symbol)
|
102
|
+
|
103
|
+
t = indent
|
104
|
+
t += key
|
105
|
+
t += ' ARG' if val[:arg]
|
106
|
+
t += DELIM + val[:help]
|
107
|
+
r[:t] << t
|
108
|
+
|
109
|
+
# recursion
|
110
|
+
tree val, r, indent + ' '
|
111
|
+
}
|
112
|
+
end
|
113
|
+
|
114
|
+
def help
|
115
|
+
r = {}
|
116
|
+
r[:t] = []
|
117
|
+
tree FORMAT, r
|
118
|
+
|
119
|
+
max = 0
|
120
|
+
r[:t].each {|idx|
|
121
|
+
left = idx.split(DELIM).first
|
122
|
+
max = left.size if max < left.size
|
123
|
+
}
|
124
|
+
|
125
|
+
r[:t].each_with_index {|idx, index|
|
126
|
+
left = idx.split(DELIM).first
|
127
|
+
spaces = ' ' + ('.' * (max - left.size)) + '.... '
|
128
|
+
r[:t][index].sub!(/#{DELIM}/, spaces)
|
129
|
+
}
|
130
|
+
|
131
|
+
r[:t].join "\n"
|
132
|
+
end
|
133
|
+
|
134
|
+
def traverse format, argv
|
135
|
+
command = argv.first
|
136
|
+
|
137
|
+
found = false
|
138
|
+
format.each {|key, val|
|
139
|
+
if key == command
|
140
|
+
begin
|
141
|
+
format[key][:optionparse].call argv if format[key][:optionparse]
|
142
|
+
rescue
|
143
|
+
CliUtils.errx EX_USAGE, $!
|
144
|
+
end
|
145
|
+
|
146
|
+
if format[key][:arg] || argv.size == 1
|
147
|
+
found = true
|
148
|
+
CliUtils.veputs 2, "Executing '#{key}'"
|
149
|
+
format[key][:code].call argv[1..-1]
|
150
|
+
break
|
151
|
+
else
|
152
|
+
# recursion
|
153
|
+
found = traverse val, argv[1..-1]
|
154
|
+
end
|
155
|
+
end
|
156
|
+
}
|
157
|
+
|
158
|
+
found
|
159
|
+
end
|
160
|
+
|
161
|
+
end
|
162
|
+
|
163
|
+
def list args
|
164
|
+
Mould.templates.each {|name, loc|
|
165
|
+
loc = '(system)' if loc == (Mould.template_dirs.first + name)
|
166
|
+
puts "%-30s %s" % [name, loc]
|
167
|
+
}
|
168
|
+
end
|
169
|
+
|
170
|
+
def listDirs args
|
171
|
+
Mould.template_dirs.each {|idx| puts idx }
|
172
|
+
end
|
173
|
+
|
174
|
+
def newProject args
|
175
|
+
CliUtils.errx EX_USAGE, 'missing argument' if args.size == 0
|
176
|
+
name = args.first
|
177
|
+
|
178
|
+
if File.dirname(name) != '.'
|
179
|
+
Dir.chdir(File.dirname(name)) rescue CliUtils.errx(EX_UNAVAILABLE, "cannot chdir to '#{File.dirname(name)}'")
|
180
|
+
name = File.basename name
|
181
|
+
end
|
182
|
+
|
183
|
+
ok = false
|
184
|
+
begin
|
185
|
+
m = Mould.new(name, $conf[:template],
|
186
|
+
$conf[:user], $conf[:email], $conf[:gecos])
|
187
|
+
ok = m.project_seed
|
188
|
+
rescue
|
189
|
+
CliUtils.errx EX_SOFTWARE, $!
|
190
|
+
end
|
191
|
+
CliUtils.errx EX_SOFTWARE, "hm, nothing was created" unless ok
|
192
|
+
|
193
|
+
m.noteCreate if $conf[:note]
|
194
|
+
|
195
|
+
# create a git repository
|
196
|
+
if $conf[:git]
|
197
|
+
Dir.chdir m.project
|
198
|
+
CliUtils.veputs 1, "Creating a git repository in #{Dir.pwd}... __NNL__"
|
199
|
+
g = Git.init
|
200
|
+
g.add '.'
|
201
|
+
g.commit "Initial import from #{Falsework::Meta::NAME} #{Falsework::Meta::VERSION}."
|
202
|
+
CliUtils.veputs 1, 'OK'
|
203
|
+
end
|
204
|
+
end
|
20
205
|
|
21
|
-
def
|
206
|
+
def addFiles mode, files
|
207
|
+
CliUtils.errx EX_USAGE, 'missing argument(s)' if files.size == 0
|
208
|
+
|
22
209
|
r = true
|
23
210
|
m = Mould.new(File.basename(Dir.pwd), $conf[:template],
|
24
211
|
$conf[:user], $conf[:email], $conf[:gecos])
|
212
|
+
|
25
213
|
files.each {|i|
|
26
|
-
created = m.add(mode, i) rescue CliUtils.errx(1,
|
214
|
+
created = m.add(mode, i) rescue CliUtils.errx(1, $!)
|
27
215
|
if created.size > 0
|
28
216
|
created.each {|idx| CliUtils.veputs(1, idx) }
|
29
217
|
else
|
@@ -31,24 +219,79 @@ def add_files(mode, files)
|
|
31
219
|
end
|
32
220
|
}
|
33
221
|
|
34
|
-
r
|
222
|
+
exit 1 unless r
|
223
|
+
end
|
224
|
+
|
225
|
+
def upgradeCheck args
|
226
|
+
u = Upgrader.new '.'
|
227
|
+
CliUtils.errx EX_UNAVAILABLE, "project '#{u.project}' cannot be upgraded" unless u.able?
|
228
|
+
CliUtils.veputs 1, "Yup, it's possible."
|
229
|
+
rescue UpgradeError, MouldError
|
230
|
+
CliUtils.errx 1, $!
|
231
|
+
end
|
232
|
+
|
233
|
+
def upgradeListFiles args
|
234
|
+
u = Upgrader.new '.'
|
235
|
+
exit EX_UNAVAILABLE unless u.able?
|
236
|
+
u.files.each {|i|
|
237
|
+
puts Mould.resolve_filename i, u.getProjectBinding
|
238
|
+
}
|
239
|
+
rescue UpgradeError, MouldError
|
240
|
+
CliUtils.errx 1, $!
|
241
|
+
end
|
242
|
+
|
243
|
+
def upgradeListObsolete args
|
244
|
+
u = Upgrader.new '.'
|
245
|
+
exit EX_UNAVAILABLE unless u.able?
|
246
|
+
exit EX_UNAVAILABLE unless u.obsolete.size > 0
|
247
|
+
u.obsolete.each {|i|
|
248
|
+
puts Mould.resolve_filename i, u.getProjectBinding
|
249
|
+
}
|
250
|
+
rescue UpgradeError, MouldError
|
251
|
+
CliUtils.errx 1, $!
|
252
|
+
end
|
253
|
+
|
254
|
+
def upgrade args
|
255
|
+
u = Upgrader.new '.'
|
256
|
+
u.batch = $conf[:upgrader][:batch]
|
257
|
+
u.upgrade $conf[:upgrader][:save]
|
258
|
+
rescue UpgradeError, MouldError
|
259
|
+
CliUtils.errx 1, $!
|
35
260
|
end
|
36
261
|
|
37
262
|
|
38
263
|
### main
|
39
264
|
|
265
|
+
$conf = CliConfig.new
|
266
|
+
$conf[:cl_parse_in_order] = true
|
267
|
+
$conf[:banner] = <<EOF
|
268
|
+
Usage: #{File.basename($0)} [options] command ...
|
269
|
+
|
270
|
+
Available commands:
|
271
|
+
|
272
|
+
#{Commands.help}
|
273
|
+
|
274
|
+
EOF
|
275
|
+
$conf[:user] = nil
|
276
|
+
$conf[:gecos] = nil
|
277
|
+
$conf[:email] = nil
|
278
|
+
$conf[:template] = nil
|
279
|
+
$conf[:git] = true
|
280
|
+
$conf[:note] = true
|
281
|
+
|
282
|
+
$conf[:upgrader] = {}
|
283
|
+
$conf[:upgrader][:batch] = false
|
284
|
+
$conf[:upgrader][:save] = false
|
285
|
+
|
40
286
|
$conf.load {|o|
|
41
287
|
o.on('--user STR', 'Github user.') {|i| $conf[:user] = i }
|
42
288
|
o.on('--gecos STR', 'A gecos-like string.') {|i| $conf[:gecos] = i }
|
43
289
|
o.on('--email STR') {|i| $conf[:email] = i }
|
44
|
-
|
45
|
-
"(Will break 'ruby-cli'.)") { $conf[:git] = false }
|
290
|
+
|
46
291
|
o.on('-t NAME', 'A template name.') {|i| $conf[:template] = i }
|
47
|
-
o.on('-b', 'Run in a batch mode and',
|
48
|
-
'don\'t ask any questions.') { $conf[:batch] = true }
|
49
292
|
}
|
50
293
|
|
51
|
-
CliUtils.errx(EX_USAGE, $conf[:banner]) if
|
294
|
+
CliUtils.errx(EX_USAGE, $conf[:banner]) if ARGV.size == 0
|
52
295
|
|
53
296
|
# print our env
|
54
297
|
if $conf[:verbose] >= 2
|
@@ -57,57 +300,7 @@ if $conf[:verbose] >= 2
|
|
57
300
|
end
|
58
301
|
|
59
302
|
# modify a list of available template directories
|
60
|
-
Mould.template_dirs_add $conf[
|
61
|
-
|
62
|
-
case ARGV[0]
|
63
|
-
when 'list'
|
64
|
-
Mould.templates.each {|name, loc|
|
65
|
-
loc = '(system)' if loc == (Mould.class_variable_get(:@@template_dirs)[0] + name).to_s
|
66
|
-
puts "%-30s %s" % [name, loc]
|
67
|
-
}
|
68
|
-
|
69
|
-
when 'listdirs'
|
70
|
-
Mould.class_variable_get(:@@template_dirs).each {|idx|
|
71
|
-
puts idx
|
72
|
-
}
|
73
|
-
|
74
|
-
when /exe|doc|test/
|
75
|
-
r1 = add_files ARGV[0], ARGV[1..-1]
|
76
|
-
r2 = true
|
77
|
-
(r2 = add_files 'doc', ARGV[1..-1]) if ARGV[0] == 'exe'
|
78
|
-
exit 1 if !r1 || !r2
|
79
|
-
|
80
|
-
when 'upgrade'
|
81
|
-
m = Mould.new(File.basename(Dir.pwd), $conf[:template],
|
82
|
-
$conf[:user], $conf[:email], $conf[:gecos])
|
83
|
-
m.verbose = true if $conf[:verbose] > 0
|
84
|
-
m.batch = $conf[:batch]
|
85
|
-
m.upgrade() rescue CliUtils.errx(1, $!.to_s)
|
86
|
-
|
87
|
-
when 'new'
|
88
|
-
if File.dirname(ARGV[1]) != '.'
|
89
|
-
Dir.chdir(File.dirname(ARGV[1])) rescue CliUtils.errx(1, "cannot chdir to '#{File.dirname(ARGV[1])}'")
|
90
|
-
ARGV[1] = File.basename ARGV[1]
|
91
|
-
end
|
303
|
+
Mould.template_dirs_add $conf['tdir'].map {|i| Pathname.new i} if $conf['tdir']
|
92
304
|
|
93
|
-
|
94
|
-
|
95
|
-
$conf[:user], $conf[:email], $conf[:gecos])
|
96
|
-
rescue
|
97
|
-
CliUtils.errx 1, $!
|
98
|
-
end
|
99
|
-
m.verbose = true if $conf[:verbose] > 0
|
100
|
-
m.project_seed
|
101
|
-
|
102
|
-
# create a git repository
|
103
|
-
if $conf[:git]
|
104
|
-
Dir.chdir m.project
|
105
|
-
CliUtils.veputs(1, "Creating a git repository in #{Dir.pwd}... __NNL__")
|
106
|
-
g = Git.init
|
107
|
-
g.add '.'
|
108
|
-
g.commit "Initial import from #{Falsework::Meta::NAME} #{Falsework::Meta::VERSION}."
|
109
|
-
CliUtils.veputs(1, 'OK')
|
110
|
-
end
|
111
|
-
else
|
112
|
-
CliUtils.errx(1, "unknown command: " + ARGV[0])
|
113
|
-
end
|
305
|
+
found = Commands.traverse Commands::FORMAT, ARGV
|
306
|
+
CliUtils.errx EX_USAGE, "unknown command '#{ARGV.join ' '}'" unless found
|
data/doc/NEWS.rdoc
CHANGED
@@ -1,3 +1,27 @@
|
|
1
|
+
=== 3.0.0
|
2
|
+
|
3
|
+
Sun Apr 29 12:22:27 EEST 2012
|
4
|
+
|
5
|
+
* *INCOMPATIBILITY:* symbols in template's <tt>#config.yaml</tt> are
|
6
|
+
strings.
|
7
|
+
|
8
|
+
* *INCOMPATIBILITY:* 'listdirs' is 'list dirs' now.
|
9
|
+
|
10
|
+
* *INCOMPATIBILITY:* <tt>:tdir</tt> symbol in falsework.yaml is a string 'tdir'.
|
11
|
+
|
12
|
+
* *INCOMPATIBILITY:* CLO are parsed from left to right only & some
|
13
|
+
options are command-specific, for example, 'falsework new foo -v -t
|
14
|
+
c-glib' won't work, because 'new' command doesn't know '-v' and '-t'
|
15
|
+
options (they are global).
|
16
|
+
|
17
|
+
* New command: file.
|
18
|
+
|
19
|
+
* 'upgrade' command has subcommands: list, list obsolete, check.
|
20
|
+
|
21
|
+
* Upgrading procedure injects a special 'note' into projects:
|
22
|
+
<tt>.falsework</tt> file. Upgraded files are no longer contain
|
23
|
+
embedded marks in them.
|
24
|
+
|
1
25
|
=== 2.1.0
|
2
26
|
|
3
27
|
Mon Apr 23 16:17:18 EEST 2012
|