summaryrefslogtreecommitdiffstats
path: root/scripts/repo-add.sh.in
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/repo-add.sh.in')
-rw-r--r--scripts/repo-add.sh.in105
1 files changed, 41 insertions, 64 deletions
diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in
index 32e3a301..b12188ce 100644
--- a/scripts/repo-add.sh.in
+++ b/scripts/repo-add.sh.in
@@ -34,7 +34,6 @@ REPO_DB_FILE=""
umask 0022
msg() {
- [ $QUIET -ne 0 ] && return
local mesg=$1; shift
printf "==> ${mesg}\n" "$@" >&1
}
@@ -68,8 +67,8 @@ repo-remove will update a package database by removing the package name\n\
specified on the command line from the given repo database. Multiple\n\
packages to remove can be specified on the command line.\n\n")"
printf "$(gettext "\
-The -q/--quiet flag to either program will force silent running except\n\
-in the case of warnings or errors.\n\n")"
+Use the -q/--quiet flag to minimize output to basic messages, warnings,\n\
+and errors\n\n")"
echo "$(gettext "Example: repo-add /path/to/repo.db.tar.gz pacman-3.0.0.pkg.tar.gz")"
echo "$(gettext "Example: repo-remove /path/to/repo.db.tar.gz kernel26")"
}
@@ -83,15 +82,6 @@ This is free software; see the source for copying conditions.\n\
There is NO WARRANTY, to the extent permitted by law.\n")"
}
-# test if a file is a repository DB
-test_repo_db_file () {
- if bsdtar -tf "$REPO_DB_FILE" | grep -q "/desc"; then
- return 0 # YES
- else
- return 1 # NO
- fi
-}
-
# write a list entry
# arg1 - Entry name
# arg2 - List
@@ -107,8 +97,8 @@ write_list_entry() {
# arg1 - path to delta
db_write_delta()
{
- # blank out all variables and set deltafile to absolute path
- local deltafile=$($realpath "$1")
+ # blank out all variables
+ local deltafile="$1"
local filename=$(basename "$deltafile")
local deltavars pkgname fromver tover arch csize md5sum
@@ -138,12 +128,12 @@ db_write_delta()
# arg1 - path to package
db_write_entry()
{
- # blank out all variables and set pkgfile to an absolute path
- local pkgfile=$($realpath "$1")
+ # blank out all variables
+ local pkgfile="$1"
local pkgname pkgver pkgdesc url builddate packager csize size \
group depend backup license replaces provides conflict force \
_groups _depends _backups _licenses _replaces _provides _conflicts \
- startdir optdepend _optdepends
+ startdir optdepend _optdepends md5sum
local OLDIFS="$IFS"
# IFS (field separator) is only the newline character
@@ -172,19 +162,23 @@ db_write_entry()
IFS=$OLDIFS
- # get compressed size of package
+ # get md5sum and compressed size of package
+ md5sum="$(openssl dgst -md5 "$pkgfile" | awk '{print $NF}')"
csize=$(@SIZECMD@ "$pkgfile")
- startdir=$(pwd)
- pushd "$gstmpdir" 2>&1 >/dev/null
-
# ensure $pkgname and $pkgver variables were found
if [ -z "$pkgname" -o -z "$pkgver" ]; then
error "$(gettext "Invalid package file '%s'.")" "$pkgfile"
- popd 2>&1 >/dev/null
return 1
fi
+ startdir=$(pwd)
+ pushd "$gstmpdir" 2>&1 >/dev/null
+
+ if [ -d "$pkgname-$pkgver" ]; then
+ warning "$(gettext "An entry for '%s' already existed")" "$pkgname-$pkgver"
+ fi
+
# remove an existing entry if it exists, ignore failures
db_remove_entry "$pkgname"
@@ -204,7 +198,7 @@ db_write_entry()
# compute checksums
msg2 "$(gettext "Computing md5 checksums...")"
- echo -e "%MD5SUM%\n$(openssl dgst -md5 "$pkgfile" | awk '{print $NF}')\n" >>desc
+ echo -e "%MD5SUM%\n$md5sum\n" >>desc
[ -n "$url" ] && echo -e "%URL%\n$url\n" >>desc
write_list_entry "LICENSE" "$_licenses" "desc"
@@ -222,6 +216,7 @@ db_write_entry()
write_list_entry "OPTDEPENDS" "$_optdepends" "depends"
# create deltas entry if there are delta files
+ # Xav : why should deltas be in $startdir?
for delta in $startdir/$pkgname-*-*_to_*-*-$arch.delta; do
# This for loop also pulls in all files that start with the current package
# name and are followed by a -whatever. For instance, running this loop for
@@ -247,11 +242,15 @@ db_write_entry()
# add the final newline
[ -f "deltas" ] && echo -e "" >>deltas
+ popd 2>&1 >/dev/null
+
# preserve the modification time
- touch -r "$pkgfile" desc depends
- [ -f "deltas" ] && touch -r "$pkgfile" deltas
+ # Xav : what for?
+ pkgdir="$gstmpdir/$pkgname-$pkgver"
+ touch -r "$pkgfile" "$pkgdir/desc" "$pkgdir/depends"
+ [ -f "$pkgdir/deltas" ] && touch -r "$pkgfile" "$pkgdir/deltas"
- popd 2>&1 >/dev/null
+ return 0
} # end db_write_entry
# remove existing entries from the DB
@@ -298,28 +297,6 @@ if [ $# -lt 2 ]; then
exit 1
fi
-# check for and store the name of a realpath-like program
-if [ $(type -t realpath) ]; then
- realpath='realpath'
-elif [ $(type -t readlink) ]; then
- realpath='readlink -f'
-else
- error "$(gettext "Either realpath or readlink are required by repo-add.")"
- exit 1 # $E_MISSING_PROGRAM
-fi
-
-# source system and user makepkg.conf
-if [ -r "$confdir/makepkg.conf" ]; then
- source "$confdir/makepkg.conf"
-else
- error "$(gettext "%s not found. Cannot continue.")" "$confdir/makepkg.conf"
- exit 1 # $E_CONFIG_ERROR
-fi
-
-if [ -r ~/.makepkg.conf ]; then
- source ~/.makepkg.conf
-fi
-
# main routine
gstmpdir=$(mktemp -d /tmp/repo-tools.XXXXXXXXXX) || (\
error "$(gettext "Cannot create temp directory for database building.")"; \
@@ -341,10 +318,9 @@ for arg in "$@"; do
elif [ "$arg" == "--quiet" -o "$arg" == "-q" ]; then
QUIET=1
elif [ -z "$REPO_DB_FILE" ]; then
- # store absolute path to repo DB
- REPO_DB_FILE=$($realpath "$arg")
+ REPO_DB_FILE="$arg"
if [ -f "$REPO_DB_FILE" ]; then
- if ! test_repo_db_file $cmd; 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
@@ -384,26 +360,27 @@ done
# if all operations were a success, re-zip database
if [ $success -eq 1 ]; then
msg "$(gettext "Creating updated database file '%s'")" "$REPO_DB_FILE"
- pushd "$gstmpdir" 2>&1 >/dev/null
- if [ -n "$(ls)" ]; then
- [ -f "${REPO_DB_FILE}.old" ] && rm "${REPO_DB_FILE}.old"
- [ -f "$REPO_DB_FILE" ] && mv "$REPO_DB_FILE" "${REPO_DB_FILE}.old"
+ case "$REPO_DB_FILE" in
+ *tar.gz) TAR_OPT="z" ;;
+ *tar.bz2) TAR_OPT="j" ;;
+ *) warning "$(gettext "'%s' does not have a valid archive extension.")" \
+ "$REPO_DB_FILE" ;;
+ esac
- case "$DB_COMPRESSION" in
- gz) TAR_OPT="z" ;;
- bz2) TAR_OPT="j" ;;
- *) warning "$(gettext "No compression set.")" ;;
- esac
+ filename=$(basename "$REPO_DB_FILE")
- bsdtar -c${TAR_OPT}f "$REPO_DB_FILE" *
+ pushd "$gstmpdir" 2>&1 >/dev/null
+ if [ -n "$(ls)" ]; then
+ bsdtar -c${TAR_OPT}f "$filename" *
else
- # we should only end up with an empty db after a remove of the last package in the database
+ # 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"
- rm "$REPO_DB_FILE"
fi
-
popd 2>&1 >/dev/null
+
+ [ -f "$REPO_DB_FILE" ] && mv -f "$REPO_DB_FILE" "${REPO_DB_FILE}.old"
+ [ -f "$gstmpdir/$filename" ] && mv "$gstmpdir/$filename" "$REPO_DB_FILE"
else
msg "$(gettext "No packages modified, nothing to do.")"
fi