autobuild 0.4 → 0.5
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/CHANGES +57 -0
- data/README +29 -46
- data/Rakefile +161 -0
- data/lib/autobuild/config-interpolator.rb +80 -91
- data/lib/autobuild/config.rb +21 -6
- data/lib/autobuild/environment.rb +13 -11
- data/lib/autobuild/exceptions.rb +46 -45
- data/lib/autobuild/import/cvs.rb +34 -39
- data/lib/autobuild/import/svn.rb +23 -29
- data/lib/autobuild/import/tar.rb +120 -0
- data/lib/autobuild/importer.rb +4 -6
- data/lib/autobuild/options.rb +18 -11
- data/lib/autobuild/package.rb +1 -1
- data/lib/autobuild/packages/autotools.rb +107 -121
- data/lib/autobuild/packages/genom.rb +56 -62
- data/lib/autobuild/packages/import.rb +14 -12
- data/lib/autobuild/reporting.rb +91 -55
- data/lib/autobuild/subcommand.rb +89 -46
- data/lib/autobuild/timestamps.rb +47 -37
- metadata +43 -78
- data/bin/autobuild +0 -83
- data/test/base.rb +0 -8
- data/test/tc_config.rb +0 -40
- data/test/tc_config_interpolation.rb +0 -57
- data/test/tc_import.rb +0 -77
- data/test/tc_subcommand.rb +0 -61
- data/test/tools.rb +0 -39
data/bin/autobuild
DELETED
@@ -1,83 +0,0 @@
|
|
1
|
-
#! /usr/bin/ruby -w
|
2
|
-
|
3
|
-
# :main: README
|
4
|
-
|
5
|
-
require 'rake'
|
6
|
-
require 'ostruct'
|
7
|
-
require 'optparse'
|
8
|
-
|
9
|
-
require 'autobuild/options'
|
10
|
-
require 'autobuild/config'
|
11
|
-
require 'autobuild/reporting'
|
12
|
-
require 'daemons'
|
13
|
-
|
14
|
-
DEFAULT_HTTP_PORT = 2000
|
15
|
-
|
16
|
-
def parse_options(args)
|
17
|
-
options = Options.default
|
18
|
-
|
19
|
-
parser = OptionParser.new do |opts|
|
20
|
-
opts.banner = "Usage: autobuild [options] config.yml"
|
21
|
-
opts.separator ""
|
22
|
-
|
23
|
-
opts.on("--srcdir PATH", "Find or imports sources in PATH") do |options.srcdir| end
|
24
|
-
opts.on("--prefix PATH", "Packages are installed in PATH") do |options.prefix|
|
25
|
-
options.logdir = "#{options.prefix}/autobuild"
|
26
|
-
end
|
27
|
-
opts.on("--logdir", "Where logs are saved (default: <prefix>/autobuild)") do |options.logdir| end
|
28
|
-
|
29
|
-
opts.on("--[no-]update", "Update already checked-out sources") do |options.update| end
|
30
|
-
|
31
|
-
opts.on('--nice NICE', Integer, 'Nice the subprocesses to the given value') do |options.nice| end
|
32
|
-
opts.on("--[no-]daemon", "Go into daemon mode") do |options.daemonize| end
|
33
|
-
#opts.on("--http [PORT]", Integer,
|
34
|
-
# "Display a HTTP information page on PORT (PORT default: #{DEFAULT_HTTP_PORT})") do |port|
|
35
|
-
# options.http = (port || DEFAULT_HTTP_PORT)
|
36
|
-
#end
|
37
|
-
opts.on("--[no-]verbose", "Display output of commands on stdout") do |options.verbose| end
|
38
|
-
opts.on("--[no-]debug", "Verbose information (for debugging purposes)") do |options.debug| end
|
39
|
-
|
40
|
-
opts.on_tail("-h", "--help", "Show this message") do
|
41
|
-
puts opts
|
42
|
-
exit
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
parser.parse!(args)
|
47
|
-
if !args[0]
|
48
|
-
puts parser
|
49
|
-
exit
|
50
|
-
end
|
51
|
-
|
52
|
-
[ options, args[0], args[1..-1] ]
|
53
|
-
end
|
54
|
-
|
55
|
-
# Load the command line options
|
56
|
-
options, conffile, targets = parse_options(ARGV)
|
57
|
-
|
58
|
-
# make conffile an absolute path since daemonize mode makes
|
59
|
-
# / the current directory
|
60
|
-
conffile = File.expand_path(conffile, Dir.pwd)
|
61
|
-
if options.daemonize
|
62
|
-
puts "Going into daemon mode ..."
|
63
|
-
Daemons.daemonize
|
64
|
-
end
|
65
|
-
|
66
|
-
Reporting.report do
|
67
|
-
begin
|
68
|
-
File.open(conffile) do |f|
|
69
|
-
Config.load(f, options)
|
70
|
-
end
|
71
|
-
|
72
|
-
if targets.empty?
|
73
|
-
Rake::Task[:default].invoke
|
74
|
-
else
|
75
|
-
targets.each { |t| Rake::Task[t.to_sym].invoke }
|
76
|
-
end
|
77
|
-
rescue ConfigException => e
|
78
|
-
e.target = conffile
|
79
|
-
raise
|
80
|
-
end
|
81
|
-
Reporting.success
|
82
|
-
end
|
83
|
-
|
data/test/base.rb
DELETED
@@ -1,8 +0,0 @@
|
|
1
|
-
$LOAD_PATH.unshift File.expand_path('..', File.dirname(__FILE__))
|
2
|
-
$LOAD_PATH << File.expand_path('../lib', File.dirname(__FILE__))
|
3
|
-
require 'rubygems'
|
4
|
-
require 'test/unit'
|
5
|
-
require 'test/tc_config_interpolation.rb'
|
6
|
-
require 'test/tc_config.rb'
|
7
|
-
require 'test/tc_subcommand.rb'
|
8
|
-
require 'test/tc_import.rb'
|
data/test/tc_config.rb
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
$LOAD_PATH.unshift File.expand_path('..', File.dirname(__FILE__))
|
2
|
-
$LOAD_PATH << File.expand_path('../lib', File.dirname(__FILE__))
|
3
|
-
require 'test/unit'
|
4
|
-
require 'test/tools'
|
5
|
-
require 'autobuild/options'
|
6
|
-
require 'autobuild/config'
|
7
|
-
|
8
|
-
class TC_Config < Test::Unit::TestCase
|
9
|
-
def setup
|
10
|
-
@conffile = TestTools.build_config(binding, 'dummy')
|
11
|
-
@options_hash = File.open(@conffile) { |f| YAML.load(f) }
|
12
|
-
@options = File.open(@conffile) { |f| Config.load(f, Options.default) }
|
13
|
-
end
|
14
|
-
|
15
|
-
def teardown
|
16
|
-
TestTools.clean
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_keys_to_sym
|
20
|
-
symed = @options_hash.keys_to_sym
|
21
|
-
|
22
|
-
pass_through = {}
|
23
|
-
symed.each_recursive { |k, v|
|
24
|
-
assert_kind_of(Symbol, k)
|
25
|
-
pass_through[k] = true
|
26
|
-
}
|
27
|
-
|
28
|
-
assert(pass_through[:PATH])
|
29
|
-
assert(pass_through[:prefix])
|
30
|
-
assert(pass_through[:autobuild])
|
31
|
-
assert_kind_of(String, symed[:autobuild][:srcdir])
|
32
|
-
end
|
33
|
-
|
34
|
-
def test_value_type
|
35
|
-
assert_kind_of(String, $SRCDIR)
|
36
|
-
assert_kind_of(Fixnum, $NICE)
|
37
|
-
assert_equal(0, $NICE)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
@@ -1,57 +0,0 @@
|
|
1
|
-
$LOAD_PATH.unshift File.expand_path('..', File.dirname(__FILE__))
|
2
|
-
$LOAD_PATH << File.expand_path('../lib', File.dirname(__FILE__))
|
3
|
-
|
4
|
-
require 'test/unit'
|
5
|
-
require 'autobuild/config-interpolator'
|
6
|
-
|
7
|
-
require 'yaml'
|
8
|
-
require 'stringio'
|
9
|
-
|
10
|
-
class TC_ConfigInterpolation < Test::Unit::TestCase
|
11
|
-
WELL_FORMED = <<EOF
|
12
|
-
defines:
|
13
|
-
global_prefix: /home/doudou
|
14
|
-
srcdir: ${global_prefix}/src
|
15
|
-
prefix: ${global_prefix}/build
|
16
|
-
nice: 10
|
17
|
-
|
18
|
-
autobuild:
|
19
|
-
srcdir: $srcdir
|
20
|
-
prefix: $prefix
|
21
|
-
nice: $nice
|
22
|
-
envvar: $ENVVAR
|
23
|
-
|
24
|
-
EOF
|
25
|
-
|
26
|
-
def setup
|
27
|
-
@wellformed = StringIO.open(WELL_FORMED, 'r') { |d| YAML.load(d) }
|
28
|
-
end
|
29
|
-
|
30
|
-
def teardown
|
31
|
-
@wellformed = nil
|
32
|
-
end
|
33
|
-
|
34
|
-
# Check that interpolation matches both forms ${var} and $var
|
35
|
-
def test_match
|
36
|
-
data = @wellformed['defines']['srcdir']
|
37
|
-
all_matches = []
|
38
|
-
Interpolator::PartialMatch.each_match(data) { |m| all_matches << m[1] }
|
39
|
-
assert_equal( ['global_prefix'], all_matches )
|
40
|
-
|
41
|
-
data = @wellformed['autobuild']['srcdir']
|
42
|
-
all_matches = []
|
43
|
-
Interpolator::PartialMatch.each_match(data) { |m| all_matches << m[2] }
|
44
|
-
assert_equal( ['srcdir'], all_matches )
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_interpolation
|
48
|
-
ENV['ENVVAR'] = 'envvar'
|
49
|
-
data = Interpolator.interpolate(@wellformed)
|
50
|
-
assert_equal('/home/doudou/src', data["autobuild"]["srcdir"])
|
51
|
-
assert_equal('/home/doudou/build', data["autobuild"]["prefix"])
|
52
|
-
assert_equal('envvar', data["autobuild"]["envvar"])
|
53
|
-
assert_equal(10, data["autobuild"]["nice"])
|
54
|
-
assert_kind_of(Fixnum, data["autobuild"]["nice"])
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
data/test/tc_import.rb
DELETED
@@ -1,77 +0,0 @@
|
|
1
|
-
$LOAD_PATH.unshift File.expand_path('..', File.dirname(__FILE__))
|
2
|
-
$LOAD_PATH << File.expand_path('../lib', File.dirname(__FILE__))
|
3
|
-
require 'test/unit'
|
4
|
-
require 'test/tools'
|
5
|
-
require 'autobuild/import/cvs'
|
6
|
-
require 'autobuild/import/svn'
|
7
|
-
|
8
|
-
class TC_Import < Test::Unit::TestCase
|
9
|
-
Package = Struct.new :srcdir, :target
|
10
|
-
|
11
|
-
def setup
|
12
|
-
$PROGRAMS = {}
|
13
|
-
$UPDATE = true
|
14
|
-
$LOGDIR = "#{TestTools.tempdir}/log"
|
15
|
-
FileUtils.mkdir_p($LOGDIR)
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
def teardown
|
20
|
-
$PROGRAMS = nil
|
21
|
-
$UPDATE = true
|
22
|
-
$LOGDIR = nil
|
23
|
-
TestTools.clean
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_cvs
|
27
|
-
TestTools.untar('cvsroot.tar')
|
28
|
-
cvsroot = File.join(TestTools.tempdir, 'cvsroot')
|
29
|
-
pkg_cvs = Package.new File.join(TestTools.tempdir, 'cvs'), :cvs
|
30
|
-
|
31
|
-
# Make a checkout
|
32
|
-
importer = Import.cvs [ cvsroot, 'cvs' ], {}
|
33
|
-
importer.import(pkg_cvs)
|
34
|
-
assert( File.exists?(File.join(pkg_cvs.srcdir, 'test')) )
|
35
|
-
|
36
|
-
# Make an update
|
37
|
-
importer.import(pkg_cvs)
|
38
|
-
|
39
|
-
# Make an update fail
|
40
|
-
FileUtils.rm_rf cvsroot
|
41
|
-
assert_raise(ImportException) { importer.import pkg_cvs }
|
42
|
-
|
43
|
-
# Make a checkout fail
|
44
|
-
FileUtils.rm_rf pkg_cvs.srcdir
|
45
|
-
assert_raise(ImportException) { importer.import pkg_cvs }
|
46
|
-
end
|
47
|
-
|
48
|
-
def test_svn
|
49
|
-
TestTools.untar('svnroot.tar')
|
50
|
-
svnrepo = File.join(TestTools.tempdir, 'svnroot')
|
51
|
-
svnroot = "file:///#{svnrepo}"
|
52
|
-
pkg_svn = Package.new File.join(TestTools.tempdir, 'svn'), :svn
|
53
|
-
|
54
|
-
# Make a checkout with a splitted URL
|
55
|
-
importer = Import.svn [ svnroot, 'svn' ], {}
|
56
|
-
importer.import(pkg_svn)
|
57
|
-
assert( File.exists?(File.join(pkg_svn.srcdir, 'test')) )
|
58
|
-
|
59
|
-
# Make a checkout with an URL as a string
|
60
|
-
FileUtils.rm_rf pkg_svn.srcdir
|
61
|
-
importer = Import.svn File.join(svnroot, 'svn'), {}
|
62
|
-
importer.import(pkg_svn)
|
63
|
-
assert( File.exists?(File.join(pkg_svn.srcdir, 'test')) )
|
64
|
-
|
65
|
-
# Make an update
|
66
|
-
importer.import(pkg_svn)
|
67
|
-
|
68
|
-
# Make an update fail
|
69
|
-
FileUtils.rm_rf svnrepo
|
70
|
-
assert_raise(ImportException) { importer.import(pkg_svn) }
|
71
|
-
|
72
|
-
# Make a checkout fail
|
73
|
-
FileUtils.rm_rf pkg_svn.srcdir
|
74
|
-
assert_raise(ImportException) { importer.import(pkg_svn) }
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
data/test/tc_subcommand.rb
DELETED
@@ -1,61 +0,0 @@
|
|
1
|
-
$LOAD_PATH.unshift File.expand_path('..', File.dirname(__FILE__))
|
2
|
-
$LOAD_PATH << File.expand_path('../lib', File.dirname(__FILE__))
|
3
|
-
require 'test/unit'
|
4
|
-
require 'test/tools'
|
5
|
-
require 'autobuild/options'
|
6
|
-
require 'autobuild/config'
|
7
|
-
|
8
|
-
require 'tmpdir'
|
9
|
-
require 'fileutils'
|
10
|
-
|
11
|
-
class TC_Subcommand < Test::Unit::TestCase
|
12
|
-
EXAMPLE_1 = <<EOF
|
13
|
-
This is a file
|
14
|
-
It will be the first part of the two-part cat
|
15
|
-
EOF
|
16
|
-
|
17
|
-
EXAMPLE_2 = <<EOF
|
18
|
-
This is another file
|
19
|
-
It will be the second part of the two-part cat
|
20
|
-
EOF
|
21
|
-
|
22
|
-
attr_reader :tmpdir
|
23
|
-
attr_reader :source1, :source2
|
24
|
-
def setup
|
25
|
-
conffile = TestTools.build_config(binding, 'dummy')
|
26
|
-
@tmpdir = File.dirname(conffile)
|
27
|
-
|
28
|
-
options = Options.default
|
29
|
-
options.logdir = tmpdir
|
30
|
-
File.open(conffile) do |confstream|
|
31
|
-
Config.load confstream, options
|
32
|
-
end
|
33
|
-
|
34
|
-
# Write example files
|
35
|
-
@source1 = File.join(tmpdir, 'source1')
|
36
|
-
@source2 = File.join(tmpdir, 'source2')
|
37
|
-
File.open(source1, 'w+') { |f| f.write(EXAMPLE_1) }
|
38
|
-
File.open(source2, 'w+') { |f| f.write(EXAMPLE_2) }
|
39
|
-
end
|
40
|
-
|
41
|
-
def teardown
|
42
|
-
TestTools.clean
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_subcommand
|
46
|
-
assert_raise(SubcommandFailed) { || subcommand('test', 'copy', 'cat', 'bla') }
|
47
|
-
|
48
|
-
subcommand('test', 'simple', 'cat', nil, '', source1)
|
49
|
-
assert( FileUtils.identical?(source1, File.join(tmpdir, 'test-simple.log')) )
|
50
|
-
|
51
|
-
subcommand('test', 'use-lt', 'cat', "<#{source1}")
|
52
|
-
assert( FileUtils.identical?(source1, File.join(tmpdir, 'test-use-lt.log')) )
|
53
|
-
|
54
|
-
subcommand('test', 'use-both', 'cat', source1, '-', "<#{source2}")
|
55
|
-
result = File.open( File.join(tmpdir, 'test-use-both.log') ) do |f|
|
56
|
-
f.readlines
|
57
|
-
end
|
58
|
-
assert_equal(EXAMPLE_1 + EXAMPLE_2, result.join(""))
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
data/test/tools.rb
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
require 'tmpdir'
|
2
|
-
require 'erb'
|
3
|
-
require 'fileutils'
|
4
|
-
|
5
|
-
module TestTools
|
6
|
-
DATADIR = File.join(File.dirname(__FILE__), 'data')
|
7
|
-
|
8
|
-
def self.tempdir
|
9
|
-
@tmpdir = File.join(Dir::tmpdir, "/autobuild-test-#{Process.uid}")
|
10
|
-
FileUtils.mkdir_p(@tmpdir, :mode => 0700)
|
11
|
-
end
|
12
|
-
|
13
|
-
def self.clean
|
14
|
-
FileUtils.rm_rf tempdir
|
15
|
-
end
|
16
|
-
|
17
|
-
def self.build_config(bind, template)
|
18
|
-
eval "basedir = '#{self.tempdir}'", bind
|
19
|
-
ryml = File.open(File.join(DATADIR, "#{template}.ryml")) { |f| f.readlines }.join('')
|
20
|
-
result = ERB.new(ryml).result(bind)
|
21
|
-
|
22
|
-
yml = File.join(tempdir, "#{template}.yml")
|
23
|
-
File.open(yml, 'w+') { |f| f.write(result) }
|
24
|
-
|
25
|
-
return yml
|
26
|
-
end
|
27
|
-
|
28
|
-
def self.untar(file)
|
29
|
-
file = File.expand_path(file, DATADIR)
|
30
|
-
dir = self.tempdir
|
31
|
-
Dir.chdir(dir) do
|
32
|
-
system("tar xf #{file}")
|
33
|
-
end
|
34
|
-
|
35
|
-
dir
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
|