repo-add: do not recreate the database if nothing was changed

Message ID 20221014041930.1894857-1-intelfx@intelfx.name
State Under Review
Headers show
Series repo-add: do not recreate the database if nothing was changed | expand

Commit Message

Ivan Shapovalov Oct. 14, 2022, 4:19 a.m. UTC
Signed-off-by: Ivan Shapovalov <intelfx@intelfx.name>
---

When `repo-add` is used to add a package that already exists in the
database, it will recompress the database unconditionally, even if
`--new` is passed. Avoid doing that.

 scripts/repo-add.sh.in | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

Patch

diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in
index 221abdc0..78195de1 100644
--- a/scripts/repo-add.sh.in
+++ b/scripts/repo-add.sh.in
@@ -44,6 +44,8 @@  USE_COLOR='y'
 PREVENT_DOWNGRADE=0
 INCLUDE_SIGS=0
 
+ENTRIES_CHANGED=0
+
 # Import libmakepkg
 source "$LIBRARY"/util/compress.sh
 source "$LIBRARY"/util/message.sh
@@ -343,6 +345,8 @@  db_write_entry() {
 		rm -f ${oldfile} ${oldfile}.sig
 	fi
 
+	(( ++ENTRIES_CHANGED ))
+
 	return 0
 } # end db_write_entry
 
@@ -365,6 +369,9 @@  db_remove_entry() {
 
 		pkgentry=$(find_pkgentry "$pkgname")
 	done
+	if [[ $notfound == 0 ]]; then
+		(( ++ENTRIES_CHANGED ))
+	fi
 	return $notfound
 } # end db_remove_entry
 
@@ -684,13 +691,13 @@  for arg in "${args[@]:1}"; do
 done
 
 # if the whole operation was a success, re-zip and rotate databases
-if (( !fail )); then
+if (( !fail )) && (( ENTRIES_CHANGED > 0 )); then
 	msg "$(gettext "Creating updated database file '%s'")" "$REPO_DB_FILE"
 	create_db
 	rotate_db
 else
 	msg "$(gettext "No packages modified, nothing to do.")"
-	exit 1
+	exit $(( fail != 0 ))
 fi
 
 exit 0