summaryrefslogtreecommitdiff
path: root/mk/scripts
diff options
context:
space:
mode:
authordmcmahill <dmcmahill>2006-06-21 14:13:27 +0000
committerdmcmahill <dmcmahill>2006-06-21 14:13:27 +0000
commita9a74017ef4e70479a7c41e83ed61d26df69abfe (patch)
tree6f5227022b58120a01999f47a9836f2b2218fb7d /mk/scripts
parentd833a5bbd7314875ca3b133280b9a51dbbfd0982 (diff)
downloadpkgsrc-a9a74017ef4e70479a7c41e83ed61d26df69abfe.tar.gz
When producing the list of directories containing binary packages, do
some extra processing to ensure that we have a list of unique directories. Otherwise we end up with two problems: - cache files get rebuilt all the time because they get built once for each path to the directory in question and since the path ends up in the cache, it is always declared out of date. - we end up with multiple links to the same binary package in the README.html files. Committed during the freeze becuase this is a real bug which is encountered daily.
Diffstat (limited to 'mk/scripts')
-rwxr-xr-xmk/scripts/binpkg-cache32
1 files changed, 29 insertions, 3 deletions
diff --git a/mk/scripts/binpkg-cache b/mk/scripts/binpkg-cache
index 93b4c81c44c..444fd63d358 100755
--- a/mk/scripts/binpkg-cache
+++ b/mk/scripts/binpkg-cache
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# $NetBSD: binpkg-cache,v 1.9 2006/06/08 11:18:04 dmcmahill Exp $
+# $NetBSD: binpkg-cache,v 1.10 2006/06/21 14:13:27 dmcmahill Exp $
#
# Script for generating a cache file with information about
# all binary packages contained in a directory.
@@ -67,6 +67,7 @@ if test $? -ne 0 ; then
echo "${tmpd} already exists"
exit 1
fi
+all_dirs=${tmpd}/all_dirs
prog=$0
@@ -132,6 +133,7 @@ all_cache_files=""
#
process_binpkg_dir(){
+ rdir=`${GREP} "^${d} " ${all_dirs} | ${AWK} '{print $2}'`
need_update=no
if test -f ${d}/${cachefile} ; then
stale_entries=`${FIND} ${d} -type f -name \*${PKG_SUFX} -newer ${d}/${cachefile} -print`
@@ -149,7 +151,7 @@ process_binpkg_dir(){
# get the list of what pkgs belong in the cache
rm -f ${tmpd}/pkg_list ${tmpd}/cache_pkg_list
${FIND} ${d}/ -name \*${PKG_SUFX} -print | \
- ${SED} -e "s;^${PACKAGES}/*;;g" -e 's;//;/;g' | \
+ ${SED} -e "s;^${d}/*;${rdir}/;g" -e 's;//;/;g' | \
${SORT} > ${tmpd}/pkg_list
# and get the list of what is in the cache
@@ -161,6 +163,12 @@ process_binpkg_dir(){
echo " No extra cache entries in ${d}/${cachefile}"
fi
else
+ if test "X${DEBUG}" = "Xyes" ; then
+ echo "Package list:"
+ cat ${tmpd}/pkg_list
+ echo "Cache list:"
+ cat ${tmpd}/cache_pkg_list
+ fi
echo " Entries found in ${d}/${cachefile} but no packages found"
need_update=yes
fi
@@ -197,7 +205,7 @@ process_binpkg_dir(){
if test "X${need_update}" = "Xyes" ; then
echo "pkgcache_version ${cacheversion}" > ${tmpd}/${cachefile}
for f in ${d}/*${PKG_SUFX} ; do
- fn=`echo $f | ${SED} "s;^${PACKAGES}/*;;g"`
+ fn=`grep "^${d} " ${all_dirs} | ${AWK} '{print $2}'`"/"`basename ${f}`
if test "X${DEBUG}" = "Xyes" ; then
echo " Adding ${fn} (${f}) to the cache"
fi
@@ -339,7 +347,25 @@ fi
# put a trailing / after ${PACKAGES} in case ${PACKAGES} is
# a link.
+
+# pass 1, we find all directories under PACKAGES. Note that this
+# may contain some directories more than once depending on what sort
+# of soft links may be in place
+rm -f ${all_dirs}.tmp
for d in `${FIND} ${PACKAGES}/ -type d -follow -print` ; do
+ cname=`(cd ${d} && pwd -P)`
+ rname=`echo ${d} | ${SED} "s;^${PACKAGES}/*;;g"`
+ echo "${cname} ${rname}" >> ${all_dirs}.tmp
+done
+${SORT} -u -k1,1 ${all_dirs}.tmp > ${all_dirs}
+if test "X${DEBUG}" = "Xyes" ; then
+ echo "Full directory list:"
+ cat ${all_dirs}.tmp
+ echo "Unique directory list:"
+ cat ${all_dirs}
+fi
+
+for d in `${AWK} '{print $1}' ${all_dirs}` ; do
if test "X${DEBUG}" = "Xyes" ; then
echo "${prompt}Processing directory ${d}"
fi