summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2009-09-23 21:15:53 -0500
committerDan McGee <dan@archlinux.org>2009-09-23 21:15:53 -0500
commit7f14f185a2d05650e1f99f4ec40d60b597e8b0c7 (patch)
tree4790c21396586a7f61f7d78350bdba0e35e18c43
parent20aa17c276c35e08c7a8e2aa20410b99a20f8129 (diff)
downloadpacman-7f14f185a2d05650e1f99f4ec40d60b597e8b0c7.tar.xz
repo-remove: create empty DB when all packages are removed
Rather than creating no database at all, create an empty zipped tar archive in its place. This keeps the download side of repositories a bit more sane as a DB will always exist, and pacman handles this empty case just fine. For this to be fully transparent, we also need to make sure repo-add and repo-remove accept an empty "DB" as an argument, which in reality is a completely void of files .tar.{gz,bz2,xz} archive. Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r--scripts/repo-add.sh.in16
1 files changed, 11 insertions, 5 deletions
diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in
index a1e5f7f4..c8380c4e 100644
--- a/scripts/repo-add.sh.in
+++ b/scripts/repo-add.sh.in
@@ -306,9 +306,14 @@ check_repo_db()
fi
if [ -f "$REPO_DB_FILE" ]; then
- if ! bsdtar -tqf "$REPO_DB_FILE" '*/desc' 2>&1 >/dev/null; then
- error "$(gettext "Repository file '%s' is not a proper pacman database.")" "$REPO_DB_FILE"
- exit 1
+ # there are two situations we can have here- a DB with some entries,
+ # or a DB with no contents at all.
+ if ! bsdtar -tqf "$REPO_DB_FILE" '*/desc' >/dev/null 2>&1; then
+ # check empty case
+ if [ -n "$(bsdtar -tqf "$REPO_DB_FILE" '*' 2>/dev/null)" ]; then
+ error "$(gettext "Repository file '%s' is not a proper pacman database.")" "$REPO_DB_FILE"
+ exit 1
+ fi
fi
msg "$(gettext "Extracting database to a temporary location...")"
bsdtar -xf "$REPO_DB_FILE" -C "$tmpdir"
@@ -484,8 +489,9 @@ if [ $success -eq 1 ]; then
if [ -n "$(ls)" ]; then
bsdtar -c${TAR_OPT}f "$filename" *
else
- # the database will be moved to .old below, and there will be no new one to replace it
- error "$(gettext "All packages have been removed from the database. Deleting '%s'.")" "$REPO_DB_FILE"
+ # we have no packages remaining? zip up some emptyness
+ warning "$(gettext "No packages remain, creating empty database.")"
+ bsdtar -c${TAR_OPT}f "$filename" -T /dev/null
fi
cd "$startdir"