<pre style='margin:0'>
Rainer Müller (raimue) pushed a commit to branch vcs-fetch
in repository macports-base.
</pre>
<p><a href="https://github.com/macports/macports-base/commit/00d9c7e32c72811ba44423344f5bc653912bb413">https://github.com/macports/macports-base/commit/00d9c7e32c72811ba44423344f5bc653912bb413</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 00d9c7e32c72811ba44423344f5bc653912bb413
</span>Author: Rainer Müller <raimue@macports.org>
AuthorDate: Mon Mar 19 00:36:16 2018 +0100
<span style='display:block; white-space:pre;color:#404040;'> fetch: Enable tarball generation for cvs
</span>---
src/port1.0/portfetch.tcl | 113 ++++++++++++++++++++++++++++++++++------------
1 file changed, 84 insertions(+), 29 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portfetch.tcl b/src/port1.0/portfetch.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 0532ffc..a5e3ceb 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portfetch.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portfetch.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -50,15 +50,11 @@ options master_sites patch_sites extract.suffix distfiles patchfiles use_bzip2 u
</span> fetch.type fetch.user fetch.password fetch.use_epsv fetch.ignore_sslcert \
master_sites.mirror_subdir patch_sites.mirror_subdir \
bzr.url bzr.revision bzr.file bzr.file_prefix \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- cvs.module cvs.root cvs.password cvs.date cvs.tag cvs.method \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ cvs.module cvs.root cvs.password cvs.date cvs.tag cvs.file cvs.file_prefix \
</span> svn.cmd svn.url svn.revision svn.method svn.pre_args svn.args svn.post_args svn.file svn.file_prefix \
git.cmd git.url git.branch git.file git.file_prefix git.fetch_submodules \
hg.cmd hg.url hg.tag hg.file hg.file_prefix
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# XXX we use the command framework to buy us some useful features,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# but this is not a user-modifiable command
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-commands cvs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> # Defaults
default extract.suffix .tar.gz
default fetch.type standard
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -75,14 +71,14 @@ default bzr.file_prefix {${distname}}
</span> default cvs.cmd {[findBinary cvs $portutil::autoconf::cvs_path]}
default cvs.password ""
default cvs.dir {${workpath}}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-default cvs.method {export}
</span> default cvs.module {$distname}
default cvs.tag ""
default cvs.date ""
<span style='display:block; white-space:pre;background:#ffe0e0;'>-default cvs.env {CVS_PASSFILE=${workpath}/.cvspass}
</span> default cvs.pre_args {"-z9 -f -d ${cvs.root}"}
default cvs.args ""
default cvs.post_args {"${cvs.module}"}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+default cvs.file {${distname}.${fetch.type}.tar.bz2}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default cvs.file_prefix {${distname}}
</span>
default svn.cmd {[portfetch::find_svn_path]}
default svn.dir {${workpath}}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -187,6 +183,7 @@ proc portfetch::set_fetch_type {option action args} {
</span> }
cvs {
depends_fetch-append bin:cvs:cvs
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ default distname {${name}-${cvs.tag}${cvs.date}}
</span> }
svn {
# Sierra is the first macOS version whose svn supports modern TLS cipher suites.
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -212,6 +209,7 @@ proc portfetch::set_fetch_type {option action args} {
</span>
switch $args {
bzr -
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ cvs -
</span> svn -
git -
hg {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -476,12 +474,18 @@ proc portfetch::bzrfetch {args} {
</span> # Perform a CVS login and fetch, storing the CVS login
# information in a custom .cvspass file
proc portfetch::cvsfetch {args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- global workpath cvs.env cvs.cmd cvs.args cvs.post_args \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cvs.root cvs.date cvs.tag cvs.method cvs.password
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- patch_sites filespath
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global UI_PREFIX \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ env distpath workpath worksrcpath \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ cvs.cmd cvs.pre_args cvs.args cvs.post_args cvs.root cvs.tag cvs.date cvs.password cvs.file cvs.file_prefix \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ name distname fetch.type \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set generatedfile "${distpath}/${cvs.file}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[cvs_tarballable] && [file isfile "${generatedfile}"]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set cvs.args "${cvs.method} ${cvs.args}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {${cvs.method} eq "export" && ![string length ${cvs.tag}] && ![string length ${cvs.date}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![string length ${cvs.tag}] && ![string length ${cvs.date}]} {
</span> set cvs.tag "HEAD"
}
if {[string length ${cvs.tag}]} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -492,25 +496,65 @@ proc portfetch::cvsfetch {args} {
</span> set cvs.args "${cvs.args} -D ${cvs.date}"
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[regexp ^:pserver: ${cvs.root}]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set savecmd ${cvs.cmd}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set saveargs ${cvs.args}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set savepost_args ${cvs.post_args}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set cvs.cmd "echo ${cvs.password} | ${cvs.cmd}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set cvs.args login
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set cvs.post_args ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[catch {command_exec cvs -notty "" "2>&1"} result]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return -code error [msgcat::mc "CVS login failed"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_info "$UI_PREFIX Checking out ${fetch.type} repository"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ array set orig_env [array get env]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # create an empty passfile to suppress warnings from CVS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ close [open "$env(HOME)/.cvspass" w]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ try -pass_signal {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[regexp ^:pserver: ${cvs.root}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set cmdstring "echo ${cvs.password} | ${cvs.cmd} ${cvs.pre_args} login 2>&1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[catch {system -notty $cmdstring} result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ error [msgcat::mc "CVS login failed: $result"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set env(CVS_RSH) ssh
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set tmppath [mkdtemp "/tmp/macports.portfetch.${name}.XXXXXXXX"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set tmpxprt [file join ${tmppath} export]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ file mkdir ${tmpxprt}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set cmdstring "${cvs.cmd} ${cvs.pre_args} export -d ${cvs.file_prefix} ${cvs.args} ${cvs.post_args} 2>&1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[catch {system -notty -W ${tmpxprt} $cmdstring} result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ delete ${tmppath}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ error [msgcat::mc "CVS checkout failed"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![cvs_tarballable]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ file rename ${tmpxprt}/${svn.file_prefix} ${worksrcpath}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0
</span> }
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set cvs.cmd ${savecmd}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set cvs.args ${saveargs}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set cvs.post_args ${savepost_args}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set env(CVS_RSH) ssh
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[catch {command_exec cvs "" "2>&1"} result]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return -code error [msgcat::mc "CVS check out failed"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_info "$UI_PREFIX Generating tarball ${cvs.file}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # get timestamp by looking for the newest file in the exported source
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set mtime 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ fs-traverse f ${tmpxprt}/${cvs.file_prefix} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![file isdirectory $f]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ft [file mtime $f]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$ft > $mtime} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set mtime $ft
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set tardst [join [list [mktemp "/tmp/macports.portfetch.${name}.XXXXXXXX"] ".tar"] ""]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ mktar $tardst $tmpxprt $mtime
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set compressed [compressfile ${tardst}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ file rename -force ${compressed} ${generatedfile}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_debug "Created tarball for fetch.type ${fetch.type} at ${generatedfile}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } catch {{*} ecode emessage} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ throw
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } finally {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # cleanup
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ delete ${tmppath}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ array unset env *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ array set env [array get orig_env]
</span> }
return 0
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -614,6 +658,16 @@ proc portfetch::bzr_tarballable {args} {
</span> }
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# Check if a tarball can be produced for cvs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc portfetch::cvs_tarballable {args} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global cvs.tag cvs.date
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {${cvs.tag} ni {"HEAD" ""} || ${cvs.date} ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # Check if a tarball can be produced for svn
proc portfetch::svn_tarballable {args} {
global svn.revision
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -660,6 +714,7 @@ proc portfetch::mirrorable {args} {
</span> global fetch.type checksums
switch -- "${fetch.type}" {
bzr -
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ cvs -
</span> svn -
git -
hg {
</pre><pre style='margin:0'>
</pre>