pkg_rolling-replace-0.10:
- Abort if any of rebuild, unsafe_depends, unsafe_depends_strict are still set after "make replace". - Following changes in pkgsrc, does not replace by default if the dependencies' ABI is still compatible. - Add option -s that retains the old behaviour of always replacing. - Add option -r for "replace only", this supresses creation of binary pkgs. - The -n option has not been fully updated for these changes. - versions 0.[7-9] were skipped to avoid any ambiguity from the 0.04 -> 0.5 transition.
This commit is contained in:
parent
2e3ae84d55
commit
f32a62ac9e
3 changed files with 74 additions and 37 deletions
|
@ -1,6 +1,6 @@
|
|||
# $NetBSD: Makefile,v 1.12 2007/08/06 15:07:56 tnn Exp $
|
||||
# $NetBSD: Makefile,v 1.13 2007/08/08 11:28:04 tnn Exp $
|
||||
|
||||
DISTNAME= pkg_rolling-replace-0.6
|
||||
DISTNAME= pkg_rolling-replace-0.10
|
||||
CATEGORIES= pkgtools
|
||||
MASTER_SITES= # empty
|
||||
DISTFILES= # empty
|
||||
|
@ -28,7 +28,7 @@ SUBST_CLASSES+= tools
|
|||
SUBST_STAGE.tools= pre-configure
|
||||
SUBST_MESSAGE.tools= Substituting tool locations.
|
||||
SUBST_FILES.tools= pkg_rolling-replace.sh
|
||||
SUBST_VARS.tools= PKG_INFO_CMD PKG_ADMIN MAKE PKG_CHK
|
||||
SUBST_VARS.tools= PKG_INFO_CMD MAKE PKG_CHK
|
||||
|
||||
SUBST_CLASSES+= makeconf
|
||||
SUBST_STAGE.makeconf= pre-configure
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.\" $NetBSD: pkg_rolling-replace.8,v 1.6 2007/08/07 20:46:43 wiz Exp $
|
||||
.Dd May 11, 2007
|
||||
.\" $NetBSD: pkg_rolling-replace.8,v 1.7 2007/08/08 11:28:04 tnn Exp $
|
||||
.Dd August 8, 2007
|
||||
.Dt PKG_ROLLING-REPLACE 8
|
||||
.Os
|
||||
.Sh NAME
|
||||
|
@ -7,17 +7,15 @@
|
|||
.Nd rebuild or update packages using 'make replace' in tsorted order
|
||||
.Sh SYNOPSIS
|
||||
.Nm
|
||||
.Op Fl hnuv
|
||||
.Op Fl hnrsuv
|
||||
.Op Fl x Ar pkgs
|
||||
.Sh DESCRIPTION
|
||||
.Nm
|
||||
runs
|
||||
.Dq make replace
|
||||
on packages that have been marked with the
|
||||
.Dq unsafe_depends=YES
|
||||
flag or the
|
||||
.Dq rebuild=YES
|
||||
flag, optionally replacing any outdated packages (as reported by
|
||||
on packages that have been marked to have unsafe dependencies or have
|
||||
been marked to be rebuilt.
|
||||
Optionally it can replace any outdated packages (as reported by
|
||||
.Xr pkg_chk 8 )
|
||||
as well.
|
||||
.Pp
|
||||
|
@ -25,9 +23,11 @@ Whenever
|
|||
.Dq make replace
|
||||
is run on a package, all installed packages
|
||||
that depend on it are marked with the
|
||||
.Dq unsafe_depends_strict=YES
|
||||
flag. If the version of the replaced package has changed, this indicates
|
||||
that it may no longer be ABI-compatible so
|
||||
.Dq unsafe_depends=YES
|
||||
flag, which indicates that they may no longer be ABI-compatible
|
||||
with the replaced package.
|
||||
is also set for all packages that depend on it.
|
||||
Running
|
||||
.Nm
|
||||
with no arguments will restore such packages to a safe state by
|
||||
|
@ -70,6 +70,17 @@ or change any flags on installed packages.
|
|||
This option attempts to calculate the new packages that would be
|
||||
marked unsafe after each
|
||||
.Dq make replace .
|
||||
.It Fl r
|
||||
Just replace packages, do not build binary packages.
|
||||
.It Fl s
|
||||
Enable strict mode. This makes
|
||||
.Nm
|
||||
Look at
|
||||
.Dq unsafe_depends_strict
|
||||
tags instead of
|
||||
.Dq unsafe_depends
|
||||
tags. This will replace packages more aggressively and can be used to solve
|
||||
shared library problems.
|
||||
.It Fl u
|
||||
Use
|
||||
.Xl pkg_chk 8
|
||||
|
@ -111,6 +122,9 @@ If not set in environment then defaults to
|
|||
with initial idea and many suggestions from
|
||||
.An Greg Troxel
|
||||
.Aq gdt@ir.bbn.com .
|
||||
The options -s and -r were added by
|
||||
.An Tobias Nygren
|
||||
.Aq tnn@NetBSD.org .
|
||||
.Sh BUGS
|
||||
.Nm
|
||||
does not run fully automatically when any significant number of
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
|
||||
# $NetBSD: pkg_rolling-replace.sh,v 1.12 2007/08/06 15:07:56 tnn Exp $
|
||||
# $NetBSD: pkg_rolling-replace.sh,v 1.13 2007/08/08 11:28:04 tnn Exp $
|
||||
#<license>
|
||||
# Copyright (c) 2006 BBN Technologies Corp. All rights reserved.
|
||||
#
|
||||
|
@ -71,7 +71,6 @@ test -f "$MAKECONF" && test -z "$PKGSRCDIR" && PKGSRCDIR="` \
|
|||
test -z "$PKGSRCDIR" && PKGSRCDIR=/usr/pkgsrc
|
||||
test -z "$PKG_CHK" && PKG_CHK="@PKG_CHK@"
|
||||
test -z "$PKG_INFO" && PKG_INFO="@PKG_INFO_CMD@"
|
||||
test -z "$PKG_ADMIN" && PKG_ADMIN="@PKG_ADMIN@"
|
||||
|
||||
unset PKG_PATH || true #or pkgsrc makefiles will complain
|
||||
|
||||
|
@ -80,6 +79,8 @@ usage()
|
|||
echo "Usage: pkg_rolling-replace [opts]
|
||||
-h This help
|
||||
-n Don't actually do make replace
|
||||
-r Just replace, don't create binary packages
|
||||
-s Replace even if the ABIs are still compatible ("strict")
|
||||
-u Update mismatched packages
|
||||
-v Verbose
|
||||
-x <pkg> exclude <pkg> from update check
|
||||
|
@ -227,6 +228,14 @@ vsleep()
|
|||
fi
|
||||
}
|
||||
|
||||
abort()
|
||||
{
|
||||
echo "*** $1"
|
||||
echo "*** Please read the errors listed above, fix the problem,"
|
||||
echo "*** then re-run pkg_rolling-replace to continue."
|
||||
exit 1
|
||||
}
|
||||
|
||||
######################################################################
|
||||
##
|
||||
## main()
|
||||
|
@ -234,7 +243,7 @@ vsleep()
|
|||
|
||||
EXCLUDE=
|
||||
|
||||
args=$(getopt hnuvx: $*)
|
||||
args=$(getopt hnursvx: $*)
|
||||
if [ $? -ne 0 ]; then
|
||||
opt_h=1
|
||||
fi
|
||||
|
@ -243,6 +252,8 @@ while [ $# -gt 0 ]; do
|
|||
case "$1" in
|
||||
-h) opt_h=1 ;;
|
||||
-n) opt_n=1 ;;
|
||||
-r) opt_r=1 ;;
|
||||
-s) opt_s=1 ;;
|
||||
-u) opt_u=1 ;;
|
||||
-v) opt_v=1 ;;
|
||||
-x) EXCLUDE="$EXCLUDE $(echo $2 | sed 's/,/ /g')" ; shift ;;
|
||||
|
@ -255,6 +266,12 @@ if [ -n "$opt_h" ]; then
|
|||
usage
|
||||
fi
|
||||
|
||||
if [ -n "$opt_s" ]; then
|
||||
UNSAFE_VAR=unsafe_depends_strict
|
||||
else
|
||||
UNSAFE_VAR=unsafe_depends
|
||||
fi
|
||||
|
||||
MISMATCH_TODO=
|
||||
if [ -n "$opt_u" ]; then
|
||||
echo "${OPI} Checking for mismatched installed packages using pkg_chk"
|
||||
|
@ -267,8 +284,8 @@ fi
|
|||
echo "${OPI} Checking for rebuild-requested installed packages (rebuild=YES)"
|
||||
REBUILD_TODO=$(check_packages_w_flag 'rebuild')
|
||||
|
||||
echo "${OPI} Checking for unsafe installed packages (unsafe_depends=YES)"
|
||||
UNSAFE_TODO=$(check_packages_w_flag 'unsafe_depends')
|
||||
echo "${OPI} Checking for unsafe installed packages (${UNSAFE_VAR}=YES)"
|
||||
UNSAFE_TODO=$(check_packages_w_flag ${UNSAFE_VAR})
|
||||
|
||||
# DEPGRAPH_INSTALLED is rebuilt each round. DEPGRAPH_SRC will collect
|
||||
# edges that we discover using 'make show-depends', but that weren't
|
||||
|
@ -354,25 +371,31 @@ while [ -n "$REPLACE_TODO" ]; do
|
|||
|
||||
# Do make replace, with clean before, and package and clean afterwards.
|
||||
echo "${OPI} Replacing $(${PKG_INFO} -e $pkg)"
|
||||
FAIL=
|
||||
cmd="cd \"$PKGSRCDIR/$pkgdir\" \
|
||||
&& ${MAKE} clean && ${MAKE} replace \
|
||||
&& ([ -z \"$(${PKG_INFO} -Q unsafe_depends $pkg)\" ] \
|
||||
|| ${PKG_ADMIN} unset unsafe_depends $pkg) \
|
||||
&& ([ -z \"$(${PKG_INFO} -Q rebuild $pkg)\" ] \
|
||||
|| ${PKG_ADMIN} unset rebuild $pkg) \
|
||||
&& ${MAKE} package && ${MAKE} clean \
|
||||
|| FAIL=1"
|
||||
if [ -z "$opt_n" ]; then
|
||||
eval "$cmd"
|
||||
fail=
|
||||
cmd="cd \"$PKGSRCDIR/$pkgdir\" && ${MAKE} clean && ${MAKE} replace || fail=1"
|
||||
if [ -n "$opt_n" ]; then
|
||||
echo "${OPI} Would run: $cmd"
|
||||
else
|
||||
echo "$cmd"
|
||||
eval "$cmd"
|
||||
[ -z "$fail" ] || abort "'make replace' failed for package $pkg."
|
||||
fi
|
||||
if [ -z "$opt_n" ]; then
|
||||
[ -z "$(${PKG_INFO} -Q unsafe_depends_strict $pkg)" ] || \
|
||||
abort "package $pkg still has unsafe_depends_strict."
|
||||
[ -z "$(${PKG_INFO} -Q unsafe_depends $pkg)" ] || \
|
||||
abort "package $pkg still has unsafe_depends."
|
||||
[ -z "$(${PKG_INFO} -Q rebuild $pkg)" ] || \
|
||||
abort "package $pkg is still requested to be rebuilt."
|
||||
fi
|
||||
if [ -z "$opt_r" ]; then
|
||||
echo "${OPI} Packaging $(${PKG_INFO} -e $pkg)"
|
||||
cmd="${MAKE} package && ${MAKE} clean || fail=1"
|
||||
if [ -n "$opt_n" ]; then
|
||||
echo "${OPI} Would run: $cmd"
|
||||
else
|
||||
eval "$cmd"
|
||||
[ -z "$fail" ] || abort "'make package' failed for package $pkg."
|
||||
fi
|
||||
if [ -n "$FAIL" ]; then
|
||||
echo "*** 'make replace' failed for package $pkg."
|
||||
echo "*** Please read the errors listed above, fix the problem,"
|
||||
echo "*** then re-run pkg_rolling-replace to continue."
|
||||
exit 1
|
||||
fi
|
||||
sleep 1
|
||||
|
||||
|
@ -381,7 +404,7 @@ while [ -n "$REPLACE_TODO" ]; do
|
|||
REBUILD_TODO=$(exclude $pkg --from $REBUILD_TODO)
|
||||
UNSAFE_TODO=$(exclude $pkg --from $UNSAFE_TODO)
|
||||
|
||||
echo "${OPI} Re-checking for unsafe installed packages (unsafe_depends=YES)"
|
||||
echo "${OPI} Re-checking for unsafe installed packages (${UNSAFE_VAR}=YES)"
|
||||
if [ -n "$opt_n" ]; then
|
||||
# With -n, the replace didn't happen, and thus the packages that would
|
||||
# have been marked unsafe_depends=YES were not. Add the set that
|
||||
|
@ -391,7 +414,7 @@ while [ -n "$REPLACE_TODO" ]; do
|
|||
$(who_requires $pkg --in-graph $DEPGRAPH_INSTALLED))
|
||||
sleep 1
|
||||
else
|
||||
UNSAFE_TODO=$(check_packages_w_flag 'unsafe_depends')
|
||||
UNSAFE_TODO=$(check_packages_w_flag ${UNSAFE_VAR})
|
||||
fi
|
||||
|
||||
verbose "${OPI} Packages to rebuild:"
|
||||
|
|
Loading…
Reference in a new issue