X-Spam-Check-By: sourceware.org Message-ID: <45C7A8F6.1000104@cwilson.fastmail.fm> Date: Mon, 05 Feb 2007 17:00:22 -0500 From: Charles Wilson User-Agent: Thunderbird 1.5.0.9 (Windows/20061207) MIME-Version: 1.0 To: cygwin AT cygwin DOT com Subject: [patch] cygport-0.2.9 mixed-mode SRC_URIs References: In-Reply-To: Content-Type: multipart/mixed; boundary="------------020806030100070703000904" Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com --------------020806030100070703000904 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Forward port to latest release. For further history and justifiation of this patch, see http://cygwin.com/ml/cygwin/2007-01/msg00111.html and follow the embedded links and threads. -- Chuck 2007-02-05 Charles Wilson <...> * bin/cygport.in (src_fetch_auto): new function refactored from src_fetch(). Autodetects protocol of passed-in URI (mirror|http|https|ftp) and errors if a protocol is specified but is not recognized. URIs with no protocol specification are silently ignored (e.g. not downloaded). (src_fetch): call src_fetch_auto for 2nd..Nth SRC_URI and all PATCH_URIs regardless of protocol used for the first SRC_URI (cvs|svn|git|mirror|http|https|ftp). If !(cvs|svn|git), call src_fetch_auto for first SRC_URI as well. * lib/cvs.cygclass: extract first name from SRC_URI and use that to generate tarball name. Ensure that working directory is unchanged by a call to cvs_fetch. * lib/svn.cygclass: extract first name from SRC_URI and use that to generate tarball name. Ensure that working directory is unchanged by a call to svn_fetch. * lib/git.cygclass: extract first name from SRC_URI and use that to generate tarball name. Ensure that working directory is unchanged by a call to git_fetch. --------------020806030100070703000904 Content-Type: text/plain; name="cygport-mixedmode.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="cygport-mixedmode.patch" Index: bin/cygport.in =================================================================== RCS file: /cvsroot/cygwin-ports/cygport/bin/cygport.in,v retrieving revision 1.53 diff -u -r1.53 cygport.in --- bin/cygport.in 5 Feb 2007 03:28:43 -0000 1.53 +++ bin/cygport.in 5 Feb 2007 21:40:40 -0000 @@ -376,32 +376,51 @@ error "Could not download ${1##*/}"; } +# attempts to fetch $1, auto-detecting download method +# among (mirror, http, https, ftp). If $1 has no 'protocol://' +# prefix, it is ignored. If it has an unsupported 'protocol://' +# prefix, an error is raised. +src_fetch_auto() { + local uri="$1" + case ${uri%%://*} in + mirror) mirror_fetch ${uri} ;; + http|https|ftp) fetch ${uri} || error "Download ${uri##*/} failed" ;; + ${uri}) ;; + *) error "Invalid download URI ${uri} (bad protocol: '${uri%%://*}')" ;; + esac +} + # downloads sources from Internet if not present src_fetch() { local uri; + local first_src_uri; + local rest_src_uri; cd ${top}; + first_src_uri="${SRC_URI%% *}" + rest_src_uri="${SRC_URI##${first_src_uri}}" if defined _USE_CVS_FETCH then - cvs_fetch; + cvs_fetch; # only fetches the first SRC_URI elif defined _USE_SVN_FETCH then - svn_fetch; + svn_fetch; # only fetches the first SRC_URI elif defined _USE_GIT_FETCH then - git_fetch; + git_fetch; # only fetches the first SRC_URI else - for uri in ${SRC_URI} ${PATCH_URI} - do - case ${uri%%://*} in - mirror) mirror_fetch ${uri} ;; - http|https|ftp) fetch ${uri} || error "Download ${uri##*/} failed" ;; - ${uri}) ;; - *) error "Invalid download URI ${uri}" ;; - esac - done + # only fetch the first SRC_URI here... + src_fetch_auto "${first_src_uri}" fi + + # ...for the rest (including PATCH_URIs), allow only + # mirror|http|https|ftp remote protocols -- or local files + # (e.g. silently ignore URIs which do not specify a protocol) + for uri in ${rest_src_uri} ${PATCH_URI} + do + src_fetch_auto "${uri}" + done } # unpacks the original package source archive Index: lib/cvs.cygclass =================================================================== RCS file: /cvsroot/cygwin-ports/cygport/lib/cvs.cygclass,v retrieving revision 1.4 diff -u -r1.4 cvs.cygclass --- lib/cvs.cygclass 23 Nov 2006 04:14:59 -0000 1.4 +++ lib/cvs.cygclass 5 Feb 2007 21:40:40 -0000 @@ -25,6 +25,7 @@ cvs_fetch() { local cvs_branch local cvs_date + local first_src_uri check_prog_req cvs @@ -43,5 +44,7 @@ cd ${T} verbose cvs -d ${CVS_URI} checkout ${cvs_branch} ${cvs_date} ${CVS_MODULE} - tar jcf ${top}/${SRC_URI} --exclude=CVS --exclude=.cvsignore ${CVS_MODULE} + first_src_uri=${SRC_URI%% *} + tar jcf ${top}/${first_src_uri} --exclude=CVS --exclude=.cvsignore ${CVS_MODULE} + cd ${top} } Index: lib/git.cygclass =================================================================== RCS file: /cvsroot/cygwin-ports/cygport/lib/git.cygclass,v retrieving revision 1.5 diff -u -r1.5 git.cygclass --- lib/git.cygclass 23 Nov 2006 04:14:59 -0000 1.5 +++ lib/git.cygclass 5 Feb 2007 21:40:40 -0000 @@ -25,6 +25,7 @@ SRC_DIR="${GIT_MODULE}" git_fetch() { + local first_src_uri check_prog_req git # T likely doesn't exist at this point, so create it first @@ -38,5 +39,7 @@ cd ${T} fi - tar jcf ${top}/${SRC_URI} --exclude=.git ${GIT_MODULE} + first_src_uri=${SRC_URI%% *} + tar jcf ${top}/${first_src_uri} --exclude=.git ${GIT_MODULE} + cd ${top} } Index: lib/svn.cygclass =================================================================== RCS file: /cvsroot/cygwin-ports/cygport/lib/svn.cygclass,v retrieving revision 1.7 diff -u -r1.7 svn.cygclass --- lib/svn.cygclass 5 Feb 2007 04:19:35 -0000 1.7 +++ lib/svn.cygclass 5 Feb 2007 21:40:40 -0000 @@ -24,6 +24,7 @@ SRC_DIR="${SVN_MODULE}" svn_fetch() { + local first_src_uri local svn_rev check_prog_req svn subversion @@ -41,5 +42,7 @@ cd ${T} verbose svn checkout ${SVN_URI}/${SVN_BRANCH:-trunk} ${svn_rev} ${SVN_MODULE} - tar jcf ${top}/${SRC_URI} --exclude=.svn ${SVN_MODULE} + first_src_uri=${SRC_URI%% *} + tar jcf ${top}/${first_src_uri} --exclude=.svn ${SVN_MODULE} + cd ${top} } --------------020806030100070703000904 Content-Type: text/plain; charset=us-ascii -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/ --------------020806030100070703000904--