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