<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/fa78615dc287dccfa453baefa273d1e41eced0b3">https://github.com/macports/macports-base/commit/fa78615dc287dccfa453baefa273d1e41eced0b3</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit fa78615dc287dccfa453baefa273d1e41eced0b3
</span>Author: Rainer Müller <raimue@macports.org>
AuthorDate: Fri Mar 16 12:42:16 2018 +0100
<span style='display:block; white-space:pre;color:#404040;'> fetch: Enable tarball generation for bzr
</span>---
src/port1.0/portfetch.tcl | 110 +++++++++++++++++++++++++++++++++-------------
1 file changed, 80 insertions(+), 30 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 d3455f4..565a541 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;'>@@ -49,7 +49,7 @@ namespace eval portfetch {
</span> options master_sites patch_sites extract.suffix distfiles patchfiles use_bzip2 use_lzma use_xz use_zip use_7z use_lzip use_dmg dist_subdir \
fetch.type fetch.user fetch.password fetch.use_epsv fetch.ignore_sslcert \
master_sites.mirror_subdir patch_sites.mirror_subdir \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- bzr.url bzr.revision \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bzr.url bzr.revision bzr.file bzr.file_prefix \
</span> cvs.module cvs.root cvs.password cvs.date cvs.tag cvs.method \
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 \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -57,7 +57,6 @@ options master_sites patch_sites extract.suffix distfiles patchfiles use_bzip2 u
</span>
# XXX we use the command framework to buy us some useful features,
# but this is not a user-modifiable command
<span style='display:block; white-space:pre;background:#ffe0e0;'>-commands bzr
</span> commands cvs
# Defaults
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -67,9 +66,11 @@ default fetch.type standard
</span> default bzr.cmd {[findBinary bzr $portutil::autoconf::bzr_path]}
default bzr.dir {${workpath}}
default bzr.revision {-1}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-default bzr.pre_args {"--builtin --no-aliases checkout --lightweight --verbose"}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-default bzr.args ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-default bzr.post_args {"-r ${bzr.revision} ${bzr.url} ${worksrcdir}"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default bzr.pre_args {"--builtin --no-aliases"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default bzr.args {"checkout --lightweight --verbose"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default bzr.post_args {"-r ${bzr.revision}"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default bzr.file {${distname}.${fetch.type}.tar.bz2}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default bzr.file_prefix {${distname}}
</span>
default cvs.cmd {[findBinary cvs $portutil::autoconf::cvs_path]}
default cvs.password ""
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -207,6 +208,7 @@ proc portfetch::set_fetch_type {option action args} {
</span> }
switch $args {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ bzr -
</span> svn -
git {
# bzip2 is needed to create and extract generated tarballs.
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -385,7 +387,16 @@ proc portfetch::mktar {tarfile dir mtime} {
</span>
# Perform a bzr fetch
proc portfetch::bzrfetch {args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- global env
</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 worksrcpath \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bzr.cmd bzr.pre_args bzr.args bzr.post_args bzr.url bzr.file bzr.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}/${bzr.file}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[bzr_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>
# Behind a proxy bzr will fail with the following error if proxies
# listed in macports.conf appear in the environment in their
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -406,10 +417,48 @@ proc portfetch::bzrfetch {args} {
</span> set env(HTTPS_PROXY) http://${orig_https_proxy}/
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- try {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[catch {command_exec bzr "" "2>&1"} result]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return -code error [msgcat::mc "Bazaar checkout failed"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ try -pass_signal {
</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;'>+ 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 "${bzr.cmd} ${bzr.pre_args} ${bzr.args} ${bzr.post_args} ${bzr.url} ${tmpxprt}/${bzr.file_prefix} 2>&1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[catch {system $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 "Bazaar 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 {![bzr_tarballable]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ file rename ${tmppath} ${worksrcpath}
</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:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_info "$UI_PREFIX Generating tarball ${bzr.file}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # get timestamp of latest revision
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set cmdstring "${bzr.cmd} ${bzr.pre_args} version-info --format=custom --template=\"{date}\" ${tmpxprt}/${bzr.file_prefix} 2>&1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_debug "exec: $cmdstring"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[catch {exec -ignorestderr sh -c $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 "Bazaar version-info failed: $result"]
</span> }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ set tstamp $result
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set mtime [clock scan [lindex [split $tstamp "."] 0] -format "%Y-%m-%d %H:%M:%S %z" -timezone "UTC"]
</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;'>+
</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;'>+ return 0
</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> } finally {
if {[info exists orig_http_proxy]} {
set env(http_proxy) ${orig_http_proxy}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -553,10 +602,10 @@ proc portfetch::svnfetch {args} {
</span> return 0
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# Check if a tarball can be produced for git
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc portfetch::git_tarballable {args} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global git.branch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {${git.branch} eq "" || ${git.branch} eq "HEAD"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Check if a tarball can be produced for bzr
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc portfetch::bzr_tarballable {args} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global bzr.revision
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {${bzr.revision} eq "" || ${bzr.revision} eq "-1"} {
</span> return no
} else {
return yes
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -573,6 +622,16 @@ proc portfetch::svn_tarballable {args} {
</span> }
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# Check if a tarball can be produced for git
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc portfetch::git_tarballable {args} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global git.branch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {${git.branch} eq "" || ${git.branch} eq "HEAD"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return yes
</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> # Returns true if port is fetched from VCS and can be put into a tarball
proc portfetch::tarballable {args} {
global fetch.type
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -588,8 +647,9 @@ proc portfetch::tarballable {args} {
</span> proc portfetch::mirrorable {args} {
global fetch.type checksums
switch -- "${fetch.type}" {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- git -
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- svn {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bzr -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ svn -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ git {
</span> if {[info exists checksums] && $checksums eq ""} {
ui_debug "port cannot be mirrored, no checksums for fetch.type ${fetch.type}"
return no
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -853,25 +913,15 @@ proc portfetch::fetch_addfilestomap {filemapname} {
</span>
# Initialize fetch target and call checkfiles.
proc portfetch::fetch_init {args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- global fetch.type distname all_dist_files \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- git.file svn.file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global fetch.type distname all_dist_files
</span> variable fetch_urls
portfetch::checkfiles fetch_urls
<span style='display:block; white-space:pre;background:#ffe0e0;'>- switch -- "${fetch.type}" {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- svn {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[svn_tarballable]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- lappend all_dist_files ${svn.file}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- distfiles-append ${svn.file}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- git {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[git_tarballable]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- lappend all_dist_files ${git.file}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- distfiles-append ${git.file}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[tarballable]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global ${fetch.type}.file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lappend all_dist_files [set ${fetch.type}.file]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ distfiles-append [set ${fetch.type}.file]
</span> }
}
</pre><pre style='margin:0'>
</pre>