From 2f1a517a428849c0a252735bee1d5f59c8b13814 Mon Sep 17 00:00:00 2001 From: Maniack Crudelis Date: Tue, 12 Feb 2019 20:17:15 +0100 Subject: [PATCH 1/4] Print a diff of the files when backup by ynh_backup_if_checksum_is_different --- data/helpers.d/filesystem | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/data/helpers.d/filesystem b/data/helpers.d/filesystem index 88d51750b..903f4b6a0 100644 --- a/data/helpers.d/filesystem +++ b/data/helpers.d/filesystem @@ -352,7 +352,8 @@ ynh_backup_if_checksum_is_different () { local backup_file="/home/yunohost.conf/backup/$file.backup.$(date '+%Y%m%d.%H%M%S')" sudo mkdir -p "$(dirname "$backup_file")" sudo cp -a "$file" "$backup_file" # Backup the current file - echo "File $file has been manually modified since the installation or last upgrade. So it has been duplicated in $backup_file" >&2 + ynh_print_info "File $file has been manually modified since the installation or last upgrade. So it has been duplicated in $backup_file" + ynh_print_info "$(git diff --no-index --patch-with-stat $backup_file $file)" echo "$backup_file" # Return the name of the backup file fi fi From 73986ab10f2f44ceaff3c8f33460368461017066 Mon Sep 17 00:00:00 2001 From: Maniack Crudelis Date: Tue, 12 Feb 2019 21:47:40 +0100 Subject: [PATCH 2/4] Be clever... diff the file after modification... --- data/helpers.d/filesystem | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/data/helpers.d/filesystem b/data/helpers.d/filesystem index 903f4b6a0..3f2b69ed2 100644 --- a/data/helpers.d/filesystem +++ b/data/helpers.d/filesystem @@ -323,6 +323,12 @@ ynh_store_file_checksum () { local checksum_setting_name=checksum_${file//[\/ ]/_} # Replace all '/' and ' ' by '_' ynh_app_setting_set --app=$app --key=$checksum_setting_name --value=$(sudo md5sum "$file" | cut -d' ' -f1) + + if [ -n "${backup_file_checksum-}" ] + then + ynh_print_info "$(diff --report-identical-files --unified --color=always $backup_file_checksum $file)" + fi + unset backup_file_checksum } # Verify the checksum and backup the file if it's different @@ -345,16 +351,16 @@ ynh_backup_if_checksum_is_different () { local checksum_setting_name=checksum_${file//[\/ ]/_} # Replace all '/' and ' ' by '_' local checksum_value=$(ynh_app_setting_get --app=$app --key=$checksum_setting_name) + backup_file_checksum="" if [ -n "$checksum_value" ] then # Proceed only if a value was stored into the app settings if ! echo "$checksum_value $file" | sudo md5sum -c --status then # If the checksum is now different - local backup_file="/home/yunohost.conf/backup/$file.backup.$(date '+%Y%m%d.%H%M%S')" - sudo mkdir -p "$(dirname "$backup_file")" - sudo cp -a "$file" "$backup_file" # Backup the current file - ynh_print_info "File $file has been manually modified since the installation or last upgrade. So it has been duplicated in $backup_file" - ynh_print_info "$(git diff --no-index --patch-with-stat $backup_file $file)" - echo "$backup_file" # Return the name of the backup file + backup_file_checksum="/home/yunohost.conf/backup/$file.backup.$(date '+%Y%m%d.%H%M%S')" + sudo mkdir -p "$(dirname "$backup_file_checksum")" + sudo cp -a "$file" "$backup_file_checksum" # Backup the current file + ynh_print_info "File $file has been manually modified since the installation or last upgrade. So it has been duplicated in $backup_file_checksum" + echo "$backup_file_checksum" # Return the name of the backup file fi fi } From 6c925c04c334b3b17ebde3e5e461648e4e20d5a5 Mon Sep 17 00:00:00 2001 From: Maniack Crudelis Date: Tue, 12 Feb 2019 22:08:37 +0100 Subject: [PATCH 3/4] Fail with ynh_print_info --- data/helpers.d/filesystem | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/data/helpers.d/filesystem b/data/helpers.d/filesystem index 3f2b69ed2..713c3890b 100644 --- a/data/helpers.d/filesystem +++ b/data/helpers.d/filesystem @@ -324,10 +324,14 @@ ynh_store_file_checksum () { local checksum_setting_name=checksum_${file//[\/ ]/_} # Replace all '/' and ' ' by '_' ynh_app_setting_set --app=$app --key=$checksum_setting_name --value=$(sudo md5sum "$file" | cut -d' ' -f1) + # If backup_file_checksum isn't empty, ynh_backup_if_checksum_is_different has made a backup if [ -n "${backup_file_checksum-}" ] then - ynh_print_info "$(diff --report-identical-files --unified --color=always $backup_file_checksum $file)" + # Print the diff between the previous file and the new one. + # diff return 1 if the files are different, so the || true + diff --report-identical-files --unified --color=always $backup_file_checksum $file >&2 || true fi + # Unset the variable, so it wouldn't trig a ynh_store_file_checksum without a ynh_backup_if_checksum_is_different before it. unset backup_file_checksum } @@ -351,6 +355,7 @@ ynh_backup_if_checksum_is_different () { local checksum_setting_name=checksum_${file//[\/ ]/_} # Replace all '/' and ' ' by '_' local checksum_value=$(ynh_app_setting_get --app=$app --key=$checksum_setting_name) + # backup_file_checksum isn't declare as local, so it can be reuse by ynh_store_file_checksum backup_file_checksum="" if [ -n "$checksum_value" ] then # Proceed only if a value was stored into the app settings From 0e3f3159cb23735b3971ad5d0d5f531de03c3bf3 Mon Sep 17 00:00:00 2001 From: Maniack Crudelis Date: Sat, 16 Feb 2019 00:20:51 +0100 Subject: [PATCH 4/4] ynh_print_warn instead of info --- data/helpers.d/filesystem | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/helpers.d/filesystem b/data/helpers.d/filesystem index 713c3890b..10123dea4 100644 --- a/data/helpers.d/filesystem +++ b/data/helpers.d/filesystem @@ -364,7 +364,7 @@ ynh_backup_if_checksum_is_different () { backup_file_checksum="/home/yunohost.conf/backup/$file.backup.$(date '+%Y%m%d.%H%M%S')" sudo mkdir -p "$(dirname "$backup_file_checksum")" sudo cp -a "$file" "$backup_file_checksum" # Backup the current file - ynh_print_info "File $file has been manually modified since the installation or last upgrade. So it has been duplicated in $backup_file_checksum" + ynh_print_warn "File $file has been manually modified since the installation or last upgrade. So it has been duplicated in $backup_file_checksum" echo "$backup_file_checksum" # Return the name of the backup file fi fi