From 9e16ec69c9d127b9c7dfb0e39d0fd9348c37d082 Mon Sep 17 00:00:00 2001 From: olf Date: Tue, 4 Jan 2022 02:45:36 +0100 Subject: [PATCH 1/7] Do convert multiple libpath references Re-do commit b1fea73 --- src/tools/pm_apply | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/tools/pm_apply b/src/tools/pm_apply index 750f1640..298b14f9 100644 --- a/src/tools/pm_apply +++ b/src/tools/pm_apply @@ -122,14 +122,16 @@ mangle_libpath() { pr=$(printf '%s' "$p" | sed 's@/usr/lib/@/usr/lib64/@') fi # doit - mkdir -p "$PM_PATCH_BACKUP_DIR" - patch_edited_path="$PM_PATCH_BACKUP_DIR"/"$PATCH_EDITED_NAME" - printf '#\n# Patch converted to %sbit library paths from its original by Patchmanager > 3.1\n# Date: %s\n#\n' $SYS_BITNESS $(date -Iseconds) > "$patch_edited_path" - sed "s@^+++ $p@+++ $pr@;s@^--- $p@--- $pr@" "$PATCH_PATH" >> "$patch_edited_path" + if [ $found -eq $cand_lines ]; then # first run in loop + mkdir -p "$PM_PATCH_BACKUP_DIR" + patch_edited_path="$PM_PATCH_BACKUP_DIR"/"$PATCH_EDITED_NAME" + printf '#\n# Patch converted to %sbit library paths from its original by Patchmanager > 3.1\n# Date: %s\n#\n' $SYS_BITNESS $(date -Iseconds) > "$patch_edited_path" + cat "$PATCH_PATH" >> "$patch_edited_path" + fi + sed -i "s@^+++ $p@+++ $pr@;s@^--- $p@--- $pr@" "$patch_edited_path" # patch the Patch if [ $? -ne 0 ]; then failure fi - break done if [ $found -eq 0 ]; then log From dd1a2116031d3bd52166798ba65dd2fc4ddbe0ab Mon Sep 17 00:00:00 2001 From: olf Date: Tue, 4 Jan 2022 02:52:34 +0100 Subject: [PATCH 2/7] Simplify code Re-do and fix commit 2a1f08b --- src/tools/pm_apply | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/tools/pm_apply b/src/tools/pm_apply index 298b14f9..077ac232 100644 --- a/src/tools/pm_apply +++ b/src/tools/pm_apply @@ -125,13 +125,10 @@ mangle_libpath() { if [ $found -eq $cand_lines ]; then # first run in loop mkdir -p "$PM_PATCH_BACKUP_DIR" patch_edited_path="$PM_PATCH_BACKUP_DIR"/"$PATCH_EDITED_NAME" - printf '#\n# Patch converted to %sbit library paths from its original by Patchmanager > 3.1\n# Date: %s\n#\n' $SYS_BITNESS $(date -Iseconds) > "$patch_edited_path" - cat "$PATCH_PATH" >> "$patch_edited_path" - fi - sed -i "s@^+++ $p@+++ $pr@;s@^--- $p@--- $pr@" "$patch_edited_path" # patch the Patch - if [ $? -ne 0 ]; then - failure + printf '#\n# Patch converted to %sbit library paths from its original by Patchmanager > 3.1\n# Date: %s\n#\n' $SYS_BITNESS $(date -Iseconds) \ + | cat - "$PATCH_PATH" > "$patch_edited_path" fi + sed -i "s@^+++ $p@+++ $pr@;s@^--- $p@--- $pr@" "$patch_edited_path" || failure || true # patch the Patch done if [ $found -eq 0 ]; then log From 77a6df183feb03409c290f3456f30cebb625e0b2 Mon Sep 17 00:00:00 2001 From: olf Date: Wed, 12 Jan 2022 02:08:01 +0100 Subject: [PATCH 3/7] [pm_apply] Let log output be more expressive and consistent Counterpart to MR #226 --- src/tools/pm_apply | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/tools/pm_apply b/src/tools/pm_apply index 077ac232..f38f7cd0 100644 --- a/src/tools/pm_apply +++ b/src/tools/pm_apply @@ -181,8 +181,8 @@ create_backup_patch() { mkdir -p "$PM_PATCH_BACKUP_DIR" > /dev/null 2>&1 cp -f "$PATCH_DIR/$PATCH_NAME" "$PM_PATCH_BACKUP_DIR" > /dev/null 2>&1 - log "Created backup" - log " backup: $PM_PATCH_BACKUP_DIR" + log "Created backup: $PM_PATCH_BACKUP_DIR" + log } # @@ -192,12 +192,12 @@ create_backup_patch() { mkdir -p "$PM_VAR_DIR" > /dev/null 2>&1 if [ ! -f "$PM_LOG_FILE" ]; then - log "*** Patch Log Created by Apply $(date) ***" + log "*** Patch-log created by pm_apply script $(date) ***" fi log log "----------------------------------" -log "PM APPLY $(date)" +log "pm_apply $(date)" log "----------------------------------" log @@ -210,12 +210,12 @@ fi log if [ ! -x "$PATCH_EXEC" ]; then - log "ERROR: Cannot find $PATCH_EXEC" + log "ERROR: Cannot find patch executable $PATCH_EXEC" failure fi if [ -z "$PATCH_DIR" ]; then - log "ERROR: PATCH_DIR must be given for installing" + log "ERROR: PATCH_DIR must be provided for installing!" failure fi @@ -225,7 +225,7 @@ if [ ! -d "$PATCH_DIR" ]; then fi if [ ! -f "$PATCH_PATH" ]; then - log "ERROR: Cannot find patch file !" + log "ERROR: Cannot find patch file!" failure fi From f6af3d498f0dd6411e86a03cfb2843e8e40acbe0 Mon Sep 17 00:00:00 2001 From: olf Date: Wed, 12 Jan 2022 03:15:49 +0100 Subject: [PATCH 4/7] [pm_apply] Enhance checks&balances and debug output Counterpart of MR #228 --- src/tools/pm_apply | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/src/tools/pm_apply b/src/tools/pm_apply index f38f7cd0..44f2c191 100644 --- a/src/tools/pm_apply +++ b/src/tools/pm_apply @@ -9,6 +9,7 @@ PM_VAR_DIR="/tmp/patchmanager3" PATCH_ROOT_DIR="/usr/share/patchmanager/patches" # Paths / Files +PARAMETER="$1" PATCH_DIR="$PATCH_ROOT_DIR/$1" PM_LOG_FILE="$PM_VAR_DIR/patchmanager.log" @@ -192,37 +193,34 @@ create_backup_patch() { mkdir -p "$PM_VAR_DIR" > /dev/null 2>&1 if [ ! -f "$PM_LOG_FILE" ]; then - log "*** Patch-log created by pm_apply script $(date) ***" + log "*** Patch-log created by pm_apply script $(date -Iseconds) ***" fi log log "----------------------------------" -log "pm_apply $(date)" +log "pm_apply $(date -Iseconds)" log "----------------------------------" log -log "$(basename "$PATCH_DIR")" +if [ -z "$PARAMETER" ]; then + log "ERROR: A parameter must be provided for applying!" + failure +fi -if [ -f "$PATCH_PATH" ]; then - log " contains text patch" +if [ ! -d "$PATCH_DIR" ]; then + log "ERROR: $PATCH_DIR is not a directory or does not exist!" + failure fi +log "$(basename "$PATCH_DIR")" log if [ ! -x "$PATCH_EXEC" ]; then - log "ERROR: Cannot find patch executable $PATCH_EXEC" + log "ERROR: Cannot use patch executable ${PATCH_EXEC}!" failure fi -if [ -z "$PATCH_DIR" ]; then - log "ERROR: PATCH_DIR must be provided for installing!" - failure -fi - -if [ ! -d "$PATCH_DIR" ]; then - log "ERROR: $PATCH_DIR is not a directory or does not exist!" - failure -fi +log "Using patch file: $PATCH_PATH" if [ ! -f "$PATCH_PATH" ]; then log "ERROR: Cannot find patch file!" From 7108079a19b283d7c7eed265ad6b0137e91a3e5c Mon Sep 17 00:00:00 2001 From: Peter G Date: Sun, 16 Jan 2022 15:17:18 +0100 Subject: [PATCH 5/7] pm_apply: improve regexp (#237) --- src/tools/pm_apply | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/tools/pm_apply b/src/tools/pm_apply index 44f2c191..54b0c5cb 100644 --- a/src/tools/pm_apply +++ b/src/tools/pm_apply @@ -102,8 +102,8 @@ mangle_libpath() { fi for p in $candidates; do - totl_lines=$(grep -c "^+++" "$PATCH_PATH") - cand_lines=$(grep -c "^+++ $p" "$PATCH_PATH") + totl_lines=$(grep -c "^\+\+\+" "$PATCH_PATH") + cand_lines=$(grep -c "^\+\+\+ [^/]*$p" "$PATCH_PATH") if [ $cand_lines -eq 0 ]; then continue # nothing found, try next else @@ -114,7 +114,7 @@ mangle_libpath() { fi fi log "found: ${p}, replacing libpath references" - + # prepare the replacement pattern pr="" if [ $SYS_BITNESS -eq 32 ]; then @@ -129,7 +129,7 @@ mangle_libpath() { printf '#\n# Patch converted to %sbit library paths from its original by Patchmanager > 3.1\n# Date: %s\n#\n' $SYS_BITNESS $(date -Iseconds) \ | cat - "$PATCH_PATH" > "$patch_edited_path" fi - sed -i "s@^+++ $p@+++ $pr@;s@^--- $p@--- $pr@" "$patch_edited_path" || failure || true # patch the Patch + sed -i "s@^\+\+\+ \([^/]*\)$p@+++ \1$pr@;s@^--- \([^/]*\)$p@--- \1$pr@" "$patch_edited_path" || failure || true # patch the Patch done if [ $found -eq 0 ]; then log From f3df007d0315d0cdbdffd69beb1cfbd6b57531aa Mon Sep 17 00:00:00 2001 From: olf Date: Sun, 16 Jan 2022 20:01:39 +0100 Subject: [PATCH 6/7] (Re-)move misplaced log output and counter initialisation (#239) --- src/tools/pm_apply | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/tools/pm_apply b/src/tools/pm_apply index 54b0c5cb..d65d0df2 100644 --- a/src/tools/pm_apply +++ b/src/tools/pm_apply @@ -46,11 +46,6 @@ log() { echo "$@" | tee -a "$PM_LOG_FILE" } -log "Mangle candidates" -log $MANGLE_CANDIDATES -log "Disable mangling" -log $DISABLE_MANGLING - failure() { log log "*** FAILED ***" @@ -93,14 +88,16 @@ mangle_libpath() { log "----------------------------------" log - found=0 candidates="$MANGLE_CANDIDATES" if [ $SYS_BITNESS -eq 32 ]; then # first, convert the candidate list - # variable expansion ${foo/lib/lib64} would work on bash, but not POSIX/ash/busybox - candidates=$(printf '%s' "$MANGLE_CANDIDATES" | sed 's@/usr/lib/@/usr/lib64/@g' ) + # variable expansion ${foo/lib/lib64} would work on bash, but not POSIX sh or busybox's ash + candidates=$(printf '%s' "$MANGLE_CANDIDATES" | sed 's@/usr/lib/@/usr/lib64/@g') fi + log "Mangle candidates: $candidates" + log + found=0 for p in $candidates; do totl_lines=$(grep -c "^\+\+\+" "$PATCH_PATH") cand_lines=$(grep -c "^\+\+\+ [^/]*$p" "$PATCH_PATH") From a0b70894f6f5c0fbb4d5756fe90a13133a35bd85 Mon Sep 17 00:00:00 2001 From: olf Date: Sun, 16 Jan 2022 20:19:37 +0100 Subject: [PATCH 7/7] [pm_apply] De-indent the whole function mangle_libpath MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit … by two space characters --- src/tools/pm_apply | 109 ++++++++++++++++++++++----------------------- 1 file changed, 54 insertions(+), 55 deletions(-) diff --git a/src/tools/pm_apply b/src/tools/pm_apply index d65d0df2..91d5aa8a 100644 --- a/src/tools/pm_apply +++ b/src/tools/pm_apply @@ -80,66 +80,65 @@ test_if_applied() { # see issue #71: https://github.com/sailfishos-patches/patchmanager/issues/71 mangle_libpath() { - if [ -f "$PATCH_PATH" ]; then - log - log "----------------------------------" - [ $SYS_BITNESS -eq 32 ] && log "Checking paths for 32->64bit conversion" - [ $SYS_BITNESS -eq 64 ] && log "Checking paths for 64->32bit conversion" - log "----------------------------------" - log + if [ -f "$PATCH_PATH" ]; then + log + log "----------------------------------" + [ $SYS_BITNESS -eq 32 ] && log "Checking paths for 32->64bit conversion" + [ $SYS_BITNESS -eq 64 ] && log "Checking paths for 64->32bit conversion" + log "----------------------------------" + log - candidates="$MANGLE_CANDIDATES" - if [ $SYS_BITNESS -eq 32 ]; then - # first, convert the candidate list - # variable expansion ${foo/lib/lib64} would work on bash, but not POSIX sh or busybox's ash - candidates=$(printf '%s' "$MANGLE_CANDIDATES" | sed 's@/usr/lib/@/usr/lib64/@g') - fi - log "Mangle candidates: $candidates" - log + candidates="$MANGLE_CANDIDATES" + if [ $SYS_BITNESS -eq 32 ]; then + # first, convert the candidate list + # variable expansion ${foo/lib/lib64} would work on bash, but not POSIX sh or busybox's ash + candidates=$(printf '%s' "$MANGLE_CANDIDATES" | sed 's@/usr/lib/@/usr/lib64/@g') + fi + log "Mangle candidates: $candidates" + log - found=0 - for p in $candidates; do - totl_lines=$(grep -c "^\+\+\+" "$PATCH_PATH") - cand_lines=$(grep -c "^\+\+\+ [^/]*$p" "$PATCH_PATH") - if [ $cand_lines -eq 0 ]; then - continue # nothing found, try next - else - found=$(( $found + $cand_lines )) - if [ $totl_lines -ne $cand_lines ]; then - # if there are several references in the patch file our mangling might do too much and cause the patch to fail. - log "WARNING: mixed patch, conversion might not work" - fi - fi - log "found: ${p}, replacing libpath references" - - # prepare the replacement pattern - pr="" - if [ $SYS_BITNESS -eq 32 ]; then - pr=$(printf '%s' "$p" | sed 's@/usr/lib64/@/usr/lib/@') - elif [ $SYS_BITNESS -eq 64 ]; then - pr=$(printf '%s' "$p" | sed 's@/usr/lib/@/usr/lib64/@') - fi - # doit - if [ $found -eq $cand_lines ]; then # first run in loop - mkdir -p "$PM_PATCH_BACKUP_DIR" - patch_edited_path="$PM_PATCH_BACKUP_DIR"/"$PATCH_EDITED_NAME" - printf '#\n# Patch converted to %sbit library paths from its original by Patchmanager > 3.1\n# Date: %s\n#\n' $SYS_BITNESS $(date -Iseconds) \ - | cat - "$PATCH_PATH" > "$patch_edited_path" - fi - sed -i "s@^\+\+\+ \([^/]*\)$p@+++ \1$pr@;s@^--- \([^/]*\)$p@--- \1$pr@" "$patch_edited_path" || failure || true # patch the Patch - done - if [ $found -eq 0 ]; then - log - log "OK, found nothing to convert." - log + found=0 + for p in $candidates; do + totl_lines=$(grep -c "^\+\+\+" "$PATCH_PATH") + cand_lines=$(grep -c "^\+\+\+ [^/]*$p" "$PATCH_PATH") + if [ $cand_lines -eq 0 ]; then + continue # nothing found, try next else - log - log "OK, replaced $found libpath references and created: $patch_edited_path" - log - # set the patch to apply to the new one: - PATCH_PATH="$patch_edited_path" + found=$(( $found + $cand_lines )) + if [ $totl_lines -ne $cand_lines ]; then + # if there are several references in the patch file our mangling might do too much and cause the patch to fail. + log "WARNING: mixed patch, conversion might not work" + fi + fi + log "found: ${p}, replacing libpath references" + # prepare the replacement pattern + pr="" + if [ $SYS_BITNESS -eq 32 ]; then + pr=$(printf '%s' "$p" | sed 's@/usr/lib64/@/usr/lib/@') + elif [ $SYS_BITNESS -eq 64 ]; then + pr=$(printf '%s' "$p" | sed 's@/usr/lib/@/usr/lib64/@') fi + # doit + if [ $found -eq $cand_lines ]; then # first run in loop + mkdir -p "$PM_PATCH_BACKUP_DIR" + patch_edited_path="$PM_PATCH_BACKUP_DIR"/"$PATCH_EDITED_NAME" + printf '#\n# Patch converted to %sbit library paths from its original by Patchmanager > 3.1\n# Date: %s\n#\n' $SYS_BITNESS $(date -Iseconds) \ + | cat - "$PATCH_PATH" > "$patch_edited_path" + fi + sed -i "s@^\+\+\+ \([^/]*\)$p@+++ \1$pr@;s@^--- \([^/]*\)$p@--- \1$pr@" "$patch_edited_path" || failure || true # patch the Patch + done + if [ $found -eq 0 ]; then + log + log "OK, found nothing to convert." + log + else + log + log "OK, replaced $found libpath references and created: $patch_edited_path" + log + # set the patch to apply to the new one: + PATCH_PATH="$patch_edited_path" fi + fi } verify_text_patch() {