Skip to content

Commit 3586230

Browse files
committed
#9 Implement basic backup file paths
Backward compatibility when restoring still missing.
1 parent bc2a16d commit 3586230

File tree

1 file changed

+29
-27
lines changed

1 file changed

+29
-27
lines changed

scripts/backup/backup-lib.sh

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ function backupApp() {
77
info "Backing up app $packageName to $baseDestFolder"
88

99
if [[ "${APK}" != 'true' ]]; then
10-
backupFolder "/data/data/$packageName"
10+
backupFolder "/data/data/${packageName}" "${baseDestFolder}/data/data"
1111

12-
backupFolder "/sdcard/Android/data/$packageName"
12+
backupFolder "/sdcard/Android/data/${packageName}" "${baseDestFolder}/sdcard/Android/data/"
1313
fi
1414

1515
if [[ "${DATA}" != 'true' ]]; then
@@ -24,13 +24,13 @@ function backupApp() {
2424

2525
function backupFolder() {
2626
srcFolder="$1"
27-
actualDestFolder="${baseDestFolder}/${srcFolder}"
28-
additionalArgs=("$@")
29-
# Treat all args after src and dst as addition rsync args
30-
additionalArgs=${additionalArgs[@]:1}
27+
rootDestFolder="$2"
28+
3129
if [[ -d "${srcFolder}" ]]; then
32-
trace "Syncing ${srcFolder} to ${actualDestFolder}"
33-
doSync "${srcFolder}/" "${actualDestFolder}" $(excludeCache) ${additionalArgs}
30+
trace "Syncing ${srcFolder} to ${rootDestFolder}"
31+
# Add --delete here to remove files ins dest that have been deleted
32+
# This should also migrate from data/data/${packageName} to data/data
33+
doSync "${srcFolder}/" "${rootDestFolder}" $(excludeCache) --delete
3434
fi
3535
}
3636

@@ -39,27 +39,36 @@ function restoreApp() {
3939
# For now just assume folder name = package name. Reading from apk would be more defensive... and effort.
4040
local packageName=${rootSrcFolder##*/}
4141

42-
info "Restoring app $packageName from $rootSrcFolder"
42+
info "Restoring app ${packageName} from ${rootSrcFolder}"
4343

4444
if [[ "${DATA}" != 'true' ]]; then
45-
installMultiple "$rootSrcFolder/"
45+
installMultiple "${rootSrcFolder}/"
4646
fi
4747

4848
if [[ "${APK}" != 'true' ]]; then
4949
user=$(stat -c '%U' "/data/data/$packageName")
5050
group=$(stat -c '%G' "/data/data/$packageName")
5151

52-
restoreFolder "${rootSrcFolder}" "/data/data/${packageName}"
52+
restoreFolder "${rootSrcFolder}" "/data/data" "${packageName}"
5353

54-
restoreFolder "${rootSrcFolder}" "/sdcard/Android/data/${packageName}"
54+
restoreFolder "${rootSrcFolder}" "/sdcard/Android/data" "${packageName}"
5555
fi
5656
}
5757

5858
function restoreFolder() {
59+
# e.g. /my/folder/backup/com.nxp.taginfolite
5960
local rootSrcFolder="$1"
60-
local destFolder="$2"
61-
local actualSrcFolder="${rootSrcFolder}/${destFolder}"
61+
# e.g. /data/data
62+
local rootDestFolder="$2"
63+
# e.g. com.nxp.taginfolite
64+
local packageName="$3"
65+
66+
local actualSrcFolder="${rootSrcFolder}/${rootDestFolder}"
67+
local actualDestFolder="${rootDestFolder}/${packageName}"
6268

69+
# TODO build backward compatibility for backups create with old folder format
70+
# e.g. /my/folder/backup/com.nxp.taginfolite/data/data/com.nxp.taginfolite
71+
# This is not necessary for rclone, because rclone feature didn't exist with old folder format
6372
actualSourceFolderExists=false
6473
if [[ "${actualSrcFolder}" == *:* ]]; then
6574
# ssh '[ -d /a/b/c ]'
@@ -74,10 +83,10 @@ function restoreFolder() {
7483
fi
7584

7685
if [[ "${actualSourceFolderExists}" != 'false' ]]; then
77-
trace "Restoring data to ${destFolder}"
78-
doSync "${actualSrcFolder}/" "${destFolder}"
79-
trace "Fixing owner/group ${user}:${group} in ${destFolder}"
80-
sudo chown -R "${user}:${group}" "${destFolder}"
86+
trace "Restoring data to ${actualDestFolder}"
87+
doSync "${actualSrcFolder}/" "${actualDestFolder}"
88+
trace "Fixing owner/group ${user}:${group} in ${actualDestFolder}"
89+
sudo chown -R "${user}:${group}" "${actualDestFolder}"
8190
else
8291
info "Backup does not contain folder '${actualSrcFolder}'. Skipping"
8392
fi
@@ -87,20 +96,15 @@ function restoreFolder() {
8796
function excludeCache() {
8897
if [[ "${RCLONE}" == 'true' ]]; then
8998
echo --filter="- /cache/**"
90-
#echo --filter-from=<(echo "'- /cache/**'")
91-
#echo "--exclude='/cache/**'"
9299
else
93100
echo --exclude='/cache'
94101
fi
95102
}
96103

97104
function includeOnlyApk() {
98105
if [[ "${RCLONE}" == 'true' ]]; then
99-
#echo "--include='/*.apk'"
100-
#echo -n --filter="+ /*.apk" --filter='- \*'
101-
echo --filter-from=$LIB_DIR/rclone-apk-only-filter.txt
102-
#echo --filter={+ /*.apk,- *}
103-
106+
# Avoid fuss with whitespaces inside the filter rules by importing them from a file
107+
echo --filter-from="${LIB_DIR}/rclone-apk-only-filter.txt"
104108
else
105109
echo -m --include='*/' --include='*.apk' --exclude='*'
106110
fi
@@ -124,8 +128,6 @@ function doRclone() {
124128
additionalArgs=${additionalArgs[@]:2}
125129
RSYNC_ARGS=${RSYNC_ARGS:-''}
126130

127-
128-
#--progress \
129131
sudo rclone sync \
130132
$(rsyncExternalArgs) \
131133
"${additionalArgs}" \

0 commit comments

Comments
 (0)