Page MenuHomeFreeBSD

D29846.id87834.diff
No OneTemporary

D29846.id87834.diff

diff --git a/usr.sbin/etcupdate/etcupdate.8 b/usr.sbin/etcupdate/etcupdate.8
--- a/usr.sbin/etcupdate/etcupdate.8
+++ b/usr.sbin/etcupdate/etcupdate.8
@@ -25,7 +25,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd November 27, 2018
+.Dd April 20, 2021
.Dt ETCUPDATE 8
.Os
.Sh NAME
@@ -69,6 +69,12 @@
.Op Fl D Ar destdir
.Op Fl L Ar logfile
.Nm
+.Cm revert
+.Op Fl d Ar workdir
+.Op Fl D Ar destdir
+.Op Fl L Ar logfile
+.Ar
+.Nm
.Cm status
.Op Fl d Ar workdir
.Op Fl D Ar destdir
@@ -342,6 +348,14 @@
.It (h) help
Display the list of commands.
.El
+.Ss Revert Mode
+The
+.Cm revert
+mode is used to restore the stock versions of files.
+In this mode,
+.Nm
+installs the stock version of requested files.
+This mode cannot be used to restore directories, only individual files.
.Ss Status Mode
The
.Cm status
@@ -880,14 +894,6 @@
.Pp
to resolve a specific conflict in an automated fashion.
.Pp
-It might be nice to have something like a
-.Sq revert
-command to replace a locally modified version of a file with the stock
-version of the file.
-For example:
-.Pp
-.Dl "etcupdate revert /etc/mail/freebsd.cf"
-.Pp
Bootstrapping
.Nm
often results in gratuitous diffs in
diff --git a/usr.sbin/etcupdate/etcupdate.sh b/usr.sbin/etcupdate/etcupdate.sh
--- a/usr.sbin/etcupdate/etcupdate.sh
+++ b/usr.sbin/etcupdate/etcupdate.sh
@@ -58,7 +58,6 @@
# TODO:
# - automatable conflict resolution
-# - a 'revert' command to make a file "stock"
usage()
{
@@ -72,6 +71,7 @@
etcupdate extract [-B] [-d workdir] [-s source | -t tarball] [-L logfile]
[-M options]
etcupdate resolve [-p] [-d workdir] [-D destdir] [-L logfile]
+ etcupdate revert [-d workdir] [-D destdir] [-L logfile] file ...
etcupdate status [-d workdir] [-D destdir]
EOF
exit 1
@@ -1415,6 +1415,47 @@
fi
}
+# Restore files to the stock version. Only files with a local change
+# are restored from the stock version.
+revert_cmd()
+{
+ local cmp file
+
+ if [ $# -eq 0 ]; then
+ usage
+ fi
+
+ for file; do
+ log "revert $file"
+
+ if ! [ -e $NEWTREE/$file ]; then
+ echo "File $file does not exist in the current tree."
+ exit 1
+ fi
+ if [ -d $NEWTREE/$file ]; then
+ echo "File $file is a directory."
+ exit 1
+ fi
+
+ compare $DESTDIR/$file $NEWTREE/$file
+ cmp=$?
+ if [ $cmp -eq $COMPARE_EQUAL ]; then
+ continue
+ fi
+
+ if update_unmodified $file; then
+ # If this file had a conflict, clean up the
+ # conflict.
+ if [ -e $CONFLICTS/$file ]; then
+ if ! rm $CONFLICTS/$file >&3 2>&1; then
+ echo "Failed to remove conflict " \
+ "for $file".
+ fi
+ fi
+ fi
+ done
+}
+
# Report a summary of the previous merge. Specifically, list any
# remaining conflicts followed by any warnings from the previous
# update.
@@ -1622,7 +1663,7 @@
command="update"
if [ $# -gt 0 ]; then
case "$1" in
- build|diff|extract|status|resolve)
+ build|diff|extract|status|resolve|revert)
command="$1"
shift
;;
@@ -1801,7 +1842,7 @@
usage
fi
;;
- build|diff|status)
+ build|diff|status|revert)
if [ -n "$dryrun" -o -n "$rerun" -o -n "$tarball" -o \
-n "$preworld" ]; then
usage
@@ -1835,7 +1876,7 @@
fi
case $command in
- diff|resolve|status)
+ diff|resolve|revert|status)
exec 3>>$LOGFILE
;;
*)

File Metadata

Mime Type
text/plain
Expires
Thu, Feb 6, 2:19 PM (21 h, 25 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16494573
Default Alt Text
D29846.id87834.diff (3 KB)

Event Timeline