You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
minmicrog/res/util/script-addon.sh

97 lines
2.2 KiB

#!/sbin/sh
#
# MinMicroG addon.d
#
# ADDOND_VERSION=2
save_files() {
cat <<EOL
@INSTALLLIST@
EOL
}
delete_files() {
cat <<EOL
@DEBLOATLIST@
EOL
}
log() { echo "$1"; }
abort() {
log " ";
log "!!! ERROR: $1";
log " ";
exit 1;
}
log " ";
log "=== MinMicroG addon.d script ===";
backuptool="";
for file in "/tmp/backuptool.functions" "/postinstall/tmp/backuptool.functions"; do
[ -f "$file" ] && { backuptool="$file"; break; }
done;
[ "$backuptool" ] || abort "could not find addon.d helper";
. "$backuptool" || abort "could not source addon.d helper ($backuptool)";
[ -f "$S/build.prop" ] || abort "could not find a ROM in $S";
sdk="$(grep ro.build.version.sdk "$S/build.prop" | head -n1 | cut -d= -f2)";
[ "$sdk" ] && [ "$sdk" -gt "0" ] || abort "could not find SDK";
translate_path() {
while read -r entry; do
if [ "$sdk" -lt 21 ]; then
[ "$(basename "$(dirname "$entry")").apk" = "$(basename "$entry")" ] && entry="$(dirname "$(dirname "$entry")")/$(basename "$entry")";
fi;
[ "$(basename "$(dirname "$entry")").apk" = "$(basename "$entry")" ] && entry="$(dirname "$entry")";
echo "${entry#/system/}";
done;
}
delete_file() {
rm -rf "$1";
}
case "$1" in
backup)
log " ";
log "Backing up...";
save_files | translate_path | while read -r object; do
[ "$object" ] && [ -e "$S/$object" ] || continue;
find "$S/$object" -type f | while read -r file; do
file="${file#$S/}";
backup_file "$S/$file";
log "BACKUPER: Object backed up ($file)";
done;
done;
;;
restore)
log " ";
log "Restoring...";
save_files | translate_path | while read -r object; do
[ "$object" ] && [ -e "$C/$S/$object" ] || continue;
find "$C/$S/$object" -type f | while read -r file; do
file="${file#$C/$S/}";
restore_file "$S/$file";
log "RESTORER: Object restored ($file)";
done;
done;
;;
post-restore)
log " ";
log "Debloating...";
delete_files | translate_path | while read -r object; do
[ "$object" ] && [ -e "$S/$object" ] || continue;
delete_file "$S/$object";
log "DEBLOATER: Object debloated ($object)";
done;
;;
esac;
log " ";
log "Done!";
log " ";