The advantage in a normal puppy is that when processing ".wh." files, it searches all the lower branches, and only the actual branches, no matter what they are called.
Of course it also works if the lower branches are ordinary directories rather than mounted sfs files.
Here is the patch against tahrpup 6.0.2:
Code: Select all
--- snapmergepuppy.orig 2015-03-18 08:26:43.030087000 +1000
+++ snapmergepuppy 2015-05-15 13:42:36.359076293 +1000
@@ -57,19 +57,11 @@
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R7/bin"
WD="`pwd`"
-SNAP="/initrd/pup_rw"
+SNAP="`cat /sys/fs/aufs/si_*/br0 | head -1 | cut -f1 -d'='`"
cd $SNAP || exit 1
-if [ "$SAVE_LAYER" ]; then #defined in PUPSTATE
- BASE="/initrd${SAVE_LAYER}"
-else
- BASE="/initrd/pup_ro1"
-fi
-BASEMTP="`df-FULL --output=target "$BASE" | tail -1`"
-
-if [ -L $BASE ]; then #we have savefolder based on symbolic links
- BASE="`readlink -n -m $BASE`"
-fi
+BASE="`cat /sys/fs/aufs/si_*/br1 | head -1 | cut -f1 -d'='`"
+BASEMTP="`df-FULL --output=target \"$BASE\" | tail -1`"
# Precautions
[ $PUPMODE -eq 3 -o $PUPMODE -eq 7 -o $PUPMODE -eq 13 ] || { echo "Wrong PUPMODE ($PUPMODE)!"; exit 1; }
@@ -81,7 +73,12 @@
# WHITEOUTS
# =============================================================================
-SFSPoints=$( grep -o -E "/initrd/pup_ro[0-9]+|/initrd/pup_[ayz]" /proc/mounts ) #110206 Dougal: get a list of the sfs mountpoints SFR: increase amount of mountpoints (sfs_load can load >=10) and add pup_[ayz]
+for XFL in /sys/fs/aufs/si_*/br[0-9]* #get aufs branch list
+do
+ XFN="${XFL##*/}"
+ [ ${XFN:2} -lt 2 ] && continue
+ SFSPoints="${SFSPoints}`cat ${XFL} | cut -f1 -d'='` "
+done
find . -mount \( -regex '.*/\.wh\.[^/]*' -type f \) | sed -e 's/\.\///;s/\.wh\.//' |
while read -r N
gyro