diff --git a/lib/autobuild.rb b/lib/autobuild.rb index 4aab3afb..97c2d23a 100644 --- a/lib/autobuild.rb +++ b/lib/autobuild.rb @@ -64,6 +64,7 @@ module Autobuild require 'autobuild/import/svn' require 'autobuild/import/archive' require 'autobuild/import/tar' +require 'autobuild/import/subpackage' require 'autobuild/package' require 'autobuild/configurable' diff --git a/lib/autobuild/import/subpackage.rb b/lib/autobuild/import/subpackage.rb new file mode 100644 index 00000000..26da7b87 --- /dev/null +++ b/lib/autobuild/import/subpackage.rb @@ -0,0 +1,40 @@ +module Autobuild + class Subpackage < Importer + def initialize(source, options = {}) + @source = source + + parent_name = options[:parent] + unless parent_name + raise PackageException, + "Subpackage must provide a parent package." + end + + @parent = Autoproj.workspace.manifest.package_definition_by_name(parent_name) + unless @parent + raise PackageException, + "Parent package #{parent_name} does not exist." + end + + super(options.merge(repository_id: source)) + end + + # Does nothing, parent will do update + def update(_package, _options = Hash.new) + false + end + + # Does nothing, parent will be checked out + def checkout(package, _options = Hash.new) + package.depends_on(@parent.autobuild) + end + + # Does nothing, parent will do snapshot + def snapshot(*) + true + end + end + + def self.subpackage(source, options = {}) + Subpackage.new(source, options) + end +end