summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/.gitignore2
-rw-r--r--scripts/Makefile.am31
-rw-r--r--scripts/gensync.sh.in169
-rw-r--r--scripts/makepkg.sh.in334
-rw-r--r--scripts/repo-add.sh.in154
-rw-r--r--scripts/repo-remove.sh.in191
-rw-r--r--scripts/updatesync.sh.in172
7 files changed, 295 insertions, 758 deletions
diff --git a/scripts/.gitignore b/scripts/.gitignore
index 53164a41..f2f19fd8 100644
--- a/scripts/.gitignore
+++ b/scripts/.gitignore
@@ -1,7 +1,5 @@
-gensync
makepkg
pacman-optimize
rankmirrors
repo-add
repo-remove
-updatesync
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
index 24b9c12d..7dccff9d 100644
--- a/scripts/Makefile.am
+++ b/scripts/Makefile.am
@@ -2,33 +2,38 @@
AUTOMAKE_OPTIONS = std-options
bin_SCRIPTS = \
- gensync \
+ $(OURSCRIPTS) \
+ repo-remove
+
+OURSCRIPTS = \
makepkg \
pacman-optimize \
rankmirrors \
- repo-add \
- repo-remove \
- updatesync
+ repo-add
EXTRA_DIST = \
- gensync.sh.in \
makepkg.sh.in \
pacman-optimize.sh.in \
rankmirrors.py.in \
- repo-add.sh.in \
- repo-remove.sh.in \
- updatesync.sh.in
+ repo-add.sh.in
# Files that should be removed, but which Automake does not know.
MOSTLYCLEANFILES = $(bin_SCRIPTS) *.tmp
+if USE_GIT_VERSION
+GIT_VERSION := $(shell sh -c 'git describe --abbrev=4 | sed s/^v//')-dirty
+REAL_PACKAGE_VERSION = $(GIT_VERSION)
+else
+REAL_PACKAGE_VERSION = $(PACKAGE_VERSION)
+endif
+
#### Taken from the autoconf scripts Makefile.am ####
edit = sed \
-e 's|@localedir[@]|$(localedir)|g' \
-e 's|@sysconfdir[@]|$(sysconfdir)|g' \
-e 's|@localstatedir[@]|$(localstatedir)|g' \
-e 's|@prefix[@]|$(prefix)|g' \
- -e 's|@PACKAGE_VERSION[@]|$(PACKAGE_VERSION)|g' \
+ -e 's|@PACKAGE_VERSION[@]|$(REAL_PACKAGE_VERSION)|g' \
-e 's|@PACKAGE_BUGREPORT[@]|$(PACKAGE_BUGREPORT)|g' \
-e 's|@PACKAGE_NAME[@]|$(PACKAGE_NAME)|g' \
-e 's|@DBEXT[@]|$(DBEXT)|g' \
@@ -39,7 +44,7 @@ edit = sed \
## wrong file by accident.
# two 'test' lines- make sure we can handle both sh and py type scripts
# third 'test' line- make sure one of the two checks succeeded
-$(bin_SCRIPTS): Makefile
+$(OURSCRIPTS): Makefile
rm -f $@ $@.tmp
test -f $(srcdir)/$@.sh.in && $(edit) $(srcdir)/$@.sh.in >$@.tmp || true
test -f $(srcdir)/$@.py.in && $(edit) $(srcdir)/$@.py.in >$@.tmp || true
@@ -48,13 +53,11 @@ $(bin_SCRIPTS): Makefile
chmod a-w $@.tmp
mv $@.tmp $@
-gensync: $(srcdir)/gensync.sh.in
makepkg: $(srcdir)/makepkg.sh.in
pacman-optimize: $(srcdir)/pacman-optimize.sh.in
rankmirrors: $(srcdir)/rankmirrors.py.in
repo-add: $(srcdir)/repo-add.sh.in
-repo-remove: $(srcdir)/repo-remove.sh.in
-re-pacman: $(srcdir)/re-pacman.sh.in
-updatesync: $(srcdir)/updatesync.sh.in
+repo-remove: $(srcdir)/repo-add.sh.in
+ ln -sf repo-add repo-remove
# vim:set ts=2 sw=2 noet:
diff --git a/scripts/gensync.sh.in b/scripts/gensync.sh.in
deleted file mode 100644
index d5dec275..00000000
--- a/scripts/gensync.sh.in
+++ /dev/null
@@ -1,169 +0,0 @@
-#!/bin/bash
-#
-# gensync
-# @configure_input@
-#
-# Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-
-# gettext initialization
-export TEXTDOMAIN='pacman'
-export TEXTDOMAINDIR='@localedir@'
-
-myver='@PACKAGE_VERSION@'
-
-# functions
-
-usage() {
- printf "gensync (pacman) %s\n\n" "$myver"
- printf "$(gettext "Usage: %s <root> <destfile> [package_directory]")\n\n" "$0"
- printf "$(gettext "\
-NOTE: this script is DEPRECATED. It will be removed in the next major\n\
-release of pacman, so please use repo-add and repo-remove instead.\n\n")"
- printf "$(gettext "\
-gensync will generate a sync database by reading all PKGBUILD files\n\
-from <root>. gensync builds the database in a temporary directory\n\
-and then compresses it to <destfile>.\n\n")"
- printf "$(gettext "\
-gensync will calculate md5sums of packages in the same directory as\n\
-<destfile>, unless an alternate [package_directory] is specified.\n\n")"
- printf "$(gettext "\
-note: The <destfile> name is important. It must be of the form\n\
- {treename}.db.tar.gz where {treename} is the name of the custom\n\
- package repository you configured in /etc/pacman.conf. The\n\
- generated database must reside in the same directory as your\n\
- custom packages (also configured in /etc/pacman.conf)\n\n")"
- echo "$(gettext "Example: gensync /var/abs/local /home/mypkgs/custom.db.tar.gz")"
-}
-
-version() {
- printf "gensync (pacman) %s\n" "$myver"
- printf "$(gettext "\
-Copyright (C) 2002-2007 Judd Vinet <jvinet@zeroflux.org>.\n\n\
-This is free software; see the source for copying conditions.\n\
-There is NO WARRANTY, to the extent permitted by law.\n")"
-}
-
-error () {
- local mesg=$1; shift
- printf "==> ERROR: ${mesg}\n" "$@" >&2
-}
-
-die () {
- error $*
- exit 1
-}
-
-check_force () {
- local i
- for i in ${options[@]}; do
- local lc=$(echo $i | tr [:upper:] [:lower:])
- if [ "$lc" = "force" ]; then
- true
- fi
- done
- false
-}
-
-# PROGRAM START
-
-# determine whether we have gettext; make it a no-op if we do not
-if [ ! $(type -t gettext) ]; then
- gettext() {
- echo "$@"
- }
-fi
-
-if [ "$1" = "-h" -o "$1" = "--help" ]; then
- usage
- exit 0
-fi
-
-if [ "$1" = "-V" -o "$1" = "--version" ]; then
- version
- exit 0
-fi
-
-if [ $# -lt 2 ]; then
- usage
- exit 1
-fi
-
-# source system and user makepkg.conf
-if [ -r @sysconfdir@/makepkg.conf ]; then
- source @sysconfdir@/makepkg.conf
-else
- die "$(gettext "%s not found. Can not continue.")" "@sysconfdir@/makepkg.conf"
-fi
-
-if [ -r ~/.makepkg.conf ]; then
- source ~/.makepkg.conf
-fi
-
-
-d=$(dirname $1)
-rootdir="$(cd $d && pwd)/$(basename $1)"
-d="$(dirname $2)"
-destdir="$(cd $d && pwd)"
-destfile="$destdir/$(basename $2)"
-pkgdir=""
-if [ "$3" != "" ]; then
- pkgdir="$3"
-fi
-
-[ ! -d "$rootdir" ] && die "$(gettext "invalid root dir: %s")" $rootdir
-
-printf "$(gettext "\
-NOTE: this script is DEPRECATED. It will be removed in the next major\n\
-release of pacman, so please use repo-add and repo-remove instead.\n\n")"
-
-echo "$(gettext "gensync: building database entries, generating md5sums...")" >&2
-cd "$destdir"
-
-pkgs=""
-forcepkgs=""
-
-for file in $(find "$rootdir"/* -name "$BUILDSCRIPT"); do
- unset pkgname pkgver pkgrel options
-
- source $file || die "$(gettext "failed to parse %s")" $file
- if [ "$arch" = 'any' ]; then
- CARCH='any'
- fi
- if [ "$pkgdir" != "" ]; then
- pkgfile="$pkgdir/$pkgname-$pkgver-$pkgrel-${CARCH}${PKGEXT}"
- else
- pkgfile="$destdir/$pkgname-$pkgver-$pkgrel-${CARCH}${PKGEXT}"
- fi
-
- if [ ! -f "$pkgfile" ]; then
- error "$(gettext "could not find %s-%s-%s-%s%s - skipping")" $pkgname $pkgver $pkgrel $CARCH $PKGEXT
- else
- if check_force; then
- forcepkgs="$forcepkgs $pkgfile"
- else
- pkgs="$pkgs $pkgfile"
- fi
- fi
-done
-
-echo "$(gettext "creating repo DB...")"
-
-# we'll trim the output just a tad, as gensync may be used on large repos
-repo-add $destfile $pkgs --force $force_pkgs \
- | grep -e "package" -e "database"
-
-# vim: set ts=2 sw=2 noet:
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index da11d00d..b810d608 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -27,24 +27,32 @@
# makepkg uses quite a few external programs during its execution. You
# need to have at least the following installed for makepkg to function:
# awk, bsdtar (libarchive), bzip2, coreutils, fakeroot, find (findutils),
-# getopt (util-linux), gettext, grep, gzip, sed
+# getopt (util-linux), gettext, grep, gzip, openssl, sed
# gettext initialization
export TEXTDOMAIN='pacman'
export TEXTDOMAINDIR='@localedir@'
+# file -i does not work on Mac OSX unless legacy mode is set
+export COMMAND_MODE='legacy'
+
+# when fileglobbing, we want * in an empty directory to expand to the null
+# string rather than itself
+shopt -s nullglob
+
myver='@PACKAGE_VERSION@'
confdir='@sysconfdir@'
startdir="$PWD"
srcdir="$startdir/src"
pkgdir="$startdir/pkg"
+known_options=('strip' 'docs' 'libtool' 'emptydirs' 'zipman' 'ccache' 'distcc' 'makeflags' 'force')
+readonly -a known_options
# Options
ASROOT=0
CLEANUP=0
CLEANCACHE=0
DEP_BIN=0
-DEP_SRC=0
FORCE=0
INFAKEROOT=0
GENINTEG=0
@@ -140,8 +148,7 @@ clean_up() {
if [ $EXIT_CODE -eq 0 -a "$CLEANUP" = "1" ]; then
# If it's a clean exit and -c/--clean has been passed...
msg "$(gettext "Cleaning up...")"
- cd "$startdir"
- rm -rf pkg src
+ rm -rf "$pkgdir" "$srcdir"
if [ "$pkgname" != "" ]; then
# Can't do this unless the BUILDSCRIPT has been sourced.
rm -f "${pkgname}-${pkgver}-${pkgrel}-${CARCH}.log*"
@@ -182,25 +189,6 @@ check_option() {
return
fi
- # BEGIN DEPRECATED
- # TODO: This code should be removed in the next release of makepkg.
- local needle=$(echo $1 | tr [:upper:] [:lower:])
- local opt
- for opt in ${options[@]}; do
- opt=$(echo $opt | tr [:upper:] [:lower:])
- if [ "$opt" = "no$needle" ]; then
- warning "$(gettext "Options beginning with 'no' will be deprecated in the next version of makepkg!")"
- plain "$(gettext "Please replace 'no' with '!': %s -> %s.")" "no$needle" "!$needle"
- echo 'n' # Disabled
- return
- elif [ "$opt" = "keepdocs" -a "$needle" = "docs" ]; then
- warning "$(gettext "Option 'keepdocs' may not work as intended. Please replace with 'docs'.")"
- echo 'y' # Enabled
- return
- fi
- done
- # END DEPRECATED
-
# fall back to makepkg.conf options
ret=$(in_opt_array "$1" ${OPTIONS[@]})
if [ "$ret" != '?' ]; then
@@ -232,11 +220,11 @@ check_buildenv() {
# ? - not found
##
in_opt_array() {
- local needle=$(echo $1 | tr [:upper:] [:lower:]); shift
+ local needle=$(echo $1 | tr '[:upper:]' '[:lower:]'); shift
local opt
for opt in "$@"; do
- opt=$(echo $opt | tr [:upper:] [:lower:])
+ opt=$(echo $opt | tr '[:upper:]' '[:lower:]')
if [ "$opt" = "$needle" ]; then
echo 'y' # Enabled
return
@@ -299,6 +287,20 @@ get_downloadclient() {
echo "$agent"
}
+get_downloadcmd() {
+ local dlagent=$1
+ local netfile=$2
+ local file=$3
+
+ if echo "$dlagent" | grep -q "%u" ; then
+ local dlcmd=$(echo "$dlagent" | sed "s|%o|$file.part|" | sed "s|%u|$netfile|")
+ else
+ local dlcmd="$dlagent $netfile"
+ fi
+
+ echo "$dlcmd"
+}
+
check_deps() {
[ $# -gt 0 ] || return
@@ -325,7 +327,7 @@ handledeps() {
striplist="$striplist $depstrip"
done
- if [ "$DEP_SRC" = "0" -a "$DEP_BIN" = "0" ]; then
+ if [ "$DEP_BIN" = "0" ]; then
return $R_DEPS_MISSING
fi
@@ -344,40 +346,6 @@ handledeps() {
error "$(gettext "Pacman failed to install missing dependencies.")"
exit 1 # TODO: error code
fi
- elif [ "$DEP_SRC" = "1" ]; then
- msg "$(gettext "Building missing dependencies...")"
-
- # install missing deps by building them from source.
- # we look for each package name in $SRCROOT and build it.
- if [ "$SRCROOT" = "" ]; then
- error "$(gettext "Source root cannot be found - please make sure it is specified in %s.")" "$confdir/makepkg.conf"
- exit 1 # TODO: error code
- fi
-
- # TODO: handle version comparators (eg, glibc>=2.2.5)
- for dep in $striplist; do
- local candidates="$(find "$SRCROOT" -type d -name "$dep")"
- if [ "$candidates" = "" ]; then
- error "$(gettext "Could not find '%s' under %s")" "$dep" "$SRCROOT"
- exit 1 # TODO: error code
- fi
-
- local makepkg_opts='-i -c -b'
- [ "$RMDEPS" = "1" ] && makepkg_opts="$makepkg_opts -r"
- [ "$ASROOT" = "1" ] && makepkg_opts="$makepkg_opts --asroot"
- local ret packagedir
- for packagedir in $candidates; do
- if [ -f "$packagedir/$BUILDSCRIPT" ]; then
- cd "$packagedir"
- ret=0
- PKGDEST="$PKGDEST" makepkg $makepkg_opts $PACMAN_OPTS || ret=$?
- [ $ret -eq 0 ] && continue 2
- fi
- done
-
- error "$(gettext "Failed to build '%s'")" "$dep"
- exit 1 # TODO: error code
- done
fi
# rerun any additional sh scripts found in /etc/profile.d/
@@ -407,7 +375,7 @@ resolve_deps() {
# check deps again to make sure they were resolved
deplist="$(check_deps $*)"
[ "$deplist" = "" ] && return $R_DEPS_SATISFIED
- elif [ "$DEP_BIN" = "1" -o "$DEP_SRC" = "1" ]; then
+ elif [ "$DEP_BIN" = "1" ]; then
error "$(gettext "Failed to install all missing dependencies.")"
fi
@@ -433,10 +401,17 @@ remove_deps() {
done
msg "Removing installed dependencies..."
+ local ret=0
if [ "$ASROOT" = "0" ]; then
- sudo pacman $PACMAN_OPTS -Rns $deplist
+ sudo pacman $PACMAN_OPTS -Rns $deplist || ret=$?
else
- pacman $PACMAN_OPTS -Rns $deplist
+ pacman $PACMAN_OPTS -Rns $deplist || ret=$?
+ fi
+
+ # Fixes FS#10039 - exit cleanly as package has built successfully
+ if [ $ret -ne 0 ]; then
+ warning "$(gettext "Failed to remove installed dependencies.")"
+ return 0
fi
}
@@ -452,15 +427,17 @@ download_sources() {
pushd "$SRCDEST" &>/dev/null
local netfile
- for netfile in ${source[@]}; do
+ for netfile in "${source[@]}"; do
local file=$(strip_url "$netfile")
if [ -f "$startdir/$file" ]; then
msg2 "$(gettext "Found %s in build dir")" "$file"
- cp -s --remove-destination "$startdir/$file" "$srcdir/"
+ rm -f "$srcdir/$file"
+ ln -s "$startdir/$file" "$srcdir/"
continue
elif [ -f "$SRCDEST/$file" ]; then
msg2 "$(gettext "Using cached copy of %s")" "$file"
- cp -s --remove-destination "$SRCDEST/$file" "$srcdir/"
+ rm -f "$srcdir/$file"
+ ln -s "$SRCDEST/$file" "$srcdir/"
continue
fi
@@ -471,18 +448,22 @@ download_sources() {
fi
# find the client we should use for this URL
- local dlclient=$(get_downloadclient $netfile) || exit $?
+ local dlclient=$(get_downloadclient "$netfile") || exit $?
msg2 "$(gettext "Downloading %s...")" "$file"
# fix flyspray bug #3289
local ret=0
- $dlclient "$netfile" || ret=$?
+ $(get_downloadcmd "$dlclient" "$netfile" "$file") || ret=$?
if [ $ret -gt 0 ]; then
error "$(gettext "Failure while downloading %s")" "$file"
plain "$(gettext "Aborting...")"
exit 1
fi
- cp -s --remove-destination "$SRCDEST/$file" "$srcdir/"
+ if echo "$dlclient" | grep -q "%o" ; then
+ mv -f "$SRCDEST/$file.part" "$SRCDEST/$file"
+ fi
+ rm -f "$srcdir/$file"
+ ln -s "$SRCDEST/$file" "$srcdir/"
done
popd &>/dev/null
@@ -494,7 +475,7 @@ generate_checksums() {
local integ
for integ in ${INTEGRITY_CHECK[@]}; do
- integ="$(echo $integ | tr [:upper:] [:lower:])"
+ integ="$(echo $integ | tr '[:upper:]' '[:lower:]')"
case "$integ" in
md5|sha1|sha256|sha384|sha512) : ;;
*)
@@ -502,8 +483,8 @@ generate_checksums() {
exit 1;; # $E_CONFIG_ERROR
esac
- if [ ! $(type -p "${integ}sum") ]; then
- error "$(gettext "Cannot find the '%s' program.")" "${integ}sum"
+ if [ ! $(type -p openssl) ]; then
+ error "$(gettext "Cannot find openssl.")"
exit 1 # $E_MISSING_PROGRAM
fi
@@ -519,7 +500,7 @@ generate_checksums() {
done
local netfile
- for netfile in ${source[@]}; do
+ for netfile in "${source[@]}"; do
local file="$(strip_url "$netfile")"
if [ ! -f "$file" ] ; then
@@ -528,11 +509,11 @@ generate_checksums() {
plain "$(gettext "Aborting...")"
exit 1
else
- file=$SRCDEST/$file
+ file="$SRCDEST/$file"
fi
fi
- local sum="$(${integ}sum "$file" | cut -d ' ' -f 1)"
+ local sum="$(openssl dgst -${integ} "$file" | awk '{print $NF}')"
[ $ct -gt 0 ] && echo -n "$indent"
echo -n "'$sum'"
ct=$(($ct+1))
@@ -546,7 +527,7 @@ generate_checksums() {
check_checksums() {
local integ
for integ in ${INTEGRITY_CHECK[@]}; do
- integ="$(echo $integ | tr [:upper:] [:lower:])"
+ integ="$(echo $integ | tr '[:upper:]' '[:lower:]')"
case "$integ" in
md5|sha1|sha256|sha384|sha512) : ;;
*)
@@ -554,12 +535,12 @@ check_checksums() {
exit 1;; # $E_CONFIG_ERROR
esac
- if [ ! $(type -p "${integ}sum") ]; then
- error "$(gettext "Cannot find the '%s' program.")" "${integ}sum"
+ if [ ! $(type -p openssl) ]; then
+ error "$(gettext "Cannot find openssl.")"
exit 1 # $E_MISSING_PROGRAM
fi
- local integrity_sums=($(eval echo \${${integ}sums[@]}))
+ local integrity_sums=($(eval echo "\${${integ}sums[@]}"))
if [ ${#integrity_sums[@]} -eq ${#source[@]} ]; then
msg "$(gettext "Validating source files with %s...")" "${integ}sums"
local errors=0
@@ -575,11 +556,11 @@ check_checksums() {
errors=1
continue
else
- file=$SRCDEST/$file
+ file="$SRCDEST/$file"
fi
fi
- if echo "${integrity_sums[$idx]} $file" | ${integ}sum --status -c - &>/dev/null; then
+ if [ "${integrity_sums[$idx]}" = "$(openssl dgst -${integ} "$file" | awk '{print $NF}')" ]; then
echo "$(gettext "Passed")" >&2
else
echo "$(gettext "FAILED")" >&2
@@ -616,7 +597,7 @@ extract_sources() {
plain "$(gettext "Aborting...")"
exit 1
else
- file=$SRCDEST/$file
+ file="$SRCDEST/$file"
fi
fi
@@ -647,8 +628,8 @@ extract_sources() {
done
if [ $EUID -eq 0 ]; then
- # chown all source files to root.root
- chown -R root.root "$srcdir"
+ # change perms of all source files to root user & root group
+ chown -R 0:0 "$srcdir"
fi
}
@@ -716,37 +697,41 @@ tidy_install() {
rm -rf ${DOC_DIRS[@]}
fi
- msg2 "$(gettext "Compressing man pages...")"
- local manpage mandirs ext file link hardlinks hl
- mandirs="usr/man usr/share/man usr/local/man usr/local/share/man opt/*/man"
- find ${mandirs} -type f 2>/dev/null | while read manpage ; do
- # check file still exists (potentially compressed with hard link)
- if [ -f ${manpage} ]; then
- ext="${manpage##*.}"
- file="${manpage##*/}"
- if [ "$ext" != "gz" -a "$ext" != "bz2" ]; then
- # update symlinks to this manpage
- find ${mandirs} -lname "$file" 2>/dev/null | while read link ; do
- rm -f "$link"
- ln -sf "${file}.gz" "${link}.gz"
- done
- # find hard links and remove them
- # the '|| true' part keeps the script from bailing if find returned an
- # error, such as when one of the man directories doesn't exist
- hardlinks="$(find ${mandirs} \! -name "$file" -samefile "$manpage" 2>/dev/null)" || true
- for hl in ${hardlinks}; do
- rm -f "${hl}";
- done
- # compress the original
- gzip -9 "$manpage"
- # recreate hard links removed earlier
- for hl in ${hardlinks}; do
- ln "${manpage}.gz" "${hl}.gz"
- chmod 644 ${hl}.gz
- done
+ if [ "$(check_option zipman)" = "y" ]; then
+ msg2 "$(gettext "Compressing man pages...")"
+ local manpage mandirs ext file link hardlinks hl
+ mandirs="usr/man usr/share/man usr/local/man usr/local/share/man opt/*/man"
+ find ${mandirs} -type f 2>/dev/null |
+ while read manpage ; do
+ # check file still exists (potentially compressed with hard link)
+ if [ -f ${manpage} ]; then
+ ext="${manpage##*.}"
+ file="${manpage##*/}"
+ if [ "$ext" != "gz" -a "$ext" != "bz2" ]; then
+ # update symlinks to this manpage
+ find ${mandirs} -lname "$file" 2>/dev/null |
+ while read link ; do
+ rm -f "$link"
+ ln -sf "${file}.gz" "${link}.gz"
+ done
+ # find hard links and remove them
+ # the '|| true' part keeps the script from bailing if find returned an
+ # error, such as when one of the man directories doesn't exist
+ hardlinks="$(find ${mandirs} \! -name "$file" -samefile "$manpage" 2>/dev/null)" || true
+ for hl in ${hardlinks}; do
+ rm -f "${hl}";
+ done
+ # compress the original
+ gzip -9 "$manpage"
+ # recreate hard links removed earlier
+ for hl in ${hardlinks}; do
+ ln "${manpage}.gz" "${hl}.gz"
+ chmod 644 ${hl}.gz
+ done
+ fi
fi
- fi
- done
+ done
+ fi
if [ "$(check_option strip)" = "y" ]; then
@@ -790,7 +775,7 @@ create_package() {
else
local packager="Unknown Packager"
fi
- local size=$(du -sb | awk '{print $1}')
+ local size=$(du -sk | awk '{print $1 * 1024}')
# write the .PKGINFO file
msg2 "$(gettext "Generating .PKGINFO file...")"
@@ -849,7 +834,6 @@ create_package() {
local comp_files=".PKGINFO"
# check for an install script
- # TODO: should we include ${pkgname}.install if it exists and $install is unset?
if [ "$install" != "" ]; then
msg2 "$(gettext "Adding install script...")"
cp "$startdir/$install" .INSTALL
@@ -868,7 +852,7 @@ create_package() {
local pkg_file="$PKGDEST/${pkgname}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}"
- if ! bsdtar -czf "$pkg_file" $comp_files $(ls); then
+ if ! bsdtar -czf "$pkg_file" $comp_files *; then
error "$(gettext "Failed to create package file.")"
exit 1 # TODO: error code
fi
@@ -940,14 +924,26 @@ create_xdelta() {
create_srcpackage() {
cd "$startdir"
+ if [ "$SOURCEONLY" = "2" ]; then
+ # get back to our src directory so we can begin with sources
+ mkdir -p "$srcdir"
+ cd "$srcdir"
+ download_sources
+ # we can only check checksums if we have all files
+ check_checksums
+ cd "$startdir"
+ fi
msg "$(gettext "Creating source package...")"
- local comp_files="$BUILDSCRIPT"
+ local srclinks="$(mktemp -d "$startdir"/srclinks.XXXXXXXXX)"
+ mkdir "${srclinks}"/${pkgname}
+
msg2 "$(gettext "Adding %s...")" "$BUILDSCRIPT"
+ ln -s "${startdir}/${BUILDSCRIPT}" "${srclinks}/${pkgname}/"
if [ "$install" != "" ]; then
if [ -f $install ]; then
msg2 "$(gettext "Adding install script...")"
- comp_files="$comp_files $install"
+ ln -s "${startdir}/$install" "${srclinks}/${pkgname}/"
else
error "$(gettext "Install script %s not found.")" "$install"
fi
@@ -955,14 +951,18 @@ create_srcpackage() {
if [ -f ChangeLog ]; then
msg2 "$(gettext "Adding %s...")" "ChangeLog"
- comp_files="$comp_files ChangeLog"
+ ln -s "${startdir}/ChangeLog" "${srclinks}/${pkgname}"
fi
- local i
- for i in ${source[@]}; do
- if [ -f $i ]; then
- msg2 "$(gettext "Adding %s...")" "$i"
- comp_files="$comp_files $i"
+ local netfile
+ for netfile in "${source[@]}"; do
+ local file=$(strip_url "$netfile")
+ if [ -f "$netfile" ]; then
+ msg2 "$(gettext "Adding %s...")" "$netfile"
+ ln -s $netfile "${srclinks}/${pkgname}"
+ elif [ "$SOURCEONLY" = "2" -a -f "$SRCDEST/$file" ]; then
+ msg2 "$(gettext "Adding %s...")" "$file"
+ ln -s "$SRCDEST/$file" "${srclinks}/${pkgname}/"
fi
done
@@ -970,10 +970,13 @@ create_srcpackage() {
# tar it up
msg2 "$(gettext "Compressing source package...")"
- if ! bsdtar -czf "$pkg_file" $comp_files; then
+ cd "${srclinks}"
+ if ! bsdtar -czLf "$pkg_file" ${pkgname}; then
error "$(gettext "Failed to create source package file.")"
exit 1 # TODO: error code
fi
+ cd "${startdir}"
+ rm -rf "${srclinks}"
}
install_package() {
@@ -1071,7 +1074,6 @@ usage() {
echo
echo "$(gettext "Options:")"
printf "$(gettext " -A, --ignorearch Ignore incomplete arch field in %s")\n" "$BUILDSCRIPT"
- echo "$(gettext " -b, --builddeps Build missing dependencies from source")"
echo "$(gettext " -c, --clean Clean up work files after build")"
echo "$(gettext " -C, --cleancache Clean up source files from the cache")"
echo "$(gettext " -d, --nodeps Skip all dependency checks")"
@@ -1145,9 +1147,11 @@ SRCDEST=${_SRCDEST:-$SRCDEST}
SRCDEST=${SRCDEST:-$startdir} #default to $startdir if undefined
# Parse Command Line Options.
-OPT_SHORT="AbcCdefFghiLmop:rRsSV"
-OPT_LONG="ignorearch,asroot,builddeps,clean,cleancache,nodeps,noextract,force,forcever:,geninteg,help,holdver"
-OPT_LONG="$OPT_LONG,install,log,nocolor,nobuild,rmdeps,repackage,source,syncdeps,usesudo,version"
+OPT_SHORT="AbcCdefFghiLmop:rRsV"
+OPT_LONG="allsource,asroot,ignorearch,builddeps,clean,cleancache,nodeps"
+OPT_LONG="$OPT_LONG,noextract,force,forcever:,geninteg,help,holdver"
+OPT_LONG="$OPT_LONG,install,log,nocolor,nobuild,rmdeps,repackage,source"
+OPT_LONG="$OPT_LONG,syncdeps,version"
# Pacman Options
OPT_LONG="$OPT_LONG,noconfirm,noprogressbar"
OPT_TEMP="$(getopt -o "$OPT_SHORT" -l "$OPT_LONG" -n "$(basename "$0")" -- "$@" || echo 'GETOPT GO BANG!')"
@@ -1165,9 +1169,9 @@ while true; do
--noprogressbar) PACMAN_OPTS="$PACMAN_OPTS --noprogressbar" ;;
# Makepkg Options
+ --allsource) SOURCEONLY=2 ;;
--asroot) ASROOT=1 ;;
-A|--ignorearch) IGNOREARCH=1 ;;
- -b|--builddeps) DEP_SRC=1 ;;
-c|--clean) CLEANUP=1 ;;
-C|--cleancache) CLEANCACHE=1 ;;
-d|--nodeps) NODEPS=1 ;;
@@ -1188,11 +1192,6 @@ while true; do
--source) SOURCEONLY=1 ;;
-s|--syncdeps) DEP_BIN=1 ;;
- # BEGIN DEPRECATED
- -S|--usesudo)
- warning "$(gettext "Sudo is used by default now. The --usesudo option is deprecated!")" ;;
- # END DEPRECATED
-
-h|--help) usage; exit 0 ;; # E_OK
-V|--version) version; exit 0 ;; # E_OK
@@ -1203,8 +1202,7 @@ while true; do
done
if [ "$HOLDVER" = "1" -a "$FORCE_VER" != "" ]; then
- # The extra '--' is here to prevent gettext from thinking --holdver is
- # an option
+ # The '\\0' is here to prevent gettext from thinking --holdver is an option
error "$(gettext "\\0--holdver and --forcever cannot both be specified" )"
exit 1
fi
@@ -1215,7 +1213,7 @@ if [ "$CLEANCACHE" = "1" ]; then
msg "$(gettext "Cleaning up ALL files from %s.")" "$SRCDEST"
echo -n "$(gettext " Are you sure you wish to do this? [Y/n] ")"
read answer
- answer=$(echo $answer | tr [:upper:] [:lower:])
+ answer=$(echo $answer | tr '[:upper:]' '[:lower:]')
if [ "$answer" = "yes" -o "$answer" = "y" ]; then
rm "$SRCDEST"/*
if [ $? -ne 0 ]; then
@@ -1276,7 +1274,7 @@ else
fi
# check for sudo if we will need it during makepkg execution
-if [ "$ASROOT" = "0" -a \( "$DEP_BIN" = "1" -o "$DEP_SRC" = "1" \
+if [ "$ASROOT" = "0" -a \( "$DEP_BIN" = "1" \
-o "$RMDEPS" = "1" -o "$INSTALL" = "1" \) ]; then
if [ ! "$(type -p sudo)" ]; then
error "$(gettext "Cannot find the sudo binary! Is sudo installed?")"
@@ -1293,17 +1291,18 @@ unset optdepends options noextract
if [ ! -f "$BUILDSCRIPT" ]; then
error "$(gettext "%s does not exist.")" "$BUILDSCRIPT"
exit 1
- #TODO this is an attempt at a generic way to unset all package specific
- #variables in a PKGBUILD
- #else
- # #this is fun.... we'll unset
- # for var in $(grep "=" $BUILDSCRIPT | sed "s|.*\(\<.*\>\)=.*|\1|g"); do
- # unset $var
- # done
fi
source "$BUILDSCRIPT"
+if [ "$GENINTEG" = "1" ]; then
+ mkdir -p "$srcdir"
+ cd "$srcdir"
+ download_sources
+ generate_checksums
+ exit 0 # $E_OK
+fi
+
# check for no-no's in the build script
if [ -z "$pkgname" ]; then
error "$(gettext "%s is not allowed to be empty.")" "pkgname"
@@ -1348,6 +1347,25 @@ if [ "$install" -a ! -f "$install" ]; then
exit 1
fi
+valid_options=1
+for opt in ${options[@]}; do
+ known=0
+ # check if option matches a known option or its inverse
+ for kopt in ${known_options[@]}; do
+ if [ "${opt}" = "${kopt}" -o "${opt}" = "!${kopt}" ]; then
+ known=1
+ fi
+ done
+ if [ $known -eq 0 ]; then
+ error "$(gettext "options array contains unknown option '%s'")" "$opt"
+ valid_options=0
+ fi
+done
+if [ $valid_options -eq 0 ]; then
+ exit 1
+fi
+unset valid_options opt known kopt
+
# We need to run devel_update regardless of whether we are in the fakeroot
# build process so that if the user runs makepkg --forcever manually, we
# 1) output the correct pkgver, and 2) use the correct filename when
@@ -1356,7 +1374,7 @@ devel_check
devel_update
if [ -f "$PKGDEST/${pkgname}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}" \
- -a "$FORCE" = "0" -a "$GENINTEG" = "0" -a "$SOURCEONLY" = "0" -a "$NOBUILD" = "0" ]; then
+ -a "$FORCE" = "0" -a "$SOURCEONLY" = "0" -a "$NOBUILD" = "0" ]; then
if [ "$INSTALL" = "1" ]; then
warning "$(gettext "A package has already been built, installing existing package...")"
install_package
@@ -1383,14 +1401,14 @@ if [ "$INFAKEROOT" = "1" ]; then
exit 0 # $E_OK
fi
-msg "$(gettext "Making package: %s")" "$pkgname $pkgver-$pkgrel ($(date))"
+msg "$(gettext "Making package: %s")" "$pkgname $pkgver-$pkgrel $CARCH ($(date))"
if [ $EUID -eq 0 ]; then
warning "$(gettext "Running makepkg as root...")"
fi
# if we are creating a source-only package, go no further
-if [ "$SOURCEONLY" = "1" ]; then
+if [ "$SOURCEONLY" != "0" ]; then
if [ -f "$PKGDEST/${pkgname}-${pkgver}-${pkgrel}${SRCEXT}" \
-a "$FORCE" = "0" ]; then
error "$(gettext "A package has already been built. (use -f to overwrite)")"
@@ -1402,11 +1420,11 @@ if [ "$SOURCEONLY" = "1" ]; then
fi
# fix flyspray bug #5973
-if [ "$NODEPS" = "1" -o "$GENINTEG" = "1" -o "$NOBUILD" = "1" -o "$REPKG" = "1" ]; then
+if [ "$NODEPS" = "1" -o "$NOBUILD" = "1" -o "$REPKG" = "1" ]; then
if [ "$NODEPS" = "1" ]; then
warning "$(gettext "Skipping dependency checks.")"
fi
- # skip printing a warning message for the others: geninteg, nobuild, repkg
+ # skip printing a warning message for the others: nobuild, repkg
elif [ $(type -p pacman) ]; then
unset pkgdeps # Set by resolve_deps() and used by remove_deps()
deperr=0
@@ -1432,12 +1450,6 @@ umask 0022
mkdir -p "$srcdir"
cd "$srcdir"
-if [ "$GENINTEG" = "1" ]; then
- download_sources
- generate_checksums
- exit 0 # $E_OK
-fi
-
if [ "$NOEXTRACT" = "1" -o "$REPKG" = "1" ]; then
warning "$(gettext "Skipping source retrieval -- using existing src/ tree")"
warning "$(gettext "Skipping source integrity checks -- using existing src/ tree")"
@@ -1470,8 +1482,8 @@ else
mkdir -p "$pkgdir"
cd "$startdir"
- if [ $EUID -eq 0 ]; then
- # if we are root, then we don't need to recall makepkg with fakeroot
+ if [ "$(check_buildenv fakeroot)" != "y" -o $EUID -eq 0 ]; then
+ # if we are root or if fakeroot is not enabled, then we don't use it
if [ "$REPKG" = "1" ]; then
warning "$(gettext "Skipping build.")"
else
@@ -1494,7 +1506,7 @@ else
create_xdelta "$PKGDEST/${pkgname}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}"
fi
-msg "$(gettext "Finished making: %s")" "$pkgname ($(date))"
+msg "$(gettext "Finished making: %s")" "$pkgname $pkgver-$pkgrel $CARCH ($(date))"
install_package
diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in
index 63d94d37..9ab023d6 100644
--- a/scripts/repo-add.sh.in
+++ b/scripts/repo-add.sh.in
@@ -1,9 +1,11 @@
#!/bin/bash
#
# repo-add - add a package to a given repo database file
+# repo-remove - remove a package entry from a given repo database file
# @configure_input@
#
-# Copyright (c) 2006 Aaron Griffin <aaron@archlinux.org>
+# Copyright (c) 2006-2008 Aaron Griffin <aaron@archlinux.org>
+# Copyright (c) 2007-2008 Dan McGee <dan@archlinux.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -25,18 +27,20 @@ export TEXTDOMAINDIR='@localedir@'
myver='@PACKAGE_VERSION@'
confdir='@sysconfdir@'
-FORCE=0
+QUIET=0
REPO_DB_FILE=""
# ensure we have a sane umask set
umask 0022
msg() {
+ [ $QUIET -ne 0 ] && return
local mesg=$1; shift
printf "==> ${mesg}\n" "$@" >&1
}
msg2() {
+ [ $QUIET -ne 0 ] && return
local mesg=$1; shift
printf " -> ${mesg}\n" "$@" >&1
}
@@ -53,37 +57,39 @@ error() {
# print usage instructions
usage() {
- printf "repo-add (pacman) %s\n\n" "$myver"
- printf "$(gettext "Usage: %s <path-to-db> [--force] <package> ...\n\n")" "$0"
+ printf "repo-add, repo-remove (pacman) %s\n\n" "$myver"
+ printf "$(gettext "Usage: repo-add [-q] <path-to-db> <package> ...\n")"
+ printf "$(gettext "Usage: repo-remove [-q] <path-to-db> <packagename> ...\n\n")"
printf "$(gettext "\
repo-add will update a package database by reading a package file.\n\
Multiple packages to add can be specified on the command line.\n\n")"
printf "$(gettext "\
-The --force flag will add a 'force' entry to the sync database, which\n\
-tells pacman to skip its internal version number checking and update\n\
-the package regardless.\n\n")"
+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")"
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")"
}
version() {
- printf "repo-add (pacman) %s\n" "$myver"
+ printf "repo-add, repo-remove (pacman) %s\n\n" "$myver"
printf "$(gettext "\
-Copyright (C) 2006 Aaron Griffin <aaron@archlinux.org>.\n\n\
+Copyright (C) 2006-2008 Aaron Griffin <aaron@archlinux.org>.\n\
+Copyright (c) 2007-2008 Dan McGee <dan@archlinux.org>.\n\n\
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 [ -f "$REPO_DB_FILE" ]; then
- if bsdtar -tf "$REPO_DB_FILE" | grep -q "/desc"; then
- return 0 # YES
- fi
+ if bsdtar -tf "$REPO_DB_FILE" | grep -q "/desc"; then
+ return 0 # YES
else
- return 0 # YES - No database file is also allowed
+ return 1 # NO
fi
-
- return 1 # NO
}
# write a list entry
@@ -102,8 +108,8 @@ write_list_entry() {
# arg1 - path to delta
db_write_delta()
{
- # blank out all variables and set deltafile
- local deltafile=$(readlink -f "$1")
+ # blank out all variables and set deltafile to absolute path
+ local deltafile=$($realpath "$1")
local filename=$(basename "$deltafile")
local deltavars pkgname fromver tover arch csize md5sum
@@ -117,7 +123,7 @@ db_write_delta()
# get md5sum and size of delta
md5sum="$(md5sum "$deltafile" | cut -d ' ' -f 1)"
- csize=$(du -b -L "$deltafile" | cut -f 1)
+ csize=$(du -kL "$deltafile" | awk '{print $1 * 1024}')
# ensure variables were found
if [ -z "$pkgname" -o -z "$fromver" -o -z "$tover" -o -z "$arch" ]; then
@@ -133,8 +139,8 @@ db_write_delta()
# arg1 - path to package
db_write_entry()
{
- # blank out all variables and set pkgfile
- local pkgfile=$(readlink -f "$1")
+ # blank out all variables and set pkgfile to an absolute path
+ local pkgfile=$($realpath "$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 \
@@ -164,7 +170,7 @@ db_write_entry()
IFS=$OLDIFS
# get compressed size of package
- csize=$(du -b -L "$pkgfile" | cut -f 1)
+ csize=$(du -kL "$pkgfile" | awk '{print $1 * 1024}')
startdir=$(pwd)
pushd "$gstmpdir" 2>&1 >/dev/null
@@ -176,14 +182,8 @@ db_write_entry()
return 1
fi
- # remove any other package in the DB with same name
- local existing
- for existing in *; do
- if [ "${existing%-*-*}" = "$pkgname" ]; then
- msg2 "$(gettext "Removing existing package '%s'...")" "$existing"
- rm -rf "$existing"
- fi
- done
+ # remove an existing entry if it exists, ignore failures
+ db_remove_entry "$pkgname"
# create package directory
mkdir "$pkgname-$pkgver"
@@ -209,7 +209,7 @@ db_write_entry()
[ -n "$builddate" ] && echo -e "%BUILDDATE%\n$builddate\n" >>desc
[ -n "$packager" ] && echo -e "%PACKAGER%\n$packager\n" >>desc
write_list_entry "REPLACES" "$_replaces" "desc"
- [ $FORCE -eq 1 -o -n "$force" ] && echo -e "%FORCE%\n" >>desc
+ [ -n "$force" ] && echo -e "%FORCE%\n" >>desc
# create depends entry
msg2 "$(gettext "Creating 'depends' db entry...")"
@@ -236,7 +236,7 @@ db_write_entry()
if db_write_delta "$delta"; then
msg2 "$(gettext "Added delta '%s'")" "$(basename "$delta")"
else
- msg2 "$(gettext "Could not add delta '%s'")" "$(basename "$delta")"
+ warning "$(gettext "Could not add delta '%s'")" "$(basename "$delta")"
fi
fi
done
@@ -250,6 +250,23 @@ db_write_entry()
popd 2>&1 >/dev/null
} # end db_write_entry
+# remove existing entries from the DB
+# arg1 - package name
+db_remove_entry() {
+ pushd "$gstmpdir" 2>&1 >/dev/null
+
+ # remove any other package in the DB with same name
+ local existing
+ for existing in *; do
+ if [ "${existing%-*-*}" = "$1" ]; then
+ msg2 "$(gettext "Removing existing package '%s'...")" "$existing"
+ rm -rf "$existing"
+ fi
+ done
+
+ popd 2>&1 >/dev/null
+} # end db_remove_entry
+
# PROGRAM START
# determine whether we have gettext; make it a no-op if we do not
@@ -277,6 +294,16 @@ 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"
@@ -290,44 +317,69 @@ if [ -r ~/.makepkg.conf ]; then
fi
# main routine
-gstmpdir=$(mktemp -d /tmp/repo-add.XXXXXXXXXX) || (\
+gstmpdir=$(mktemp -d /tmp/repo-tools.XXXXXXXXXX) || (\
error "$(gettext "Cannot create temp directory for database building.")"; \
exit 1)
+# figure out what program we are
+cmd="$(basename $0)"
+if [ "$cmd" != "repo-add" -a "$cmd" != "repo-remove" ]; then
+ error "$(gettext "Invalid command name '%s' specified.")" "$cmd"
+ exit 1
+fi
+
success=0
# parse arguments
for arg in "$@"; do
if [ "$arg" == "--force" -o "$arg" == "-f" ]; then
- FORCE=1
+ 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=$(readlink -f "$arg")
- if ! test_repo_db_file; then
- error "$(gettext "Repository file '%s' is not a proper pacman database.")" "$REPO_DB_FILE"
- exit 1
- elif [ -f "$REPO_DB_FILE" ]; then
+ # store absolute path to repo DB
+ REPO_DB_FILE=$($realpath "$arg")
+ if [ -f "$REPO_DB_FILE" ]; then
+ if ! test_repo_db_file $cmd; 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"
+ elif [ "$cmd" == "repo-remove" ]; then
+ error "$(gettext "Repository file '%s' was not found.")" "$REPO_DB_FILE"
+ exit 1
fi
else
- if [ -f "$arg" ]; then
- if ! bsdtar -tf "$arg" .PKGINFO 2>&1 >/dev/null; then
- error "$(gettext "'%s' is not a package file, skipping")" "$arg"
+ 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
- msg "$(gettext "Adding package '%s'")" "$arg"
+ error "$(gettext "Package '%s' not found.")" "$arg"
+ fi
+ elif [ "$cmd" == "repo-remove" ]; then
+ msg "$(gettext "Searching for package '%s'...")" "$arg"
- if db_write_entry "$arg"; then
- success=1
- fi
+ if db_remove_entry "$arg"; then
+ success=1
+ else
+ error "$(gettext "Package matching '%s' not found.")" "$arg"
fi
- else
- error "$(gettext "Package '%s' not found.")" "$arg"
fi
fi
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"
+ msg "$(gettext "Creating updated database file '%s'")" "$REPO_DB_FILE"
pushd "$gstmpdir" 2>&1 >/dev/null
if [ -n "$(ls)" ]; then
@@ -341,6 +393,10 @@ if [ $success -eq 1 ]; then
esac
bsdtar -c${TAR_OPT}f "$REPO_DB_FILE" *
+ else
+ # we should only end up with an empty db after a remove of the last package in the database
+ 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
diff --git a/scripts/repo-remove.sh.in b/scripts/repo-remove.sh.in
deleted file mode 100644
index 47a0d5ae..00000000
--- a/scripts/repo-remove.sh.in
+++ /dev/null
@@ -1,191 +0,0 @@
-#!/bin/bash
-#
-# repo-remove - remove a package entry from a given repo database file
-# @configure_input@
-#
-# Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-# gettext initialization
-export TEXTDOMAIN='pacman'
-export TEXTDOMAINDIR='@localedir@'
-
-myver='@PACKAGE_VERSION@'
-confdir='@sysconfdir@'
-
-REPO_DB_FILE=""
-
-msg() {
- local mesg=$1; shift
- printf "==> ${mesg}\n" "$@" >&1
-}
-
-msg2() {
- local mesg=$1; shift
- printf " -> ${mesg}\n" "$@" >&1
-}
-
-warning() {
- local mesg=$1; shift
- printf "==> $(gettext "WARNING:") ${mesg}\n" "$@" >&2
-}
-
-error() {
- local mesg=$1; shift
- printf "==> $(gettext "ERROR:") ${mesg}\n" "$@" >&2
-}
-
-# print usage instructions
-usage() {
- printf "$(gettext "repo-remove %s\n\n")" $myver
- printf "$(gettext "usage: %s <path-to-db> <packagename> ...\n\n")" "$0"
- printf "$(gettext "\
-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")"
- echo "$(gettext "Example: repo-remove /path/to/repo.db.tar.gz kernel26")"
-}
-
-version() {
- printf "repo-remove (pacman) %s\n" "$myver"
- printf "$(gettext "\
-Copyright (C) 2002-2007 Judd Vinet <jvinet@zeroflux.org>.\n\n\
-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 [ -f "$REPO_DB_FILE" ]; then
- if bsdtar -tf "$REPO_DB_FILE" | grep -q "/desc"; then
- return 0 # YES
- fi
- fi
-
- return 1 # NO
-}
-
-# remove existing entries from the DB
-db_remove_entry() {
- pushd "$gstmpdir" 2>&1 >/dev/null
-
- # remove any other package in the DB with same name
- local existing
- for existing in *; do
- if [ "${existing%-*-*}" = "$1" ]; then
- msg2 "$(gettext "Removing existing package '%s'...")" "$existing"
- rm -rf "$existing"
- fi
- done
-
- popd 2>&1 >/dev/null
-} # end db_remove_entry
-
-# PROGRAM START
-
-# determine whether we have gettext; make it a no-op if we do not
-if [ ! $(type -t gettext) ]; then
- gettext() {
- echo "$@"
- }
-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
-
-# check for correct number of args
-if [ $# -lt 2 ]; then
- usage
- exit 1
-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-remove.XXXXXXXXXX) || (\
- error "$(gettext "Cannot create temp directory for database building.")"; \
- exit 1)
-
-success=0
-# parse arguments
-for arg in "$@"; do
- if [ -z "$REPO_DB_FILE" ]; then
- REPO_DB_FILE=$(readlink -f "$arg")
- if ! test_repo_db_file; then
- error "$(gettext "Repository file '%s' is not a proper pacman database.")\n" "$REPO_DB_FILE"
- exit 1
- elif [ -f "$REPO_DB_FILE" ]; then
- msg "$(gettext "Extracting database to a temporary location...")"
- bsdtar -xf "$REPO_DB_FILE" -C "$gstmpdir"
- fi
- else
- 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
-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 "$DB_COMPRESSION" in
- gz) TAR_OPT="z" ;;
- bz2) TAR_OPT="j" ;;
- *) warning "$(gettext "No compression set.")" ;;
- esac
-
- bsdtar -c${TAR_OPT}f "$REPO_DB_FILE" *
- else
- 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
-else
- msg "$(gettext "No packages modified, nothing to do.")"
-fi
-
-# remove the temp directory used to unzip
-[ -d "$gstmpdir" ] && rm -rf $gstmpdir
-
-# vim: set ts=2 sw=2 noet:
diff --git a/scripts/updatesync.sh.in b/scripts/updatesync.sh.in
deleted file mode 100644
index 5f5cc6c9..00000000
--- a/scripts/updatesync.sh.in
+++ /dev/null
@@ -1,172 +0,0 @@
-#!/bin/bash
-#
-# updatesync
-# @configure_input@
-#
-# Copyright (c) 2004 by Jason Chu <jason@archlinux.org>
-# Derived from gensync (c) 2002-2006 Judd Vinet <jvinet@zeroflux.org>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-
-# gettext initialization
-export TEXTDOMAIN='pacman'
-export TEXTDOMAINDIR='@localedir@'
-
-myver='@PACKAGE_VERSION@'
-
-# functions
-
-usage() {
- printf "updatesync (pacman) %s\n\n" "$myver"
- printf "$(gettext "Usage: %s <action> <destfile> <option> [package_directory]")\n\n" "$0"
- printf "$(gettext "\
-NOTE: this script is DEPRECATED. It will be removed in the next major\n\
-release of pacman, so please use repo-add and repo-remove instead.\n\n")"
- printf "$(gettext "\
-updatesync will update a sync database by reading a PKGBUILD and\n\
-modifying the destfile. updatesync updates the database in a temporary\n\
-directory and then compresses it to <destfile>.\n\n")"
- printf "$(gettext "There are two types of actions:\n\n")"
- printf "$(gettext "upd - Will update a package's entry or create it if it doesn't exist.\n It takes the package's PKGBUILD as an option.\n")"
- printf "$(gettext "del - Will remove a package's entry from the db. It takes the package's\n name as an option.\n")"
- echo
- printf "$(gettext "\
-updatesync will calculate md5sums of packages in the same directory as\n\
-<destfile>, unless an alternate [package_directory] is specified.\n\n")"
- echo "$(gettext "Example: updatesync upd /home/mypkgs/custom.db.tar.gz PKGBUILD")"
-}
-
-version() {
- printf "updatesync (pacman) %s\n" "$myver"
- printf "$(gettext "\
-Copyright (C) 2004 Jason Chu <jason@archlinux.org>.\n\n\
-This is free software; see the source for copying conditions.\n\
-There is NO WARRANTY, to the extent permitted by law.\n")"
-}
-
-error () {
- local mesg=$1; shift
- printf "==> ERROR: ${mesg}\n" "$@" >&2
-}
-
-die () {
- error $*
- exit 1
-}
-
-check_force () {
- local i
- for i in ${options[@]}; do
- local lc=$(echo $i | tr [:upper:] [:lower:])
- if [ "$lc" = "force" ]; then
- true
- fi
- done
- false
-}
-
-# PROGRAM START
-
-# determine whether we have gettext; make it a no-op if we do not
-if [ ! $(type -t gettext) ]; then
- gettext() {
- echo "$@"
- }
-fi
-
-if [ "$1" = "-h" -o "$1" = "--help" ]; then
- usage
- exit 0
-fi
-
-if [ "$1" = "-V" -o "$1" = "--version" ]; then
- version
- exit 0
-fi
-
-if [ $# -lt 3 ]; then
- usage
- exit 1
-fi
-
-# source system and user makepkg.conf
-if [ -r @sysconfdir@/makepkg.conf ]; then
- source @sysconfdir@/makepkg.conf
-else
- die "$(gettext "%s not found. Can not continue.")" "@sysconfdir@/makepkg.conf"
-fi
-
-if [ -r ~/.makepkg.conf ]; then
- source ~/.makepkg.conf
-fi
-
-if [ "$1" != "upd" -a "$1" != "del" ]; then
- usage
- exit 1
-fi
-
-action=$1
-pkgdb=$2
-option=$3
-pkgdir="$(pwd)"
-if [ "$4" != "" ]; then
- pkgdir="$4"
-fi
-opt_force=""
-
-printf "$(gettext "\
-NOTE: this script is DEPRECATED. It will be removed in the next major\n\
-release of pacman, so please use repo-add and repo-remove instead.\n\n")"
-
-if [ "$action" = "upd" ]; then # INSERT / UPDATE
- if [ ! -f "$option" ]; then
- die "$(gettext "%s not found")" $option
- fi
-
- unset pkgname pkgver pkgrel options
-
- source $option || die "$(gettext "failed to parse %s")" $option
- if [ "$arch" = 'any' ]; then
- CARCH='any'
- fi
- pkgfile="$pkgdir/$pkgname-$pkgver-$pkgrel-${CARCH}${PKGEXT}"
-
- if [ ! -f "$pkgfile" ]; then
- die "$(gettext "could not find %s-%s-%s-%s%s - aborting")" $pkgname $pkgver $pkgrel $CARCH $PKGEXT
- fi
-
- if check_force; then
- opt_force="--force"
- fi
-
- repo-add "$pkgdb" $opt_force "$pkgfile"
-else # DELETE
- fname="$(basename $option)"
- if [ "$fname" = "PKGBUILD" ]; then
- if [ ! -f "$option" ]; then
- die "$(gettext "%s not found")" $option
- fi
-
- unset pkgname pkgver pkgrel options
- source $option
- else
- pkgname=$option
- fi
-
- repo-remove "$pkgdb" "$pkgname"
-fi
-
-exit 0
-# vim: set ts=2 sw=2 noet: