@@ -7,9 +7,9 @@ function backupApp() {
7
7
info " Backing up app $packageName to $baseDestFolder "
8
8
9
9
if [[ " ${APK} " != ' true' ]]; then
10
- backupFolder " /data/data/$packageName "
10
+ backupFolder " /data/data/${ packageName} " " ${baseDestFolder} /data/data "
11
11
12
- backupFolder " /sdcard/Android/data/$packageName "
12
+ backupFolder " /sdcard/Android/data/${ packageName} " " ${baseDestFolder} /sdcard/Android/data/ "
13
13
fi
14
14
15
15
if [[ " ${DATA} " != ' true' ]]; then
@@ -24,13 +24,13 @@ function backupApp() {
24
24
25
25
function backupFolder() {
26
26
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
+
31
29
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
34
34
fi
35
35
}
36
36
@@ -39,27 +39,36 @@ function restoreApp() {
39
39
# For now just assume folder name = package name. Reading from apk would be more defensive... and effort.
40
40
local packageName=${rootSrcFolder##*/ }
41
41
42
- info " Restoring app $packageName from $rootSrcFolder "
42
+ info " Restoring app ${ packageName} from ${ rootSrcFolder} "
43
43
44
44
if [[ " ${DATA} " != ' true' ]]; then
45
- installMultiple " $rootSrcFolder /"
45
+ installMultiple " ${ rootSrcFolder} /"
46
46
fi
47
47
48
48
if [[ " ${APK} " != ' true' ]]; then
49
49
user=$( stat -c ' %U' " /data/data/$packageName " )
50
50
group=$( stat -c ' %G' " /data/data/$packageName " )
51
51
52
- restoreFolder " ${rootSrcFolder} " " /data/data/ ${packageName} "
52
+ restoreFolder " ${rootSrcFolder} " " /data/data" " ${packageName} "
53
53
54
- restoreFolder " ${rootSrcFolder} " " /sdcard/Android/data/ ${packageName} "
54
+ restoreFolder " ${rootSrcFolder} " " /sdcard/Android/data" " ${packageName} "
55
55
fi
56
56
}
57
57
58
58
function restoreFolder() {
59
+ # e.g. /my/folder/backup/com.nxp.taginfolite
59
60
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} "
62
68
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
63
72
actualSourceFolderExists=false
64
73
if [[ " ${actualSrcFolder} " == * :* ]]; then
65
74
# ssh '[ -d /a/b/c ]'
@@ -74,10 +83,10 @@ function restoreFolder() {
74
83
fi
75
84
76
85
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 } "
81
90
else
82
91
info " Backup does not contain folder '${actualSrcFolder} '. Skipping"
83
92
fi
@@ -87,20 +96,15 @@ function restoreFolder() {
87
96
function excludeCache() {
88
97
if [[ " ${RCLONE} " == ' true' ]]; then
89
98
echo --filter=" - /cache/**"
90
- # echo --filter-from=<(echo "'- /cache/**'")
91
- # echo "--exclude='/cache/**'"
92
99
else
93
100
echo --exclude=' /cache'
94
101
fi
95
102
}
96
103
97
104
function includeOnlyApk() {
98
105
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"
104
108
else
105
109
echo -m --include=' */' --include=' *.apk' --exclude=' *'
106
110
fi
@@ -124,8 +128,6 @@ function doRclone() {
124
128
additionalArgs=${additionalArgs[@]: 2}
125
129
RSYNC_ARGS=${RSYNC_ARGS:- ' ' }
126
130
127
-
128
- # --progress \
129
131
sudo rclone sync \
130
132
$( rsyncExternalArgs) \
131
133
" ${additionalArgs} " \
0 commit comments