From owner-freebsd-ports-bugs@FreeBSD.ORG Wed Sep 25 13:00:03 2013 Return-Path: Delivered-To: freebsd-ports-bugs@smarthost.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id A3EECEA1 for ; Wed, 25 Sep 2013 13:00:03 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:1900:2254:206c::16:87]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 821DB23DD for ; Wed, 25 Sep 2013 13:00:03 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.7/8.14.7) with ESMTP id r8PD02OO011040 for ; Wed, 25 Sep 2013 13:00:02 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.7/8.14.7/Submit) id r8PD02mt011039; Wed, 25 Sep 2013 13:00:02 GMT (envelope-from gnats) Resent-Date: Wed, 25 Sep 2013 13:00:02 GMT Resent-Message-Id: <201309251300.r8PD02mt011039@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-ports-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Iouri Ivliev Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 4BEBCE81 for ; Wed, 25 Sep 2013 12:58:52 +0000 (UTC) (envelope-from yury@esterdev.com) Received: from smaug.esterdev.com (smaug.esterdev.com [95.167.0.35]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 2B5B723CB for ; Wed, 25 Sep 2013 12:58:50 +0000 (UTC) Received: from smaug.esterdev.com (localhost [127.0.0.1]) by smaug.esterdev.com (8.14.7/8.14.7) with ESMTP id r8PCsdvB005996; Wed, 25 Sep 2013 16:54:39 +0400 (MSK) (envelope-from yury@smaug.esterdev.com) Received: (from yury@localhost) by smaug.esterdev.com (8.14.7/8.14.7/Submit) id r8PCsdSn005995; Wed, 25 Sep 2013 16:54:39 +0400 (MSK) (envelope-from yury) Message-Id: <201309251254.r8PCsdSn005995@smaug.esterdev.com> Date: Wed, 25 Sep 2013 16:54:39 +0400 (MSK) From: Iouri Ivliev To: FreeBSD-gnats-submit@freebsd.org X-Send-Pr-Version: 3.114 Subject: ports/182371: ports-mgmt/pkg_replace: fixup pattrn matching in pkg_glob() function Cc: Ken DEGUCHI X-BeenThere: freebsd-ports-bugs@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: Iouri Ivliev List-Id: Ports bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 25 Sep 2013 13:00:03 -0000 >Number: 182371 >Category: ports >Synopsis: ports-mgmt/pkg_replace: fixup pattrn matching in pkg_glob() function >Confidential: no >Severity: non-critical >Priority: medium >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Wed Sep 25 13:00:01 UTC 2013 >Closed-Date: >Last-Modified: >Originator: Iouri Ivliev >Release: FreeBSD 8.4-STABLE amd64 >Organization: EsterDev, Ltd. >Environment: System: FreeBSD smaug.esterdev.com 8.4-STABLE FreeBSD 8.4-STABLE #0: Sun Sep 8 23:02:52 UTC 2013 root@smaug.esterdev.com:/usr/obj/usr/src/sys/SMAUG amd64 >Description: When an old pkg tools used, pkg_replace trying to find an installed package looking the subdirectories containing the "+CONTENTS" file in "${PKG_DBDIR}". Shell pattern used to match subdirectory corresponding the package. However, some packages may not matches the pattern. IMHO, more accurate results can be obtained using pkg_info with the extended regular expression (-X key). Patch in the "Fix:" section replaces shell pattern matching with "pkg_info -EX " command. Also this patch fixes use of unset variabel (preserved_files). >How-To-Repeat: $ pkg_info -Ex pkg_replace pkg_replace-0.8.0_2 $ for p in python2 liblqr-1 xorg-fonts-75dpi; do echo pkg_replace:; pkg_replace -n $p; echo pkg_info:; pkg_info -EX "^$p-([a-z]?[0-9]+\.)?([a-z]?[0-9]*[a-z]?\.?)*([_,][0-9]+)*\$"; done pkg_replace: ** No such installed package: python2 pkg_info: python2-2 pkg_replace: ** No such installed package: liblqr-1 pkg_info: liblqr-1-0.4.1_5 pkg_replace: ** No such installed package: xorg-fonts-75dpi pkg_info: xorg-fonts-75dpi-7.7 >Fix: --- ports-mgmt__pkg_replace.diff begins here --- diff -ruN ports-mgmt/pkg_replace.orig/files/patch-pkg_replace_pkgng ports-mgmt/pkg_replace/files/patch-pkg_replace_pkgng --- ports-mgmt/pkg_replace.orig/files/patch-pkg_replace_pkgng 2013-09-25 14:50:58.577970511 +0400 +++ ports-mgmt/pkg_replace/files/patch-pkg_replace_pkgng 2013-09-25 13:51:52.558672626 +0400 @@ -1,5 +1,5 @@ ---- sbin/pkg_replace/pkg_replace.sh.orig 2007-01-25 21:55:46.000000000 +0900 -+++ sbin/pkg_replace/pkg_replace.sh 2013-09-03 06:58:43.000000000 +0900 +--- sbin/pkg_replace/pkg_replace.sh.orig 2007-01-25 12:55:46.000000000 +0000 ++++ sbin/pkg_replace/pkg_replace.sh 2013-09-25 09:49:37.926799231 +0000 @@ -125,14 +125,27 @@ : ${PACKAGEROOT="ftp://ftp.NetBSD.org"} : ${PKG_SUFX=".tgz"} @@ -96,45 +96,66 @@ pkg_name=$1 pkg_pkgdir=${PKG_DBDIR}/$1 -@@ -526,10 +558,27 @@ +@@ -518,7 +550,7 @@ + } + + pkg_glob() { +- local p _var _arg _pattern _deps _req_by ++ local p _var _arg _pattern _deps _req_by _pkgs + + _var=$1; shift + eval ${_var}= +@@ -526,30 +558,27 @@ for _arg in ${1+"$@"}; do _pattern=${_arg#${PKG_DBDIR}/} + if is_yes ${use_pkgng}; then -+ for p in `${PKG_INFO} -g "${_pattern}" 2>/dev/null`; do -+ if is_yes ${opt_depends}; then -+ pkg_depends '_deps' "$p" -+ eval ${_var}=\"\$${_var} \${_deps}\" -+ fi -+ -+ eval ${_var}=\"\$${_var} \$p\" - -+ if is_yes ${opt_required_by}; then -+ pkg_required_by '_req_by' "$p" -+ eval ${_var}=\"\$${_var} \${_req_by}\" -+ fi -+ done -+ if [ -z "${pkgs}" ]; then -+ warn "No such installed package: ${_arg}" -+ fi ++ _pkgs="$(${PKG_INFO} -g "${_pattern}" 2>/dev/null || :)" + else - case ${_pattern} in ++ _pattern="$(echo "${_pattern}" | sed -Ee 's/(\\)?([.+])/\\\2/g')" ++ _pkgs="$(${PKG_INFO} -EX "^${_pattern}-([a-z]?[0-9]+\.)?([a-z]?[0-9]*[a-z]?\.?)*([_,][0-9]+)*\$" 2>/dev/null || :)" ++ fi ++ if [ -z "${_pkgs}" ]; then ++ warn "No such installed package: ${_arg}" ++ continue ++ fi ++ for p in ${_pkgs}; do ++ if is_yes ${opt_depends}; then ++ pkg_depends '_deps' "$p" ++ eval ${_var}=\"\$${_var} \${_deps}\" ++ fi + +- case ${_pattern} in - *\**|*-pl[0-9]*|*-[0-9]*[0-9.][a-z]|*-[0-9]*[0-9]) ;; - *) _pattern="${_pattern}-[0-9]*[0-9a-z]" ;; -+ *\**|*-[0-9]*|*-[brv.][0-9]*|*-a.[0-9]*|*-pl[0-9]*|*-b.r[0-9]*|*-cr.[a-z]*) ;; -+ *) _pattern="${_pattern}-[0-9]*[0-9a-zA-Z]" ;; - esac - - for p in ${PKG_DBDIR}/${_pattern}/+CONTENTS; do -@@ -552,6 +601,7 @@ - warn "No such installed package: ${_arg}" +- esac +- +- for p in ${PKG_DBDIR}/${_pattern}/+CONTENTS; do +- if [ -e "$p" ]; then +- p=${p#${PKG_DBDIR}/} +- p=${p%/+CONTENTS} +- +- if is_yes ${opt_depends}; then +- pkg_depends '_deps' "$p" +- eval ${_var}=\"\$${_var} \${_deps}\" +- fi +- +- eval ${_var}=\"\$${_var} \$p\" ++ eval ${_var}=\"\$${_var} \$p\" + +- if is_yes ${opt_required_by}; then +- pkg_required_by '_req_by' "$p" +- eval ${_var}=\"\$${_var} \${_req_by}\" +- fi +- else +- warn "No such installed package: ${_arg}" ++ if is_yes ${opt_required_by}; then ++ pkg_required_by '_req_by' "$p" ++ eval ${_var}=\"\$${_var} \${_req_by}\" fi done -+ fi done - - set -f -@@ -568,6 +618,12 @@ +@@ -568,6 +597,12 @@ done < "${PKG_DBDIR}/$2/+REQUIRING" fi #else @@ -147,7 +168,7 @@ if [ -r "${PKG_DBDIR}/$2/+CONTENTS" ]; then while read X; do case $X in -@@ -588,6 +644,12 @@ +@@ -588,6 +623,12 @@ pkg_required_by() { local X @@ -160,7 +181,7 @@ eval $1= if [ -r "${PKG_DBDIR}/$2/+REQUIRED_BY" ]; then while read X; do -@@ -597,7 +659,7 @@ +@@ -597,7 +638,7 @@ } pkg_sort() { @@ -169,7 +190,7 @@ _var=$1; shift _sorted= -@@ -612,7 +674,13 @@ +@@ -612,7 +653,13 @@ *" ${_arg} "*) continue ;; esac @@ -184,7 +205,7 @@ pkg_depends '_deps' "${_arg}" for p in ${_deps}; do -@@ -715,7 +783,7 @@ +@@ -715,7 +762,7 @@ if empty ${_log}; then try "$@" || return $? else @@ -193,7 +214,7 @@ { try "$@" || echo $? > "${_cookie}"; } | tee -a "${_log}" || warn "tee(1) failed." -@@ -757,9 +825,11 @@ +@@ -757,9 +804,11 @@ info "Installing '$1'" case $1 in @@ -206,7 +227,7 @@ xtry "${2-}" ${PKG_ADD} ${install_args} "$1" || return 1 ;; -@@ -795,7 +865,11 @@ +@@ -795,7 +844,11 @@ deinstall_args= is_yes ${opt_force} && deinstall_args="-f" @@ -218,7 +239,7 @@ #ifdef WITH_PKGSRC if [ -e "${PKG_DBDIR}/$1/+PRESERVE" ]; then -@@ -915,7 +989,11 @@ +@@ -915,7 +968,11 @@ *) subdir="${OS_MAJOR}-stable" ;; esac @@ -230,7 +251,7 @@ #endif #endif uri="${PACKAGEROOT}${uri_path}${pkg}" -@@ -987,7 +1065,11 @@ +@@ -987,7 +1044,11 @@ return 1 fi #else @@ -242,7 +263,7 @@ #endif #endif } -@@ -1031,12 +1113,17 @@ +@@ -1031,12 +1092,17 @@ } preserve_libs() { @@ -262,7 +283,16 @@ case ${file##*/} in lib*.so.[0-9]*) if [ -f "${file}" ]; then -@@ -1080,20 +1167,30 @@ +@@ -1055,7 +1121,7 @@ + clean_libs() { + local delete_files file dest + +- if empty ${preserved_files} || ! is_yes ${opt_preserve_libs}; then ++ if ! is_yes ${opt_preserve_libs} || empty ${preserved_files}; then + return 0 + fi + +@@ -1080,20 +1146,30 @@ fix_dependencies() { #ifndef WITH_PKGSRC #ifndef WITH_OPENBSD @@ -295,7 +325,7 @@ fi fi done -@@ -1102,6 +1199,11 @@ +@@ -1102,6 +1178,11 @@ } update_dependencies() { @@ -307,7 +337,7 @@ local p req_by pkg_required_by 'req_by' "$2" -@@ -1114,6 +1216,7 @@ +@@ -1114,6 +1195,7 @@ update_pkgdep "$p" "$1-[^-]*" "$2" || return 1 done fi @@ -315,7 +345,7 @@ } have_pkgdep() { -@@ -1122,7 +1225,7 @@ +@@ -1122,7 +1204,7 @@ if [ -r "${PKG_DBDIR}/$1/+CONTENTS" ]; then while read X; do case $X in @@ -324,7 +354,7 @@ return 0 ;; [!@]*) break ;; esac -@@ -1134,7 +1237,7 @@ +@@ -1134,7 +1216,7 @@ update_pkgdep() { update_file "${PKG_DBDIR}/$1/+CONTENTS" \ @@ -333,7 +363,7 @@ } delete_pkgdep() { -@@ -1325,7 +1428,7 @@ +@@ -1325,7 +1407,7 @@ init_install() { case $1 in @@ -342,7 +372,7 @@ set_pkg_vars_for_binary "$1" || return 1 ;; /*) set_port_vars "$1" || return 1 ;; *) set_port_vars "${PORTSDIR}/$1" || return 1 ;; -@@ -1351,7 +1454,7 @@ +@@ -1351,7 +1433,7 @@ done case ${replace_with} in @@ -351,7 +381,7 @@ pkg_binary=${replace_with} ;; ?*) pkg_portdir=${replace_with} -@@ -1428,6 +1531,12 @@ +@@ -1428,6 +1510,12 @@ do_replace() { local pkg_log pkg_tmpdir old_package old_required_by preserved_files @@ -364,7 +394,7 @@ init_replace "$1" || { status=skipped; return 0; } if [ "${cur_pkg_name}" != "${pkg_name}" ]; then -@@ -1482,7 +1591,9 @@ +@@ -1482,7 +1570,9 @@ fi pkg_tmpdir="${tmpdir}/${cur_pkg_name}" @@ -374,7 +404,7 @@ if ! find_package 'old_package' "${cur_pkg_name}"; then old_package="${pkg_tmpdir}/${cur_pkg_name}${PKG_SUFX}" -@@ -1491,7 +1602,11 @@ +@@ -1491,7 +1581,11 @@ if ! { create_dir "${pkg_tmpdir}" && backup_package "${cur_pkg_name}" "${old_package}" && @@ -387,7 +417,7 @@ preserve_libs "${cur_pkg_name}" }; then log="backup error" -@@ -1503,6 +1618,9 @@ +@@ -1503,6 +1597,9 @@ if install_package "${pkg_binary:-${pkg_portdir}}" "${pkg_log}"; then status=done cur_pkg_pkgdir=${PKG_DBDIR}/${pkg_name} @@ -397,7 +427,7 @@ else log="install error" restore_package "${old_package}" || { -@@ -1515,8 +1633,10 @@ +@@ -1515,8 +1612,10 @@ log="deinstall error" fi @@ -408,7 +438,7 @@ process_package "${old_package}" || warn "Failed to keep the old version." clean_libs || -@@ -1527,7 +1647,11 @@ +@@ -1527,7 +1626,11 @@ case ${status} in done) fix_dependencies "${pkg_name}" || return 1 --- ports-mgmt__pkg_replace.diff ends here --- >Release-Note: >Audit-Trail: >Unformatted: