--- a/rakelib/scm.rb Sat Oct 29 23:54:12 2016 +0000
+++ b/rakelib/scm.rb Wed Nov 02 00:18:25 2016 +0000
@@ -28,7 +28,9 @@
end
end
- def self.update(type, repository, directory, *params)
+ def self.update(repository, directory, *params)
+ type = repository.type
+ url = repository.canonical
self._check_type(type)
if params.size() > 0
p = params.last
@@ -38,7 +40,7 @@
root = p[:root] || BUILD_DIR
wc = root / directory
if (! File.exist? wc)
- self.checkout(type, repository, directory, *params)
+ self.checkout(repository, directory, *params)
return
end
case type
@@ -49,22 +51,35 @@
end
end
-
- def self._update_hg(wc, repository = nil, directory = nil, *params)
- url = ''
- if repository != nil and directory != nil then
+ def self._update_hg(wc, repository, directory = nil, *params)
+ if directory != nil then
if params.size() > 0
p = params.last
else
p = {}
end
separator = p[:separator] || '.'
- url = "#{repository}/#{directory.gsub('/', separator)}"
+ url = "#{repository.canonical}/#{directory.gsub('/', separator)}"
end
- repo = HG::Repository.new(wc)
+ hg = HG::Repository.new(wc)
begin
- repo.pull(url)
- repo.update()
+ paths = hg.paths
+ if repository.staging then
+ if not paths.has_key? 'staging'
+ paths['staging'] = "#{repository.staging}/#{directory.gsub('/', separator)}"
+ hg.paths = paths
+ end
+ hg.pull('staging')
+ end
+ if not paths.has_key? 'canonical'
+ paths['canonical'] = "#{repository.canonical}/#{directory.gsub('/', separator)}"
+ hg.paths = paths
+ end
+ hg.pull('default')
+ if paths['default'] != paths['canonical'] then
+ hg.pull('canonical')
+ end
+ hg.update()
rescue Exception => ex
raise CheckoutException.new("HG: Cannot update #{wc}: #{ex.message}")
end
@@ -89,7 +104,9 @@
end
end
- def self.checkout(type, repository, directory, *params)
+ def self.checkout(repository, directory, *params)
+ type = repository.type
+ url = repository.canonical
self._check_type(type)
if params.size() > 0
p = params.last
@@ -108,7 +125,7 @@
wc = root / directory
if (File.exist? wc)
- self.update(type, repository, directory, *params)
+ self.update(repository, directory, *params)
return
end
@@ -129,7 +146,7 @@
end
def self._checkout_svn(repository, directory, branch, root, *params)
- url = "#{repository}/#{directory}/#{branch}"
+ url = "#{repository.canonical}/#{directory}/#{branch}"
if not sh %W{svn --non-interactive --trust-server-cert co #{url} #{directory}}, cwd: root
raise CheckoutException.new("SVN: Cannot checkout from #{url}")
end
@@ -143,18 +160,32 @@
end
separator = p[:separator] || '.'
- url = "#{repository}/#{directory.gsub('/', separator)}"
+ hg = HG::Repository.init(root / directory)
+ paths = { 'default' => "#{repository.upstream}/#{directory.gsub('/', separator)}",
+ 'canonical' => "#{repository.canonical}/#{directory.gsub('/', separator)}" }
+ if repository.staging then
+ paths['staging'] = "#{repository.staging}/#{directory.gsub('/', separator)}"
+ end
+
+ hg.paths = paths
+
begin
- repo = HG::Repository::clone(url, root / directory, noupdate: true)
- repo.update(branch)
+ if repository.staging then
+ hg.pull('staging')
+ end
+ hg.pull('default')
+ if paths['default'] != paths['canonical'] then
+ hg.pull('canonical')
+ end
+ hg.update(branch)
#rescue Exception => e
# raise CheckoutException.new("HG: Cannot clone from #{url}: #{e.message}")
end
end
def self._checkout_cvs(repository, directory, branch, root, *params)
- if not sh %W{cvs -z 9 -d #{repository} co #{directory}}, cwd: root
- raise CheckoutException.new("CVS: Cannot checkout #{directory}from #{repository}")
+ if not sh %W{cvs -z 9 -d #{repository.canonical} co #{directory}}, cwd: root
+ raise CheckoutException.new("CVS: Cannot checkout #{directory}from #{repository.url}")
end
end
end # module Rake::Stx::SCM
@@ -170,7 +201,7 @@
else
params << {:separator => repo.separator}
end
- Rake::Stx::SCM.checkout(repo.type, repo.url, directory, *params)
+ Rake::Stx::SCM.checkout(repo, directory, *params)
end
def update(repo_name, directory, *params)
@@ -179,22 +210,26 @@
if not repo then
error("update(): No repository found (#{repo_name})")
end
- Rake::Stx::SCM.update(repo.type, repo.url, directory, *params)
+ Rake::Stx::SCM.update(repo, directory, *params)
end
-def cvs(repository, directory, *params)
- Rake::Stx::SCM.checkout(:cvs, repository, directory, *params)
+def cvs(url, directory, *params)
+ repo = Rake::Stx::Configuration::Repository.new(:type => :cvs, :url => url)
+ Rake::Stx::SCM.checkout(repo, directory, *params)
end
-def svn(repository, directory, *params)
- Rake::Stx::SCM.checkout(:svn, repository, directory, *params)
+def svn(url, directory, *params)
+ repo = Rake::Stx::Configuration::Repository.new(:type => :svn, :url => url)
+ Rake::Stx::SCM.checkout(repo, directory, *params)
end
-def hg(repository, directory, *params)
- Rake::Stx::SCM.checkout(:hg, repository, directory, *params)
+def hg(url, directory, *params)
+ repo = Rake::Stx::Configuration::Repository.new(:type => :hg, :url => url)
+ Rake::Stx::SCM.checkout(repo, directory, *params)
end
-def git(repository, directory, *params)
- Rake::Stx::SCM.checkout(:git, repository, directory, *params)
+def git(url, directory, *params)
+ repo = Rake::Stx::Configuration::Repository.new(:type => :git, :url => url)
+ Rake::Stx::SCM.checkout(repo, directory, *params)
end