svn commit: r204441 - user/dougb/portmaster
Doug Barton
dougb at FreeBSD.org
Sun Feb 28 04:12:30 UTC 2010
Author: dougb
Date: Sun Feb 28 04:12:29 2010
New Revision: 204441
URL: http://svn.freebsd.org/changeset/base/204441
Log:
Improve --index support to a functional version:
1. Move the file priming code up above where it is needed for the
-L option
2. Add parse_index() to pull out the specified bit of data
3. Start using the data from the index in check_for_updates() to prove
that something needs updating.
In other news:
Add -m 1 to those grep invocations that can/do involve large files
when there is only one possible match
Modified:
user/dougb/portmaster/portmaster
Modified: user/dougb/portmaster/portmaster
==============================================================================
--- user/dougb/portmaster/portmaster Sun Feb 28 04:10:26 2010 (r204440)
+++ user/dougb/portmaster/portmaster Sun Feb 28 04:12:29 2010 (r204441)
@@ -473,6 +473,42 @@ if [ "$$" -eq "$PM_PARENT_PID" ]; then
[ `/sbin/sysctl -n kern.osreldate 2>/dev/null` -lt 600400 ] &&
fail Package installation support requires FreeBSD 6.4 or newer
fi
+
+# XXX
+ if [ -n "$PM_INDEX" ]; then
+ pm_cd_pd
+ if [ -z "$FETCHINDEX" ]; then
+ FETCHINDEX=`pm_make_b -V FETCHINDEX`
+ [ -n "$FETCHINDEX" ] ||
+ fail 'The value of FETCHINDEX cannot be empty'
+ fi
+ if [ -z "$MASTER_SITE_INDEX" ]; then
+ MASTER_SITE_INDEX=`pm_make_b -V MASTER_SITE_INDEX`
+ [ -n "$MASTER_SITE_INDEX" ] ||
+ fail 'The value of MASTER_SITE_INDEX cannot be empty'
+ fi
+ if [ -z "$INDEXDIR" ]; then
+ INDEXDIR=`pm_make_b -V INDEXDIR`
+ [ -n "$INDEXDIR" ] ||
+ fail 'The value of INDEXDIR cannot be empty'
+ fi
+ if [ -z "$INDEXFILE" ]; then
+ INDEXFILE=`pm_make_b -V INDEXFILE`
+ [ -n "$INDEXFILE" ] ||
+ fail 'The value of INDEXFILE cannot be empty'
+ fi
+
+ PM_INDEX="${INDEXDIR}/${INDEXFILE}"
+
+ [ -n "$PM_SU_VERBOSE" ] && echo "===>>> Updating INDEX file"
+ $PM_SU_CMD $FETCHINDEX ${PM_INDEX}.bz2 ${MASTER_SITE_INDEX}${INDEXFILE}.bz2
+ temp_index=`pm_mktemp index`
+ bunzip2 < ${PM_INDEX}.bz2 > $temp_index
+ pm_install_s $temp_index $PM_INDEX
+
+ unlink $temp_index
+ unset temp_index
+ fi
fi
set -- $newopts
@@ -492,7 +528,7 @@ iport_from_origin () {
origin_from_pdb () {
local o
- o=`grep '@comment ORIGIN:' $pdb/$1/+CONTENTS 2>/dev/null`
+ o=`grep -m1 '@comment ORIGIN:' $pdb/$1/+CONTENTS 2>/dev/null`
echo ${o#@comment ORIGIN:}
}
@@ -1004,6 +1040,26 @@ check_state () {
return 0
}
+# XXX
+
+parse_index () {
+ local line
+
+ line=`grep -m1 .*\|${pd}/${1}\|.* $PM_INDEX`
+
+ case "$2" in
+ name) echo ${line%%|*} ;;
+ localbase) echo $line | cut -f 3 -d\| ;;
+ comment) echo $line | cut -f 4 -d\| ;;
+ descr) echo $line | cut -f 5 -d\| ;;
+ maintainer) echo $line | cut -f 6 -d\| ;;
+ category) echo $line | cut -f 7 -d\| ;;
+ b-deps) echo $line | cut -f 8 -d\| ;;
+ r-deps) echo $line | cut -f 9 -d\| ;;
+ www) echo $line | cut -f 10 -d\| ;;
+ esac
+}
+
check_for_updates () {
# Global: num_updates
local list_only nf iport origin port_ver udf do_update
@@ -1024,8 +1080,20 @@ check_for_updates () {
fi
return 0
fi
+# XXX
+
+ if [ -n "$PM_INDEX" ]; then
+ port_ver=`parse_index $origin name`
- if [ -d "$pd/$origin" ]; then
+ case `pkg_version -t $iport $port_ver` in
+ \<) do_update=update_index
+#echo ''; echo "Debug> Found one from the INDEX!"; echo ''
+ ;;
+ =) ;; # Potential future use
+ esac
+ fi
+
+ if [ -d "$pd/$origin" -a -z "$do_update" ]; then
if ! pm_cd $pd/$origin; then
if [ -e "$pdb/$iport/+IGNOREME" ]; then
echo " ===>>> Warning: Unable to cd to $pd/$origin"
@@ -1088,7 +1156,7 @@ check_for_updates () {
fi ;;
esac
fi
- else
+ elif [ -z "$do_update" ]; then
find_moved_port $origin $iport $nf
# If the port has moved, we have to update it, otherwise ignore
@@ -2214,42 +2282,6 @@ if [ "$$" -eq "$PM_PARENT_PID" -a -z "$S
export DI_FILES=`pm_mktemp DI-FILES`
fi
-# XXX
- if [ -n "$PM_INDEX" ]; then
- pm_cd_pd
- if [ -z "$FETCHINDEX" ]; then
- FETCHINDEX=`pm_make_b -V FETCHINDEX`
- [ -n "$FETCHINDEX" ] ||
- fail 'The value of FETCHINDEX cannot be empty'
- fi
- if [ -z "$MASTER_SITE_INDEX" ]; then
- MASTER_SITE_INDEX=`pm_make_b -V MASTER_SITE_INDEX`
- [ -n "$MASTER_SITE_INDEX" ] ||
- fail 'The value of MASTER_SITE_INDEX cannot be empty'
- fi
- if [ -z "$INDEXDIR" ]; then
- INDEXDIR=`pm_make_b -V INDEXDIR`
- [ -n "$INDEXDIR" ] ||
- fail 'The value of INDEXDIR cannot be empty'
- fi
- if [ -z "$INDEXFILE" ]; then
- INDEXFILE=`pm_make_b -V INDEXFILE`
- [ -n "$INDEXFILE" ] ||
- fail 'The value of INDEXFILE cannot be empty'
- fi
-
- PM_INDEX="${INDEXDIR}/${INDEXFILE}"
- export PM_INDEX
-
- [ -n "$PM_SU_VERBOSE" ] && echo "===>>> Updating INDEX file"
- $PM_SU_CMD $FETCHINDEX ${PM_INDEX}.bz2 ${MASTER_SITE_INDEX}${INDEXFILE}.bz2
- temp_index=`pm_mktemp index`
- bunzip2 < ${PM_INDEX}.bz2 > $temp_index
- pm_install_s $temp_index $i
-
- unset temp_index
- fi
-
if [ $# -gt 1 -a -z "$REPLACE_ORIGIN" ]; then
multiport $@
fi
@@ -2790,7 +2822,7 @@ fetch_package () {
fi
for s in ${new_port%\.*} ${new_port%%\.*} ${new_port%-*}; do
- latest_pv=`grep "href=\"${s}" $dirlist`
+ latest_pv=`grep -m1 "href=\"${s}" $dirlist`
[ -n "$latest_pv" ] && break
done
fi
More information about the svn-src-user
mailing list