From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.ciao.gmane.io!not-for-mail From: Wolfgang Scherer Newsgroups: gmane.emacs.bugs Subject: bug#39502: Acknowledgement ([PATCH] Use one src status -a call for vc-src-dir-status-files) Date: Sat, 8 Feb 2020 06:35:01 +0100 Message-ID: References: <2f9fe676-e135-a931-53bc-654954aead3c@gmx.de> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------22F5438F6CDA6F0CC9DA3FB5" Injection-Info: ciao.gmane.io; posting-host="ciao.gmane.io:159.69.161.202"; logging-data="68191"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.9.1 To: 39502@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sat Feb 08 06:36:44 2020 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1j0InM-000Hfr-3X for geb-bug-gnu-emacs@m.gmane-mx.org; Sat, 08 Feb 2020 06:36:44 +0100 Original-Received: from localhost ([::1]:37918 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j0InK-0000jP-IO for geb-bug-gnu-emacs@m.gmane-mx.org; Sat, 08 Feb 2020 00:36:42 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:59525) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j0Imh-0000j3-Sb for bug-gnu-emacs@gnu.org; Sat, 08 Feb 2020 00:36:05 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j0Img-0004qe-M2 for bug-gnu-emacs@gnu.org; Sat, 08 Feb 2020 00:36:03 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]:44578) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1j0Img-0004qQ-Dj for bug-gnu-emacs@gnu.org; Sat, 08 Feb 2020 00:36:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1j0Img-0005y7-9P for bug-gnu-emacs@gnu.org; Sat, 08 Feb 2020 00:36:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Wolfgang Scherer Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 08 Feb 2020 05:36:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39502 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 39502-submit@debbugs.gnu.org id=B39502.158114011122881 (code B ref 39502); Sat, 08 Feb 2020 05:36:02 +0000 Original-Received: (at 39502) by debbugs.gnu.org; 8 Feb 2020 05:35:11 +0000 Original-Received: from localhost ([127.0.0.1]:50551 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j0Ilq-0005wz-JY for submit@debbugs.gnu.org; Sat, 08 Feb 2020 00:35:10 -0500 Original-Received: from mout.gmx.net ([212.227.15.19]:36787) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j0Ilo-0005wh-UI for 39502@debbugs.gnu.org; Sat, 08 Feb 2020 00:35:09 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1581140102; bh=fxiuSpePFbYtMtGzzXSJ3TA2ZavWoAxvcxJ3dhon9mY=; h=X-UI-Sender-Class:Subject:To:References:From:Date:In-Reply-To; b=d0nI7O7FM3xs1Nc+vg7bp/A32MNMt9vglXbvTkxly2KlNVFGMlRvbm3TYl1wfZKm5 1kdy0mY9w34QtFkbDUwtMWi93PLBo60mvBcEo4C+cEcOIcTgd6pR0i1ygNmUs2k8Z1 XZYoy+/QUuAVvGewUycECB+HkL1ZVtV+6ylqjXdw= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Original-Received: from sheckley.simul.de ([87.160.210.52]) by mail.gmx.com (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MOzT4-1jA95W2TOe-00PP3A for <39502@debbugs.gnu.org>; Sat, 08 Feb 2020 06:35:02 +0100 Original-Received: from [127.0.0.1] (sheckley.simul.de [127.0.0.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by sheckley.simul.de (Postfix) with ESMTPSA id 0881719431CB for <39502@debbugs.gnu.org>; Sat, 8 Feb 2020 06:35:01 +0100 (CET) Openpgp: preference=signencrypt Autocrypt: addr=Wolfgang.Scherer@gmx.de; prefer-encrypt=mutual; keydata= xsDiBEb46IgRBACMHOAb1KNo1Ylk+ebri+4R+bG4tyKlqBlrpv8D9/ZwRdXSGt+0DyCHoaAd 7KW7noHapLe87DunABOjKG4nqTGv+dRiWuUBlp3I4aYRFDVa3Da+XnIYkMHKqhK59VEHQCdp Km42nuLS7TS+n99at9YwzTG6VBdOlBKTlRFngOjVLwCg1RGXJ6X3EjS1FKCQeXziURVpWlkD /2zY6Ayhxi62TS84VjikXrrmjXykAAaAmMVEyKKYb9L5pGlqiZz9g/K9xw1EUoZTYuaufquD v4rAGR58K/3V4CYfJLEeshMWiaXHvMmlxMznlG16/um4MvmR8B3r+cx0nOPK1JBdD2qrkNnF Mw8FB+zouLFB4Gt2IUC5IlOmZ8OQA/4qdU53CItzWsCr9Nux4L0qUlRweSmCnV8xGQ2wP5XI MawIQxxREvSrsYDG8cNnYETMg4iQFfIktwAoxCJvuFAwIB6ZxHGF4FcEZm64CXc2u7CmFLqt rVhXhIfMz9oEYC+HhGczGamn9ofbGTFd2hJEtPcQgWNR4f7+aKknmi2+OM0fV29sZmdhbmcg U2NoZXJlciA8d3NAc3ctYW10LndzPsJhBBMRAgAhBQJYmz3YAhsjBQsJCAcCBhUICQoLAgQW AgMBAh4BAheAAAoJEIUCr3Gr112VZZoAoLTBSTp1qGuNhLdXY04iaWCMYmHCAJ4kHPtQ6nTw kEq9qCHgVgXDaY7wjs7ATQRG+OiIEAQAhi0wjcxvA4tychg2NQuwBIf9LX/46l+74+QbewCn a4a+mw/9s5KY In-Reply-To: Content-Language: de-DE X-Provags-ID: V03:K1:D4sRkTiVNJAcRvJhGpOLaHCGyTlDQXj5gxuKQy82YtPkjOxr9QC ZL8aMaVYgMlHUx0GJkPEDhjjRgxRiiGCAl0ybGT/fi95DnSW62e1wk1jcc18eIc6Gh6YbUE 6TglKU7NAhP4pzILx0vI0BeL7GGNfe5x+ObfnB7x3gdBq4sJ6Gv+OZvwJZokZESYzQ72ezM GBMi+4rF5Mnj/vZjb3XsQ== X-UI-Out-Filterresults: notjunk:1;V03:K0:w1FMGPEIJ1E=:CnsAQPfNPquJrDITgkeBdh Gio0zUxoNj4FrA78GY4Eh7zSk4SeQZuxYWigzz/QBw50gMcTh6/dKTtFYB7uP6TerU6lCm/6+ zWvIVBMZp9HvIwlxE4cGC3Yq/emXqsOwOUdbUZjx4MQMpNERODAQj5KllyPJFy3jaGbnyPyCc 8fLgOpwxnRbKFg1qylS7r3qqcMGwp0vq0toVzQEJYsidBAyGSxkZVqcw1xIAWQkz9UcNrgvtj exP2dRmg5q6NZ14UBJy3iroYH8AwmFrIPNqmQTR8s1kwoK/tEvkRaJ1yWyYk3eHax/eyA/Suy F2OmBq9lLS4r1GxblaYfSZfDH9CiUeX3NOWP3JDJI7C3kUtq66mLUIWobG1MaVeoVdWOBgzCr bmZiiivI0oWV0sUEyr4WN79YOh3DdXFwU7FRAgR8e7XS7zVEsT+XTe6E5A6zkKgzFkpxsULUa nmzJKUyHS3kt+ldEOAme5lhG6i0RDM55NtrTZ8S5SZlOnBCmfvandh4/zDwAD/DynfAT/x55X 3JobX/u7e4QZ7q6xAghGlmMV/9uwzXQ9wUwYM9w58tNKn61t7OLh5OC06AjFlgihfN7YIGIgG EQlzLDbhayvpHyhz09R2theqzXcVhN9Oif0ebnJeT6MwVw5QogkFdLyL1+fjdLaVod9+Lm4iZ G7b+yxDrXo/I+WgP/bz+KXzNmkPEGGRrym8baPgOjWoKLtZOUHxJ4HsTve1JuFYPrrZpaTn2n RXdA5x2s29cP1LKFoyKKk1/VrM2yW8nekyhtFTgYpG1Du+g9sUBn0RbFymyGyL1Ex+8YpIRU X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.51.188.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:175771 Archived-At: This is a multi-part message in MIME format. --------------22F5438F6CDA6F0CC9DA3FB5 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Additional recursion into sub-directories. --------------22F5438F6CDA6F0CC9DA3FB5 Content-Type: text/x-patch; name="0001-Use-one-src-status-a-call-for-vc-src-dir-status-file.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename*0="0001-Use-one-src-status-a-call-for-vc-src-dir-status-file.pa"; filename*1="tch" =46rom 3ccf917bab849e438998d4717176efec46df6b98 Mon Sep 17 00:00:00 2001 From: Wolfgang Scherer Date: Sat, 8 Feb 2020 06:15:10 +0100 Subject: [PATCH] Use one src status -a call for vc-src-dir-status-files MIME-Version: 1.0 Content-Type: text/plain; charset=3DUTF-8 Content-Transfer-Encoding: 8bit lisp/vc/vc-src.el: (vc-src--parse-state) new function. (vc-src-state) use vc-src--parse-state. (vc-src-dir-status-files) use recursive calls to =E2=80=98src status -a=E2= =80=99. =2D-- lisp/vc/vc-src.el | 90 +++++++++++++++++++++++++++++++++++---------------= ----- 1 file changed, 58 insertions(+), 32 deletions(-) diff --git a/lisp/vc/vc-src.el b/lisp/vc/vc-src.el index db127ee..ca1b7d6 100644 =2D-- a/lisp/vc/vc-src.el +++ b/lisp/vc/vc-src.el @@ -146,49 +146,75 @@ For a description of possible values, see `vc-check-= master-templates'." (progn (defun vc-src-registered (f) (vc-default-registered 'src f))) +(defun vc-src--parse-state (out) + (when (null (string-match "does not exist or is unreadable" out)) + (let ((state (aref out 0))) + (cond + ;; FIXME: What to do about L code? + ((eq state ?.) 'up-to-date) + ((eq state ?A) 'added) + ((eq state ?M) 'edited) + ((eq state ?I) 'ignored) + ((eq state ?R) 'removed) + ((eq state ?!) 'missing) + ((eq state ??) 'unregistered) + (t 'up-to-date))))) + (defun vc-src-state (file) "SRC-specific version of `vc-state'." (let* ((status nil) (default-directory (file-name-directory file)) (out - (with-output-to-string - (with-current-buffer - standard-output - (setq status - ;; Ignore all errors. - (condition-case nil - (process-file - vc-src-program nil t nil - "status" "-a" (file-relative-name file)) - (error nil))))))) + (with-output-to-string + (with-current-buffer + standard-output + (setq status + ;; Ignore all errors. + (condition-case nil + (process-file + vc-src-program nil t nil + "status" "-a" (file-relative-name file)) + (error nil))))))) (when (eq 0 status) - (when (null (string-match "does not exist or is unreadable" out)) - (let ((state (aref out 0))) - (cond - ;; FIXME: What to do about A and L codes? - ((eq state ?.) 'up-to-date) - ((eq state ?A) 'added) - ((eq state ?M) 'edited) - ((eq state ?I) 'ignored) - ((eq state ?R) 'removed) - ((eq state ?!) 'missing) - ((eq state ??) 'unregistered) - (t 'up-to-date))))))) + (vc-src--parse-state out)))) (autoload 'vc-expand-dirs "vc") (defun vc-src-dir-status-files (dir files update-function) - ;; FIXME: Use one src status -a call for this - (if (not files) (setq files (vc-expand-dirs (list dir) 'SRC))) - (let ((result nil)) - (dolist (file files) - (let ((state (vc-state file)) - (frel (file-relative-name file))) - (when (and (eq (vc-backend file) 'SRC) - (not (eq state 'up-to-date))) - (push (list frel state) result)))) - (funcall update-function result))) + (let* + ((result nil) + (status nil) + (default-directory (or dir default-directory)) + (out + (with-output-to-string + (with-current-buffer + standard-output + (setq status + ;; Ignore all errors. + (condition-case nil + (apply + #'process-file vc-src-program nil t nil + "status" "-a" + (mapcar (lambda (f) (file-relative-name f)) files)= ) + (error nil)))))) + dlist) + (when (eq 0 status) + (dolist (line (split-string out "[\n\r]" t)) + (let* ((pair (split-string line "[\t]" t)) + (state (vc-src--parse-state (car pair))) + (frel (cadr pair))) + (if (file-directory-p frel) + (push frel dlist) + (when (not (eq state 'up-to-date)) + (push (list frel state) result))) + )) + (dolist (drel dlist) + (let* ((dresult (vc-src-dir-status-files (expand-file-name drel) = nil #'identity))) + (dolist (dres dresult) + (push (list (concat (file-name-as-directory drel) (car dres))= (cadr dres)) result))) + ) + (funcall update-function result)))) (defun vc-src-command (buffer file-or-list &rest flags) "A wrapper around `vc-do-command' for use in vc-src.el. =2D- 2.7.4 --------------22F5438F6CDA6F0CC9DA3FB5--