summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Amadori <marco.amadori@gmail.com>2008-09-19 00:31:57 +0200
committerDaniel Baumann <daniel@debian.org>2011-03-09 17:48:02 +0100
commit64db924e2232aa8a2bee5aa177d647fcc1589a4c (patch)
tree8ba71dac07c858217efd29a67afe7cefa6e99c47
parentf4902b112fbd2ab8cafe6fd1827a941cfe20fb8c (diff)
downloadlive-boot-64db924e2232aa8a2bee5aa177d647fcc1589a4c.tar.gz
live-boot-64db924e2232aa8a2bee5aa177d647fcc1589a4c.zip
live-snapshot: fixed include-list handling.
* When "/etc/live-snapshot.list" is present, all standard files and directories listed there are saved on shutdown. Now it saves them only if they are modified, and also handles dangling symbolic links. This beaviour will be gentle to live-systems upgrades on the same hardware since new unmodified to-be-snapshotted files will be no more overwritten by old unnecessary saved cruft. It still does not handle removal of deleted files.
-rwxr-xr-xbin/live-snapshot38
1 files changed, 32 insertions, 6 deletions
diff --git a/bin/live-snapshot b/bin/live-snapshot
index f77541f..5606436 100755
--- a/bin/live-snapshot
+++ b/bin/live-snapshot
@@ -320,23 +320,49 @@ Mount_device ()
esac
}
+Entry_is_modified ()
+{
+ # Returns true if file exists and it is also present in "cow" directory
+ # This means it is modified in respect to read-only media, so it deserve
+ # to be saved
+
+ entry="${1}"
+
+ if [ -e "${entry}" ] || [ -L "${entry}" ]
+ then
+ if [ -e "${DEF_SNAP_COW}/${entry}" ] || [ -L "${DEF_SNAP_COW}/${entry}" ]
+ then
+ return 0
+ fi
+ fi
+ return 1
+}
+
Do_filelist ()
{
- # BUGS: supports only cpio.gz types right now
+ # BUGS: supports only cpio.gz types, and do not handle deleted files yet
+
TMP_FILELIST=$1
if [ -f "${SNAP_LIST}" ]
then
# Generate include list
for entry in $(cat "${SNAP_LIST}" | grep -v '^#.*$' | grep -v '^ *$')
do
- if [ -f "${entry}" ]
- then
- printf "%s\000" "${entry}" >> "${TMP_FILELIST}"
- elif [ -d "${entry}" ]
+ if [ -d "${entry}" ]
then
cd /
- find "${entry}" -print0 >> "${TMP_FILELIST}"
+ find "${entry}" | while read line
+ do
+ if Entry_is_modified "${line}"
+ then
+ printf "%s\000" "${line}" >> "${TMP_FILELIST}"
+ fi
+ done
cd "${OLDPWD}"
+ elif Entry_is_modified "${entry}"
+ then
+ # if file exists and it is modified
+ printf "%s\000" "${entry}" >> "${TMP_FILELIST}"
fi
done