diff options
-rwxr-xr-x | contrib/pacsysclean.in | 7 | ||||
-rw-r--r-- | doc/pacman.8.txt | 7 | ||||
-rw-r--r-- | lib/libalpm/deps.c | 29 | ||||
-rw-r--r-- | lib/libalpm/diskspace.c | 14 | ||||
-rw-r--r-- | lib/libalpm/dload.c | 4 | ||||
-rw-r--r-- | scripts/library/parse_options.sh | 32 | ||||
-rw-r--r-- | scripts/makepkg.sh.in | 10 | ||||
-rw-r--r-- | scripts/pacman-key.sh.in | 6 | ||||
-rw-r--r-- | scripts/pacman-optimize.sh.in | 3 | ||||
-rw-r--r-- | src/pacman/conf.h | 1 | ||||
-rw-r--r-- | src/pacman/pacman.c | 8 | ||||
-rw-r--r-- | src/pacman/sync.c | 2 | ||||
-rw-r--r-- | src/pacman/util.c | 10 | ||||
-rw-r--r-- | test/pacman/tests/sync302.py | 8 | ||||
-rw-r--r-- | test/pacman/tests/sync303.py | 3 | ||||
-rw-r--r-- | test/pacman/tests/sync304.py | 2 | ||||
-rw-r--r-- | test/pacman/tests/sync305.py | 3 | ||||
-rw-r--r-- | test/pacman/tests/sync306.py | 1 | ||||
-rw-r--r-- | test/pacman/tests/upgrade078.py | 17 |
19 files changed, 61 insertions, 106 deletions
diff --git a/contrib/pacsysclean.in b/contrib/pacsysclean.in index 17f7681b..162530ef 100755 --- a/contrib/pacsysclean.in +++ b/contrib/pacsysclean.in @@ -1,6 +1,6 @@ #!/bin/bash -# pacsysclean - Sort installed packages by decreasing installed size. Useful for system clean-up. +# pacsysclean - Sort installed packages by increasing installed size. Useful for system clean-up. declare -r myname='pacsysclean' declare -r myver='@PACKAGE_VERSION@' @@ -8,7 +8,7 @@ declare -r myver='@PACKAGE_VERSION@' PACMAN_OPTS= usage() { - echo "$myname - Sort installed packages by decreasing installed size." + echo "$myname - Sort installed packages by increasing installed size." echo echo "Usage: $myname [options]" echo @@ -35,6 +35,9 @@ fi IFS=$'\n' name="^Name.*: (.*)$" size="^Installed Size.*: (.*) KiB$" + +[[ $PACMAN_OPTS != -* ]] && PACMAN_OPTS="-$PACMAN_OPTS" + for line in $(LANG=C pacman -Qi $PACMAN_OPTS); do if [[ $line =~ $name ]]; then printf "%s\t" ${BASH_REMATCH[1]} diff --git a/doc/pacman.8.txt b/doc/pacman.8.txt index 0813b887..275cf965 100644 --- a/doc/pacman.8.txt +++ b/doc/pacman.8.txt @@ -411,13 +411,6 @@ system upgrade and install/upgrade the foo package in the same operation. *\--needed*:: Do not reinstall the targets that are already up to date. -*\--recursive*:: - Recursively reinstall all dependencies of the targets. This forces upgrades - or reinstalls of all dependencies without requiring explicit version - requirements. This is most useful in combination with the '\--needed' flag, - which will induce a deep dependency upgrade without any unnecessary - reinstalls. - Handling Config Files[[HCF]] ---------------------------- diff --git a/lib/libalpm/deps.c b/lib/libalpm/deps.c index c58e667e..eda0648d 100644 --- a/lib/libalpm/deps.c +++ b/lib/libalpm/deps.c @@ -723,12 +723,6 @@ int _alpm_resolvedeps(alpm_handle_t *handle, alpm_list_t *localpkgs, return 0; } - if(handle->trans->flags & ALPM_TRANS_FLAG_RECURSE) { - /* removing local packages from the equation causes the entire dep chain to - * get pulled for each target- e.g., pactree -u output */ - localpkgs = NULL; - } - /* Create a copy of the packages list, so that it can be restored on error */ packages_copy = alpm_list_copy(*packages); @@ -781,29 +775,6 @@ int _alpm_resolvedeps(alpm_handle_t *handle, alpm_list_t *localpkgs, alpm_list_free(deps); } - if(handle->trans->flags & ALPM_TRANS_FLAG_NEEDED) { - /* remove any deps that were pulled that match installed version */ - /* odd loop syntax so we can modify the list as we iterate */ - i = *packages; - while(i) { - alpm_pkg_t *tpkg = i->data; - alpm_pkg_t *local = _alpm_db_get_pkgfromcache( - handle->db_local, tpkg->name); - if(local && _alpm_pkg_compare_versions(tpkg, local) == 0) { - /* with the NEEDED flag, packages up to date are not reinstalled */ - _alpm_log(handle, ALPM_LOG_DEBUG, - "not adding dep %s-%s as it is not needed, same version\n", - local->name, local->version); - j = i; - i = i->next; - *packages = alpm_list_remove_item(*packages, j); - free(j); - } else { - i = i->next; - } - } - } - if(ret != 0) { alpm_list_free(*packages); *packages = packages_copy; diff --git a/lib/libalpm/diskspace.c b/lib/libalpm/diskspace.c index b5c87954..ac7dab00 100644 --- a/lib/libalpm/diskspace.c +++ b/lib/libalpm/diskspace.c @@ -188,8 +188,20 @@ static alpm_mountpoint_t *match_mount_point(const alpm_list_t *mount_points, for(mp = mount_points; mp != NULL; mp = mp->next) { alpm_mountpoint_t *data = mp->data; + /* first, check if the prefix matches */ if(strncmp(data->mount_dir, real_path, data->mount_dir_len) == 0) { - return data; + /* now, the hard work- a file like '/etc/myconfig' shouldn't map to a + * mountpoint '/e', but only '/etc'. If the mountpoint ends in a trailing + * slash, we know we didn't have a mismatch, otherwise we have to do some + * more sanity checks. */ + if(data->mount_dir[data->mount_dir_len - 1] == '/') { + return data; + } else if(strlen(real_path) >= data->mount_dir_len) { + const char next = real_path[data->mount_dir_len]; + if(next == '/' || next == '\0') { + return data; + } + } } } diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c index 7f898954..05988065 100644 --- a/lib/libalpm/dload.c +++ b/lib/libalpm/dload.c @@ -436,8 +436,8 @@ static int curl_download_internal(struct dload_payload *payload, curl_easy_setopt(curl, CURLOPT_WRITEDATA, localf); - /* ignore any SIGPIPE signals- these may occur if our FTP socket dies or - * something along those lines. Store the old signal handler first. */ + /* Ignore any SIGPIPE signals. With libcurl, these shouldn't be happening, + * but better safe than sorry. Store the old signal handler first. */ mask_signal(SIGPIPE, SIG_IGN, &orig_sig_pipe); mask_signal(SIGINT, &inthandler, &orig_sig_int); diff --git a/scripts/library/parse_options.sh b/scripts/library/parse_options.sh index 48fd42cd..39038de6 100644 --- a/scripts/library/parse_options.sh +++ b/scripts/library/parse_options.sh @@ -23,17 +23,15 @@ parse_options() { [[ ${match} = ${1:2}:: && -n $2 && ${2:0:1} != "-" ]] && needsargument=1 if (( ! needsargument )); then - printf ' %s' "$1" + OPTRET+=("$1") else if [[ -n $2 ]]; then - printf ' %s ' "$1" + OPTRET+=("$1" "$2") shift - printf "'%q" "$1" while [[ -n $2 && ${2:0:1} != "-" ]]; do shift - printf " %q" "$1" + OPTRET+=("$1") done - printf "'" else printf "@SCRIPTNAME@: $(gettext "option %s requires an argument\n")" "'$1'" >&2 ret=1 @@ -57,26 +55,22 @@ parse_options() { ( -n ${1:$i+1} || ( -n $2 && ${2:0:1} != "-" ) ) ]] && needsargument=1 if (( ! needsargument )); then - printf ' -%s' "${1:i:1}" + OPTRET+=("-${1:i:1}") else if [[ -n ${1:$i+1} ]]; then - printf ' -%s ' "${1:i:1}" - printf "'%q" "${1:$i+1}" + OPTRET+=("-${1:i:1}" "${1:i+1}") while [[ -n $2 && ${2:0:1} != "-" ]]; do shift - printf " %q" "$1" + OPTRET+=("$1") done - printf "'" else if [[ -n $2 ]]; then - printf ' -%s ' "${1:i:1}" + OPTRET+=("-${1:i:1}" "$2") shift - printf "'%q" "$1" while [[ -n $2 && ${2:0:1} != "-" ]]; do shift - printf " %q" "$1" + OPTRET+=("$1") done - printf "'" else printf "@SCRIPTNAME@: $(gettext "option %s requires an argument\n")" "'-${1:i:1}'" >&2 @@ -91,15 +85,11 @@ parse_options() { fi done else - unused_options="${unused_options} '$1'" + unused_options+=("$1") fi shift done - printf " --" - [[ $unused_options ]] && printf ' %s' "${unused_options[@]}" - [[ $1 ]] && printf " '%s'" "$@" - printf "\n" - + OPTRET+=('--' "${unused_options[@]}") return $ret -}
\ No newline at end of file +} diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index aa98cfac..6e7a5562 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -36,6 +36,8 @@ export TEXTDOMAINDIR='@localedir@' # file -i does not work on Mac OSX unless legacy mode is set export COMMAND_MODE='legacy' +# Ensure CDPATH doesn't screw with our cd calls +unset CDPATH declare -r myver='@PACKAGE_VERSION@' declare -r confdir='@sysconfdir@' @@ -519,7 +521,7 @@ remove_deps() { local deplist deplist=($(grep -xvFf <(printf "%s\n" "${original_pkglist[@]}") \ <(printf "%s\n" "${current_pkglist[@]}") || true)) - if [[ -z deplist ]]; then + if [[ -z $deplist ]]; then return fi @@ -1924,11 +1926,11 @@ OPT_LONG+=",version,config:" # Pacman Options OPT_LONG+=",noconfirm,noprogressbar" -if ! OPT_TEMP="$(parse_options $OPT_SHORT $OPT_LONG "$@")"; then +if ! parse_options $OPT_SHORT $OPT_LONG "$@"; then echo; usage; exit 1 # E_INVALID_OPTION; fi -eval set -- "$OPT_TEMP" -unset OPT_SHORT OPT_LONG OPT_TEMP +set -- "${OPTRET[@]}" +unset OPT_SHORT OPT_LONG OPTRET while true; do case "$1" in diff --git a/scripts/pacman-key.sh.in b/scripts/pacman-key.sh.in index 12e0b1ab..c393370f 100644 --- a/scripts/pacman-key.sh.in +++ b/scripts/pacman-key.sh.in @@ -501,11 +501,11 @@ OPT_LONG="add::,config:,delete:,edit-key:,export::,finger::,gpgdir:" OPT_LONG+=",help,import:,import-trustdb:,init,keyserver:,list-keys::,list-sigs::" OPT_LONG+=",lsign-key:,populate::,recv-keys:,refresh-keys::,updatedb" OPT_LONG+=",verify:,version" -if ! OPT_TEMP="$(parse_options $OPT_SHORT $OPT_LONG "$@")"; then +if ! parse_options $OPT_SHORT $OPT_LONG "$@"; then echo; usage; exit 1 # E_INVALID_OPTION; fi -eval set -- "$OPT_TEMP" -unset OPT_SHORT OPT_LONG OPT_TEMP +set -- "${OPTRET[@]}" +unset OPT_SHORT OPT_LONG OPTRET if [[ $1 == "--" ]]; then usage; diff --git a/scripts/pacman-optimize.sh.in b/scripts/pacman-optimize.sh.in index 3c6cfa88..d80435c0 100644 --- a/scripts/pacman-optimize.sh.in +++ b/scripts/pacman-optimize.sh.in @@ -122,8 +122,7 @@ find "$dbroot" -type f | sort | xargs md5sum > "$workdir/pacsums.old" # step 2: tar it up msg "$(gettext "Tar'ing up %s...")" "$dbroot" -cd "$dbroot" -bsdtar -czf "$workdir/pacman-db.tar.gz" ./ +bsdtar -czf "$workdir/pacman-db.tar.gz" -C "$dbroot" ./ if (( $? )); then rm -rf "$workdir" die_r "$(gettext "Tar'ing up %s failed.")" "$dbroot" diff --git a/src/pacman/conf.h b/src/pacman/conf.h index efd5a99e..d3494c75 100644 --- a/src/pacman/conf.h +++ b/src/pacman/conf.h @@ -127,7 +127,6 @@ enum { OP_ARCH, OP_PRINTFORMAT, OP_GPGDIR, - OP_RECURSIVE, OP_DBONLY, OP_FORCE }; diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c index bf833269..107aa18c 100644 --- a/src/pacman/pacman.c +++ b/src/pacman/pacman.c @@ -130,7 +130,6 @@ static void usage(int op, const char * const myname) } else if(op == PM_OP_UPGRADE) { printf("%s: %s {-U --upgrade} [%s] <%s>\n", str_usg, myname, str_opt, str_file); addlist(_(" --needed do not reinstall up to date packages\n")); - addlist(_(" --recursive reinstall all dependencies of target packages\n")); printf("%s:\n", str_opt); } else if(op == PM_OP_QUERY) { printf("%s: %s {-Q --query} [%s] [%s]\n", str_usg, myname, str_opt, str_pkg); @@ -162,7 +161,6 @@ static void usage(int op, const char * const myname) addlist(_(" -w, --downloadonly download packages but do not install/upgrade anything\n")); addlist(_(" -y, --refresh download fresh package databases from the server\n")); addlist(_(" --needed do not reinstall up to date packages\n")); - addlist(_(" --recursive reinstall all dependencies of target packages\n")); } else if(op == PM_OP_DATABASE) { printf("%s: %s {-D --database} <%s> <%s>\n", str_usg, myname, str_opt, str_pkg); printf("%s:\n", str_opt); @@ -507,9 +505,6 @@ static int parsearg_remove(int opt) case 'c': config->flags |= ALPM_TRANS_FLAG_CASCADE; break; case 'n': config->flags |= ALPM_TRANS_FLAG_NOSAVE; break; case 's': - case OP_RECURSIVE: - /* 's' is the legacy flag here, but since recursive is used in -S without - * a shortopt, we need to do funky tricks */ if(config->flags & ALPM_TRANS_FLAG_RECURSE) { config->flags |= ALPM_TRANS_FLAG_RECURSEALL; } else { @@ -532,7 +527,6 @@ static int parsearg_upgrade(int opt) case OP_ASDEPS: config->flags |= ALPM_TRANS_FLAG_ALLDEPS; break; case OP_ASEXPLICIT: config->flags |= ALPM_TRANS_FLAG_ALLEXPLICIT; break; case OP_NEEDED: config->flags |= ALPM_TRANS_FLAG_NEEDED; break; - case OP_RECURSIVE: config->flags |= ALPM_TRANS_FLAG_RECURSE; break; case OP_IGNORE: parsearg_util_addlist(&(config->ignorepkg)); break; @@ -606,6 +600,7 @@ static int parseargs(int argc, char *argv[]) {"print", no_argument, 0, 'p'}, {"quiet", no_argument, 0, 'q'}, {"root", required_argument, 0, 'r'}, + {"recursive", no_argument, 0, 's'}, {"search", no_argument, 0, 's'}, {"unrequired", no_argument, 0, 't'}, {"upgrades", no_argument, 0, 'u'}, @@ -632,7 +627,6 @@ static int parseargs(int argc, char *argv[]) {"arch", required_argument, 0, OP_ARCH}, {"print-format", required_argument, 0, OP_PRINTFORMAT}, {"gpgdir", required_argument, 0, OP_GPGDIR}, - {"recursive", no_argument, 0, OP_RECURSIVE}, {"dbonly", no_argument, 0, OP_DBONLY}, {0, 0, 0, 0} }; diff --git a/src/pacman/sync.c b/src/pacman/sync.c index 700bb780..f370f82f 100644 --- a/src/pacman/sync.c +++ b/src/pacman/sync.c @@ -975,8 +975,6 @@ int pacman_sync(alpm_list_t *targets) FREELIST(targs); targs = packages; config->flags = 0; - config->flags |= ALPM_TRANS_FLAG_RECURSE; - config->flags |= ALPM_TRANS_FLAG_NEEDED; config->op_s_upgrade = 0; } else { FREELIST(packages); diff --git a/src/pacman/util.c b/src/pacman/util.c index ccdc2079..1d9049ee 100644 --- a/src/pacman/util.c +++ b/src/pacman/util.c @@ -67,9 +67,13 @@ void trans_init_error(void) pm_printf(ALPM_LOG_ERROR, _("failed to init transaction (%s)\n"), alpm_strerror(err)); if(err == ALPM_ERR_HANDLE_LOCK) { - fprintf(stderr, _(" if you're sure a package manager is not already\n" - " running, you can remove %s\n"), - alpm_option_get_lockfile(config->handle)); + const char *lockfile = alpm_option_get_lockfile(config->handle); + pm_printf(ALPM_LOG_ERROR, _("could not lock database: %s\n"), + strerror(errno)); + if(access(lockfile, F_OK) == 0) { + fprintf(stderr, _(" if you're sure a package manager is not already\n" + " running, you can remove %s\n"), lockfile); + } } } diff --git a/test/pacman/tests/sync302.py b/test/pacman/tests/sync302.py index b44aaed4..78e45c33 100644 --- a/test/pacman/tests/sync302.py +++ b/test/pacman/tests/sync302.py @@ -38,12 +38,12 @@ self.option["SyncFirst"] = ["pacman"] self.args = "-Su" self.addrule("PACMAN_RETCODE=0") -self.addrule("PKG_EXIST=pacman") self.addrule("PKG_VERSION=pacman|1.0-2") self.addrule("PKG_EXIST=glibc") -self.addrule("PKG_VERSION=glibc|2.15-1") self.addrule("PKG_EXIST=curl") -self.addrule("PKG_VERSION=curl|7.22-1") self.addrule("PKG_EXIST=libarchive") -self.addrule("PKG_VERSION=libarchive|2.8.5-1") +# TODO: when SyncFirst recursive comes back, re-enable these +#self.addrule("PKG_VERSION=glibc|2.15-1") +#self.addrule("PKG_VERSION=curl|7.22-1") +#self.addrule("PKG_VERSION=libarchive|2.8.5-1") self.addrule("PKG_EXIST=zlib") diff --git a/test/pacman/tests/sync303.py b/test/pacman/tests/sync303.py index b717dd2c..9d7bab58 100644 --- a/test/pacman/tests/sync303.py +++ b/test/pacman/tests/sync303.py @@ -29,10 +29,7 @@ self.option["SyncFirst"] = ["pacman"] self.args = "-Su" self.addrule("PACMAN_RETCODE=0") -self.addrule("PKG_EXIST=pacman") self.addrule("PKG_VERSION=pacman|1.0-2") self.addrule("PKG_EXIST=glibc-awesome") self.addrule("PKG_VERSION=glibc-awesome|2.13-2") self.addrule("PKG_EXIST=zlib") - -self.expectfailure = True diff --git a/test/pacman/tests/sync304.py b/test/pacman/tests/sync304.py index 4ac1a015..18058c99 100644 --- a/test/pacman/tests/sync304.py +++ b/test/pacman/tests/sync304.py @@ -19,9 +19,7 @@ self.option["SyncFirst"] = ["pacman"] self.args = "-Su" self.addrule("PACMAN_RETCODE=0") -self.addrule("PKG_EXIST=pacman") self.addrule("PKG_VERSION=pacman|4.0.1-1") -self.addrule("PKG_EXIST=pyalpm") self.addrule("PKG_VERSION=pyalpm|2-1") self.expectfailure = True diff --git a/test/pacman/tests/sync305.py b/test/pacman/tests/sync305.py index 24fcee48..62005b58 100644 --- a/test/pacman/tests/sync305.py +++ b/test/pacman/tests/sync305.py @@ -61,7 +61,4 @@ self.option["SyncFirst"] = ["pacman"] self.args = "-Su" self.addrule("PACMAN_RETCODE=0") -self.addrule("PKG_EXIST=pacman") self.addrule("PKG_VERSION=pacman|4.0.1-2") - -self.expectfailure = True diff --git a/test/pacman/tests/sync306.py b/test/pacman/tests/sync306.py index ca7a547e..c7401d07 100644 --- a/test/pacman/tests/sync306.py +++ b/test/pacman/tests/sync306.py @@ -59,5 +59,4 @@ self.addpkg2db("local", lp7) self.args = "-S pacman" self.addrule("PACMAN_RETCODE=0") -self.addrule("PKG_EXIST=pacman") self.addrule("PKG_VERSION=pacman|4.0.1-2") diff --git a/test/pacman/tests/upgrade078.py b/test/pacman/tests/upgrade078.py index 718d5871..8ef32456 100644 --- a/test/pacman/tests/upgrade078.py +++ b/test/pacman/tests/upgrade078.py @@ -20,15 +20,15 @@ expat_lpkg = pmpkg("expat", "2.0.1-6") self.addpkg2db("local", expat_lpkg) # Sync db -curl_sync = pmpkg("curl", "7.21.7-1") -self.addpkg2db("sync", curl_sync) +perl_sync = pmpkg("perl", "5.14.1-3") +perl_sync.depends = ["glibc"] +self.addpkg2db("sync", perl_sync) glibc_sync = pmpkg("glibc", "2.1.4-4") self.addpkg2db("sync", glibc_sync) -perl_sync = pmpkg("perl", "5.14.1-3") -perl_sync.depends = ["glibc"] -self.addpkg2db("sync", perl_sync) +curl_sync = pmpkg("curl", "7.21.7-1") +self.addpkg2db("sync", curl_sync) expat_sync = pmpkg("expat", "2.0.1-6") self.addpkg2db("sync", expat_sync) @@ -46,11 +46,10 @@ self.addrule("PKG_DEPENDS=git|perl") self.addrule("PKG_DEPENDS=perl|glibc") self.addrule("PKG_EXIST=git") self.addrule("PKG_VERSION=git|1.7.6-1") -self.addrule("PKG_EXIST=curl") self.addrule("PKG_VERSION=curl|7.21.7-1") -self.addrule("PKG_EXIST=glibc") self.addrule("PKG_VERSION=glibc|2.1.4-4") -self.addrule("PKG_EXIST=perl") self.addrule("PKG_VERSION=perl|5.14.1-3") -self.addrule("PKG_EXIST=expat") self.addrule("PKG_VERSION=expat|2.0.1-6") + +# --recursive operation was removed for now +self.expectfailure = True |