diff options
author | David De La Harpe Golden (Squared Financial) <dgolden@squaredfinancial.com> | 2012-05-31 18:27:06 +0100 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2012-06-02 18:05:30 -0400 |
commit | 6e7aab39cced00eae03040753c85527aab573319 (patch) | |
tree | 30431d5c28204fe2797668bfa9b6691089ae383b | |
parent | 40eeedebb6be23035aea9d15aed1be706479ce79 (diff) |
Preserve unmanaged ignore file entries on uninit (#673996)
Signed-off-by: David De La Harpe Golden (Squared Financial) <dgolden@squaredfinancial.com>
-rw-r--r-- | etckeeper.8 | 5 | ||||
-rwxr-xr-x | init.d/50vcs-ignore | 2 | ||||
-rwxr-xr-x | uninit.d/01prompt | 2 | ||||
-rwxr-xr-x | uninit.d/50vcs-uninit | 34 | ||||
-rwxr-xr-x | update-ignore.d/01update-ignore | 10 |
5 files changed, 46 insertions, 7 deletions
diff --git a/etckeeper.8 b/etckeeper.8 index a49c4b6..6d3ffb2 100644 --- a/etckeeper.8 +++ b/etckeeper.8 @@ -41,10 +41,11 @@ repository. (You can also call this by hand after running dpkg by hand.) .B unclean This returns true if the directory contains uncommitted changes. .TP -.B update-ignore +.B update-ignore [-a] This updates the VCS ignore file. Content outside a "managed by etckeeper" block is not touched. This is generally run when upgrading to a new version -of etckeeper. +of etckeeper. (The -a switch will add a "managed by etckeeper" block if +one is not present.) .TP .B vcs subcommand [options ...] You can use this to run any subcommand of the VCS that etckeeper is diff --git a/init.d/50vcs-ignore b/init.d/50vcs-ignore index bcc88ba..33d79d3 100755 --- a/init.d/50vcs-ignore +++ b/init.d/50vcs-ignore @@ -1,4 +1,4 @@ #!/bin/sh set -e -etckeeper update-ignore || true +etckeeper update-ignore -a || true diff --git a/uninit.d/01prompt b/uninit.d/01prompt index 07f2e41..8b43937 100755 --- a/uninit.d/01prompt +++ b/uninit.d/01prompt @@ -3,7 +3,7 @@ set -e if [ "$1" != "-f" ]; then echo "** Warning: This will DESTROY all recorded history for $ETCKEEPER_DIR," - echo "** including the $VCS repository and ignore file." + echo "** including the $VCS repository." echo "" printf "Are you sure you want to do this? [yN] " read answer diff --git a/uninit.d/50vcs-uninit b/uninit.d/50vcs-uninit index eb9f13a..165d415 100755 --- a/uninit.d/50vcs-uninit +++ b/uninit.d/50vcs-uninit @@ -19,6 +19,38 @@ managed_by_etckeeper="managed by etckeeper" if ! grep -q "$managed_by_etckeeper" "$file"; then echo "etckeeper: "$file" does not contain \"$managed_by_etckeeper\" comment; not removing" + exit 0 else - rm -f $file + realfile="$file" + if [ -n "`type -p tempfile`" ]; then + tempfile="tempfile" + elif [ -n "`type -p mktemp`" ]; then + tempfile="mktemp" + else + echo "etckeeper warning: can't find tempfile or mktemp" >&2 + exit 1 + fi + file=$($tempfile) + otherentries= + skipping= + while read line; do + if echo "$line" | grep -q "$managed_by_etckeeper"; then + if [ ! "$skipping" ]; then + skipping=1 + else + skipping= + fi + elif [ ! "$skipping" ]; then + echo "$line" >> "$file" + otherentries=1 + fi + done <"$realfile" + + if [ "$otherentries" ]; then + echo "etckeeper: "$realfile" nonempty after \"$managed_by_etckeeper\" section removal; preserving other entries" + mv -f "$file" "$realfile" + else + rm -f "$file" + rm -f "$realfile" + fi fi diff --git a/update-ignore.d/01update-ignore b/update-ignore.d/01update-ignore index b6acf17..8cf524a 100755 --- a/update-ignore.d/01update-ignore +++ b/update-ignore.d/01update-ignore @@ -160,8 +160,14 @@ writefile () { if [ -e "$file" ]; then if ! grep -q "$managed_by_etckeeper" "$file"; then - echo "etckeeper: "$file" does not contain \"$managed_by_etckeeper\" comment; not updating" - exit 1 + if [ "$1" != "-a" ]; then + echo "etckeeper: "$file" does not contain \"$managed_by_etckeeper\" comment; not updating" + exit 1 + else + echo "etckeeper: "$file" exists but does not contain \"$managed_by_etckeeper\" comment; updating" + writefile + exit 0 + fi fi realfile="$file" if [ -n "`type -p tempfile`" ]; then |