<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/c178c3306732246da8a1c62a6f685f98e880f2b3">https://github.com/macports/macports-base/commit/c178c3306732246da8a1c62a6f685f98e880f2b3</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit c178c3306732246da8a1c62a6f685f98e880f2b3
</span>Author: Rainer Müller <raimue@macports.org>
AuthorDate: Sat Mar 17 18:10:24 2018 +0100

<span style='display:block; white-space:pre;color:#404040;'>    fetch: Enable tarball generation for hg
</span>---
 src/port1.0/portfetch.tcl | 67 ++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 60 insertions(+), 7 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 84a407e..4fad52f 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;'>@@ -53,7 +53,7 @@ options master_sites patch_sites extract.suffix distfiles patchfiles use_bzip2 u
</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:#ffe0e0;'>-    hg.cmd hg.url hg.tag
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    hg.cmd hg.url hg.tag hg.file hg.file_prefix
</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:#e0e0e0;'>@@ -105,6 +105,8 @@ default git.fetch_submodules "yes"
</span> default hg.cmd {[findBinary hg $portutil::autoconf::hg_path]}
 default hg.dir {${workpath}}
 default hg.tag {tip}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+default hg.file {${distname}.${fetch.type}.tar.bz2}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default hg.file_prefix {${distname}}
</span> 
 # Set distfiles
 default distfiles {[list [portfetch::suffix $distname]]}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -206,13 +208,15 @@ proc portfetch::set_fetch_type {option action args} {
</span>             }
             hg {
                 depends_fetch-append bin:hg:mercurial
<span style='display:block; white-space:pre;background:#e0ffe0;'>+                default distname {${name}-${hg.tag}}
</span>             }
         }
 
         switch $args {
             bzr -
             svn -
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            git {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            git -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            hg {
</span>                 # bzip2 is needed to create and extract generated tarballs.
                 # It might not be used if the fetch was not tarballable,
                 # but we cannot decide this yet, so we just add it anyway.
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -632,6 +636,16 @@ proc portfetch::git_tarballable {args} {
</span>     }
 }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# Check if a tarball can be produced for hg
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc portfetch::hg_tarballable {args} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global hg.tag
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${hg.tag} eq "" || ${hg.tag} eq "tip"} {
</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;'>@@ -649,7 +663,8 @@ proc portfetch::mirrorable {args} {
</span>     switch -- "${fetch.type}" {
         bzr -
         svn -
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        git {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        git -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        hg {
</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;'>@@ -771,20 +786,58 @@ proc portfetch::gitfetch {args} {
</span> 
 # Perform a mercurial fetch.
 proc portfetch::hgfetch {args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global worksrcpath prefix_frozen hg.url hg.tag hg.cmd \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           fetch.ignore_sslcert
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global UI_PREFIX \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           distpath worksrcpath \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           hg.cmd hg.url hg.tag hg.file hg.file_prefix \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           name distname fetch.type fetch.ignore_sslcert
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set generatedfile "${distpath}/${hg.file}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[hg_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:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    ui_info "$UI_PREFIX Checking out ${fetch.type} repository"
</span> 
     set insecureflag ""
     if {${fetch.ignore_sslcert}} {
         set insecureflag " --insecure"
     }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    set cmdstring "${hg.cmd} clone${insecureflag} --rev \"${hg.tag}\" ${hg.url} ${worksrcpath} 2>&1"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ui_debug "Executing: $cmdstring"
</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;'>+    set cmdstring "${hg.cmd} clone${insecureflag} --rev \"${hg.tag}\" ${hg.url} ${tmpxprt}/${hg.file_prefix} 2>&1"
</span>     if {[catch {system $cmdstring} result]} {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        delete ${tmppath}
</span>         return -code error [msgcat::mc "Mercurial clone failed"]
     }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {![hg_tarballable]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        file rename ${tmpxprt}/${hg.file_prefix} ${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 ${hg.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 "${hg.cmd} log -r ${hg.tag} --template=\"{date}\"i -R ${tmpxprt}/${hg.file_prefix}"
</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;'>+        return -code error [msgcat::mc "Mercurial log failed"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set mtime $result
</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>     return 0
 }
 
</pre><pre style='margin:0'>

</pre>