From owner-svn-ports-all@freebsd.org Sat Jul 16 07:13:26 2016 Return-Path: Delivered-To: svn-ports-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 0BD20B9A294; Sat, 16 Jul 2016 07:13:26 +0000 (UTC) (envelope-from se@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id BDB5F1680; Sat, 16 Jul 2016 07:13:25 +0000 (UTC) (envelope-from se@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u6G7DO2A051933; Sat, 16 Jul 2016 07:13:24 GMT (envelope-from se@FreeBSD.org) Received: (from se@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u6G7DOWR051932; Sat, 16 Jul 2016 07:13:24 GMT (envelope-from se@FreeBSD.org) Message-Id: <201607160713.u6G7DOWR051932@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: se set sender to se@FreeBSD.org using -f From: Stefan Esser Date: Sat, 16 Jul 2016 07:13:24 +0000 (UTC) To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r418619 - head/ports-mgmt/portmaster/files X-SVN-Group: ports-head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-ports-all@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: SVN commit messages for the ports tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 16 Jul 2016 07:13:26 -0000 Author: se Date: Sat Jul 16 07:13:24 2016 New Revision: 418619 URL: https://svnweb.freebsd.org/changeset/ports/418619 Log: A read lock on the sqlite file used by pkg can lock out writers for indefinite amounts of time, preventing installation or upgrade of ports with portmaster. Instead of using a pipe to read pkg query input to be consumed by a shell loop, buffer the query result in a shell variable and let the loop iterate over the contents of this variable. While here, use a call to all_pkgs_by_origin() instead of an inline versin of equivalent code. Reviewed by: tz Approved by: tz Added: head/ports-mgmt/portmaster/files/ head/ports-mgmt/portmaster/files/patch-portmaster (contents, props changed) Added: head/ports-mgmt/portmaster/files/patch-portmaster ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/ports-mgmt/portmaster/files/patch-portmaster Sat Jul 16 07:13:24 2016 (r418619) @@ -0,0 +1,67 @@ +--- portmaster.orig 2016-02-05 22:36:56 UTC ++++ portmaster +@@ -1239,7 +1239,8 @@ all_pkgs_by_origin () { + echo $iport $origin + done + else +- pkg query -a "%n-%v %o" ++ namesorigins=`pkg query -a "%n-%v %o"` ++ echo "$namesorigins" + fi + return + } +@@ -1644,42 +1645,19 @@ if [ -n "$CHECK_PORT_DBDIR" ]; then + unique_list=':' + + echo "===>>> Building list of installed port names"; echo '' +- if [ -z "$use_pkgng" ]; then +- for pkg in $pdb/*; do +- [ -d $pkg ] || continue +- +- iport=${pkg#$pdb/} +- origin=`origin_from_pdb $iport` || continue +- +- if [ ! -d "$pd/$origin" ]; then +- find_moved_port $origin $iport nonfatal >/dev/null +- [ -n "$moved_npd" ] || continue +- origin=$moved_npd +- fi +- +- if ! pm_cd $pd/$origin; then +- echo " ===>>> $pd/$origin does not exist for $pkg" +- continue +- fi +- unique_list="${unique_list}`make -V UNIQUENAME -V OPTIONS_NAME | tr '\n' ':'`" +- done +- else +- while read pkg origin; do +- if [ ! -d "$pd/$origin" ]; then +- find_moved_port $origin $pkg nonfatal >/dev/null +- [ -n "$moved_npd" ] || continue +- origin=$moved_npd +- fi ++ all_pkgs_by_origin | while read pkg origin; do ++ if [ ! -d "$pd/$origin" ]; then ++ find_moved_port $origin $pkg nonfatal >/dev/null ++ [ -n "$moved_npd" ] || continue ++ origin=$moved_npd ++ fi + +- if ! pm_cd $pd/$origin; then +- echo " ===>>> $pd/$origin does not exist for $pkg" +- continue +- fi +- unique_list="${unique_list}`make -V UNIQUENAME -V OPTIONS_NAME | tr '\n' ':'`" +- done <<-EOF +- $(pkg query -a "%n-%v %o") +- EOF +- fi ++ if ! pm_cd $pd/$origin; then ++ echo " ===>>> $pd/$origin does not exist for $pkg" ++ continue ++ fi ++ unique_list="${unique_list}`make -V UNIQUENAME -V OPTIONS_NAME | tr '\n' ':'`" ++ done + + echo "===>>> Checking $port_dbdir" +