[pacman-dev] [PATCH 3/6] repo-add cleanup
Xavier Chantry
shiningxc at gmail.com
Thu Feb 26 15:06:14 EST 2009
Refactor the main loop, which was difficult to read.
Use case instead of if when appropriate.
Signed-off-by: Xavier Chantry <shiningxc at gmail.com>
---
scripts/repo-add.sh.in | 130 +++++++++++++++++++++++++----------------------
1 files changed, 69 insertions(+), 61 deletions(-)
diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in
index a967506..0006006 100644
--- a/scripts/repo-add.sh.in
+++ b/scripts/repo-add.sh.in
@@ -270,6 +270,58 @@ db_remove_entry() {
popd 2>&1 >/dev/null
} # end db_remove_entry
+check_repo_db()
+{
+ if [ -f "$REPO_DB_FILE" ]; then
+ if ! (bsdtar -tf "$REPO_DB_FILE" | grep -q "/desc"); then
+ error "$(gettext "Repository file '%s' is not a proper pacman database.")" "$REPO_DB_FILE"
+ exit 1
+ fi
+ msg "$(gettext "Extracting database to a temporary location...")"
+ bsdtar -xf "$REPO_DB_FILE" -C "$gstmpdir"
+ else
+ case "$cmd" in
+ repo-remove)
+ error "$(gettext "Repository file '%s' was not found.")" "$REPO_DB_FILE"
+ exit 1
+ ;;
+ repo-add)
+ # check if the file can be created (write permission, directory existence, etc)
+ if ! touch "$REPO_DB_FILE"; then
+ error "$(gettext "Repository file '%s' could not be created.")" "$REPO_DB_FILE"
+ exit 1
+ fi
+ rm -f "$REPO_DB_FILE"
+ ;;
+ esac
+ fi
+}
+
+add()
+{
+ pkgfile=$1
+ if [ ! -f "$1" ]; then
+ error "$(gettext "Package '%s' not found.")" "$pkgfile"
+ return 1
+ fi
+
+ if ! bsdtar -tf "$pkgfile" .PKGINFO 2>&1 >/dev/null; then
+ error "$(gettext "'%s' is not a package file, skipping")" "$pkgfile"
+ return 1
+ fi
+
+ msg "$(gettext "Adding package '%s'")" "$pkgfile"
+
+ db_write_entry "$pkgfile"
+}
+
+remove()
+{
+ msg "$(gettext "Searching for package '%s'...")" "$arg"
+
+ db_remove_entry "$arg"
+}
+
# PROGRAM START
# determine whether we have gettext; make it a no-op if we do not
@@ -279,17 +331,10 @@ if [ ! $(type -t gettext) ]; then
}
fi
-# check for help flags
-if [ "$1" = "-h" -o "$1" = "--help" ]; then
- usage
- exit 0
-fi
-
-# check for version flags
-if [ "$1" = "-V" -o "$1" = "--version" ]; then
- version
- exit 0
-fi
+case "$1" in
+ -h|--help) usage; exit 0;;
+ -V|--version) version; exit 0;;
+esac
# check for correct number of args
if [ $# -lt 2 ]; then
@@ -312,64 +357,27 @@ fi
success=0
# parse arguments
for arg in "$@"; do
- if [ "$arg" == "--force" -o "$arg" == "-f" ]; then
+ case "$arg" in
+ -q|--quiet) QUIET=1;;
+ -f|--force)
warning "$(gettext "the -f and --force options are no longer recognized")"
msg2 "$(gettext "use options=(force) in the PKGBUILD instead")"
- elif [ "$arg" == "--quiet" -o "$arg" == "-q" ]; then
- QUIET=1
- elif [ -z "$REPO_DB_FILE" ]; then
- REPO_DB_FILE="$arg"
- if [ -f "$REPO_DB_FILE" ]; then
- if ! (bsdtar -tf "$REPO_DB_FILE" | grep -q "/desc"); then
- error "$(gettext "Repository file '%s' is not a proper pacman database.")" "$REPO_DB_FILE"
- exit 1
- fi
- msg "$(gettext "Extracting database to a temporary location...")"
- bsdtar -xf "$REPO_DB_FILE" -C "$gstmpdir"
+ ;;
+ *)
+ if [ -z "$REPO_DB_FILE" ]; then
+ REPO_DB_FILE="$arg"
+ check_repo_db
else
case "$cmd" in
- repo-remove)
- error "$(gettext "Repository file '%s' was not found.")" "$REPO_DB_FILE"
- exit 1
- ;;
- repo-add)
- # check if the file can be created (write permission, directory existence, etc)
- if ! touch "$REPO_DB_FILE"; then
- error "$(gettext "Repository file '%s' could not be created.")" "$REPO_DB_FILE"
- exit 1
- fi
- rm -f "$REPO_DB_FILE"
- ;;
+ repo-add) add $arg && success=1 ;;
+ repo-remove) remove $arg && success=1 ;;
esac
fi
- else
- if [ "$cmd" == "repo-add" ]; then
- if [ -f "$arg" ]; then
- if ! bsdtar -tf "$arg" .PKGINFO 2>&1 >/dev/null; then
- error "$(gettext "'%s' is not a package file, skipping")" "$arg"
- else
- msg "$(gettext "Adding package '%s'")" "$arg"
-
- if db_write_entry "$arg"; then
- success=1
- fi
- fi
- else
- error "$(gettext "Package '%s' not found.")" "$arg"
- fi
- elif [ "$cmd" == "repo-remove" ]; then
- msg "$(gettext "Searching for package '%s'...")" "$arg"
-
- if db_remove_entry "$arg"; then
- success=1
- else
- error "$(gettext "Package matching '%s' not found.")" "$arg"
- fi
- fi
- fi
+ ;;
+ esac
done
-# if all operations were a success, re-zip database
+# if at least one operation was a success, re-zip database
if [ $success -eq 1 ]; then
msg "$(gettext "Creating updated database file '%s'")" "$REPO_DB_FILE"
--
1.6.1.3
More information about the pacman-dev
mailing list