summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--configure.ac1
-rw-r--r--doc/PKGBUILD.5.txt6
-rw-r--r--doc/makepkg.8.txt3
-rw-r--r--doc/makepkg.conf.5.txt8
-rw-r--r--etc/makepkg.conf.in4
-rw-r--r--lib/libalpm/add.c11
-rw-r--r--lib/libalpm/alpm.h7
-rw-r--r--lib/libalpm/package.c9
-rw-r--r--lib/libalpm/sync.c47
-rw-r--r--pactest/Makefile.am3
-rwxr-xr-xpactest/pmenv.py8
-rwxr-xr-xpactest/pmfile.py8
-rw-r--r--pactest/tests/Makefile.am26
-rw-r--r--pactest/tests/sync200.py.in (renamed from pactest/tests/sync200.py)3
-rw-r--r--scripts/makepkg.sh.in116
-rw-r--r--scripts/repo-add.sh.in21
-rw-r--r--src/pacman/callback.c17
-rw-r--r--src/pacman/conf.h1
-rw-r--r--src/pacman/pacman.c3
-rw-r--r--src/pacman/remove.c6
-rw-r--r--src/pacman/sync.c57
-rw-r--r--src/pacman/util.c29
-rw-r--r--src/pacman/util.h3
23 files changed, 230 insertions, 167 deletions
diff --git a/configure.ac b/configure.ac
index 20aa1807..87abc1f7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -348,6 +348,7 @@ doc/Makefile
etc/Makefile
po/Makefile.in
pactest/Makefile
+pactest/tests/Makefile
contrib/Makefile
Makefile
])
diff --git a/doc/PKGBUILD.5.txt b/doc/PKGBUILD.5.txt
index 0b1ce649..cf6eb23a 100644
--- a/doc/PKGBUILD.5.txt
+++ b/doc/PKGBUILD.5.txt
@@ -181,8 +181,8 @@ similar to `$_basekernver`.
disable this option.
*docs*;;
- Save doc and info directories. If you wish to delete doc and
- info directories, specify `!docs` in the array.
+ Save doc directories. If you wish to delete doc directories,
+ specify `!docs` in the array.
*libtool*;;
Leave libtool (.la) files in packages. Specify `!libtool` to
@@ -192,7 +192,7 @@ similar to `$_basekernver`.
Leave empty directories in packages.
*zipman*;;
- Compress man pages with gzip.
+ Compress man and info pages with gzip.
*ccache*;;
Allow the use of ccache during build. More useful in its negative
diff --git a/doc/makepkg.8.txt b/doc/makepkg.8.txt
index b6d9373a..ddf73dae 100644
--- a/doc/makepkg.8.txt
+++ b/doc/makepkg.8.txt
@@ -52,6 +52,9 @@ Options
Removes all cached source files from the directory specified in `SRCDEST`
in linkman:makepkg.conf[5].
+*--config* <`/path/to/config`>::
+ Use an alternate config file instead of the `/etc/makepkg.conf` default;
+
*-d, \--nodeps*::
Do not perform any dependency checks. This will let you override and
ignore any dependencies required. There is a good chance this option
diff --git a/doc/makepkg.conf.5.txt b/doc/makepkg.conf.5.txt
index 8b39c467..e59bb409 100644
--- a/doc/makepkg.conf.5.txt
+++ b/doc/makepkg.conf.5.txt
@@ -110,8 +110,8 @@ Options
option.
*docs*;;
- Save doc and info directories. If you wish to delete doc and info
- directories, specify `!docs' in the array.
+ Save doc directories. If you wish to delete doc directories, specify
+ `!docs' in the array.
*libtool*;;
Leave libtool (.la) files in packages. Specify `!libtool' to remove
@@ -121,7 +121,7 @@ Options
Leave empty directories in packages.
*zipman*;;
- Compress man pages with gzip.
+ Compress man and info pages with gzip.
**INTEGRITY_CHECK=(**check1 ...**)**::
File integrity checks to use. Multiple checks may be specified; this
@@ -156,7 +156,7 @@ Options
This value is used when querying a package to see who was the builder.
It is recommended you change this to your name and email address.
-*BUILDSCRIPT*, *PKGEXT*, *SRCEXT*, *DB_COMPRESSION*, *DB_CHECKSUMS*::
+*BUILDSCRIPT*, *PKGEXT*, *SRCEXT*::
Do not touch these unless you know what you are doing.
diff --git a/etc/makepkg.conf.in b/etc/makepkg.conf.in
index 0241a8ec..c481e058 100644
--- a/etc/makepkg.conf.in
+++ b/etc/makepkg.conf.in
@@ -72,7 +72,7 @@ OPTIONS=(strip docs libtool emptydirs zipman)
#-- File integrity checks to use. Valid: md5, sha1, sha256, sha384, sha512
INTEGRITY_CHECK=(md5)
#-- Info and doc directories to remove (if option set correctly above)
-DOC_DIRS=(usr/{,share/}{info,doc,gtk-doc} opt/*/{info,doc,gtk-doc})
+DOC_DIRS=(usr/{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc})
#-- Directories to be searched for the strip option (if option set correctly above)
STRIP_DIRS=(bin lib sbin usr/{bin,lib,sbin,local/{bin,lib,sbin}} opt/*/{bin,lib,sbin})
@@ -99,7 +99,5 @@ STRIP_DIRS=(bin lib sbin usr/{bin,lib,sbin,local/{bin,lib,sbin}} opt/*/{bin,lib,
BUILDSCRIPT='PKGBUILD'
PKGEXT='@PKGEXT@'
SRCEXT='@SRCEXT@'
-DB_COMPRESSION='gz'
-DB_CHECKSUMS=(md5)
# vim: set ft=sh ts=2 sw=2 et:
diff --git a/lib/libalpm/add.c b/lib/libalpm/add.c
index eef7aab1..3c832b3e 100644
--- a/lib/libalpm/add.c
+++ b/lib/libalpm/add.c
@@ -650,17 +650,18 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,
if(local) {
is_upgrade = 1;
- EVENT(trans, PM_TRANS_EVT_UPGRADE_START, newpkg, NULL);
- _alpm_log(PM_LOG_DEBUG, "upgrading package %s-%s\n",
- newpkg->name, newpkg->version);
-
/* we'll need to save some record for backup checks later */
oldpkg = _alpm_pkg_dup(local);
/* make sure all infos are loaded because the database entry
* will be removed soon */
_alpm_db_read(oldpkg->origin_data.db, oldpkg, INFRQ_ALL);
+
+ EVENT(trans, PM_TRANS_EVT_UPGRADE_START, newpkg, oldpkg);
+ _alpm_log(PM_LOG_DEBUG, "upgrading package %s-%s\n",
+ newpkg->name, newpkg->version);
+
/* copy over the install reason */
- newpkg->reason = alpm_pkg_get_reason(local);
+ newpkg->reason = alpm_pkg_get_reason(oldpkg);
/* pre_upgrade scriptlet */
if(alpm_pkg_has_scriptlet(newpkg) && !(trans->flags & PM_TRANS_FLAG_NOSCRIPTLET)) {
diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h
index 16b48a0a..cdceaf01 100644
--- a/lib/libalpm/alpm.h
+++ b/lib/libalpm/alpm.h
@@ -218,6 +218,7 @@ alpm_list_t *alpm_pkg_get_deltas(pmpkg_t *pkg);
alpm_list_t *alpm_pkg_get_replaces(pmpkg_t *pkg);
alpm_list_t *alpm_pkg_get_files(pmpkg_t *pkg);
alpm_list_t *alpm_pkg_get_backup(pmpkg_t *pkg);
+pmdb_t *alpm_pkg_get_db(pmpkg_t *pkg);
void *alpm_pkg_changelog_open(pmpkg_t *pkg);
size_t alpm_pkg_changelog_read(void *ptr, size_t size,
const pmpkg_t *pkg, const void *fp);
@@ -282,7 +283,7 @@ typedef enum _pmtransflag_t {
PM_TRANS_FLAG_DOWNLOADONLY = 0x200,
PM_TRANS_FLAG_NOSCRIPTLET = 0x400,
PM_TRANS_FLAG_NOCONFLICTS = 0x800,
- PM_TRANS_FLAG_PRINTURIS = 0x1000,
+ /* 0x1000 flag can go here */
PM_TRANS_FLAG_NEEDED = 0x2000,
PM_TRANS_FLAG_ALLEXPLICIT = 0x4000,
PM_TRANS_FLAG_UNNEEDED = 0x8000,
@@ -364,10 +365,6 @@ typedef enum _pmtransevt_t {
* A line of text is passed to the callback.
*/
PM_TRANS_EVT_SCRIPTLET_INFO,
- /** Print URI.
- * The database's URI and the package's filename are passed to the callback.
- */
- PM_TRANS_EVT_PRINTURI,
/** Files will be downloaded from a repository.
* The repository's tree name is passed to the callback.
*/
diff --git a/lib/libalpm/package.c b/lib/libalpm/package.c
index eaef688d..13020041 100644
--- a/lib/libalpm/package.c
+++ b/lib/libalpm/package.c
@@ -423,6 +423,15 @@ alpm_list_t SYMEXPORT *alpm_pkg_get_backup(pmpkg_t *pkg)
return pkg->backup;
}
+pmdb_t SYMEXPORT *alpm_pkg_get_db(pmpkg_t *pkg)
+{
+ /* Sanity checks */
+ ASSERT(pkg != NULL, return(NULL));
+ ASSERT(pkg->origin == PKG_FROM_CACHE, return(NULL));
+
+ return(pkg->origin_data.db);
+}
+
/**
* Open a package changelog for reading. Similar to fopen in functionality,
* except that the returned 'file stream' could really be from an archive
diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c
index 4a705b57..22b391bc 100644
--- a/lib/libalpm/sync.c
+++ b/lib/libalpm/sync.c
@@ -497,8 +497,7 @@ int _alpm_sync_prepare(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sync
EVENT(trans, PM_TRANS_EVT_RESOLVEDEPS_DONE, NULL, NULL);
}
- /* We don't care about conflicts if we're just printing uris */
- if(!(trans->flags & (PM_TRANS_FLAG_NOCONFLICTS | PM_TRANS_FLAG_PRINTURIS))) {
+ if(!(trans->flags & PM_TRANS_FLAG_NOCONFLICTS)) {
/* check for inter-conflicts and whatnot */
EVENT(trans, PM_TRANS_EVT_INTERCONFLICTS_START, NULL, NULL);
@@ -838,32 +837,27 @@ int _alpm_sync_commit(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t **data)
fname = alpm_pkg_get_filename(spkg);
ASSERT(fname != NULL, RET_ERR(PM_ERR_PKG_INVALID_NAME, -1));
- if(trans->flags & PM_TRANS_FLAG_PRINTURIS) {
- EVENT(trans, PM_TRANS_EVT_PRINTURI, (char *)alpm_db_get_url(current),
- (char *)fname);
- } else {
- if(spkg->download_size != 0) {
- alpm_list_t *delta_path = spkg->delta_path;
- if(delta_path) {
- alpm_list_t *dlts = NULL;
-
- for(dlts = delta_path; dlts; dlts = dlts->next) {
- pmdelta_t *d = dlts->data;
-
- if(d->download_size != 0) {
- /* add the delta filename to the download list if
- * it's not in the cache */
- files = alpm_list_add(files, strdup(d->delta));
- }
-
- /* keep a list of the delta files for md5sums */
- deltas = alpm_list_add(deltas, d);
+ if(spkg->download_size != 0) {
+ alpm_list_t *delta_path = spkg->delta_path;
+ if(delta_path) {
+ alpm_list_t *dlts = NULL;
+
+ for(dlts = delta_path; dlts; dlts = dlts->next) {
+ pmdelta_t *d = dlts->data;
+
+ if(d->download_size != 0) {
+ /* add the delta filename to the download list if
+ * it's not in the cache */
+ files = alpm_list_add(files, strdup(d->delta));
}
- } else {
- /* not using deltas, so add the file to the download list */
- files = alpm_list_add(files, strdup(fname));
+ /* keep a list of the delta files for md5sums */
+ deltas = alpm_list_add(deltas, d);
}
+
+ } else {
+ /* not using deltas, so add the file to the download list */
+ files = alpm_list_add(files, strdup(fname));
}
}
}
@@ -880,9 +874,6 @@ int _alpm_sync_commit(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t **data)
FREELIST(files);
}
}
- if(trans->flags & PM_TRANS_FLAG_PRINTURIS) {
- return(0);
- }
/* clear out value to let callback know we are done */
if(handle->totaldlcb) {
diff --git a/pactest/Makefile.am b/pactest/Makefile.am
index ce611f78..64f9a22e 100644
--- a/pactest/Makefile.am
+++ b/pactest/Makefile.am
@@ -1,3 +1,5 @@
+SUBDIRS = tests
+
check_SCRIPTS = \
pactest.py \
pmdb.py \
@@ -7,7 +9,6 @@ check_SCRIPTS = \
pmrule.py \
pmtest.py \
util.py \
- $(wildcard tests/*.py) \
vercmptest.sh
noinst_SCRIPTS = $(check_SCRIPTS)
diff --git a/pactest/pmenv.py b/pactest/pmenv.py
index e9d0b4c9..cc433dd0 100755
--- a/pactest/pmenv.py
+++ b/pactest/pmenv.py
@@ -71,9 +71,11 @@ class pmenv:
t.generate()
# Hack for mtimes consistency
for i in t.rules:
- if i.rule.find("MODIFIED") != -1:
- time.sleep(1.5)
- break
+ if i.rule.find("FILE_MODIFIED") != -1:
+ [test, arg] = i.rule.split("=")
+ for f in t.files:
+ if f.name == arg:
+ f.resettimes()
t.run(self.pacman)
diff --git a/pactest/pmfile.py b/pactest/pmfile.py
index 21baf017..ab4aa2c7 100755
--- a/pactest/pmfile.py
+++ b/pactest/pmfile.py
@@ -56,6 +56,14 @@ class pmfile:
return retval
+ def resettimes(self):
+ """
+ """
+
+ filename = os.path.join(self.root, self.name)
+ os.utime(filename, (355, 355))
+ self.mtime = getmtime(filename)
+ vprint("\tmtime reset (%s)" % self.name)
if __name__ == "__main__":
f = pmfile("/tmp", "foobar")
diff --git a/pactest/tests/Makefile.am b/pactest/tests/Makefile.am
new file mode 100644
index 00000000..42ca5cbe
--- /dev/null
+++ b/pactest/tests/Makefile.am
@@ -0,0 +1,26 @@
+CONFTESTS = $(patsubst %py.in,%py,$(wildcard *.py.in))
+
+check_SCRIPTS = \
+ $(wildcard *.py) \
+ $(CONFTESTS)
+
+noinst_SCRIPTS = $(check_SCRIPTS)
+
+EXTRA_DIST = $(check_SCRIPTS)
+
+CLEANFILES = $(CONFTESTS)
+
+#### Taken from the autoconf scripts Makefile.am ####
+edit = sed \
+ -e 's|@LIBS[@]|$(LIBS)|g' \
+ -e 's|@configure_input[@]|Generated from $@.in; do not edit by hand.|g'
+
+
+$(CONFTESTS): Makefile
+ rm -f $@ $@.tmp
+ test -f $(srcdir)/$@.in && $(edit) $(srcdir)/$@.in >$@.tmp || true
+ test -f $@.tmp || false
+ chmod a-w $@.tmp
+ mv $@.tmp $@
+
+# vim:set ts=2 sw=2 noet:
diff --git a/pactest/tests/sync200.py b/pactest/tests/sync200.py.in
index 9005bd3d..3c11f83f 100644
--- a/pactest/tests/sync200.py
+++ b/pactest/tests/sync200.py.in
@@ -1,5 +1,8 @@
self.description = "Synchronize the local database"
+if not "download" in "@LIBS@":
+ self.option['XferCommand'] = ['/usr/bin/curl %u > %o']
+
sp1 = pmpkg("spkg1", "1.0-1")
sp1.depends = ["spkg2"]
sp2 = pmpkg("spkg2", "2.0-1")
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index d127d164..ddf6cd83 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -266,7 +266,7 @@ get_downloadclient() {
# if we didn't find an agent, return an error
if [ -z "$agent" ]; then
- error "$(gettext "There is no agent set up to handle %s URLs. Check %s.")" "$proto" "$confdir/makepkg.conf"
+ error "$(gettext "There is no agent set up to handle %s URLs. Check %s.")" "$proto" "$MAKEPKG_CONF"
plain "$(gettext "Aborting...")"
exit 1 # $E_CONFIG_ERROR
fi
@@ -463,6 +463,11 @@ generate_checksums() {
msg "$(gettext "Generating checksums for source files...")"
plain ""
+ if [ ! $(type -p openssl) ]; then
+ error "$(gettext "Cannot find openssl.")"
+ exit 1 # $E_MISSING_PROGRAM
+ fi
+
local integ
for integ in ${INTEGRITY_CHECK[@]}; do
integ="$(echo $integ | tr '[:upper:]' '[:lower:]')"
@@ -473,11 +478,6 @@ generate_checksums() {
exit 1;; # $E_CONFIG_ERROR
esac
- if [ ! $(type -p openssl) ]; then
- error "$(gettext "Cannot find openssl.")"
- exit 1 # $E_MISSING_PROGRAM
- fi
-
local ct=0
local numsrc=${#source[@]}
echo -n "${integ}sums=("
@@ -515,21 +515,13 @@ generate_checksums() {
}
check_checksums() {
- local integ
- for integ in ${INTEGRITY_CHECK[@]}; do
- integ="$(echo $integ | tr '[:upper:]' '[:lower:]')"
- case "$integ" in
- md5|sha1|sha256|sha384|sha512) : ;;
- *)
- error "$(gettext "Invalid integrity algorithm '%s' specified")" "$integ"
- exit 1;; # $E_CONFIG_ERROR
- esac
-
- if [ ! $(type -p openssl) ]; then
- error "$(gettext "Cannot find openssl.")"
- exit 1 # $E_MISSING_PROGRAM
- fi
+ if [ ! $(type -p openssl) ]; then
+ error "$(gettext "Cannot find openssl.")"
+ exit 1 # $E_MISSING_PROGRAM
+ fi
+ local integ required
+ for integ in md5 sha1 sha256 sha384 sha512; do
local integrity_sums=($(eval echo "\${${integ}sums[@]}"))
if [ ${#integrity_sums[@]} -eq ${#source[@]} ]; then
msg "$(gettext "Validating source files with %s...")" "${integ}sums"
@@ -567,7 +559,13 @@ check_checksums() {
exit 1 # TODO: error code
fi
else
- warning "$(gettext "Integrity checks (%s) are missing or incomplete.")" "$integ"
+ for required in ${INTEGRITY_CHECK[@]}; do
+ required="$(echo $required | tr '[:upper:]' '[:lower:]')"
+ if [ "$integ" = "$required" ]; then
+ warning "$(gettext "Integrity checks (%s) are missing or incomplete.")" "$integ"
+ break
+ fi
+ done
fi
done
}
@@ -684,16 +682,16 @@ tidy_install() {
msg "$(gettext "Tidying install...")"
if [ "$(check_option docs)" = "n" ]; then
- msg2 "$(gettext "Removing info/doc files...")"
+ msg2 "$(gettext "Removing doc files...")"
#fix flyspray bug #5021
rm -rf ${DOC_DIRS[@]}
fi
if [ "$(check_option zipman)" = "y" ]; then
- msg2 "$(gettext "Compressing man pages...")"
+ msg2 "$(gettext "Compressing man and info 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 |
+ mandirs=({usr{,/local}{,/share},opt/*}/{man,info})
+ find ${mandirs[@]} -type f 2>/dev/null |
while read manpage ; do
# check file still exists (potentially compressed with hard link)
if [ -f ${manpage} ]; then
@@ -701,7 +699,7 @@ tidy_install() {
file="${manpage##*/}"
if [ "$ext" != "gz" -a "$ext" != "bz2" ]; then
# update symlinks to this manpage
- find ${mandirs} -lname "$file" 2>/dev/null |
+ find ${mandirs[@]} -lname "$file" 2>/dev/null |
while read link ; do
rm -f "$link"
ln -sf "${file}.gz" "${link}.gz"
@@ -709,7 +707,7 @@ tidy_install() {
# 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
+ hardlinks="$(find ${mandirs[@]} \! -name "$file" -samefile "$manpage" 2>/dev/null)" || true
for hl in ${hardlinks}; do
rm -f "${hl}";
done
@@ -1079,6 +1077,7 @@ usage() {
printf "$(gettext " -A, --ignorearch Ignore incomplete arch field in %s")\n" "$BUILDSCRIPT"
echo "$(gettext " -c, --clean Clean up work files after build")"
echo "$(gettext " -C, --cleancache Clean up source files from the cache")"
+ printf "$(gettext " --config <config> Use an alternate config file (instead of '%s')")\n" "$confdir/makepkg.conf"
echo "$(gettext " -d, --nodeps Skip all dependency checks")"
echo "$(gettext " -e, --noextract Do not extract source files (use existing src/ dir)")"
echo "$(gettext " -f, --force Overwrite existing package")"
@@ -1126,36 +1125,12 @@ fi
ARGLIST=$@
-#preserve environment variables
-_PKGDEST=${PKGDEST}
-_SRCDEST=${SRCDEST}
-
-# Source makepkg.conf; fail if it is not found
-if [ -r "$confdir/makepkg.conf" ]; then
- source "$confdir/makepkg.conf"
-else
- error "$(gettext "%s not found.")" "$confdir/makepkg.conf"
- plain "$(gettext "Aborting...")"
- exit 1 # $E_CONFIG_ERROR
-fi
-
-# Source user-specific makepkg.conf overrides
-if [ -r ~/.makepkg.conf ]; then
- source ~/.makepkg.conf
-fi
-
-# override settings with an environment variable for batch processing
-PKGDEST=${_PKGDEST:-$PKGDEST}
-PKGDEST=${PKGDEST:-$startdir} #default to $startdir if undefined
-SRCDEST=${_SRCDEST:-$SRCDEST}
-SRCDEST=${SRCDEST:-$startdir} #default to $startdir if undefined
-
# Parse Command Line Options.
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"
+OPT_LONG="$OPT_LONG,syncdeps,version,config:"
# Pacman Options
OPT_LONG="$OPT_LONG,noconfirm,noprogressbar"
OPT_TEMP="$(getopt -o "$OPT_SHORT" -l "$OPT_LONG" -n "$(basename "$0")" -- "$@" || echo 'GETOPT GO BANG!')"
@@ -1178,6 +1153,7 @@ while true; do
-A|--ignorearch) IGNOREARCH=1 ;;
-c|--clean) CLEANUP=1 ;;
-C|--cleancache) CLEANCACHE=1 ;;
+ --config) shift; MAKEPKG_CONF=$1 ;;
-d|--nodeps) NODEPS=1 ;;
-e|--noextract) NOEXTRACT=1 ;;
-f|--force) FORCE=1 ;;
@@ -1205,6 +1181,34 @@ while true; do
shift
done
+#preserve environment variables
+_PKGDEST=${PKGDEST}
+_SRCDEST=${SRCDEST}
+
+# default config is makepkg.conf
+MAKEPKG_CONF=${MAKEPKG_CONF:-$confdir/makepkg.conf}
+
+# Source the config file; fail if it is not found
+if [ -r "$MAKEPKG_CONF" ]; then
+ source "$MAKEPKG_CONF"
+else
+ error "$(gettext "%s not found.")" "$MAKEPKG_CONF"
+ plain "$(gettext "Aborting...")"
+ exit 1 # $E_CONFIG_ERROR
+fi
+
+# Source user-specific makepkg.conf overrides
+if [ -r ~/.makepkg.conf ]; then
+ source ~/.makepkg.conf
+fi
+
+# override settings with an environment variable for batch processing
+PKGDEST=${_PKGDEST:-$PKGDEST}
+PKGDEST=${PKGDEST:-$startdir} #default to $startdir if undefined
+SRCDEST=${_SRCDEST:-$SRCDEST}
+SRCDEST=${SRCDEST:-$startdir} #default to $startdir if undefined
+
+
if [ "$HOLDVER" = "1" -a "$FORCE_VER" != "" ]; then
# The '\\0' is here to prevent gettext from thinking --holdver is an option
error "$(gettext "\\0--holdver and --forcever cannot both be specified" )"
@@ -1236,14 +1240,14 @@ if [ "$CLEANCACHE" = "1" ]; then
fi
else
# $SRCDEST is $startdir, two possibilities
- error "$(gettext "Source destination must be defined in makepkg.conf.")"
+ error "$(gettext "Source destination must be defined in %s.")" "$MAKEPKG_CONF"
plain "$(gettext "In addition, please run makepkg -C outside of your cache directory.")"
exit 1
fi
fi
if [ -z $BUILDSCRIPT ]; then
- error "$(gettext "BUILDSCRIPT is undefined! Ensure you have updated %s.")" "$confdir/makepkg.conf"
+ error "$(gettext "BUILDSCRIPT is undefined! Ensure you have updated %s.")" "$MAKEPKG_CONF"
exit 1
fi
@@ -1262,13 +1266,13 @@ if [ "$INFAKEROOT" = "0" ]; then
elif [ "$(check_buildenv fakeroot)" = "y" -a $EUID -gt 0 ]; then
if [ ! $(type -p fakeroot) ]; then
error "$(gettext "Fakeroot must be installed if using the 'fakeroot' option")"
- plain "$(gettext "in the BUILDENV array in %s.")" "$confdir/makepkg.conf"
+ plain "$(gettext "in the BUILDENV array in %s.")" "$MAKEPKG_CONF"
exit 1
fi
elif [ $EUID -gt 0 ]; then
warning "$(gettext "Running makepkg as an unprivileged user will result in non-root")"
plain "$(gettext "ownership of the packaged files. Try using the fakeroot environment by")"
- plain "$(gettext "placing 'fakeroot' in the BUILDENV array in makepkg.conf.")"
+ plain "$(gettext "placing 'fakeroot' in the BUILDENV array in %s.")" "$MAKEPKG_CONF"
sleep 1
fi
else
diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in
index f3a3a4f4..d6d59eb7 100644
--- a/scripts/repo-add.sh.in
+++ b/scripts/repo-add.sh.in
@@ -305,18 +305,6 @@ else
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.")"; \
@@ -387,10 +375,11 @@ if [ $success -eq 1 ]; 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.")" ;;
+ 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
bsdtar -c${TAR_OPT}f "$REPO_DB_FILE" *
diff --git a/src/pacman/callback.c b/src/pacman/callback.c
index a6349874..3c98d398 100644
--- a/src/pacman/callback.c
+++ b/src/pacman/callback.c
@@ -226,9 +226,6 @@ void cb_trans_evt(pmtransevt_t event, void *data1, void *data2)
case PM_TRANS_EVT_SCRIPTLET_INFO:
printf("%s", (char*)data1);
break;
- case PM_TRANS_EVT_PRINTURI:
- printf("%s/%s\n", (char*)data1, (char*)data2);
- break;
case PM_TRANS_EVT_RETRIEVE_START:
printf(_(":: Retrieving packages from %s...\n"), (char*)data1);
break;
@@ -255,33 +252,33 @@ void cb_trans_conv(pmtransconv_t event, void *data1, void *data2,
case PM_TRANS_CONV_INSTALL_IGNOREPKG:
if(data2) {
/* TODO we take this route based on data2 being not null? WTF */
- *response = yesno(1, _(":: %s requires installing %s from IgnorePkg/IgnoreGroup. Install anyway?"),
+ *response = yesno(_(":: %s requires installing %s from IgnorePkg/IgnoreGroup. Install anyway?"),
alpm_pkg_get_name(data2),
alpm_pkg_get_name(data1));
} else {
- *response = yesno(1, _(":: %s is in IgnorePkg/IgnoreGroup. Install anyway?"),
+ *response = yesno(_(":: %s is in IgnorePkg/IgnoreGroup. Install anyway?"),
alpm_pkg_get_name(data1));
}
break;
case PM_TRANS_CONV_REMOVE_HOLDPKG:
- *response = yesno(1, _(":: %s is designated as a HoldPkg. Remove anyway?"),
+ *response = yesno(_(":: %s is designated as a HoldPkg. Remove anyway?"),
alpm_pkg_get_name(data1));
break;
case PM_TRANS_CONV_REPLACE_PKG:
- *response = yesno(1, _(":: Replace %s with %s/%s?"),
+ *response = yesno(_(":: Replace %s with %s/%s?"),
alpm_pkg_get_name(data1),
(char *)data3,
alpm_pkg_get_name(data2));
break;
case PM_TRANS_CONV_CONFLICT_PKG:
- *response = yesno(1, _(":: %s conflicts with %s. Remove %s?"),
+ *response = yesno(_(":: %s conflicts with %s. Remove %s?"),
(char *)data1,
(char *)data2,
(char *)data2);
break;
case PM_TRANS_CONV_LOCAL_NEWER:
if(!config->op_s_downloadonly) {
- *response = yesno(1, _(":: %s-%s: local version is newer. Upgrade anyway?"),
+ *response = yesno(_(":: %s-%s: local version is newer. Upgrade anyway?"),
alpm_pkg_get_name(data1),
alpm_pkg_get_version(data1));
} else {
@@ -289,7 +286,7 @@ void cb_trans_conv(pmtransconv_t event, void *data1, void *data2,
}
break;
case PM_TRANS_CONV_CORRUPTED_PKG:
- *response = yesno(1, _(":: File %s is corrupted. Do you want to delete it?"),
+ *response = yesno(_(":: File %s is corrupted. Do you want to delete it?"),
(char *)data1);
break;
}
diff --git a/src/pacman/conf.h b/src/pacman/conf.h
index 9d2318df..8ea66629 100644
--- a/src/pacman/conf.h
+++ b/src/pacman/conf.h
@@ -57,6 +57,7 @@ typedef struct __config_t {
unsigned short op_s_sync;
unsigned short op_s_search;
unsigned short op_s_upgrade;
+ unsigned short op_s_printuris;
unsigned short group;
pmtransflag_t flags;
diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c
index 04b5e491..83e713a8 100644
--- a/src/pacman/pacman.c
+++ b/src/pacman/pacman.c
@@ -462,7 +462,8 @@ static int parseargs(int argc, char *argv[])
case 'o': config->op_q_owns = 1; break;
case 'p':
config->op_q_isfile = 1;
- config->flags |= PM_TRANS_FLAG_PRINTURIS;
+ config->op_s_printuris = 1;
+ config->flags |= PM_TRANS_FLAG_NOCONFLICTS;
break;
case 'q':
config->quiet = 1;
diff --git a/src/pacman/remove.c b/src/pacman/remove.c
index f091fa4d..b70f7035 100644
--- a/src/pacman/remove.c
+++ b/src/pacman/remove.c
@@ -75,10 +75,10 @@ int pacman_remove(alpm_list_t *targets)
}
printf(_(":: group %s:\n"), targ);
list_display(" ", pkgnames);
- int all = yesno(1, _(" Remove whole content?"));
+ int all = yesno(_(" Remove whole content?"));
for(p = pkgnames; p; p = alpm_list_next(p)) {
char *pkgn = alpm_list_getdata(p);
- if(all || yesno(1, _(":: Remove %s from group %s?"), pkgn, targ)) {
+ if(all || yesno(_(":: Remove %s from group %s?"), pkgn, targ)) {
if(alpm_trans_addtarget(pkgn) == -1) {
pm_fprintf(stderr, PM_LOG_ERROR, "'%s': %s\n", targ,
alpm_strerrorlast());
@@ -131,7 +131,7 @@ int pacman_remove(alpm_list_t *targets)
printf("\n");
/* get confirmation */
- if(yesno(1, _("Do you want to remove these packages?")) == 0) {
+ if(yesno(_("Do you want to remove these packages?")) == 0) {
retval = 1;
goto cleanup;
}
diff --git a/src/pacman/sync.c b/src/pacman/sync.c
index 8d0c529a..e8507143 100644
--- a/src/pacman/sync.c
+++ b/src/pacman/sync.c
@@ -85,7 +85,7 @@ static int sync_cleandb(const char *dbpath, int keep_used) {
/* We have a directory that doesn't match any syncdb.
* Ask the user if he wants to remove it. */
if(!found) {
- if(!yesno(1, _("Do you want to remove %s?"), path)) {
+ if(!yesno(_("Do you want to remove %s?"), path)) {
continue;
}
@@ -105,7 +105,7 @@ static int sync_cleandb_all(void) {
char newdbpath[PATH_MAX];
printf(_("Database directory: %s\n"), dbpath);
- if(!yesno(1, _("Do you want to remove unused repositories?"))) {
+ if(!yesno(_("Do you want to remove unused repositories?"))) {
return(0);
}
/* The sync dbs were previously put in dbpath/, but are now in dbpath/sync/,
@@ -135,12 +135,12 @@ static int sync_cleancache(int level)
printf(_("Cache directory: %s\n"), cachedir);
switch(config->cleanmethod) {
case PM_CLEAN_KEEPINST:
- if(!yesno(1, _("Do you want to remove uninstalled packages from cache?"))) {
+ if(!yesno(_("Do you want to remove uninstalled packages from cache?"))) {
return(0);
}
break;
case PM_CLEAN_KEEPCUR:
- if(!yesno(1, _("Do you want to remove outdated packages from cache?"))) {
+ if(!yesno(_("Do you want to remove outdated packages from cache?"))) {
return(0);
}
break;
@@ -215,7 +215,7 @@ static int sync_cleancache(int level)
} else {
/* full cleanup */
printf(_("Cache directory: %s\n"), cachedir);
- if(!yesno(0, _("Do you want to remove ALL packages from cache?"))) {
+ if(!noyes(_("Do you want to remove ALL packages from cache?"))) {
return(0);
}
printf(_("removing all packages from cache... "));
@@ -604,14 +604,14 @@ static int sync_trans(alpm_list_t *targets)
(char*)alpm_pkg_get_name(k->data));
}
list_display(" ", pkgnames);
- if(yesno(1, _(":: Install whole content?"))) {
+ if(yesno(_(":: Install whole content?"))) {
for(k = pkgnames; k; k = alpm_list_next(k)) {
targets = alpm_list_add(targets, strdup(alpm_list_getdata(k)));
}
} else {
for(k = pkgnames; k; k = alpm_list_next(k)) {
char *pkgname = alpm_list_getdata(k);
- if(yesno(1, _(":: Install %s from group %s?"), pkgname, targ)) {
+ if(yesno(_(":: Install %s from group %s?"), pkgname, targ)) {
targets = alpm_list_add(targets, strdup(pkgname));
}
}
@@ -666,23 +666,32 @@ static int sync_trans(alpm_list_t *targets)
goto cleanup;
}
- if(!(alpm_trans_get_flags() & PM_TRANS_FLAG_PRINTURIS)) {
- int confirm;
+ /* Step 3: actually perform the operation */
+ if(config->op_s_printuris) {
+ /* print uris */
+ alpm_list_t *i;
+ for(i = packages; i; i = alpm_list_next(i)) {
+ pmpkg_t *pkg = alpm_sync_get_pkg((pmsyncpkg_t *)alpm_list_getdata(i));
+ pmdb_t *db = alpm_pkg_get_db(pkg);
+ printf("%s/%s\n", alpm_db_get_url(db), alpm_pkg_get_filename(pkg));
+ }
+ /* we are done */
+ goto cleanup;
+ }
- display_synctargets(packages);
- printf("\n");
+ display_synctargets(packages);
+ printf("\n");
- if(config->op_s_downloadonly) {
- confirm = yesno(1, _("Proceed with download?"));
- } else {
- confirm = yesno(1, _("Proceed with installation?"));
- }
- if(!confirm) {
- goto cleanup;
- }
- }/* else 'print uris' requested. We're done at this point */
+ int confirm;
+ if(config->op_s_downloadonly) {
+ confirm = yesno(_("Proceed with download?"));
+ } else {
+ confirm = yesno(_("Proceed with installation?"));
+ }
+ if(!confirm) {
+ goto cleanup;
+ }
- /* Step 3: actually perform the installation */
if(alpm_trans_commit(&data) == -1) {
pm_fprintf(stderr, PM_LOG_ERROR, _("failed to commit transaction (%s)\n"),
alpm_strerrorlast());
@@ -739,7 +748,7 @@ int pacman_sync(alpm_list_t *targets)
alpm_list_t *sync_dbs = NULL;
/* Display only errors with -Sp and -Sw operations */
- if(config->flags & (PM_TRANS_FLAG_DOWNLOADONLY | PM_TRANS_FLAG_PRINTURIS)) {
+ if((config->flags & PM_TRANS_FLAG_DOWNLOADONLY) || config->op_s_printuris) {
config->logmask &= ~PM_LOG_WARNING;
}
@@ -811,13 +820,13 @@ int pacman_sync(alpm_list_t *targets)
}
alpm_list_t *targs = alpm_list_strdup(targets);
- if(!(config->flags & (PM_TRANS_FLAG_DOWNLOADONLY | PM_TRANS_FLAG_PRINTURIS))) {
+ if(!(config->flags & PM_TRANS_FLAG_DOWNLOADONLY) && !config->op_s_printuris) {
/* check for newer versions of packages to be upgraded first */
alpm_list_t *packages = syncfirst();
if(packages) {
printf(_(":: The following packages should be upgraded first :\n"));
list_display(" ", packages);
- if(yesno(1, _(":: Do you want to cancel the current operation\n"
+ if(yesno(_(":: Do you want to cancel the current operation\n"
":: and upgrade these packages now?"))) {
FREELIST(targs);
targs = packages;
diff --git a/src/pacman/util.c b/src/pacman/util.c
index c31714e4..14ae0ed3 100644
--- a/src/pacman/util.c
+++ b/src/pacman/util.c
@@ -619,10 +619,9 @@ void display_optdepends(pmpkg_t *pkg)
}
/* presents a prompt and gets a Y/N answer */
-int yesno(short preset, char *fmt, ...)
+static int question(short preset, char *fmt, va_list args)
{
char response[32];
- va_list args;
FILE *stream;
if(config->noconfirm) {
@@ -632,9 +631,7 @@ int yesno(short preset, char *fmt, ...)
stream = stderr;
}
- va_start(args, fmt);
vfprintf(stream, fmt, args);
- va_end(args);
if(preset) {
fprintf(stream, " %s ", _("[Y/n]"));
@@ -662,6 +659,30 @@ int yesno(short preset, char *fmt, ...)
return(0);
}
+int yesno(char *fmt, ...)
+{
+ int ret;
+ va_list args;
+
+ va_start(args, fmt);
+ ret = question(1, fmt, args);
+ va_end(args);
+
+ return(ret);
+}
+
+int noyes(char *fmt, ...)
+{
+ int ret;
+ va_list args;
+
+ va_start(args, fmt);
+ ret = question(0, fmt, args);
+ va_end(args);
+
+ return(ret);
+}
+
int pm_printf(pmloglevel_t level, const char *format, ...)
{
int ret;
diff --git a/src/pacman/util.h b/src/pacman/util.h
index f94f0aed..66a9c4e7 100644
--- a/src/pacman/util.h
+++ b/src/pacman/util.h
@@ -55,7 +55,8 @@ void list_display_linebreak(const char *title, const alpm_list_t *list);
void display_targets(const alpm_list_t *pkgs, int install);
void display_synctargets(const alpm_list_t *syncpkgs);
void display_optdepends(pmpkg_t *pkg);
-int yesno(short preset, char *fmt, ...);
+int yesno(char *fmt, ...);
+int noyes(char *fmt, ...);
int pm_printf(pmloglevel_t level, const char *format, ...) __attribute__((format(printf,2,3)));
int pm_fprintf(FILE *stream, pmloglevel_t level, const char *format, ...) __attribute__((format(printf,3,4)));
int pm_vfprintf(FILE *stream, pmloglevel_t level, const char *format, va_list args) __attribute__((format(printf,3,0)));