autoproj 1.12.6 → 1.13.0.b1
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.
- checksums.yaml +4 -4
- data/Manifest.txt +14 -0
- data/Rakefile +1 -1
- data/bin/autoproj +4 -0
- data/bin/autoproj-bootstrap +16 -0
- data/bin/autoproj-commit +10 -0
- data/bin/autoproj-list +4 -3
- data/bin/autoproj-log +5 -0
- data/bin/autoproj-reset +13 -0
- data/bin/autoproj-show +3 -1
- data/bin/autoproj-snapshot +18 -29
- data/bin/autoproj-tag +13 -0
- data/bin/autoproj-test +15 -20
- data/bin/autoproj-versions +20 -0
- data/bin/autoproj_bootstrap +149 -28
- data/bin/autoproj_bootstrap.in +1 -2
- data/lib/autoproj.rb +2 -0
- data/lib/autoproj/autobuild.rb +41 -17
- data/lib/autoproj/cli.rb +7 -0
- data/lib/autoproj/cli/reset.rb +79 -0
- data/lib/autoproj/cli/snapshot.rb +63 -0
- data/lib/autoproj/cli/tag.rb +82 -0
- data/lib/autoproj/cli/test.rb +90 -0
- data/lib/autoproj/cli/versions.rb +94 -0
- data/lib/autoproj/cmdline.rb +127 -140
- data/lib/autoproj/configuration.rb +95 -0
- data/lib/autoproj/default.osdeps +3 -0
- data/lib/autoproj/gitorious.rb +25 -37
- data/lib/autoproj/manifest.rb +46 -9
- data/lib/autoproj/ops/cache.rb +1 -1
- data/lib/autoproj/ops/configuration.rb +7 -8
- data/lib/autoproj/ops/snapshot.rb +258 -0
- data/lib/autoproj/ops/tools.rb +36 -3
- data/lib/autoproj/osdeps.rb +28 -16
- data/lib/autoproj/package_definition.rb +13 -0
- data/lib/autoproj/package_manifest.rb +35 -32
- data/lib/autoproj/package_set.rb +74 -17
- data/lib/autoproj/system.rb +23 -10
- data/lib/autoproj/test.rb +60 -0
- data/lib/autoproj/version.rb +1 -1
- data/test/ops/test_configuration.rb +20 -0
- metadata +39 -7
data/bin/autoproj_bootstrap.in
CHANGED
@@ -180,7 +180,7 @@ rescue Autoproj::ConfigError => e
|
|
180
180
|
end
|
181
181
|
|
182
182
|
# Now try to find out the name of the gem binary
|
183
|
-
PACKAGES = []
|
183
|
+
PACKAGES = ['build-essential', 'sudo']
|
184
184
|
|
185
185
|
STDERR.puts "autoproj: installing autoproj and its dependencies (this can take a long time)"
|
186
186
|
# First install the dependencies of autoproj, as we don't want them to be
|
@@ -213,7 +213,6 @@ if ARGV.first != "localdev"
|
|
213
213
|
ARGV.shift
|
214
214
|
end
|
215
215
|
begin
|
216
|
-
osdeps_management.install(['build-essential'])
|
217
216
|
osdeps_management.install(['autobuild'])
|
218
217
|
osdeps_management.install(['autoproj'])
|
219
218
|
rescue Autoproj::ConfigError => e
|
data/lib/autoproj.rb
CHANGED
@@ -17,6 +17,8 @@ require 'autoproj/system'
|
|
17
17
|
require 'autoproj/build_option'
|
18
18
|
require 'autoproj/configuration'
|
19
19
|
require 'autoproj/options'
|
20
|
+
# Required for auto-saving in import_packages
|
21
|
+
require 'autoproj/ops/snapshot'
|
20
22
|
require 'autoproj/cmdline'
|
21
23
|
require 'autoproj/query'
|
22
24
|
|
data/lib/autoproj/autobuild.rb
CHANGED
@@ -222,14 +222,14 @@ module Autoproj
|
|
222
222
|
class Reporter < Autobuild::Reporter
|
223
223
|
def error(error)
|
224
224
|
error_lines = error.to_s.split("\n")
|
225
|
-
Autoproj.message("
|
226
|
-
Autoproj.message("#{error_lines.shift}", :bold, :red)
|
225
|
+
Autoproj.message("Command failed", :bold, :red, STDERR)
|
226
|
+
Autoproj.message("#{error_lines.shift}", :bold, :red, STDERR)
|
227
227
|
error_lines.each do |line|
|
228
|
-
Autoproj.message line
|
228
|
+
Autoproj.message line, STDERR
|
229
229
|
end
|
230
230
|
end
|
231
231
|
def success
|
232
|
-
Autoproj.message("
|
232
|
+
Autoproj.message("Command finished successfully at #{Time.now}", :bold, :green)
|
233
233
|
if Autobuild.post_success_message
|
234
234
|
Autoproj.message Autobuild.post_success_message
|
235
235
|
end
|
@@ -405,8 +405,8 @@ end
|
|
405
405
|
def cmake_package(options, &block)
|
406
406
|
package_common(:cmake, options) do |pkg|
|
407
407
|
pkg.depends_on 'cmake'
|
408
|
-
yield(pkg) if block_given?
|
409
408
|
common_make_based_package_setup(pkg)
|
409
|
+
yield(pkg) if block_given?
|
410
410
|
end
|
411
411
|
end
|
412
412
|
|
@@ -422,8 +422,8 @@ end
|
|
422
422
|
def autotools_package(options, &block)
|
423
423
|
package_common(:autotools, options) do |pkg|
|
424
424
|
pkg.depends_on 'autotools'
|
425
|
-
yield(pkg) if block_given?
|
426
425
|
common_make_based_package_setup(pkg)
|
426
|
+
yield(pkg) if block_given?
|
427
427
|
end
|
428
428
|
end
|
429
429
|
|
@@ -447,8 +447,6 @@ end
|
|
447
447
|
# information.
|
448
448
|
def ruby_package(options)
|
449
449
|
package_common(:ruby, options) do |pkg|
|
450
|
-
yield(pkg) if block_given?
|
451
|
-
|
452
450
|
# Documentation code. Ignore if the user provided its own documentation
|
453
451
|
# task, or disabled the documentation generation altogether by setting
|
454
452
|
# rake_doc_task to nil
|
@@ -467,6 +465,8 @@ def ruby_package(options)
|
|
467
465
|
pkg.with_tests
|
468
466
|
end
|
469
467
|
end
|
468
|
+
|
469
|
+
yield(pkg) if block_given?
|
470
470
|
end
|
471
471
|
end
|
472
472
|
|
@@ -483,6 +483,7 @@ end
|
|
483
483
|
# information.
|
484
484
|
def orogen_package(options, &block)
|
485
485
|
package_common(:orogen, options) do |pkg|
|
486
|
+
common_make_based_package_setup(pkg)
|
486
487
|
yield(pkg) if block_given?
|
487
488
|
end
|
488
489
|
end
|
@@ -569,21 +570,44 @@ def user_config(key)
|
|
569
570
|
end
|
570
571
|
|
571
572
|
class Autobuild::Git
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
573
|
+
# get version information from the importer
|
574
|
+
def snapshot(package, target_dir = nil)
|
575
|
+
info = Hash.new
|
576
|
+
if local_branch != remote_branch
|
577
|
+
info['local_branch'] = local_branch
|
578
|
+
info['remote_branch'] = remote_branch
|
579
|
+
else
|
580
|
+
info['branch'] = branch
|
581
|
+
end
|
582
|
+
|
583
|
+
begin
|
584
|
+
tag = run_git_bare(package, 'describe', '--tags', '--exact-match', 'HEAD').first.strip
|
585
|
+
info.merge('tag' => tag.encode('UTF-8'), 'commit' => nil)
|
586
|
+
rescue Autobuild::SubcommandFailed
|
587
|
+
head_commit = rev_parse(package, 'HEAD')
|
588
|
+
info.merge('tag' => nil, 'commit' => head_commit.encode('UTF-8'))
|
576
589
|
end
|
577
590
|
end
|
578
591
|
end
|
579
592
|
|
593
|
+
class Autobuild::SVN
|
594
|
+
def snapshot(package, target_dir = nil)
|
595
|
+
version = svn_revision(package)
|
596
|
+
Hash['revision' => version]
|
597
|
+
end
|
598
|
+
end
|
599
|
+
|
580
600
|
class Autobuild::ArchiveImporter
|
581
|
-
def snapshot(package, target_dir)
|
582
|
-
|
583
|
-
|
584
|
-
|
601
|
+
def snapshot(package, target_dir = nil)
|
602
|
+
if target_dir
|
603
|
+
archive_dir = File.join(target_dir, 'archives')
|
604
|
+
FileUtils.mkdir_p archive_dir
|
605
|
+
FileUtils.cp @cachefile, archive_dir
|
585
606
|
|
586
|
-
|
607
|
+
{ 'url' => "file://$AUTOPROJ_SOURCE_DIR/archives/#{File.basename(@cachefile)}" }
|
608
|
+
else
|
609
|
+
{ 'url' => @url.to_s }
|
610
|
+
end
|
587
611
|
end
|
588
612
|
end
|
589
613
|
|
data/lib/autoproj/cli.rb
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'autoproj/cli'
|
2
|
+
require 'autoproj/cli/versions'
|
3
|
+
|
4
|
+
module Autoproj
|
5
|
+
module CLI
|
6
|
+
class Reset
|
7
|
+
include Ops::Tools
|
8
|
+
|
9
|
+
attr_reader :manifest
|
10
|
+
|
11
|
+
def initialize(manifest)
|
12
|
+
@manifest = manifest
|
13
|
+
end
|
14
|
+
|
15
|
+
def parse_options(args)
|
16
|
+
options = Hash[]
|
17
|
+
parser = OptionParser.new do |opt|
|
18
|
+
opt.banner = ["autoproj reset COMMIT_ID", "resets the current autoproj installation to the state saved in the given commit ID"].join("\n")
|
19
|
+
opt.on "--freeze", "freezes the project at the requested version" do
|
20
|
+
options[:freeze] = true
|
21
|
+
end
|
22
|
+
end
|
23
|
+
common_options(parser)
|
24
|
+
remaining = parser.parse(args)
|
25
|
+
if remaining.empty?
|
26
|
+
puts parser
|
27
|
+
raise InvalidArguments, "expected a reference (tag or log ID) as argument and got nothing"
|
28
|
+
elsif remaining.size > 1
|
29
|
+
puts parser
|
30
|
+
raise InvalidArguments, "expected only the tag name as argument"
|
31
|
+
end
|
32
|
+
return remaining.first, options
|
33
|
+
end
|
34
|
+
|
35
|
+
def run(ref_name, options)
|
36
|
+
pkg = manifest.main_package_set.create_autobuild_package
|
37
|
+
importer = pkg.importer
|
38
|
+
if !importer || !importer.kind_of?(Autobuild::Git)
|
39
|
+
raise ConfigError, "cannot use autoproj reset if the main configuration is not managed by git"
|
40
|
+
end
|
41
|
+
|
42
|
+
# Check if the reflog entry exists
|
43
|
+
begin
|
44
|
+
importer.rev_parse(pkg, ref_name)
|
45
|
+
rescue Autobuild::PackageException
|
46
|
+
raise InvalidArguments, "#{ref_name} does not exist, run autoproj log for log entries and autoproj tag without arguments for the tags"
|
47
|
+
end
|
48
|
+
|
49
|
+
# Checkout the version file
|
50
|
+
versions_file = File.join(
|
51
|
+
OVERRIDES_DIR,
|
52
|
+
Versions::DEFAULT_VERSIONS_FILE_BASENAME)
|
53
|
+
begin
|
54
|
+
file_data = importer.show(pkg, ref_name, versions_file)
|
55
|
+
versions_path = File.join(Autoproj.config_dir, versions_file)
|
56
|
+
if File.file?(versions_path)
|
57
|
+
old_versions_path = "#{versions_path}.old"
|
58
|
+
FileUtils.rm_f old_versions_path
|
59
|
+
FileUtils.cp versions_path, old_versions_path
|
60
|
+
end
|
61
|
+
FileUtils.mkdir_p File.join(Autoproj.config_dir, OVERRIDES_DIR)
|
62
|
+
File.open(versions_path, 'w') do |io|
|
63
|
+
io.write file_data
|
64
|
+
end
|
65
|
+
system("autoproj", "update", '--reset')
|
66
|
+
|
67
|
+
ensure
|
68
|
+
if !options[:freeze]
|
69
|
+
FileUtils.rm_f versions_path
|
70
|
+
if old_versions_path
|
71
|
+
FileUtils.mv old_versions_path, versions_path
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'autoproj'
|
2
|
+
require 'autoproj/cli/versions'
|
3
|
+
|
4
|
+
module Autoproj
|
5
|
+
module CLI
|
6
|
+
class Snapshot
|
7
|
+
include Ops::Tools
|
8
|
+
|
9
|
+
attr_reader :manifest
|
10
|
+
|
11
|
+
def initialize(manifest)
|
12
|
+
@manifest = manifest
|
13
|
+
end
|
14
|
+
|
15
|
+
def parse_options(args)
|
16
|
+
options = Hash.new
|
17
|
+
parser = OptionParser.new do |opt|
|
18
|
+
opt.on '-k', '--keep-going', "ignore packages that can't be snapshotted (the default is to terminate with an error)" do
|
19
|
+
options[:keep_going] = true
|
20
|
+
end
|
21
|
+
end
|
22
|
+
common_options(parser)
|
23
|
+
remaining_args = parser.parse(args)
|
24
|
+
return remaining_args, options
|
25
|
+
end
|
26
|
+
|
27
|
+
def run(target_dir, options)
|
28
|
+
# First, copy the configuration directory to create target_dir
|
29
|
+
#
|
30
|
+
# This must be done first as the snapshot calls might copy stuff in
|
31
|
+
# there
|
32
|
+
if File.exists?(target_dir)
|
33
|
+
raise ArgumentError, "#{target_dir} already exists"
|
34
|
+
end
|
35
|
+
FileUtils.cp_r Autoproj.config_dir, target_dir
|
36
|
+
|
37
|
+
begin
|
38
|
+
versions = Versions.new(manifest)
|
39
|
+
versions_file = File.join(
|
40
|
+
target_dir,
|
41
|
+
OVERRIDES_DIR,
|
42
|
+
Versions::DEFAULT_VERSIONS_FILE_BASENAME)
|
43
|
+
|
44
|
+
versions.run([],
|
45
|
+
replace: true,
|
46
|
+
package_sets: true,
|
47
|
+
keep_going: options[:keep_going],
|
48
|
+
output_file: versions_file)
|
49
|
+
rescue ::Exception
|
50
|
+
FileUtils.rm_rf target_dir
|
51
|
+
raise
|
52
|
+
end
|
53
|
+
|
54
|
+
# Finally, remove the remotes/ directory from the generated
|
55
|
+
# buildconf, it is obsolete now
|
56
|
+
FileUtils.rm_rf File.join(target_dir, 'remotes')
|
57
|
+
|
58
|
+
Autoproj.message "successfully created a snapshot of the current autoproj configuration in #{target_dir}"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'autoproj/cli'
|
2
|
+
require 'autoproj/cli/versions'
|
3
|
+
module Autoproj
|
4
|
+
module CLI
|
5
|
+
class Tag
|
6
|
+
include Ops::Tools
|
7
|
+
|
8
|
+
attr_reader :manifest
|
9
|
+
|
10
|
+
def initialize(manifest)
|
11
|
+
@manifest = manifest
|
12
|
+
end
|
13
|
+
|
14
|
+
def parse_options(args)
|
15
|
+
options = Hash[package_sets: true, keep_going: false]
|
16
|
+
parser = OptionParser.new do |opt|
|
17
|
+
opt.on '--[no-]package-sets', 'commit the package set state as well (enabled by default)' do |flag|
|
18
|
+
options[:package_sets] = flag
|
19
|
+
end
|
20
|
+
opt.on '-k', '--keep-going', "ignore packages that can't be snapshotted (the default is to terminate with an error)" do
|
21
|
+
options[:keep_going] = true
|
22
|
+
end
|
23
|
+
opt.on '-m MESSAGE', '--message=MESSAGE', String, "the message to use for the new commit (defaults to mentioning the tag creation)" do |message|
|
24
|
+
options[:message] = message
|
25
|
+
end
|
26
|
+
end
|
27
|
+
common_options(parser)
|
28
|
+
remaining = parser.parse(args)
|
29
|
+
if remaining.size > 1
|
30
|
+
raise InvalidArguments, "expected only the tag name as argument"
|
31
|
+
end
|
32
|
+
return remaining.first, options
|
33
|
+
end
|
34
|
+
|
35
|
+
def run(tag_name, options)
|
36
|
+
pkg = manifest.main_package_set.create_autobuild_package
|
37
|
+
importer = pkg.importer
|
38
|
+
if !importer || !importer.kind_of?(Autobuild::Git)
|
39
|
+
raise ConfigError, "cannot use autoproj tag if the main configuration is not managed by git"
|
40
|
+
end
|
41
|
+
|
42
|
+
versions_file = File.join(
|
43
|
+
OVERRIDES_DIR,
|
44
|
+
Versions::DEFAULT_VERSIONS_FILE_BASENAME)
|
45
|
+
|
46
|
+
if tag_name.nil?
|
47
|
+
importer = pkg.importer
|
48
|
+
all_tags = importer.run_git_bare(pkg, 'tag')
|
49
|
+
all_tags.sort.each do |tag|
|
50
|
+
begin importer.show(pkg, "refs/tags/#{tag}", versions_file)
|
51
|
+
puts tag
|
52
|
+
rescue Autobuild::PackageException
|
53
|
+
end
|
54
|
+
end
|
55
|
+
return
|
56
|
+
end
|
57
|
+
|
58
|
+
# Check if the tag already exists
|
59
|
+
begin
|
60
|
+
importer.rev_parse(pkg, "refs/tags/#{tag_name}")
|
61
|
+
raise InvalidArguments, "tag #{tag_name} already exists"
|
62
|
+
rescue Autobuild::PackageException
|
63
|
+
end
|
64
|
+
|
65
|
+
message = options[:message] ||
|
66
|
+
"autoproj created tag #{tag_name}"
|
67
|
+
commit_id = Ops::Snapshot.create_commit(pkg, versions_file, message) do |io|
|
68
|
+
versions = CLI::Versions.new(manifest)
|
69
|
+
Autoproj.message "creating versions file, this may take a while"
|
70
|
+
versions.run(Array.new,
|
71
|
+
package_sets: options[:package_sets],
|
72
|
+
output_file: io.path,
|
73
|
+
replace: true,
|
74
|
+
keep_going: options[:keep_going])
|
75
|
+
end
|
76
|
+
|
77
|
+
importer.run_git_bare(pkg, 'tag', tag_name, commit_id)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require 'autoproj/ops/tools'
|
2
|
+
|
3
|
+
module Autoproj
|
4
|
+
module CLI
|
5
|
+
class Test
|
6
|
+
include Ops::Tools
|
7
|
+
|
8
|
+
attr_reader :manifest
|
9
|
+
|
10
|
+
def initialize(manifest)
|
11
|
+
@manifest = manifest
|
12
|
+
end
|
13
|
+
|
14
|
+
def parse_options(args)
|
15
|
+
Autoproj.load_config
|
16
|
+
|
17
|
+
modified_config = false
|
18
|
+
mode = nil
|
19
|
+
options = Hash.new
|
20
|
+
option_parser = OptionParser.new do |opt|
|
21
|
+
opt.on '--enable[=PACKAGE,PACKAGE]', Array, 'enable tests for all packages or for specific packages (does not run the tests)' do |packages|
|
22
|
+
if !packages
|
23
|
+
Autoproj.config.utility_enable_all('test')
|
24
|
+
else
|
25
|
+
Autoproj.config.utility_enable_for('test', *packages)
|
26
|
+
end
|
27
|
+
modified_config = true
|
28
|
+
end
|
29
|
+
opt.on '--disable[=PACKAGE,PACKAGE]', Array, 'disable tests for all packages or for specific packages (does not run the tests)' do |packages|
|
30
|
+
if !packages
|
31
|
+
Autoproj.config.utility_disable_all('test')
|
32
|
+
else
|
33
|
+
Autoproj.config.utility_disable_for('test', *packages)
|
34
|
+
end
|
35
|
+
modified_config = true
|
36
|
+
end
|
37
|
+
opt.on '--list', 'list the test availability and enabled/disabled state information' do
|
38
|
+
mode = 'list'
|
39
|
+
end
|
40
|
+
opt.on '--[no-]recursion', '(do not) run or list the tests of the dependencies of the packages given on the command line (the default is false)' do |flag|
|
41
|
+
options[:recursive] = flag
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
user_selection = option_parser.parse(ARGV)
|
46
|
+
if !mode && !(modified_config && user_selection.empty?)
|
47
|
+
mode = 'run'
|
48
|
+
end
|
49
|
+
|
50
|
+
if modified_config
|
51
|
+
Autoproj.save_config
|
52
|
+
end
|
53
|
+
return mode, user_selection, options
|
54
|
+
end
|
55
|
+
|
56
|
+
def list(user_selection, options = Hash.new)
|
57
|
+
resolved_selection = resolve_selection(
|
58
|
+
user_selection,
|
59
|
+
recursive: options[:recursive],
|
60
|
+
ignore_non_imported_packages: true)
|
61
|
+
|
62
|
+
lines = Array.new
|
63
|
+
resolved_selection.each do |pkg_name|
|
64
|
+
pkg = manifest.find_package(pkg_name).autobuild
|
65
|
+
lines << [pkg.name, pkg.test_utility.enabled?, pkg.test_utility.available?]
|
66
|
+
end
|
67
|
+
lines = lines.sort_by { |name, _| name }
|
68
|
+
w = lines.map { |name, _| name.length }.max
|
69
|
+
format = "%-#{w}s %-7s %-9s"
|
70
|
+
puts format % ["Package Name", "Enabled", "Available"]
|
71
|
+
lines.each do |name, enabled, available|
|
72
|
+
puts(format % [name, (!!enabled).to_s, (!!available).to_s])
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def run(user_selection, options = Hash.new)
|
77
|
+
packages = resolve_selection(
|
78
|
+
user_selection,
|
79
|
+
recursive: options[:recursive],
|
80
|
+
ignore_non_imported_packages: true)
|
81
|
+
# This calls #prepare, which is required to run build_packages
|
82
|
+
packages.each do |pkg|
|
83
|
+
Autobuild::Package[pkg].disable_phases('import', 'prepare', 'install')
|
84
|
+
end
|
85
|
+
Autobuild.apply(packages, "autoproj-test", ['test'])
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|