Skip to content

Commit

Permalink
#9 Implement basic backup file paths
Browse files Browse the repository at this point in the history
Backward compatibility when restoring still missing.
  • Loading branch information
schnatterer committed Nov 19, 2021
1 parent bc2a16d commit 3586230
Showing 1 changed file with 29 additions and 27 deletions.
56 changes: 29 additions & 27 deletions scripts/backup/backup-lib.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ function backupApp() {
info "Backing up app $packageName to $baseDestFolder"

if [[ "${APK}" != 'true' ]]; then
backupFolder "/data/data/$packageName"
backupFolder "/data/data/${packageName}" "${baseDestFolder}/data/data"

backupFolder "/sdcard/Android/data/$packageName"
backupFolder "/sdcard/Android/data/${packageName}" "${baseDestFolder}/sdcard/Android/data/"
fi

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

function backupFolder() {
srcFolder="$1"
actualDestFolder="${baseDestFolder}/${srcFolder}"
additionalArgs=("$@")
# Treat all args after src and dst as addition rsync args
additionalArgs=${additionalArgs[@]:1}
rootDestFolder="$2"

if [[ -d "${srcFolder}" ]]; then
trace "Syncing ${srcFolder} to ${actualDestFolder}"
doSync "${srcFolder}/" "${actualDestFolder}" $(excludeCache) ${additionalArgs}
trace "Syncing ${srcFolder} to ${rootDestFolder}"
# Add --delete here to remove files ins dest that have been deleted
# This should also migrate from data/data/${packageName} to data/data
doSync "${srcFolder}/" "${rootDestFolder}" $(excludeCache) --delete
fi
}

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

info "Restoring app $packageName from $rootSrcFolder"
info "Restoring app ${packageName} from ${rootSrcFolder}"

if [[ "${DATA}" != 'true' ]]; then
installMultiple "$rootSrcFolder/"
installMultiple "${rootSrcFolder}/"
fi

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

restoreFolder "${rootSrcFolder}" "/data/data/${packageName}"
restoreFolder "${rootSrcFolder}" "/data/data" "${packageName}"

restoreFolder "${rootSrcFolder}" "/sdcard/Android/data/${packageName}"
restoreFolder "${rootSrcFolder}" "/sdcard/Android/data" "${packageName}"
fi
}

function restoreFolder() {
# e.g. /my/folder/backup/com.nxp.taginfolite
local rootSrcFolder="$1"
local destFolder="$2"
local actualSrcFolder="${rootSrcFolder}/${destFolder}"
# e.g. /data/data
local rootDestFolder="$2"
# e.g. com.nxp.taginfolite
local packageName="$3"

local actualSrcFolder="${rootSrcFolder}/${rootDestFolder}"
local actualDestFolder="${rootDestFolder}/${packageName}"

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

if [[ "${actualSourceFolderExists}" != 'false' ]]; then
trace "Restoring data to ${destFolder}"
doSync "${actualSrcFolder}/" "${destFolder}"
trace "Fixing owner/group ${user}:${group} in ${destFolder}"
sudo chown -R "${user}:${group}" "${destFolder}"
trace "Restoring data to ${actualDestFolder}"
doSync "${actualSrcFolder}/" "${actualDestFolder}"
trace "Fixing owner/group ${user}:${group} in ${actualDestFolder}"
sudo chown -R "${user}:${group}" "${actualDestFolder}"
else
info "Backup does not contain folder '${actualSrcFolder}'. Skipping"
fi
Expand All @@ -87,20 +96,15 @@ function restoreFolder() {
function excludeCache() {
if [[ "${RCLONE}" == 'true' ]]; then
echo --filter="- /cache/**"
#echo --filter-from=<(echo "'- /cache/**'")
#echo "--exclude='/cache/**'"
else
echo --exclude='/cache'
fi
}

function includeOnlyApk() {
if [[ "${RCLONE}" == 'true' ]]; then
#echo "--include='/*.apk'"
#echo -n --filter="+ /*.apk" --filter='- \*'
echo --filter-from=$LIB_DIR/rclone-apk-only-filter.txt
#echo --filter={+ /*.apk,- *}

# Avoid fuss with whitespaces inside the filter rules by importing them from a file
echo --filter-from="${LIB_DIR}/rclone-apk-only-filter.txt"
else
echo -m --include='*/' --include='*.apk' --exclude='*'
fi
Expand All @@ -124,8 +128,6 @@ function doRclone() {
additionalArgs=${additionalArgs[@]:2}
RSYNC_ARGS=${RSYNC_ARGS:-''}


#--progress \
sudo rclone sync \
$(rsyncExternalArgs) \
"${additionalArgs}" \
Expand Down

0 comments on commit 3586230

Please sign in to comment.