implement local cache for mercurial remote repositories

git-svn-id: http://redmine.rubyforge.org/svn/branches/nbc@1908 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Nicolas Chuche
2008-09-27 11:00:05 +00:00
parent fdbe52a2f7
commit 7e46d9b35b
2 changed files with 23 additions and 0 deletions
+11
View File
@@ -21,6 +21,15 @@ class Repository::Mercurial < Repository
attr_protected :root_url
validates_presence_of :url
def init_cache
return unless dir = repositories_cache_directory
# we need to use a cache only if repository isn't local and dir exists
if url[/^(|https?|ssh):\/\//]
update_attribute(:cache_path, dir + project.identifier)
update_attribute(:cache, true)
end
end
def scm_adapter
Redmine::Scm::Adapters::MercurialAdapter
end
@@ -53,6 +62,8 @@ class Repository::Mercurial < Repository
end
def fetch_changesets
create_or_sync_cache if cache
scm_info = scm.info
if scm_info
# latest revision found in database
@@ -199,6 +199,18 @@ module Redmine
return nil if $? && $?.exitstatus != 0
blame
end
def create_cache
cmd = "#{HG_BIN} clone #{@orig_url} #{@root_url}"
shellout(cmd) { |io| io.read }
end
def synchronize
return unless File.directory?(@url)
cmd = "#{HG_BIN} -R #{@url} pull"
shellout(cmd)
end
end
end
end