Index: svn-package.mk =================================================================== RCS file: /cvsroot/pkgsrc-wip/wip/mk/svn-package.mk,v retrieving revision 1.14 diff -u -r1.14 svn-package.mk --- svn-package.mk 27 Mar 2010 13:10:37 -0000 1.14 +++ svn-package.mk 28 Sep 2011 05:21:34 -0000 @@ -1,7 +1,9 @@ # $Id: svn-package.mk,v 1.14 2010/03/27 13:10:37 obache Exp $ # This file provides simple access to Subversion repositories, so that packages -# can be created from Subversion instead of from released tarballs. +# can be created from Subversion instead of from released tarballs. Whenever a +# package is fetched from Subversion, an archive is created from it and saved +# in ${DISTDIR}/svn-packages, to save bandwidth. # # === User-settable variables === # @@ -130,7 +132,7 @@ _SVN_CMD= svn _SVN_ENV= # empty _SVN_ENV+= SVN_RSH=${_SVN_RSH:Q} -_SVN_FLAGS= -q +_SVN_FLAGS= _SVN_CHECKOUT_FLAGS= --config-dir=${_SVN_CONFIG_DIR} --non-interactive _SVN_CONFIG_DIR= ${WRKDIR}/.subversion _SVN_TODAY_CMD= ${DATE} -u +'%Y-%m-%d' @@ -139,7 +141,8 @@ _SVN_PKGVERSION= ${_SVN_PKGVERSION_CMD:sh} _SVN_DISTDIR= ${DISTDIR}/svn-packages -# +_SVN_TMP_RESULT= '/tmp/svn-package.$$' + # Generation of repository-specific variables # @@ -171,15 +174,20 @@ # command to extract cache file _SVN_EXTRACT_CACHED.${repo}= \ - if [ -f ${_SVN_DISTDIR}/${_SVN_DISTFILE.${repo}:Q} ]; then \ - ${STEP_MSG} "Extracting cached Subversion archive "${_SVN_DISTFILE.${repo}:Q}"."; \ - pax -r -z -f ${_SVN_DISTDIR}/${_SVN_DISTFILE.${repo}:Q}; \ - exit 0; \ + p="$$(cd ${_SVN_DISTDIR} && ls -t ${PKGBASE}-${SVN_MODULE.${repo}}-* | head -n 1)"; \ + if [ -n "$$p" ]; then \ + ${STEP_MSG} "(1) Extracting cached SVN archive \"""$$p\"."; \ + pax -r -z -f ${_SVN_DISTDIR:Q}/"$$p"; \ + else \ + ${STEP_MSG} "(1a) No cache file found."; \ fi +_SVN_CHECK_UPDATE.${repo}= \ + "$$(grep ^[AMU] ${_SVN_TMP_RESULT} | head -n 1)" + # create cache archive _SVN_CREATE_CACHE.${repo}= \ - ${STEP_MSG} "Creating cached Subversion archive "${_SVN_DISTFILE.${repo}:Q}"."; \ + ${STEP_MSG} "(5) Creating cached Subversion archive "${_SVN_DISTFILE.${repo}:Q}"."; \ ${MKDIR} ${_SVN_DISTDIR:Q}; \ pax -w -z -f ${_SVN_DISTDIR}/${_SVN_DISTFILE.${repo}:Q} ${SVN_MODULE.${repo}:Q} . else @@ -201,14 +209,32 @@ ${RUN} cd ${WRKDIR}; \ if [ ! -d ${_SVN_DISTDIR} ]; then mkdir -p ${_SVN_DISTDIR:Q}; fi; \ ${_SVN_EXTRACT_CACHED.${repo}}; \ - ${STEP_MSG} "Downloading "${SVN_MODULE.${repo}:Q}" from "${SVN_ROOT.${repo}:Q}"."; \ + ${STEP_MSG} "(2) Downloading "${SVN_MODULE.${repo}:Q}" from "${SVN_ROOT.${repo}:Q}"."; \ ${SETENV} ${_SVN_ENV} \ - ${_SVN_CMD} checkout ${_SVN_CHECKOUT_FLAGS} \ + ${_SVN_CMD} \ + checkout ${_SVN_CHECKOUT_FLAGS} \ ${_SVN_TAG_FLAG.${repo}:Q} \ - ${_SVN_FLAGS} \ + ${_SVN_FLAGS} \ ${SVN_ROOT.${repo}:Q} \ - ${SVN_MODULE.${repo}:Q}; \ - ${_SVN_CREATE_CACHE.${repo}} + ${SVN_MODULE.${repo}:Q} > ${_SVN_TMP_RESULT}; \ + if [ ! "$$p" = 0 ];then \ + if [ ! -z ${_SVN_TMP_RESULT} ];then \ + if [ -n ${_SVN_CHECK_UPDATE.${repo}} ]; then \ + ${_SVN_CREATE_CACHE.${repo}}; \ + else \ + ${STEP_MSG} "(6a) Skip creating cache file for no update."; \ + fi; \ + else \ + ${STEP_MSG} "(6b) Skip creating cache file."; \ + fi; \ + else \ + ${STEP_MSG} "(6c) Skip creating cache file for no update."; \ + fi; .endfor .endif + +# test is four way +# no any cache file yet -> write cache +# cache file exist and no update -> no write cache +# cache file exist and update there -> write cache