mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
Adding CVS and Mercurial download strategies.
This commit is contained in:
parent
c61d96529c
commit
668e3ee080
@ -129,3 +129,70 @@ class GitDownloadStrategy <AbstractDownloadStrategy
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class CVSDownloadStrategy <AbstractDownloadStrategy
|
||||
def fetch
|
||||
ohai "Checking out #{@url}"
|
||||
@co=HOMEBREW_CACHE+@unique_token
|
||||
|
||||
# URL of cvs cvs://:pserver:anoncvs@www.gccxml.org:/cvsroot/GCC_XML:gccxml
|
||||
# will become:
|
||||
# cvs -d :pserver:anoncvs@www.gccxml.org:/cvsroot/GCC_XML login
|
||||
# cvs -d :pserver:anoncvs@www.gccxml.org:/cvsroot/GCC_XML co gccxml
|
||||
mod, url = split_url(@url)
|
||||
|
||||
unless @co.exist?
|
||||
Dir.chdir HOMEBREW_CACHE do
|
||||
safe_system '/usr/bin/cvs', '-d', url, 'login'
|
||||
safe_system '/usr/bin/cvs', '-d', url, 'checkout', '-d', @unique_token, mod
|
||||
end
|
||||
else
|
||||
# TODO cvs up?
|
||||
puts "Repository already checked out"
|
||||
end
|
||||
end
|
||||
|
||||
def stage
|
||||
FileUtils.cp_r(Dir[HOMEBREW_CACHE+@unique_token+"*"], Dir.pwd)
|
||||
|
||||
require 'find'
|
||||
|
||||
Find.find(Dir.pwd) do |path|
|
||||
if FileTest.directory?(path) && File.basename(path) == "CVS"
|
||||
Find.prune
|
||||
FileUtil.rm_r path, :force => true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def split_url(in_url)
|
||||
parts=in_url.sub(%r[^cvs://], '').split(/:/)
|
||||
mod=parts.pop
|
||||
url=parts.join(':')
|
||||
[ mod, url ]
|
||||
end
|
||||
end
|
||||
|
||||
class MercurialDownloadStrategy <AbstractDownloadStrategy
|
||||
def fetch
|
||||
ohai "Cloning #{@url}"
|
||||
@clone=HOMEBREW_CACHE+@unique_token
|
||||
|
||||
url=@url.sub(%r[^hg://], '')
|
||||
|
||||
unless @clone.exist?
|
||||
safe_system 'hg', 'clone', url, @clone
|
||||
else
|
||||
# TODO hg pull?
|
||||
puts "Repository already cloned"
|
||||
end
|
||||
end
|
||||
def stage
|
||||
dst=Dir.getwd
|
||||
Dir.chdir @clone do
|
||||
# http://stackoverflow.com/questions/160608/how-to-do-a-git-export-like-svn-export
|
||||
safe_system 'hg', 'archive', '-y', '-t', 'files', dst
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -101,6 +101,8 @@ class Formula
|
||||
# reimplement if we don't autodetect the download strategy you require
|
||||
def download_strategy
|
||||
case url
|
||||
when %r[^cvs://] then CVSDownloadStrategy
|
||||
when %r[^hg://] then MercurialDownloadStrategy
|
||||
when %r[^svn://] then SubversionDownloadStrategy
|
||||
when %r[^git://] then GitDownloadStrategy
|
||||
when %r[^http://(.+?\.)?googlecode\.com/svn] then SubversionDownloadStrategy
|
||||
|
Loading…
x
Reference in New Issue
Block a user