diff --git a/bin/rbpkg b/bin/rbpkg
index 978f572..77984b8 100755
--- a/bin/rbpkg
+++ b/bin/rbpkg
@@ -59,52 +59,55 @@ Misc commands :
end
def rbpkg
- case shift
+ op = shift
+ pkg = shift
+ tree = $ARGS[0] || "master"
+ case op
when "-h"
usage
when "--help"
usage
when "clone"
- Rbpkg.git_clone($ARGS)
+ Rbpkg.git_clone(pkg, tree)
when "clean-sources"
- Rbpkg.clean_sources($ARGS)
+ Rbpkg.clean_sources(pkg, tree)
when "fetch"
- Rbpkg.fetch($ARGS)
+ Rbpkg.fetch(pkg, tree)
when "pull"
- Rbpkg.pull($ARGS)
+ Rbpkg.pull(pkg, tree)
when "checkout"
branch = shift()
- Rbpkg.checkout(branch, $ARGS)
+ Rbpkg.checkout(branch, pkg, tree)
when "configure"
- Rbpkg.configure($ARGS)
+ Rbpkg.configure(pkg, tree)
when "clean-configure"
- Rbpkg.clean_configure($ARGS)
+ Rbpkg.clean_configure(pkg, tree)
when "build"
- Rbpkg.build($ARGS)
+ Rbpkg.build(pkg, tree)
when "clean-build"
- Rbpkg.clean_build($ARGS)
+ Rbpkg.clean_build(pkg, tree)
when "test"
- Rbpkg.test($ARGS)
+ Rbpkg.test(pkg, tree)
when "fake"
- Rbpkg.fake($ARGS)
+ Rbpkg.fake(pkg, tree)
when "clean-fake"
- Rbpkg.clean_fake($ARGS)
+ Rbpkg.clean_fake(pkg, tree)
when "package"
- Rbpkg.package($ARGS)
+ Rbpkg.package(pkg, tree)
when "clean-package"
- Rbpkg.clean_package($ARGS)
+ Rbpkg.clean_package(pkg, tree)
when "clean-package"
- Rbpkg.clean_package($ARGS)
+ Rbpkg.clean_package(pkg, tree)
when "install"
- Rbpkg.install($ARGS)
+ Rbpkg.install(pkg, tree)
when "uninstall"
- Rbpkg.uninstall($ARGS)
+ Rbpkg.uninstall(pkg, tree)
when "clean-all"
- Rbpkg.clean_all($ARGS)
+ Rbpkg.clean_all(pkg, tree)
when "upgrade"
- Rbpkg.upgrade($ARGS)
+ Rbpkg.upgrade(pkg, tree)
when "info"
- Rbpkg.info($ARGS)
+ Rbpkg.info(pkg, tree)
else
usage
end
diff --git a/lib/rbpkg.rb b/lib/rbpkg.rb
index a6f78e4..2e87969 100644
--- a/lib/rbpkg.rb
+++ b/lib/rbpkg.rb
@@ -7,10 +7,8 @@ if File.exist?("#{File.dirname(File.dirname(__FILE__))}/etc/rbpkg.rb")
end
module Rbpkg
- def self.build(repos)
- repos.each do |name|
- Repos.repo(name).build()
- end
+ def self.build(repo, tree)
+ Repos.repo(repo, tree).build
end
def self.cc
@@ -29,10 +27,8 @@ module Rbpkg
r
end
- def self.checkout(branch, repos)
- repos.each do |name|
- Repos.repo(name).checkout(branch)
- end
+ def self.checkout(repo, tree)
+ Repos.repo(repo, tree).checkout
end
def self.ci_dir(parent = dir)
@@ -222,46 +218,32 @@ EOF
"#{ci_dir}/status/#{os}/#{target}/#{date}_#{$$}"
end
- def self.clean_all(repos)
- repos.each do |name|
- Repos.repo(name).clean_all()
- end
+ def self.clean_all(repo, tree)
+ Repos.repo(repo, tree).clean_all
end
- def self.clean_build(repos)
- repos.each do |name|
- Repos.repo(name).clean_build()
- end
+ def self.clean_build(repo, tree)
+ Repos.repo(repo, tree).clean_build
end
- def self.clean_configure(repos)
- repos.each do |name|
- Repos.repo(name).clean_configure()
- end
+ def self.clean_configure(repo, tree)
+ Repos.repo(repo, tree).clean_configure
end
- def self.clean_fake(repos)
- repos.each do |name|
- Repos.repo(name).clean_fake()
- end
+ def self.clean_fake(repo, tree)
+ Repos.repo(repo, tree).clean_fake
end
- def self.clean_package(repos)
- repos.each do |name|
- Repos.repo(name).clean_package()
- end
+ def self.clean_package(repo, tree)
+ Repos.repo(repo, tree).clean_package
end
- def self.clean_sources(repos)
- repos.each do |name|
- Repos.repo(name).clean_sources()
- end
+ def self.clean_sources(repo, tree)
+ Repos.repo(repo, tree).clean_sources
end
- def self.configure(repos)
- repos.each do |name|
- Repos.repo(name).configure()
- end
+ def self.configure(repo, tree)
+ Repos.repo(repo, tree).configure
end
def self.date
@@ -279,37 +261,29 @@ EOF
end
end
- def self.fake(repos)
- repos.each do |name|
- Repos.repo(name).fake()
- end
+ def self.fake(repo, tree)
+ Repos.repo(repo, tree).fake
end
def self.fake_dir
"#{target_dir}/fake"
end
- def self.fetch(repos)
- repos.each do |name|
- Repos.repo(name).fetch()
- end
+ def self.fetch(repo, tree)
+ Repos.repo(repo, tree).fetch()
end
- def self.git_clone(repos)
- repos.each do |name|
- Repos.repo(name).git_clone()
- end
+ def self.git_clone(repo, tree)
+ Repos.repo(repo, tree).git_clone()
end
- def self.info(repos)
+ def self.info(repo, tree)
global_info = inspect()
$log.puts global_info
puts global_info
- repos.each do |name|
- repo_info = Repos.repo(name).inspect()
- $log.puts repo_info
- puts repo_info
- end
+ repo_info = Repos.repo(repo, tree).inspect
+ $log.puts repo_info
+ puts repo_info
end
def self.init(name, verbose_level, log_dir, status_dir)
@@ -334,10 +308,8 @@ EOF
}"""
end
- def self.install(repos)
- repos.each do |name|
- Repos.repo(name).install()
- end
+ def self.install(repo, tree)
+ Repos.repo(repo, tree).install()
end
def self.installed_dir
@@ -372,8 +344,8 @@ EOF
sleep 1
end
end
- File.write(path, "")
at_exit { FileUtils.rm(path) }
+ File.write(path, "")
end
def self.lock_dir
@@ -430,10 +402,8 @@ EOF
end
end
- def self.package(repos)
- repos.each do |name|
- Repos.repo(name).package()
- end
+ def self.package(repo, tree)
+ Repos.repo(repo, tree).package()
end
def self.package_dir
@@ -474,23 +444,17 @@ EOF
"#{dir}/target/#{target}"
end
- def self.test(repos)
- repos.each do |name|
- Repos.repo(name).test()
- end
+ def self.test(repo, tree)
+ Repos.repo(repo, tree).test()
end
- def self.uninstall(repos)
- repos.each do |name|
- Repos.repo(name).uninstall()
- end
+ def self.uninstall(repo, tree)
+ Repos.repo(repo, tree).uninstall()
end
- def self.upgrade(repos)
+ def self.upgrade(repo)
upgrade_self
- repos.each do |name|
- Repos.repo(name).upgrade()
- end
+ Repos.repo(repo, tree).upgrade()
end
def self.upgrade_self
diff --git a/lib/rbpkg/repo.rb b/lib/rbpkg/repo.rb
index 902ff02..067b018 100644
--- a/lib/rbpkg/repo.rb
+++ b/lib/rbpkg/repo.rb
@@ -46,9 +46,9 @@ class Rbpkg::Repo
"#{make} -j #{Rbpkg.ncpu}"
end
- def checkout(branch)
+ def checkout
verbose(3, "repo(#{name.inspect}).checkout")
- sh_branch=sh_quote(branch)
+ sh_branch=sh_quote(tree)
cmd! "cd #{sh_quote(src_dir!)} && git fetch --all"
cmd! "cd #{sh_quote(src_dir!)} && git reset --hard"
cmd! "cd #{sh_quote(src_dir!)} && git checkout #{sh_branch} --"
@@ -58,7 +58,7 @@ class Rbpkg::Repo
def ci(ref, commit)
verbose(3, "repo(#{name.inspect}).ci(#{ref.inspect}, #{commit.inspect})")
- ref = head unless ref
+ ref = tree unless ref
commit = hash unless commit
Rbpkg::Log.add(ci_log_name_commit(commit))
sh_name = sh_quote(name)
@@ -217,15 +217,11 @@ class Rbpkg::Repo
if ! File.directory?(src_parent_dir)
cmd! "mkdir -p #{sh_quote(src_parent_dir)}"
end
- cmd! "cd #{sh_quote(src_parent_dir)} && git clone #{sh_quote(git_url)} -b #{sh_quote(branch)} #{sh_quote(name)}"
+ cmd! "cd #{sh_quote(src_parent_dir)} && git clone #{sh_quote(git_url)} -b #{sh_quote(tree)} #{sh_quote(name)}"
cmd! "cd #{sh_quote(src_dir)} && git submodule init && git submodule update"
end
end
- def remote
- @@remote_default
- end
-
def git_url
raise "no git url for #{self}"
end
@@ -246,6 +242,10 @@ class Rbpkg::Repo
end
end
+ def initialize(tree)
+ @tree = tree
+ end
+
def inspect
"""%#{self.class.name}{
name: #{name.inspect},
@@ -253,7 +253,7 @@ class Rbpkg::Repo
git_url: #{git_url.inspect},
src_dir: #{src_dir.inspect},
src_parent_dir: #{src_parent_dir.inspect},
- head: #{head.inspect},
+ head: #{tree.inspect},
hash: #{hash.inspect},
configure_env: #{configure_env.inspect},
make: #{make.inspect},
@@ -404,6 +404,10 @@ class Rbpkg::Repo
system("git -C #{sh_quote(src_dir)} symbolic-ref HEAD >/dev/null 2>&1")
end
+ def remote
+ @@remote_default
+ end
+
@required_by = nil
def required_by
@required_by || @required_by =
@@ -419,7 +423,7 @@ class Rbpkg::Repo
end
def src_dir
- "#{Rbpkg.src_dir}/#{dir}"
+ "#{Rbpkg.src_dir}/#{dir}/.tree/#{tree}/#{name}"
end
def src_dir!
@@ -472,6 +476,10 @@ class Rbpkg::Repo
"test"
end
+ def tree
+ @tree
+ end
+
def uninstall
verbose 3, "repo(#{name.inspect}).uninstall"
if installed?
@@ -512,7 +520,7 @@ class Rbpkg::Repo
def version
if File.directory?(src_dir)
- "#{head}-#{hash}"
+ "#{tree}-#{hash}"
end
end
end
diff --git a/lib/rbpkg/repos.rb b/lib/rbpkg/repos.rb
index 6fa88c7..5b044b0 100644
--- a/lib/rbpkg/repos.rb
+++ b/lib/rbpkg/repos.rb
@@ -9,14 +9,15 @@ module Rbpkg
@@repo_class[name] = klass
end
- def self.repo(name)
- r = @@repo[name]
+ def self.repo(name, tree)
+ @@repo[name] ||= {}
+ r = @@repo[name][tree]
if r
r
else
klass = @@repo_class[name]
raise "unknown repo: #{name.inspect}" unless klass
- @@repo[name] = klass.new
+ @@repo[name][tree] = klass.new(tree)
end
end