<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>