unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
@ 2021-10-30  1:24 dima
  2021-10-30 12:48 ` Lars Ingebrigtsen
  0 siblings, 1 reply; 44+ messages in thread
From: dima @ 2021-10-30  1:24 UTC (permalink / raw)
  To: 51497; +Cc: Wolfgang Scherer

Hi. I'm using emacs built from git. I'm observing that it's no longer
possible to "C-x v l" when looking at version-controlled files over
TRAMP. This is a regression. "git bisect" tells me that the breaking
commit is this:

  3572613550f5d1d0b3392dbc809b32f3989e2981 is the first bad commit
  commit 3572613550f5d1d0b3392dbc809b32f3989e2981
  Author: Wolfgang Scherer <wolfgang.scherer@gmx.de>
  Date:   Sun Aug 15 04:02:23 2021 +0300

      Fix vc-git-state for filenames with wildcards

      * lisp/vc/vc-git.el: (vc-git--literal-pathspec-inner),
      (vc-git--literal-pathspec), (vc-git--literal-pathspecs) new functions
      to add ":(literal)" pathspec magic (bug#39452).

      (vc-git-registered), (vc-git-state), (vc-git-dir-status-goto-stage),
      (vc-git-register), (vc-git-unregister), (vc-git-checkin),
      (vc-git-find-revision), (vc-git-checkout), (vc-git-revert),
      (vc-git-conflicted-files), (vc-git-print-log), (vc-git-diff),
      (vc-git-previous-revision), (vc-git-next-revision),
      (vc-git-delete-file), (vc-git-rename-file) functions
      vc-git--literal-pathspec, vc-git--literal-pathspecs applied.

   lisp/vc/vc-git.el | 63 +++++++++++++++++++++++++++++++------------------------
   1 file changed, 36 insertions(+), 27 deletions(-)

Recipe to reproduce:

1. emacs -Q /ssh:some_server:some_file
   where the remote file is in a git repo

2. C-x v l
   I should see the git log, but instead I get this in the *Messages*:

   vc-deduce-fileset-1: File is not under version control

"C-x v L" still works

Thanks.





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-10-30  1:24 bug#51497: 29.0.50; (vc-print-log) broken over TRAMP dima
@ 2021-10-30 12:48 ` Lars Ingebrigtsen
  2021-10-30 13:21   ` Dmitry Gutov
  2021-10-30 19:01   ` Dima Kogan
  0 siblings, 2 replies; 44+ messages in thread
From: Lars Ingebrigtsen @ 2021-10-30 12:48 UTC (permalink / raw)
  To: dima; +Cc: 51497, Wolfgang Scherer

dima@secretsauce.net writes:

> Hi. I'm using emacs built from git. I'm observing that it's no longer
> possible to "C-x v l" when looking at version-controlled files over
> TRAMP. This is a regression. "git bisect" tells me that the breaking
> commit is this:

[...]

> 1. emacs -Q /ssh:some_server:some_file
>    where the remote file is in a git repo
>
> 2. C-x v l
>    I should see the git log, but instead I get this in the *Messages*:
>
>    vc-deduce-fileset-1: File is not under version control

I'm unable to reproduce this on the current trunk.

I tried:

C-x C-f /ssh:stories:/home/larsi/src/emacs/trunk/etc/NEWS RET
C-x v l

and I got the vc-change-log buffer.

I did see something similar a few weeks ago, but it went away after I
said "make bootstrap" (so it's either a problem that shows up only
sometimes or it's a genuine build thing).  Can you try "make bootstrap"
to see whether that has any effect?

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-10-30 12:48 ` Lars Ingebrigtsen
@ 2021-10-30 13:21   ` Dmitry Gutov
  2021-10-30 19:01   ` Dima Kogan
  1 sibling, 0 replies; 44+ messages in thread
From: Dmitry Gutov @ 2021-10-30 13:21 UTC (permalink / raw)
  To: Lars Ingebrigtsen, dima; +Cc: 51497, Wolfgang Scherer

On 30.10.2021 15:48, Lars Ingebrigtsen wrote:
> I did see something similar a few weeks ago, but it went away after I
> said "make bootstrap" (so it's either a problem that shows up only
> sometimes or it's a genuine build thing).

I think it was bug#51112, which we fixed.





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-10-30 12:48 ` Lars Ingebrigtsen
  2021-10-30 13:21   ` Dmitry Gutov
@ 2021-10-30 19:01   ` Dima Kogan
  2021-10-31  0:56     ` Dmitry Gutov
  1 sibling, 1 reply; 44+ messages in thread
From: Dima Kogan @ 2021-10-30 19:01 UTC (permalink / raw)
  To: Lars Ingebrigtsen, Dmitry Gutov; +Cc: 51497, Wolfgang Scherer

Hi. Thanks for replying. Notes inline


Lars Ingebrigtsen <larsi@gnus.org> writes:

> I'm unable to reproduce this on the current trunk.
> I did see something similar a few weeks ago, but it went away after I
> said "make bootstrap" (so it's either a problem that shows up only
> sometimes or it's a genuine build thing).  Can you try "make bootstrap"
> to see whether that has any effect?

This is still a problem for me here:

  commit c3499b8ddc357544a58917bfd3846f88caf5d97c
  Author: Eli Zaretskii <eliz@gnu.org>
  Date:   Fri Oct 29 22:07:27 2021 +0300

I've been building from scratch, which is the same, as "make bootstrap"
I imagine. This was my test in "git bisect"

  git clean -idx &&
  git reset --hard &&
  ./autogen.sh &&
  ./configure --with-gnutls=ifavailable &&
  make -j19 &&
  src/emacs -nw -Q /ssh:SERVER:FILE

I haven't done any debugging other than the bisection. Would you like me
to dig into it in some way?


Dmitry Gutov <dgutov@yandex.ru> writes:

> On 30.10.2021 15:48, Lars Ingebrigtsen wrote:
>> I did see something similar a few weeks ago, but it went away after I
>> said "make bootstrap" (so it's either a problem that shows up only
>> sometimes or it's a genuine build thing).
>
> I think it was bug#51112, which we fixed.

I'm at a later revision than any notes in that bug, so I would guess
this is different.

Thanks.





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-10-30 19:01   ` Dima Kogan
@ 2021-10-31  0:56     ` Dmitry Gutov
  2021-10-31  6:58       ` Dima Kogan
  0 siblings, 1 reply; 44+ messages in thread
From: Dmitry Gutov @ 2021-10-31  0:56 UTC (permalink / raw)
  To: Dima Kogan, Lars Ingebrigtsen; +Cc: 51497, Wolfgang Scherer

On 30.10.2021 22:01, Dima Kogan wrote:
> I haven't done any debugging other than the bisection. Would you like me
> to dig into it in some way?

If you (setq vc-command-messages t), you should be able to see all VC 
commands Emacs tries to run.

If you can catch the exact command (or several) which were constructed 
incorrectly, that would help a lot.





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-10-31  0:56     ` Dmitry Gutov
@ 2021-10-31  6:58       ` Dima Kogan
  2021-10-31  8:16         ` Michael Albinus
  2021-11-03  2:03         ` Dmitry Gutov
  0 siblings, 2 replies; 44+ messages in thread
From: Dima Kogan @ 2021-10-31  6:58 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: 51497, Lars Ingebrigtsen, Wolfgang Scherer

Hi. I figured this out.

(setq vc-command-messages t) doesn't do anything: emacs doesn't
recognize this as a valid file in git, so it only runs git commands at
file open time, which apparently aren't reported with
vc-command-messages.

Instead I ran with (setq tramp-verbose 6) and the key line is this:

  23:46:27.247358 tramp-send-command (6) # ( cd DIR && unset GIT_DIR && git --no-pager ls-files -c -z -- \:\(literal\)FILE.c </dev/null 2>/dev/null; echo tramp_exit_status $? )
  23:46:27.258502 tramp-wait-for-regexp (6) # 
  tramp_exit_status 128

Note the :(literal) stuff. This is what was added in the commit that the
bisection found to be the cause of the issue. I can try to run this
command directly (outside of emacs) on the target box:

  $ git --no-pager ls-files -c -z -- ':(literal)FILE.c' </dev/null

  fatal: Invalid pathspec magic 'literal' in ':(literal)FILE.c'

The issue is that this target box has a version of git too old to know
about :(literal):

  kogan@aargh:~/stereo-server$ git --version
  git version 1.8.3.1

Yeah, it's ancient, but I don't control this particular machine, and I
don't think basic stuff like "C-x v l" should be non-functional here.
Can we add some logic to emacs to not hard-depend on this stuff?

Thanks





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-10-31  6:58       ` Dima Kogan
@ 2021-10-31  8:16         ` Michael Albinus
  2021-10-31 12:26           ` Dmitry Gutov
  2021-11-03  2:03         ` Dmitry Gutov
  1 sibling, 1 reply; 44+ messages in thread
From: Michael Albinus @ 2021-10-31  8:16 UTC (permalink / raw)
  To: Dima Kogan; +Cc: 51497, Lars Ingebrigtsen, Dmitry Gutov, Wolfgang Scherer

Dima Kogan <dima@secretsauce.net> writes:

> Hi. I figured this out.

Hi,

> I can try to run this
> command directly (outside of emacs) on the target box:
>
>   $ git --no-pager ls-files -c -z -- ':(literal)FILE.c' </dev/null
>
>   fatal: Invalid pathspec magic 'literal' in ':(literal)FILE.c'
>
> The issue is that this target box has a version of git too old to know
> about :(literal):
>
>   kogan@aargh:~/stereo-server$ git --version
>   git version 1.8.3.1
>
> Yeah, it's ancient, but I don't control this particular machine, and I
> don't think basic stuff like "C-x v l" should be non-functional here.
> Can we add some logic to emacs to not hard-depend on this stuff?

vc-git.el could declare a variable which determines, whether the git
command supports :(literal) (perhaps it does already). A user could
change this variable via connection-local settings.

> Thanks

Best regards, Michael.





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-10-31  8:16         ` Michael Albinus
@ 2021-10-31 12:26           ` Dmitry Gutov
  2021-10-31 16:05             ` Michael Albinus
  0 siblings, 1 reply; 44+ messages in thread
From: Dmitry Gutov @ 2021-10-31 12:26 UTC (permalink / raw)
  To: Michael Albinus, Dima Kogan; +Cc: 51497, Lars Ingebrigtsen, Wolfgang Scherer

On 31.10.2021 11:16, Michael Albinus wrote:
> vc-git.el could declare a variable which determines, whether the git
> command supports :(literal) (perhaps it does already). A user could
> change this variable via connection-local settings.

We normally use 'vc-git--program-version' for this.

Can we define the variable 'vc-git--program-version' as connection-local 
or something?





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-10-31 12:26           ` Dmitry Gutov
@ 2021-10-31 16:05             ` Michael Albinus
  2021-11-03  2:00               ` Dmitry Gutov
  0 siblings, 1 reply; 44+ messages in thread
From: Michael Albinus @ 2021-10-31 16:05 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: 51497, Lars Ingebrigtsen, Dima Kogan, Wolfgang Scherer

Dmitry Gutov <dgutov@yandex.ru> writes:

Hi Dmitry,

>> vc-git.el could declare a variable which determines, whether the git
>> command supports :(literal) (perhaps it does already). A user could
>> change this variable via connection-local settings.
>
> We normally use 'vc-git--program-version' for this.
>
> Can we define the variable 'vc-git--program-version' as
> connection-local or something?

--8<---------------cut here---------------start------------->8---
(defun vc-git--program-version ()
  (let ((current
	 (if (file-remote-p default-directory)
	     (with-connection-local-variables
	      (and (local-variable-p 'vc-git--program-version)
		   vc-git--program-version))
	   vc-git--program-version)))
    (or current
	(let ((version-string
               (vc-git--run-command-string nil "version")))
          (setq version-string
		(if (and version-string
			 ;; Git for Windows appends ".windows.N" to the
			 ;; numerical version reported by Git.
			 (string-match
                          "git version \\([0-9.]+\\)\\(\\.windows\\.[0-9]+\\)?$"
                          version-string))
                    (match-string 1 version-string)
                  "0"))
	  (if (file-remote-p default-directory)
	      (let ((profile (gensym "connection-local-profile-")))
		(connection-local-set-profile-variables
		 profile `((vc-git--program-version . ,version-string))) ;
		(connection-local-set-profiles
		 (connection-local-criteria-for-default-directory) profile))
	    (setq vc-git--program-version version-string))
	  version-string))))
--8<---------------cut here---------------end--------------->8---

Best regards, Michael.





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-10-31 16:05             ` Michael Albinus
@ 2021-11-03  2:00               ` Dmitry Gutov
  2021-11-03 17:09                 ` Michael Albinus
  0 siblings, 1 reply; 44+ messages in thread
From: Dmitry Gutov @ 2021-11-03  2:00 UTC (permalink / raw)
  To: Michael Albinus; +Cc: 51497, Lars Ingebrigtsen, Dima Kogan, Wolfgang Scherer

Hi Michael,

On 31.10.2021 19:05, Michael Albinus wrote:
> (defun vc-git--program-version ()
>    (let ((current
> 	 (if (file-remote-p default-directory)
> 	     (with-connection-local-variables
> 	      (and (local-variable-p 'vc-git--program-version)
> 		   vc-git--program-version))
> 	   vc-git--program-version)))
>      (or current
> 	(let ((version-string
>                 (vc-git--run-command-string nil "version")))
>            (setq version-string
> 		(if (and version-string
> 			 ;; Git for Windows appends ".windows.N" to the
> 			 ;; numerical version reported by Git.
> 			 (string-match
>                            "git version \\([0-9.]+\\)\\(\\.windows\\.[0-9]+\\)?$"
>                            version-string))
>                      (match-string 1 version-string)
>                    "0"))
> 	  (if (file-remote-p default-directory)
> 	      (let ((profile (gensym "connection-local-profile-")))
> 		(connection-local-set-profile-variables
> 		 profile `((vc-git--program-version . ,version-string))) ;
> 		(connection-local-set-profiles
> 		 (connection-local-criteria-for-default-directory) profile))
> 	    (setq vc-git--program-version version-string))
> 	  version-string))))

I wonder if we could have some helper that is more succinct. One that 
didn't require the client code to auto-generate the profile name, for 
instance.





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-10-31  6:58       ` Dima Kogan
  2021-10-31  8:16         ` Michael Albinus
@ 2021-11-03  2:03         ` Dmitry Gutov
  2021-11-03  3:03           ` Dima Kogan
  1 sibling, 1 reply; 44+ messages in thread
From: Dmitry Gutov @ 2021-11-03  2:03 UTC (permalink / raw)
  To: Dima Kogan; +Cc: 51497, Lars Ingebrigtsen, Wolfgang Scherer

[-- Attachment #1: Type: text/plain, Size: 1068 bytes --]

On 31.10.2021 09:58, Dima Kogan wrote:
> Note the :(literal) stuff. This is what was added in the commit that the
> bisection found to be the cause of the issue. I can try to run this
> command directly (outside of emacs) on the target box:
> 
>    $ git --no-pager ls-files -c -z -- ':(literal)FILE.c' </dev/null
> 
>    fatal: Invalid pathspec magic 'literal' in ':(literal)FILE.c'
> 
> The issue is that this target box has a version of git too old to know
> about :(literal):
> 
>    kogan@aargh:~/stereo-server$ git --version
>    git version 1.8.3.1

Sounds like CentOS 7. Released 7 years ago, but updated last year, even.

> Yeah, it's ancient, but I don't control this particular machine, and I
> don't think basic stuff like "C-x v l" should be non-functional here.
> Can we add some logic to emacs to not hard-depend on this stuff?

Any idea which version of Git introduced literal pathspecs?

The docs on the official website only go back to 2.1.4 (also from 2014), 
which had it already.

Anyway, with Michael's code, see the attached patch you can try.


[-- Attachment #2: no-literal-pathspecs-on-centos.diff --]
[-- Type: text/x-patch, Size: 2651 bytes --]

diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el
index 3f89fad235..80455b2010 100644
--- a/lisp/vc/vc-git.el
+++ b/lisp/vc/vc-git.el
@@ -249,7 +249,9 @@ vc-git--literal-pathspec
     ;; Expand abbreviated file names.
     (when (file-name-absolute-p file)
       (setq file (expand-file-name file)))
-    (concat ":(literal)" (file-local-name file))))
+    (if (version<= "2.1.4" (vc-git--program-version))
+        (concat ":(literal)" (file-local-name file))
+      (file-local-name file))))
 
 (defun vc-git--literal-pathspecs (files)
   "Prepend :(literal) path magic to FILES."
@@ -293,18 +295,32 @@ vc-git--state-code
 (defvar vc-git--program-version nil)
 
 (defun vc-git--program-version ()
-  (or vc-git--program-version
-      (let ((version-string
-             (vc-git--run-command-string nil "version")))
-        (setq vc-git--program-version
-              (if (and version-string
-                       ;; Git for Windows appends ".windows.N" to the
-                       ;; numerical version reported by Git.
-                       (string-match
-                        "git version \\([0-9.]+\\)\\(\\.windows\\.[0-9]+\\)?$"
-                        version-string))
-                  (match-string 1 version-string)
-                "0")))))
+  (let ((current
+         (if (file-remote-p default-directory)
+             (with-connection-local-variables
+              (and (local-variable-p 'vc-git--program-version)
+                   vc-git--program-version))
+           vc-git--program-version)))
+    (or current
+        (let ((version-string
+               (vc-git--run-command-string nil "version")))
+          (setq version-string
+                (if (and version-string
+                         ;; Git for Windows appends ".windows.N" to the
+                         ;; numerical version reported by Git.
+                         (string-match
+                          "git version \\([0-9.]+\\)\\(\\.windows\\.[0-9]+\\)?$"
+                          version-string))
+                    (match-string 1 version-string)
+                  "0"))
+          (if (file-remote-p default-directory)
+              (let ((profile (gensym "connection-local-profile-")))
+                (connection-local-set-profile-variables
+                 profile `((vc-git--program-version . ,version-string))) ;
+                (connection-local-set-profiles
+                 (connection-local-criteria-for-default-directory) profile))
+            (setq vc-git--program-version version-string))
+          version-string))))
 
 (defun vc-git--git-status-to-vc-state (code-list)
   "Convert CODE-LIST to a VC status.

^ permalink raw reply related	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-11-03  2:03         ` Dmitry Gutov
@ 2021-11-03  3:03           ` Dima Kogan
  2021-11-03 12:06             ` Dmitry Gutov
  0 siblings, 1 reply; 44+ messages in thread
From: Dima Kogan @ 2021-11-03  3:03 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: 51497, Lars Ingebrigtsen, Wolfgang Scherer

Dmitry Gutov <dgutov@yandex.ru> writes:

> On 31.10.2021 09:58, Dima Kogan wrote:
>>    kogan@aargh:~/stereo-server$ git --version
>>    git version 1.8.3.1
>
> Sounds like CentOS 7. Released 7 years ago, but updated last year,
> even.

Yessir. I wasn't a fan of this even 7 years ago, but it's not a battle I
want to fight.


>> Yeah, it's ancient, but I don't control this particular machine, and I
>> don't think basic stuff like "C-x v l" should be non-functional here.
>> Can we add some logic to emacs to not hard-depend on this stuff?
>
> Any idea which version of Git introduced literal pathspecs?

I think 1.8.5:

  https://github.com/git/git/commit/5c6933d201fab183a9779dca0fe43bf2f1eca098


> Anyway, with Michael's code, see the attached patch you can try.

It fixes the problem. Thank you very much.





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-11-03  3:03           ` Dima Kogan
@ 2021-11-03 12:06             ` Dmitry Gutov
  2021-11-06 13:22               ` Dmitry Gutov
  0 siblings, 1 reply; 44+ messages in thread
From: Dmitry Gutov @ 2021-11-03 12:06 UTC (permalink / raw)
  To: Dima Kogan; +Cc: 51497, Lars Ingebrigtsen, Wolfgang Scherer

On 03.11.2021 06:03, Dima Kogan wrote:
> Dmitry Gutov <dgutov@yandex.ru> writes:
> 
>> On 31.10.2021 09:58, Dima Kogan wrote:
>>>     kogan@aargh:~/stereo-server$ git --version
>>>     git version 1.8.3.1
>>
>> Sounds like CentOS 7. Released 7 years ago, but updated last year,
>> even.
> 
> Yessir. I wasn't a fan of this even 7 years ago, but it's not a battle I
> want to fight.
> 
> 
>>> Yeah, it's ancient, but I don't control this particular machine, and I
>>> don't think basic stuff like "C-x v l" should be non-functional here.
>>> Can we add some logic to emacs to not hard-depend on this stuff?
>>
>> Any idea which version of Git introduced literal pathspecs?
> 
> I think 1.8.5:
> 
>    https://github.com/git/git/commit/5c6933d201fab183a9779dca0fe43bf2f1eca098

Looks like it. Thanks!

>> Anyway, with Michael's code, see the attached patch you can try.
> 
> It fixes the problem. Thank you very much.

All right.

Lars, Eli, can we put it in Emacs 28?





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-11-03  2:00               ` Dmitry Gutov
@ 2021-11-03 17:09                 ` Michael Albinus
  2021-11-05  2:00                   ` Dmitry Gutov
  0 siblings, 1 reply; 44+ messages in thread
From: Michael Albinus @ 2021-11-03 17:09 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: 51497, Lars Ingebrigtsen, Dima Kogan, Wolfgang Scherer

Dmitry Gutov <dgutov@yandex.ru> writes:

> Hi Michael,

Hi Dmitry,

> I wonder if we could have some helper that is more succinct. One that
> didn't require the client code to auto-generate the profile name, for
> instance.

Perhaps. I have some health problems these days, so I will check next
week or so. However, a helper function (in files-x.el) would be good for
Emacs 29 only.

Best regards, Michael.





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-11-03 17:09                 ` Michael Albinus
@ 2021-11-05  2:00                   ` Dmitry Gutov
  0 siblings, 0 replies; 44+ messages in thread
From: Dmitry Gutov @ 2021-11-05  2:00 UTC (permalink / raw)
  To: Michael Albinus; +Cc: 51497, Lars Ingebrigtsen, Dima Kogan, Wolfgang Scherer

Hi Michael,

On 03.11.2021 20:09, Michael Albinus wrote:
>> I wonder if we could have some helper that is more succinct. One that
>> didn't require the client code to auto-generate the profile name, for
>> instance.
> 
> Perhaps. I have some health problems these days, so I will check next
> week or so. However, a helper function (in files-x.el) would be good for
> Emacs 29 only.

Of course.

Take care,
Dmitry.





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-11-03 12:06             ` Dmitry Gutov
@ 2021-11-06 13:22               ` Dmitry Gutov
  2021-11-06 15:51                 ` Eli Zaretskii
  0 siblings, 1 reply; 44+ messages in thread
From: Dmitry Gutov @ 2021-11-06 13:22 UTC (permalink / raw)
  To: Lars Ingebrigtsen, Eli Zaretskii; +Cc: Dima Kogan, 51497, Wolfgang Scherer

On 03.11.2021 15:06, Dmitry Gutov wrote:
> Lars, Eli, can we put it in Emacs 28?

Ping.





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-11-06 13:22               ` Dmitry Gutov
@ 2021-11-06 15:51                 ` Eli Zaretskii
  2021-11-06 19:44                   ` Dmitry Gutov
  0 siblings, 1 reply; 44+ messages in thread
From: Eli Zaretskii @ 2021-11-06 15:51 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: lists, 51497, larsi, wolfgang.scherer

> From: Dmitry Gutov <dgutov@yandex.ru>
> Cc: 51497@debbugs.gnu.org, Wolfgang Scherer <wolfgang.scherer@gmx.de>,
>  Dima Kogan <lists@dima.secretsauce.net>
> Date: Sat, 6 Nov 2021 16:22:56 +0300
> 
> On 03.11.2021 15:06, Dmitry Gutov wrote:
> > Lars, Eli, can we put it in Emacs 28?
> 
> Ping.

Sorry for missing the original question.

I'm a bit worried by the function relying on the fact that
default-directory is the directory of the repository.  Wouldn't it be
better to explicitly let-bind it inside the function?

A (perhaps safer) alternative for emacs-28 would be not to use
:(literal) for remote repositories.  What are the disadvantages of
that?





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-11-06 15:51                 ` Eli Zaretskii
@ 2021-11-06 19:44                   ` Dmitry Gutov
  2021-11-06 19:52                     ` Eli Zaretskii
  0 siblings, 1 reply; 44+ messages in thread
From: Dmitry Gutov @ 2021-11-06 19:44 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: lists, 51497, larsi, wolfgang.scherer

On 06.11.2021 18:51, Eli Zaretskii wrote:
>> From: Dmitry Gutov <dgutov@yandex.ru>
>> Cc: 51497@debbugs.gnu.org, Wolfgang Scherer <wolfgang.scherer@gmx.de>,
>>   Dima Kogan <lists@dima.secretsauce.net>
>> Date: Sat, 6 Nov 2021 16:22:56 +0300
>>
>> On 03.11.2021 15:06, Dmitry Gutov wrote:
>>> Lars, Eli, can we put it in Emacs 28?
>>
>> Ping.
> 
> Sorry for missing the original question.
> 
> I'm a bit worried by the function relying on the fact that
> default-directory is the directory of the repository.  Wouldn't it be
> better to explicitly let-bind it inside the function?

We could, but notice how most of vc-git-* functions don't bind 
default-directory, thus relying on its implicit value. It just how VC 
works: expecting default-directory to have the right value around the calls.

The only current caller of vc-git--program-version (vc-git-state) does 
not either. The backend methods that do, seem to do that with some 
additional purpose (like having default-directory point to the 
repository root, rather than be a random directory inside it).

> A (perhaps safer) alternative for emacs-28 would be not to use
> :(literal) for remote repositories.  What are the disadvantages of
> that?

That would mean leaving bug#39452 unfixed on remote hosts. Seems like a 
significant disadvantage to me (inconsistent behavior leads to more 
difficult reproduction and reporting of bugs, in particular for those 
who will notice this problem remotely but would not be able to reproduce 
locally). Given that the code complexity added by fixing this bug would 
remain with us, seems more like worst-of-both-worlds kind of situation.

But it would make VC work on remote CentOS 7 hosts again, there's that.





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-11-06 19:44                   ` Dmitry Gutov
@ 2021-11-06 19:52                     ` Eli Zaretskii
  2021-11-06 22:11                       ` Andy Moreton
  2021-11-06 22:19                       ` Dmitry Gutov
  0 siblings, 2 replies; 44+ messages in thread
From: Eli Zaretskii @ 2021-11-06 19:52 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: lists, 51497, larsi, wolfgang.scherer

> Cc: lists@dima.secretsauce.net, 51497@debbugs.gnu.org, larsi@gnus.org,
>  wolfgang.scherer@gmx.de
> From: Dmitry Gutov <dgutov@yandex.ru>
> Date: Sat, 6 Nov 2021 22:44:55 +0300
> 
> > I'm a bit worried by the function relying on the fact that
> > default-directory is the directory of the repository.  Wouldn't it be
> > better to explicitly let-bind it inside the function?
> 
> We could, but notice how most of vc-git-* functions don't bind 
> default-directory, thus relying on its implicit value. It just how VC 
> works: expecting default-directory to have the right value around the calls.

How certain are you that default-directory has the right value?
Because if it doesn't, AFAIU all the connection-specific stuff will
fall apart.

> > A (perhaps safer) alternative for emacs-28 would be not to use
> > :(literal) for remote repositories.  What are the disadvantages of
> > that?
> 
> That would mean leaving bug#39452 unfixed on remote hosts.

Only for files with wildcard characters in their names.  How
frequently does that happen?  Also, it will be only unsolved in Emacs
28.





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-11-06 19:52                     ` Eli Zaretskii
@ 2021-11-06 22:11                       ` Andy Moreton
  2021-11-06 22:21                         ` Dmitry Gutov
  2021-11-07  6:31                         ` Eli Zaretskii
  2021-11-06 22:19                       ` Dmitry Gutov
  1 sibling, 2 replies; 44+ messages in thread
From: Andy Moreton @ 2021-11-06 22:11 UTC (permalink / raw)
  To: 51497

On Sat 06 Nov 2021, Eli Zaretskii wrote:

>> Cc: lists@dima.secretsauce.net, 51497@debbugs.gnu.org, larsi@gnus.org,
>>  wolfgang.scherer@gmx.de
>> From: Dmitry Gutov <dgutov@yandex.ru>
>> Date: Sat, 6 Nov 2021 22:44:55 +0300
>> 
>> > I'm a bit worried by the function relying on the fact that
>> > default-directory is the directory of the repository.  Wouldn't it be
>> > better to explicitly let-bind it inside the function?
>> 
>> We could, but notice how most of vc-git-* functions don't bind 
>> default-directory, thus relying on its implicit value. It just how VC 
>> works: expecting default-directory to have the right value around the calls.
>
> How certain are you that default-directory has the right value?
> Because if it doesn't, AFAIU all the connection-specific stuff will
> fall apart.
>
>> > A (perhaps safer) alternative for emacs-28 would be not to use
>> > :(literal) for remote repositories.  What are the disadvantages of
>> > that?
>> 
>> That would mean leaving bug#39452 unfixed on remote hosts.
>
> Only for files with wildcard characters in their names.  How
> frequently does that happen?  Also, it will be only unsolved in Emacs
> 28.

I missed the discussion in bug#39452 at the time, but while the solution
was being worked on, I used advice to stub out the literal pathspec
functions:
  (advice-add 'vc-git--literal-pathspec  :override #'identity)
  (advice-add 'vc-git--literal-pathspecs :override #'identity)

That workaround is still needed for me. Without that, nothing in vc-git
works in my environment (64bit minw64 build on win10, using cygwin bash
and git together with cygwin-mount.el from emacs wiki).

While I realise my setup is somewhat non-standard, other users may also
find that the literal pathspec code also misbehaves.

    AndyM






^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-11-06 19:52                     ` Eli Zaretskii
  2021-11-06 22:11                       ` Andy Moreton
@ 2021-11-06 22:19                       ` Dmitry Gutov
  1 sibling, 0 replies; 44+ messages in thread
From: Dmitry Gutov @ 2021-11-06 22:19 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: lists, 51497, larsi, wolfgang.scherer

On 06.11.2021 22:52, Eli Zaretskii wrote:
>> Cc: lists@dima.secretsauce.net, 51497@debbugs.gnu.org, larsi@gnus.org,
>>   wolfgang.scherer@gmx.de
>> From: Dmitry Gutov <dgutov@yandex.ru>
>> Date: Sat, 6 Nov 2021 22:44:55 +0300
>>
>>> I'm a bit worried by the function relying on the fact that
>>> default-directory is the directory of the repository.  Wouldn't it be
>>> better to explicitly let-bind it inside the function?
>>
>> We could, but notice how most of vc-git-* functions don't bind
>> default-directory, thus relying on its implicit value. It just how VC
>> works: expecting default-directory to have the right value around the calls.
> 
> How certain are you that default-directory has the right value?
> Because if it doesn't, AFAIU all the connection-specific stuff will
> fall apart.

Reasonably, but not 100%. Especially with third-party code which calls 
into VC (it could adapt independently from Emacs releases, though).

We could try to bind default-directory inside vc-git--literal-pathspec, 
but this approach is not 100% reliable either: for all I know, sometimes 
FILE will be a relative name (we even have a file-name-absolute-p check 
inside).

But what's the worst thing that can happen because of this? Suppose some 
caller will leave default-directory at a wrong value. Then 
vc-git--program-version will return the version from a wrong host. And 
some particular command (probably a less popular one) will remain broken 
on remote CentOS 7 machines. That's still an improvement compared to the 
current sutuation.

So I suggest we push the proposed change to emacs-28 and then maybe back 
it out (or modify as necessary) if problems arise.

>>> A (perhaps safer) alternative for emacs-28 would be not to use
>>> :(literal) for remote repositories.  What are the disadvantages of
>>> that?
>>
>> That would mean leaving bug#39452 unfixed on remote hosts.
> 
> Only for files with wildcard characters in their names.  How
> frequently does that happen?  Also, it will be only unsolved in Emacs
> 28.

I've never seen this in practice, but some other categories of users 
might encounter it more often (e.g. science people, who tend to use more 
exotic files names). And when one does see it, it must be very annoying 
to debug.





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-11-06 22:11                       ` Andy Moreton
@ 2021-11-06 22:21                         ` Dmitry Gutov
  2021-11-06 23:03                           ` Andy Moreton
  2021-11-07  6:31                         ` Eli Zaretskii
  1 sibling, 1 reply; 44+ messages in thread
From: Dmitry Gutov @ 2021-11-06 22:21 UTC (permalink / raw)
  To: Andy Moreton, 51497

On 07.11.2021 01:11, Andy Moreton wrote:
> That workaround is still needed for me. Without that, nothing in vc-git
> works in my environment (64bit minw64 build on win10, using cygwin bash
> and git together with cygwin-mount.el from emacs wiki).

Does that environment also have an old version of Git? Or is there 
another reason why it's broken?

> While I realise my setup is somewhat non-standard, other users may also
> find that the literal pathspec code also misbehaves.

I would like to fix it for all users, but debugging would fall on your 
shoulders, I'm afraid.





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-11-06 22:21                         ` Dmitry Gutov
@ 2021-11-06 23:03                           ` Andy Moreton
  2021-11-07  0:11                             ` Dmitry Gutov
  2021-11-07  6:43                             ` Eli Zaretskii
  0 siblings, 2 replies; 44+ messages in thread
From: Andy Moreton @ 2021-11-06 23:03 UTC (permalink / raw)
  To: 51497

On Sun 07 Nov 2021, Dmitry Gutov wrote:

> On 07.11.2021 01:11, Andy Moreton wrote:
>> That workaround is still needed for me. Without that, nothing in vc-git
>> works in my environment (64bit minw64 build on win10, using cygwin bash
>> and git together with cygwin-mount.el from emacs wiki).
>
> Does that environment also have an old version of Git? Or is there another
> reason why it's broken?

I have git 2.33 in cygwin and MSYS2, so git is not old. I'll look at
this again now that the changes have stablised.

>> While I realise my setup is somewhat non-standard, other users may also
>> find that the literal pathspec code also misbehaves.
>
> I would like to fix it for all users, but debugging would fall on your
> shoulders, I'm afraid.

My note was more to warn that adding this to emacs-28 may bring
problems.

Looking at this again, Trying "C-x v l" for INSTALL in the repo master
branch gives (rewrapped for clarity):

  fatal: :(literal)c:/emacs/git/emacs/master/nt/INSTALL:
  'c:/emacs/git/emacs/master/nt/INSTALL' is outside repository at
  '/c/emacs/git/emacs/master'

This appears to be due to the translation between win32 and cygwin
(posix) filenames.

    AndyM






^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-11-06 23:03                           ` Andy Moreton
@ 2021-11-07  0:11                             ` Dmitry Gutov
  2021-11-07  6:47                               ` Eli Zaretskii
  2021-11-07  6:43                             ` Eli Zaretskii
  1 sibling, 1 reply; 44+ messages in thread
From: Dmitry Gutov @ 2021-11-07  0:11 UTC (permalink / raw)
  To: Andy Moreton, 51497

On 07.11.2021 02:03, Andy Moreton wrote:
> On Sun 07 Nov 2021, Dmitry Gutov wrote:
> 
>> On 07.11.2021 01:11, Andy Moreton wrote:
>>> That workaround is still needed for me. Without that, nothing in vc-git
>>> works in my environment (64bit minw64 build on win10, using cygwin bash
>>> and git together with cygwin-mount.el from emacs wiki).
>>
>> Does that environment also have an old version of Git? Or is there another
>> reason why it's broken?
> 
> I have git 2.33 in cygwin and MSYS2, so git is not old. I'll look at
> this again now that the changes have stablised.

It would have been nice to receive this feedback before the emacs-28 
branch was cut, when we had more freedom to alter the implementation.

>>> While I realise my setup is somewhat non-standard, other users may also
>>> find that the literal pathspec code also misbehaves.
>>
>> I would like to fix it for all users, but debugging would fall on your
>> shoulders, I'm afraid.
> 
> My note was more to warn that adding this to emacs-28 may bring
> problems.

Adding what? The literal pathspec stuff is already there.

> Looking at this again, Trying "C-x v l" for INSTALL in the repo master
> branch gives (rewrapped for clarity):
> 
>    fatal: :(literal)c:/emacs/git/emacs/master/nt/INSTALL:
>    'c:/emacs/git/emacs/master/nt/INSTALL' is outside repository at
>    '/c/emacs/git/emacs/master'
> 
> This appears to be due to the translation between win32 and cygwin
> (posix) filenames.

It might be fixable inside vc-git--literal-pathspec. Is there some other 
more general path conversion function we should use instead of 
'file-local-name' there? A tested patch would help a lot.

Failing that, I think we'll need to change the "literal pathspecs" 
implementation to yet another approach (adding --literl-pathspecs flag 
instead of manipulating file names). It comes with the same general 
drawbacks as the env var (which is used under the hood), but the 
explicit approach of specifying it in every command would avoid the 
problem of my original fix for that bug.





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-11-06 22:11                       ` Andy Moreton
  2021-11-06 22:21                         ` Dmitry Gutov
@ 2021-11-07  6:31                         ` Eli Zaretskii
  1 sibling, 0 replies; 44+ messages in thread
From: Eli Zaretskii @ 2021-11-07  6:31 UTC (permalink / raw)
  To: Andy Moreton; +Cc: 51497

> From: Andy Moreton <andrewjmoreton@gmail.com>
> Date: Sat, 06 Nov 2021 22:11:03 +0000
> 
> I missed the discussion in bug#39452 at the time, but while the solution
> was being worked on, I used advice to stub out the literal pathspec
> functions:
>   (advice-add 'vc-git--literal-pathspec  :override #'identity)
>   (advice-add 'vc-git--literal-pathspecs :override #'identity)
> 
> That workaround is still needed for me. Without that, nothing in vc-git
> works in my environment (64bit minw64 build on win10, using cygwin bash
> and git together with cygwin-mount.el from emacs wiki).

We need to understand why the original code doesn't work for you,
otherwise we cannot decide what to do about that issue.  FWIW, Git
works for me on Windows from Emacs without any changes.  But I don't
use the Cygwin Bash and cygwin-mount.el, which I always warned people
about.  If you want to use Cygwin, why not also use Cygwin Emacs and
Git, and save yourself those troubles?






^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-11-06 23:03                           ` Andy Moreton
  2021-11-07  0:11                             ` Dmitry Gutov
@ 2021-11-07  6:43                             ` Eli Zaretskii
  2021-11-07 10:45                               ` Andy Moreton
  1 sibling, 1 reply; 44+ messages in thread
From: Eli Zaretskii @ 2021-11-07  6:43 UTC (permalink / raw)
  To: Andy Moreton; +Cc: 51497

> From: Andy Moreton <andrewjmoreton@gmail.com>
> Date: Sat, 06 Nov 2021 23:03:24 +0000
> 
> Looking at this again, Trying "C-x v l" for INSTALL in the repo master
> branch gives (rewrapped for clarity):
> 
>   fatal: :(literal)c:/emacs/git/emacs/master/nt/INSTALL:
>   'c:/emacs/git/emacs/master/nt/INSTALL' is outside repository at
>   '/c/emacs/git/emacs/master'
> 
> This appears to be due to the translation between win32 and cygwin
> (posix) filenames.

Right, and so the immediate suspect is cygwin-mount.el.  That command
works flawlessly for me, FWIW.





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-11-07  0:11                             ` Dmitry Gutov
@ 2021-11-07  6:47                               ` Eli Zaretskii
  2021-11-07 10:43                                 ` Andy Moreton
  2021-11-07 22:36                                 ` Dmitry Gutov
  0 siblings, 2 replies; 44+ messages in thread
From: Eli Zaretskii @ 2021-11-07  6:47 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: 51497, andrewjmoreton

> From: Dmitry Gutov <dgutov@yandex.ru>
> Date: Sun, 7 Nov 2021 03:11:43 +0300
> 
> Failing that, I think we'll need to change the "literal pathspecs" 
> implementation to yet another approach (adding --literl-pathspecs flag 
> instead of manipulating file names). It comes with the same general 
> drawbacks as the env var (which is used under the hood), but the 
> explicit approach of specifying it in every command would avoid the 
> problem of my original fix for that bug.

Why wasn't --literal-pathspecs used in the first place? what are the
downsides?  IME, using magic file names is always worse, because it
can run afoul of various shells that consider some characters special.





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-11-07  6:47                               ` Eli Zaretskii
@ 2021-11-07 10:43                                 ` Andy Moreton
  2021-11-07 22:36                                 ` Dmitry Gutov
  1 sibling, 0 replies; 44+ messages in thread
From: Andy Moreton @ 2021-11-07 10:43 UTC (permalink / raw)
  To: 51497

On Sun 07 Nov 2021, Eli Zaretskii wrote:

>> From: Dmitry Gutov <dgutov@yandex.ru>
>> Date: Sun, 7 Nov 2021 03:11:43 +0300
>> 
>> Failing that, I think we'll need to change the "literal pathspecs" 
>> implementation to yet another approach (adding --literl-pathspecs flag 
>> instead of manipulating file names). It comes with the same general 
>> drawbacks as the env var (which is used under the hood), but the 
>> explicit approach of specifying it in every command would avoid the 
>> problem of my original fix for that bug.
>
> Why wasn't --literal-pathspecs used in the first place? what are the
> downsides?  IME, using magic file names is always worse, because it
> can run afoul of various shells that consider some characters special.

Indeed. I agree it is much simpler to use the flag.

    AndyM






^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-11-07  6:43                             ` Eli Zaretskii
@ 2021-11-07 10:45                               ` Andy Moreton
  0 siblings, 0 replies; 44+ messages in thread
From: Andy Moreton @ 2021-11-07 10:45 UTC (permalink / raw)
  To: 51497

On Sun 07 Nov 2021, Eli Zaretskii wrote:

>> From: Andy Moreton <andrewjmoreton@gmail.com>
>> Date: Sat, 06 Nov 2021 23:03:24 +0000
>> 
>> Looking at this again, Trying "C-x v l" for INSTALL in the repo master
>> branch gives (rewrapped for clarity):
>> 
>>   fatal: :(literal)c:/emacs/git/emacs/master/nt/INSTALL:
>>   'c:/emacs/git/emacs/master/nt/INSTALL' is outside repository at
>>   '/c/emacs/git/emacs/master'
>> 
>> This appears to be due to the translation between win32 and cygwin
>> (posix) filenames.
>
> Right, and so the immediate suspect is cygwin-mount.el.  That command
> works flawlessly for me, FWIW.

Yes. It is probably due to the ":(literal)" prefix names not matching
the patterns that cygwin-mount.el adds to file-name-handler-alist.

    AndyM






^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-11-07  6:47                               ` Eli Zaretskii
  2021-11-07 10:43                                 ` Andy Moreton
@ 2021-11-07 22:36                                 ` Dmitry Gutov
  2021-11-08 12:49                                   ` Eli Zaretskii
  1 sibling, 1 reply; 44+ messages in thread
From: Dmitry Gutov @ 2021-11-07 22:36 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 51497, andrewjmoreton

On 07.11.2021 09:47, Eli Zaretskii wrote:
>> From: Dmitry Gutov <dgutov@yandex.ru>
>> Date: Sun, 7 Nov 2021 03:11:43 +0300
>>
>> Failing that, I think we'll need to change the "literal pathspecs"
>> implementation to yet another approach (adding --literl-pathspecs flag
>> instead of manipulating file names). It comes with the same general
>> drawbacks as the env var (which is used under the hood), but the
>> explicit approach of specifying it in every command would avoid the
>> problem of my original fix for that bug.
> 
> Why wasn't --literal-pathspecs used in the first place? what are the
> downsides?  IME, using magic file names is always worse, because it
> can run afoul of various shells that consider some characters special.

It wasn't among the proposed solutions.

I went with the env var solution initially (because it required less 
code and brought fewer -- none -- Git version compatibility problems), 
but it didn't yield itself as easily to the per-action opt-in as the 
other proposal (currently installed).

But now that I think about it, it would be possible to do this without a 
new macro, just adding a new variable that default to nil, and set it to 
t in every backend method that needs it.





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-11-07 22:36                                 ` Dmitry Gutov
@ 2021-11-08 12:49                                   ` Eli Zaretskii
  2021-11-08 17:30                                     ` Dmitry Gutov
  0 siblings, 1 reply; 44+ messages in thread
From: Eli Zaretskii @ 2021-11-08 12:49 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: 51497, andrewjmoreton

> Cc: 51497@debbugs.gnu.org, andrewjmoreton@gmail.com
> From: Dmitry Gutov <dgutov@yandex.ru>
> Date: Mon, 8 Nov 2021 01:36:18 +0300
> 
> > Why wasn't --literal-pathspecs used in the first place? what are the
> > downsides?  IME, using magic file names is always worse, because it
> > can run afoul of various shells that consider some characters special.
> 
> It wasn't among the proposed solutions.
> 
> I went with the env var solution initially (because it required less 
> code and brought fewer -- none -- Git version compatibility problems), 
> but it didn't yield itself as easily to the per-action opt-in as the 
> other proposal (currently installed).
> 
> But now that I think about it, it would be possible to do this without a 
> new macro, just adding a new variable that default to nil, and set it to 
> t in every backend method that needs it.

But would that solve our problems for which :(literal) was introduced?
AFAIU, the difference between that and --literal-pathspecs is that the
latter is global: it affects all the file names of the Git command,
while the former can be applied only to some file names.  Do we have
valid use cases where only some of the file names need to be treated
as literal?





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-11-08 12:49                                   ` Eli Zaretskii
@ 2021-11-08 17:30                                     ` Dmitry Gutov
  2021-11-08 18:18                                       ` Eli Zaretskii
  0 siblings, 1 reply; 44+ messages in thread
From: Dmitry Gutov @ 2021-11-08 17:30 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 51497, andrewjmoreton

On 08.11.2021 15:49, Eli Zaretskii wrote:
>> Cc: 51497@debbugs.gnu.org, andrewjmoreton@gmail.com
>> From: Dmitry Gutov <dgutov@yandex.ru>
>> Date: Mon, 8 Nov 2021 01:36:18 +0300
>>
>>> Why wasn't --literal-pathspecs used in the first place? what are the
>>> downsides?  IME, using magic file names is always worse, because it
>>> can run afoul of various shells that consider some characters special.
>>
>> It wasn't among the proposed solutions.
>>
>> I went with the env var solution initially (because it required less
>> code and brought fewer -- none -- Git version compatibility problems),
>> but it didn't yield itself as easily to the per-action opt-in as the
>> other proposal (currently installed).
>>
>> But now that I think about it, it would be possible to do this without a
>> new macro, just adding a new variable that default to nil, and set it to
>> t in every backend method that needs it.
> 
> But would that solve our problems for which :(literal) was introduced?
> AFAIU, the difference between that and --literal-pathspecs is that the
> latter is global: it affects all the file names of the Git command,
> while the former can be applied only to some file names.

Both can be used per-command, but indeed it's true: the :(literal) 
syntax can also be used to apply to individual specs only.

>Do we have
> valid use cases where only some of the file names need to be treated
> as literal?

Even though it's plausible, I haven't encountered this particular use 
case so far. Perhaps when we do, we could mix-and-match :(literal) and 
--literal-pathspecs.





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-11-08 17:30                                     ` Dmitry Gutov
@ 2021-11-08 18:18                                       ` Eli Zaretskii
  2021-12-23 10:28                                         ` Lars Ingebrigtsen
  2021-12-27  1:36                                         ` Dmitry Gutov
  0 siblings, 2 replies; 44+ messages in thread
From: Eli Zaretskii @ 2021-11-08 18:18 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: 51497, andrewjmoreton

> Cc: 51497@debbugs.gnu.org, andrewjmoreton@gmail.com
> From: Dmitry Gutov <dgutov@yandex.ru>
> Date: Mon, 8 Nov 2021 20:30:55 +0300
> 
> >> But now that I think about it, it would be possible to do this without a
> >> new macro, just adding a new variable that default to nil, and set it to
> >> t in every backend method that needs it.
> > 
> > But would that solve our problems for which :(literal) was introduced?
> > AFAIU, the difference between that and --literal-pathspecs is that the
> > latter is global: it affects all the file names of the Git command,
> > while the former can be applied only to some file names.
> 
> Both can be used per-command, but indeed it's true: the :(literal) 
> syntax can also be used to apply to individual specs only.
> 
> >Do we have
> > valid use cases where only some of the file names need to be treated
> > as literal?
> 
> Even though it's plausible, I haven't encountered this particular use 
> case so far. Perhaps when we do, we could mix-and-match :(literal) and 
> --literal-pathspecs.

So what would you suggest as the way forward, for both emacs-28 and
the master branches (the 2 solutions could be different)?  Do you
still prefer to go with your original patch for emacs-28?





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-11-08 18:18                                       ` Eli Zaretskii
@ 2021-12-23 10:28                                         ` Lars Ingebrigtsen
  2021-12-26  0:53                                           ` Dmitry Gutov
  2021-12-27  1:36                                         ` Dmitry Gutov
  1 sibling, 1 reply; 44+ messages in thread
From: Lars Ingebrigtsen @ 2021-12-23 10:28 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 51497, andrewjmoreton, Dmitry Gutov

Eli Zaretskii <eliz@gnu.org> writes:

>> Even though it's plausible, I haven't encountered this particular use 
>> case so far. Perhaps when we do, we could mix-and-match :(literal) and 
>> --literal-pathspecs.
>
> So what would you suggest as the way forward, for both emacs-28 and
> the master branches (the 2 solutions could be different)?  Do you
> still prefer to go with your original patch for emacs-28?

This was the final message in this thread, and it was six weeks ago.  I
haven't paid attention to the patches in this area -- is this still an
issue, or has it been fixed?

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-12-23 10:28                                         ` Lars Ingebrigtsen
@ 2021-12-26  0:53                                           ` Dmitry Gutov
  0 siblings, 0 replies; 44+ messages in thread
From: Dmitry Gutov @ 2021-12-26  0:53 UTC (permalink / raw)
  To: Lars Ingebrigtsen, Eli Zaretskii; +Cc: 51497, andrewjmoreton

On 23.12.2021 13:28, Lars Ingebrigtsen wrote:
> Eli Zaretskii<eliz@gnu.org>  writes:
> 
>>> Even though it's plausible, I haven't encountered this particular use
>>> case so far. Perhaps when we do, we could mix-and-match :(literal) and
>>> --literal-pathspecs.
>> So what would you suggest as the way forward, for both emacs-28 and
>> the master branches (the 2 solutions could be different)?  Do you
>> still prefer to go with your original patch for emacs-28?
> This was the final message in this thread, and it was six weeks ago.  I
> haven't paid attention to the patches in this area -- is this still an
> issue, or has it been fixed?

Not fixed, no.

I'll send a patch which reverts to my original approach with an escape 
hatch, tomorrow.





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-11-08 18:18                                       ` Eli Zaretskii
  2021-12-23 10:28                                         ` Lars Ingebrigtsen
@ 2021-12-27  1:36                                         ` Dmitry Gutov
  2022-01-03  3:59                                           ` Dmitry Gutov
  1 sibling, 1 reply; 44+ messages in thread
From: Dmitry Gutov @ 2021-12-27  1:36 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 51497, andrewjmoreton

[-- Attachment #1: Type: text/plain, Size: 886 bytes --]

On 08.11.2021 21:18, Eli Zaretskii wrote:
> So what would you suggest as the way forward, for both emacs-28 and
> the master branches (the 2 solutions could be different)?  Do you
> still prefer to go with your original patch for emacs-28?

I'm still of two minds a little bit: conceptually, the current approach 
is a little cleaner because it forces the opt-in approach, and thus 
won't affect any command (or use of functions like 
vc-git--run-command-string outside of vc-git.el) that didn't opt into 
using literal pathspecs.

But my original approach is simpler and shorter, and together with an 
opt-out var seems to solve every problem so far. It doesn't need version 
detection either (a patch to have it work on remote hosts was discussed 
previously here).

So here's the patch (my current preferred solution for both emacs-28 and 
master).

Waiting for feedback from AndyM.

[-- Attachment #2: redo-literal-pathspecs.diff --]
[-- Type: text/x-patch, Size: 11333 bytes --]

diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index 3b634471ac..4c4eb915ed 100644
--- a/lisp/progmodes/project.el
+++ b/lisp/progmodes/project.el
@@ -502,10 +502,12 @@ project-files
 (declare-function vc-hg-command "vc-hg")
 
 (defun project--vc-list-files (dir backend extra-ignores)
+  (defvar vc-git-use-literal-pathspecs)
   (pcase backend
     (`Git
      (let ((default-directory (expand-file-name (file-name-as-directory dir)))
            (args '("-z"))
+           (vc-git-use-literal-pathspecs nil)
            files)
        ;; Include unregistered.
        (setq args (append args '("-c" "-o" "--exclude-standard")))
diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el
index 5c6a39aec9..19264c9d3c 100644
--- a/lisp/vc/vc-git.el
+++ b/lisp/vc/vc-git.el
@@ -223,6 +223,12 @@ vc-git-revision-complete-only-branches
 ;; History of Git commands.
 (defvar vc-git-history nil)
 
+;; Default to t because commands which don't support literal pathspecs
+;; ignore the environment variable silently.
+(defvar vc-git-use-literal-pathspecs t
+  "Non-nil to treat pathspecs in commands literally.
+Good example of file name that needs this: \"test[56].xx\".")
+
 ;; Clear up the cache to force vc-call to check again and discover
 ;; new functions when we reload this file.
 (put 'Git 'vc-functions nil)
@@ -242,20 +248,6 @@ vc-git-update-on-retrieve-tag
 ;;;###autoload         (load "vc-git" nil t)
 ;;;###autoload         (vc-git-registered file))))
 
-;; Good example of file name that needs this: "test[56].xx".
-(defun vc-git--literal-pathspec (file)
-  "Prepend :(literal) path magic to FILE."
-  (when file
-    ;; Expand abbreviated file names.
-    (when (file-name-absolute-p file)
-      (setq file (expand-file-name file)))
-    (concat ":(literal)" (file-local-name file))))
-
-(defun vc-git--literal-pathspecs (files)
-  "Prepend :(literal) path magic to FILES."
-  (unless (vc-git--file-list-is-rootdir files)
-    (mapcar #'vc-git--literal-pathspec files)))
-
 (defun vc-git-registered (file)
   "Check whether FILE is registered with git."
   (let ((dir (vc-git-root file)))
@@ -269,12 +261,12 @@ vc-git-registered
                (name (file-relative-name file dir))
                (str (with-demoted-errors "Error: %S"
                       (cd dir)
-                      (vc-git--out-ok "ls-files" "-c" "-z" "--" (vc-git--literal-pathspec name))
+                      (vc-git--out-ok "ls-files" "-c" "-z" "--" name)
                       ;; If result is empty, use ls-tree to check for deleted
                       ;; file.
                       (when (eq (point-min) (point-max))
                         (vc-git--out-ok "ls-tree" "--name-only" "-z" "HEAD"
-                                        "--" (vc-git--literal-pathspec name)))
+                                        "--" name))
                       (buffer-string))))
           (and str
                (> (length str) (length name))
@@ -358,7 +350,7 @@ vc-git-state
             ,@(when (version<= "1.7.6.3" (vc-git--program-version))
                 '("--ignored"))
             "--"))
-        (status (apply #'vc-git--run-command-string (vc-git--literal-pathspec file) args)))
+        (status (apply #'vc-git--run-command-string file args)))
     (if (null status)
         ;; If status is nil, there was an error calling git, likely because
         ;; the file is not in a git repo.
@@ -636,28 +628,28 @@ vc-git-dir-status-goto-stage
     (pcase (vc-git-dir-status-state->stage git-state)
       ('update-index
        (if files
-           (vc-git-command (current-buffer) 'async (vc-git--literal-pathspecs files) "add" "--refresh" "--")
+           (vc-git-command (current-buffer) 'async files "add" "--refresh" "--")
          (vc-git-command (current-buffer) 'async nil
                          "update-index" "--refresh")))
       ('ls-files-added
-       (vc-git-command (current-buffer) 'async (vc-git--literal-pathspecs files)
+       (vc-git-command (current-buffer) 'async files
                        "ls-files" "-z" "-c" "-s" "--"))
       ('ls-files-up-to-date
-       (vc-git-command (current-buffer) 'async (vc-git--literal-pathspecs files)
+       (vc-git-command (current-buffer) 'async files
                        "ls-files" "-z" "-c" "-s" "--"))
       ('ls-files-conflict
-       (vc-git-command (current-buffer) 'async (vc-git--literal-pathspecs files)
+       (vc-git-command (current-buffer) 'async files
                        "ls-files" "-z" "-u" "--"))
       ('ls-files-unknown
-       (vc-git-command (current-buffer) 'async (vc-git--literal-pathspecs files)
+       (vc-git-command (current-buffer) 'async files
                        "ls-files" "-z" "-o" "--exclude-standard" "--"))
       ('ls-files-ignored
-       (vc-git-command (current-buffer) 'async (vc-git--literal-pathspecs files)
+       (vc-git-command (current-buffer) 'async files
                        "ls-files" "-z" "-o" "-i" "--directory"
                        "--no-empty-directory" "--exclude-standard" "--"))
       ;; --relative added in Git 1.5.5.
       ('diff-index
-       (vc-git-command (current-buffer) 'async (vc-git--literal-pathspecs files)
+       (vc-git-command (current-buffer) 'async files
                        "diff-index" "--relative" "-z" "-M" "HEAD" "--")))
     (vc-run-delayed
       (vc-git-after-dir-status-stage git-state))))
@@ -885,12 +877,12 @@ vc-git-register
     (when flist
       (vc-git-command nil 0 flist "update-index" "--add" "--"))
     (when dlist
-      (vc-git-command nil 0 (vc-git--literal-pathspecs dlist) "add"))))
+      (vc-git-command nil 0 dlist "add"))))
 
 (defalias 'vc-git-responsible-p #'vc-git-root)
 
 (defun vc-git-unregister (file)
-  (vc-git-command nil 0 (vc-git--literal-pathspec file) "rm" "-f" "--cached" "--"))
+  (vc-git-command nil 0 file "rm" "-f" "--cached" "--"))
 
 (declare-function log-edit-mode "log-edit" ())
 (declare-function log-edit-toggle-header "log-edit" (header value))
@@ -956,7 +948,7 @@ vc-git-checkin
                (lambda (value) (when (equal value "yes") (list argument)))))
       ;; When operating on the whole tree, better pass "-a" than ".", since "."
       ;; fails when we're committing a merge.
-      (apply #'vc-git-command nil 0 (if only (vc-git--literal-pathspecs files))
+      (apply #'vc-git-command nil 0 (if only files)
              (nconc (if msg-file (list "commit" "-F"
                                        (file-local-name msg-file))
                       (list "commit" "-m"))
@@ -983,7 +975,7 @@ vc-git-find-revision
 	 (coding-system-for-write 'binary)
 	 (fullname
 	  (let ((fn (vc-git--run-command-string
-		     (vc-git--literal-pathspec file) "ls-files" "-z" "--full-name" "--")))
+		     file "ls-files" "-z" "--full-name" "--")))
 	    ;; ls-files does not return anything when looking for a
 	    ;; revision of a file that has been renamed or removed.
 	    (if (string= fn "")
@@ -1000,14 +992,14 @@ vc-git-find-ignore-file
 		    (vc-git-root file)))
 
 (defun vc-git-checkout (file &optional rev)
-  (vc-git-command nil 0 (vc-git--literal-pathspec file) "checkout" (or rev "HEAD")))
+  (vc-git-command nil 0 file "checkout" (or rev "HEAD")))
 
 (defun vc-git-revert (file &optional contents-done)
   "Revert FILE to the version stored in the git repository."
   (if contents-done
       (vc-git-command nil 0 file "update-index" "--")
-    (vc-git-command nil 0 (vc-git--literal-pathspec file) "reset" "-q" "--")
-    (vc-git-command nil nil (vc-git--literal-pathspec file) "checkout" "-q" "--")))
+    (vc-git-command nil 0 file "reset" "-q" "--")
+    (vc-git-command nil nil file "checkout" "-q" "--")))
 
 (defvar vc-git-error-regexp-alist
   '(("^ \\(.+\\)\\> *|" 1 nil nil 0))
@@ -1091,7 +1083,7 @@ vc-git-merge-branch
 (defun vc-git-conflicted-files (directory)
   "Return the list of files with conflicts in DIRECTORY."
   (let* ((status
-          (vc-git--run-command-string (vc-git--literal-pathspec directory) "status" "--porcelain" "--"))
+          (vc-git--run-command-string directory "status" "--porcelain" "--"))
          (lines (when status (split-string status "\n" 'omit-nulls)))
          files)
     (dolist (line lines files)
@@ -1180,7 +1172,7 @@ vc-git-print-log
     (let ((inhibit-read-only t))
       (with-current-buffer buffer
 	(apply #'vc-git-command buffer
-	       'async (vc-git--literal-pathspecs files)
+	       'async files
 	       (append
 		'("log" "--no-color")
                 (when (and vc-git-print-log-follow
@@ -1434,7 +1426,7 @@ vc-git-diff
     (if vc-git-diff-switches
         (apply #'vc-git-command (or buffer "*vc-diff*")
 	       1 ; bug#21969
-	       (vc-git--literal-pathspecs files)
+               files
                command
                "--exit-code"
                (append (vc-switches 'git 'diff)
@@ -1519,7 +1511,7 @@ vc-git-previous-revision
       (let* ((fname (file-relative-name file))
              (prev-rev (with-temp-buffer
                          (and
-                          (vc-git--out-ok "rev-list" "-2" rev "--" (vc-git--literal-pathspec fname))
+                          (vc-git--out-ok "rev-list" "-2" rev "--" fname)
                           (goto-char (point-max))
                           (bolp)
                           (zerop (forward-line -1))
@@ -1547,7 +1539,7 @@ vc-git-next-revision
          (current-rev
           (with-temp-buffer
             (and
-             (vc-git--out-ok "rev-list" "-1" rev "--" (vc-git--literal-pathspec file))
+             (vc-git--out-ok "rev-list" "-1" rev "--" file)
              (goto-char (point-max))
              (bolp)
              (zerop (forward-line -1))
@@ -1559,7 +1551,7 @@ vc-git-next-revision
           (and current-rev
                (with-temp-buffer
                  (and
-                  (vc-git--out-ok "rev-list" "HEAD" "--" (vc-git--literal-pathspec file))
+                  (vc-git--out-ok "rev-list" "HEAD" "--" file)
                   (goto-char (point-min))
                   (search-forward current-rev nil t)
                   (zerop (forward-line -1))
@@ -1569,13 +1561,13 @@ vc-git-next-revision
     (or (vc-git-symbolic-commit next-rev) next-rev)))
 
 (defun vc-git-delete-file (file)
-  (vc-git-command nil 0 (vc-git--literal-pathspec file) "rm" "-f" "--"))
+  (vc-git-command nil 0 file "rm" "-f" "--"))
 
 (defun vc-git-rename-file (old new)
   (vc-git-command nil 0 (list old new) "mv" "-f" "--"))
 
 (defun vc-git-mark-resolved (files)
-  (vc-git-command nil 0 (vc-git--literal-pathspecs files) "add"))
+  (vc-git-command nil 0 files "add"))
 
 (defvar vc-git-extra-menu-map
   (let ((map (make-sparse-keymap)))
@@ -1797,6 +1789,8 @@ vc-git-command
         (process-environment
          (append
           `("GIT_DIR"
+            ,@(when vc-git-use-literal-pathspecs
+                "GIT_LITERAL_PATHSPECS=1")
             ;; Avoid repository locking during background operations
             ;; (bug#21559).
             ,@(when revert-buffer-in-progress-p
@@ -1834,6 +1828,8 @@ vc-git--call
 	(process-environment
 	 (append
 	  `("GIT_DIR"
+            ,@(when vc-git-use-literal-pathspecs
+                "GIT_LITERAL_PATHSPECS=1")
 	    ;; Avoid repository locking during background operations
 	    ;; (bug#21559).
 	    ,@(when revert-buffer-in-progress-p

^ permalink raw reply related	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2021-12-27  1:36                                         ` Dmitry Gutov
@ 2022-01-03  3:59                                           ` Dmitry Gutov
  2022-01-03 21:15                                             ` Dima Kogan
  2022-01-03 21:16                                             ` Andy Moreton
  0 siblings, 2 replies; 44+ messages in thread
From: Dmitry Gutov @ 2022-01-03  3:59 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 51497, andrewjmoreton, Dima Kogan

[-- Attachment #1: Type: text/plain, Size: 319 bytes --]

On 27.12.2021 04:36, Dmitry Gutov wrote:
> So here's the patch (my current preferred solution for both emacs-28 and 
> master).
> 
> Waiting for feedback from AndyM.

Sorry, here's a version of the patch that doesn't break vc-checkin.

Waiting for Andy's feedback, I wouldn't mind some testing from Dima as 
well, BTW.

[-- Attachment #2: redo-literal-pathspecs.diff --]
[-- Type: text/x-patch, Size: 10688 bytes --]

diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el
index 2d35061b26..4c873b7264 100644
--- a/lisp/vc/vc-git.el
+++ b/lisp/vc/vc-git.el
@@ -223,6 +223,12 @@ vc-git-revision-complete-only-branches
 ;; History of Git commands.
 (defvar vc-git-history nil)
 
+;; Default to t because commands which don't support literal pathspecs
+;; ignore the environment variable silently.
+(defvar vc-git-use-literal-pathspecs t
+  "Non-nil to treat pathspecs in commands literally.
+Good example of file name that needs this: \"test[56].xx\".")
+
 ;; Clear up the cache to force vc-call to check again and discover
 ;; new functions when we reload this file.
 (put 'Git 'vc-functions nil)
@@ -242,20 +248,6 @@ vc-git-update-on-retrieve-tag
 ;;;###autoload         (load "vc-git" nil t)
 ;;;###autoload         (vc-git-registered file))))
 
-;; Good example of file name that needs this: "test[56].xx".
-(defun vc-git--literal-pathspec (file)
-  "Prepend :(literal) path magic to FILE."
-  (when file
-    ;; Expand abbreviated file names.
-    (when (file-name-absolute-p file)
-      (setq file (expand-file-name file)))
-    (concat ":(literal)" (file-local-name file))))
-
-(defun vc-git--literal-pathspecs (files)
-  "Prepend :(literal) path magic to FILES."
-  (unless (vc-git--file-list-is-rootdir files)
-    (mapcar #'vc-git--literal-pathspec files)))
-
 (defun vc-git-registered (file)
   "Check whether FILE is registered with git."
   (let ((dir (vc-git-root file)))
@@ -269,12 +261,12 @@ vc-git-registered
                (name (file-relative-name file dir))
                (str (with-demoted-errors "Error: %S"
                       (cd dir)
-                      (vc-git--out-ok "ls-files" "-c" "-z" "--" (vc-git--literal-pathspec name))
+                      (vc-git--out-ok "ls-files" "-c" "-z" "--" name)
                       ;; If result is empty, use ls-tree to check for deleted
                       ;; file.
                       (when (eq (point-min) (point-max))
                         (vc-git--out-ok "ls-tree" "--name-only" "-z" "HEAD"
-                                        "--" (vc-git--literal-pathspec name)))
+                                        "--" name))
                       (buffer-string))))
           (and str
                (> (length str) (length name))
@@ -356,7 +348,7 @@ vc-git-state
             ,@(when (version<= "1.7.6.3" (vc-git--program-version))
                 '("--ignored"))
             "--"))
-        (status (apply #'vc-git--run-command-string (vc-git--literal-pathspec file) args)))
+        (status (apply #'vc-git--run-command-string file args)))
     (if (null status)
         ;; If status is nil, there was an error calling git, likely because
         ;; the file is not in a git repo.
@@ -634,28 +626,28 @@ vc-git-dir-status-goto-stage
     (pcase (vc-git-dir-status-state->stage git-state)
       ('update-index
        (if files
-           (vc-git-command (current-buffer) 'async (vc-git--literal-pathspecs files) "add" "--refresh" "--")
+           (vc-git-command (current-buffer) 'async files "add" "--refresh" "--")
          (vc-git-command (current-buffer) 'async nil
                          "update-index" "--refresh")))
       ('ls-files-added
-       (vc-git-command (current-buffer) 'async (vc-git--literal-pathspecs files)
+       (vc-git-command (current-buffer) 'async files
                        "ls-files" "-z" "-c" "-s" "--"))
       ('ls-files-up-to-date
-       (vc-git-command (current-buffer) 'async (vc-git--literal-pathspecs files)
+       (vc-git-command (current-buffer) 'async files
                        "ls-files" "-z" "-c" "-s" "--"))
       ('ls-files-conflict
-       (vc-git-command (current-buffer) 'async (vc-git--literal-pathspecs files)
+       (vc-git-command (current-buffer) 'async files
                        "ls-files" "-z" "-u" "--"))
       ('ls-files-unknown
-       (vc-git-command (current-buffer) 'async (vc-git--literal-pathspecs files)
+       (vc-git-command (current-buffer) 'async files
                        "ls-files" "-z" "-o" "--exclude-standard" "--"))
       ('ls-files-ignored
-       (vc-git-command (current-buffer) 'async (vc-git--literal-pathspecs files)
+       (vc-git-command (current-buffer) 'async files
                        "ls-files" "-z" "-o" "-i" "--directory"
                        "--no-empty-directory" "--exclude-standard" "--"))
       ;; --relative added in Git 1.5.5.
       ('diff-index
-       (vc-git-command (current-buffer) 'async (vc-git--literal-pathspecs files)
+       (vc-git-command (current-buffer) 'async files
                        "diff-index" "--relative" "-z" "-M" "HEAD" "--")))
     (vc-run-delayed
       (vc-git-after-dir-status-stage git-state))))
@@ -883,12 +875,12 @@ vc-git-register
     (when flist
       (vc-git-command nil 0 flist "update-index" "--add" "--"))
     (when dlist
-      (vc-git-command nil 0 (vc-git--literal-pathspecs dlist) "add"))))
+      (vc-git-command nil 0 dlist "add"))))
 
 (defalias 'vc-git-responsible-p #'vc-git-root)
 
 (defun vc-git-unregister (file)
-  (vc-git-command nil 0 (vc-git--literal-pathspec file) "rm" "-f" "--cached" "--"))
+  (vc-git-command nil 0 file "rm" "-f" "--cached" "--"))
 
 (declare-function log-edit-mode "log-edit" ())
 (declare-function log-edit-toggle-header "log-edit" (header value))
@@ -954,7 +946,7 @@ vc-git-checkin
                (lambda (value) (when (equal value "yes") (list argument)))))
       ;; When operating on the whole tree, better pass "-a" than ".", since "."
       ;; fails when we're committing a merge.
-      (apply #'vc-git-command nil 0 (if only (vc-git--literal-pathspecs files))
+      (apply #'vc-git-command nil 0 (if only files)
              (nconc (if msg-file (list "commit" "-F"
                                        (file-local-name msg-file))
                       (list "commit" "-m"))
@@ -981,7 +973,7 @@ vc-git-find-revision
 	 (coding-system-for-write 'binary)
 	 (fullname
 	  (let ((fn (vc-git--run-command-string
-		     (vc-git--literal-pathspec file) "ls-files" "-z" "--full-name" "--")))
+		     file "ls-files" "-z" "--full-name" "--")))
 	    ;; ls-files does not return anything when looking for a
 	    ;; revision of a file that has been renamed or removed.
 	    (if (string= fn "")
@@ -998,14 +990,14 @@ vc-git-find-ignore-file
 		    (vc-git-root file)))
 
 (defun vc-git-checkout (file &optional rev)
-  (vc-git-command nil 0 (vc-git--literal-pathspec file) "checkout" (or rev "HEAD")))
+  (vc-git-command nil 0 file "checkout" (or rev "HEAD")))
 
 (defun vc-git-revert (file &optional contents-done)
   "Revert FILE to the version stored in the git repository."
   (if contents-done
       (vc-git-command nil 0 file "update-index" "--")
-    (vc-git-command nil 0 (vc-git--literal-pathspec file) "reset" "-q" "--")
-    (vc-git-command nil nil (vc-git--literal-pathspec file) "checkout" "-q" "--")))
+    (vc-git-command nil 0 file "reset" "-q" "--")
+    (vc-git-command nil nil file "checkout" "-q" "--")))
 
 (defvar vc-git-error-regexp-alist
   '(("^ \\(.+\\)\\> *|" 1 nil nil 0))
@@ -1089,7 +1081,7 @@ vc-git-merge-branch
 (defun vc-git-conflicted-files (directory)
   "Return the list of files with conflicts in DIRECTORY."
   (let* ((status
-          (vc-git--run-command-string (vc-git--literal-pathspec directory) "status" "--porcelain" "--"))
+          (vc-git--run-command-string directory "status" "--porcelain" "--"))
          (lines (when status (split-string status "\n" 'omit-nulls)))
          files)
     (dolist (line lines files)
@@ -1178,7 +1170,7 @@ vc-git-print-log
     (let ((inhibit-read-only t))
       (with-current-buffer buffer
 	(apply #'vc-git-command buffer
-	       'async (vc-git--literal-pathspecs files)
+	       'async files
 	       (append
 		'("log" "--no-color")
                 (when (and vc-git-print-log-follow
@@ -1432,7 +1424,7 @@ vc-git-diff
     (if vc-git-diff-switches
         (apply #'vc-git-command (or buffer "*vc-diff*")
 	       1 ; bug#21969
-	       (vc-git--literal-pathspecs files)
+               files
                command
                "--exit-code"
                (append (vc-switches 'git 'diff)
@@ -1517,7 +1509,7 @@ vc-git-previous-revision
       (let* ((fname (file-relative-name file))
              (prev-rev (with-temp-buffer
                          (and
-                          (vc-git--out-ok "rev-list" "-2" rev "--" (vc-git--literal-pathspec fname))
+                          (vc-git--out-ok "rev-list" "-2" rev "--" fname)
                           (goto-char (point-max))
                           (bolp)
                           (zerop (forward-line -1))
@@ -1545,7 +1537,7 @@ vc-git-next-revision
          (current-rev
           (with-temp-buffer
             (and
-             (vc-git--out-ok "rev-list" "-1" rev "--" (vc-git--literal-pathspec file))
+             (vc-git--out-ok "rev-list" "-1" rev "--" file)
              (goto-char (point-max))
              (bolp)
              (zerop (forward-line -1))
@@ -1557,7 +1549,7 @@ vc-git-next-revision
           (and current-rev
                (with-temp-buffer
                  (and
-                  (vc-git--out-ok "rev-list" "HEAD" "--" (vc-git--literal-pathspec file))
+                  (vc-git--out-ok "rev-list" "HEAD" "--" file)
                   (goto-char (point-min))
                   (search-forward current-rev nil t)
                   (zerop (forward-line -1))
@@ -1567,13 +1559,13 @@ vc-git-next-revision
     (or (vc-git-symbolic-commit next-rev) next-rev)))
 
 (defun vc-git-delete-file (file)
-  (vc-git-command nil 0 (vc-git--literal-pathspec file) "rm" "-f" "--"))
+  (vc-git-command nil 0 file "rm" "-f" "--"))
 
 (defun vc-git-rename-file (old new)
   (vc-git-command nil 0 (list old new) "mv" "-f" "--"))
 
 (defun vc-git-mark-resolved (files)
-  (vc-git-command nil 0 (vc-git--literal-pathspecs files) "add"))
+  (vc-git-command nil 0 files "add"))
 
 (defvar vc-git-extra-menu-map
   (let ((map (make-sparse-keymap)))
@@ -1796,6 +1788,8 @@ vc-git-command
         (process-environment
          (append
           `("GIT_DIR"
+            ,@(when vc-git-use-literal-pathspecs
+                '("GIT_LITERAL_PATHSPECS=1"))
             ;; Avoid repository locking during background operations
             ;; (bug#21559).
             ,@(when revert-buffer-in-progress-p
@@ -1833,6 +1827,8 @@ vc-git--call
 	(process-environment
 	 (append
 	  `("GIT_DIR"
+            ,@(when vc-git-use-literal-pathspecs
+                '("GIT_LITERAL_PATHSPECS=1"))
 	    ;; Avoid repository locking during background operations
 	    ;; (bug#21559).
 	    ,@(when revert-buffer-in-progress-p

^ permalink raw reply related	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2022-01-03  3:59                                           ` Dmitry Gutov
@ 2022-01-03 21:15                                             ` Dima Kogan
  2022-01-03 22:51                                               ` Dmitry Gutov
  2022-01-03 21:16                                             ` Andy Moreton
  1 sibling, 1 reply; 44+ messages in thread
From: Dima Kogan @ 2022-01-03 21:15 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: 51497

Dmitry Gutov <dgutov@yandex.ru> writes:

> I wouldn't mind some testing from Dima as well, BTW.

I just tested it: it works. I started up a very recent emacs, opened a
remote file on an old box, and saw that vc-git doesn't work. Then I
applied the patch, refreshed, and vc-git works again.

Thanks!





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2022-01-03  3:59                                           ` Dmitry Gutov
  2022-01-03 21:15                                             ` Dima Kogan
@ 2022-01-03 21:16                                             ` Andy Moreton
  1 sibling, 0 replies; 44+ messages in thread
From: Andy Moreton @ 2022-01-03 21:16 UTC (permalink / raw)
  To: 51497

On Mon 03 Jan 2022, Dmitry Gutov wrote:

> On 27.12.2021 04:36, Dmitry Gutov wrote:
>> So here's the patch (my current preferred solution for both emacs-28 and
>> master).
>> Waiting for feedback from AndyM.
>
> Sorry, here's a version of the patch that doesn't break vc-checkin.
>
> Waiting for Andy's feedback, I wouldn't mind some testing from Dima as well,
> BTW.

I've not tested checkin, but some light testing for looking at repo
history with this patch applied works nicely for me on both emacs-28 and
master.

Thanks,

    AndyM






^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2022-01-03 21:15                                             ` Dima Kogan
@ 2022-01-03 22:51                                               ` Dmitry Gutov
  2022-01-04  3:28                                                 ` Eli Zaretskii
  0 siblings, 1 reply; 44+ messages in thread
From: Dmitry Gutov @ 2022-01-03 22:51 UTC (permalink / raw)
  To: Dima Kogan, Andy Moreton, Eli Zaretskii; +Cc: 51497

On 04.01.2022 00:15, Dima Kogan wrote:
> I just tested it: it works. I started up a very recent emacs, opened a
> remote file on an old box, and saw that vc-git doesn't work. Then I
> applied the patch, refreshed, and vc-git works again.

On 04.01.2022 00:16, Andy Moreton wrote:
 > I've not tested checkin, but some light testing for looking at repo
 > history with this patch applied works nicely for me on both emacs-28 and
 > master.

Thanks for checking, fellas.

Eli, good for emacs-28?





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2022-01-03 22:51                                               ` Dmitry Gutov
@ 2022-01-04  3:28                                                 ` Eli Zaretskii
  2022-01-05  2:09                                                   ` Dmitry Gutov
  0 siblings, 1 reply; 44+ messages in thread
From: Eli Zaretskii @ 2022-01-04  3:28 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: 51497, andrewjmoreton, dima

> Cc: 51497@debbugs.gnu.org
> From: Dmitry Gutov <dgutov@yandex.ru>
> Date: Tue, 4 Jan 2022 00:51:18 +0200
> 
> On 04.01.2022 00:15, Dima Kogan wrote:
> > I just tested it: it works. I started up a very recent emacs, opened a
> > remote file on an old box, and saw that vc-git doesn't work. Then I
> > applied the patch, refreshed, and vc-git works again.
> 
> On 04.01.2022 00:16, Andy Moreton wrote:
>  > I've not tested checkin, but some light testing for looking at repo
>  > history with this patch applied works nicely for me on both emacs-28 and
>  > master.
> 
> Thanks for checking, fellas.
> 
> Eli, good for emacs-28?

Yes, thanks.





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2022-01-04  3:28                                                 ` Eli Zaretskii
@ 2022-01-05  2:09                                                   ` Dmitry Gutov
  2022-01-21 13:50                                                     ` Lars Ingebrigtsen
  0 siblings, 1 reply; 44+ messages in thread
From: Dmitry Gutov @ 2022-01-05  2:09 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 51497, andrewjmoreton, dima

On 04.01.2022 06:28, Eli Zaretskii wrote:
>> Cc: 51497@debbugs.gnu.org
>> From: Dmitry Gutov <dgutov@yandex.ru>
>> Date: Tue, 4 Jan 2022 00:51:18 +0200
>>
>> On 04.01.2022 00:15, Dima Kogan wrote:
>>> I just tested it: it works. I started up a very recent emacs, opened a
>>> remote file on an old box, and saw that vc-git doesn't work. Then I
>>> applied the patch, refreshed, and vc-git works again.
>>
>> On 04.01.2022 00:16, Andy Moreton wrote:
>>   > I've not tested checkin, but some light testing for looking at repo
>>   > history with this patch applied works nicely for me on both emacs-28 and
>>   > master.
>>
>> Thanks for checking, fellas.
>>
>> Eli, good for emacs-28?
> 
> Yes, thanks.

Done!

Thanks all, I'm closing this bug.





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2022-01-05  2:09                                                   ` Dmitry Gutov
@ 2022-01-21 13:50                                                     ` Lars Ingebrigtsen
  2022-01-21 14:11                                                       ` Dmitry Gutov
  0 siblings, 1 reply; 44+ messages in thread
From: Lars Ingebrigtsen @ 2022-01-21 13:50 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: 51497, andrewjmoreton, dima

Dmitry Gutov <dgutov@yandex.ru> writes:

> Thanks all, I'm closing this bug.

Looks like the bug was still open (perhaps due to the debbugs server
problems some weeks back?), so I'm closing it now.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 44+ messages in thread

* bug#51497: 29.0.50; (vc-print-log) broken over TRAMP
  2022-01-21 13:50                                                     ` Lars Ingebrigtsen
@ 2022-01-21 14:11                                                       ` Dmitry Gutov
  0 siblings, 0 replies; 44+ messages in thread
From: Dmitry Gutov @ 2022-01-21 14:11 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 51497, andrewjmoreton, dima

On 21.01.2022 15:50, Lars Ingebrigtsen wrote:
> Dmitry Gutov <dgutov@yandex.ru> writes:
> 
>> Thanks all, I'm closing this bug.
> 
> Looks like the bug was still open (perhaps due to the debbugs server
> problems some weeks back?), so I'm closing it now.

Sorry. My current version of Thunderbird occasionally undoes edits in 
the participants' email addresses.






^ permalink raw reply	[flat|nested] 44+ messages in thread

end of thread, other threads:[~2022-01-21 14:11 UTC | newest]

Thread overview: 44+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-30  1:24 bug#51497: 29.0.50; (vc-print-log) broken over TRAMP dima
2021-10-30 12:48 ` Lars Ingebrigtsen
2021-10-30 13:21   ` Dmitry Gutov
2021-10-30 19:01   ` Dima Kogan
2021-10-31  0:56     ` Dmitry Gutov
2021-10-31  6:58       ` Dima Kogan
2021-10-31  8:16         ` Michael Albinus
2021-10-31 12:26           ` Dmitry Gutov
2021-10-31 16:05             ` Michael Albinus
2021-11-03  2:00               ` Dmitry Gutov
2021-11-03 17:09                 ` Michael Albinus
2021-11-05  2:00                   ` Dmitry Gutov
2021-11-03  2:03         ` Dmitry Gutov
2021-11-03  3:03           ` Dima Kogan
2021-11-03 12:06             ` Dmitry Gutov
2021-11-06 13:22               ` Dmitry Gutov
2021-11-06 15:51                 ` Eli Zaretskii
2021-11-06 19:44                   ` Dmitry Gutov
2021-11-06 19:52                     ` Eli Zaretskii
2021-11-06 22:11                       ` Andy Moreton
2021-11-06 22:21                         ` Dmitry Gutov
2021-11-06 23:03                           ` Andy Moreton
2021-11-07  0:11                             ` Dmitry Gutov
2021-11-07  6:47                               ` Eli Zaretskii
2021-11-07 10:43                                 ` Andy Moreton
2021-11-07 22:36                                 ` Dmitry Gutov
2021-11-08 12:49                                   ` Eli Zaretskii
2021-11-08 17:30                                     ` Dmitry Gutov
2021-11-08 18:18                                       ` Eli Zaretskii
2021-12-23 10:28                                         ` Lars Ingebrigtsen
2021-12-26  0:53                                           ` Dmitry Gutov
2021-12-27  1:36                                         ` Dmitry Gutov
2022-01-03  3:59                                           ` Dmitry Gutov
2022-01-03 21:15                                             ` Dima Kogan
2022-01-03 22:51                                               ` Dmitry Gutov
2022-01-04  3:28                                                 ` Eli Zaretskii
2022-01-05  2:09                                                   ` Dmitry Gutov
2022-01-21 13:50                                                     ` Lars Ingebrigtsen
2022-01-21 14:11                                                       ` Dmitry Gutov
2022-01-03 21:16                                             ` Andy Moreton
2021-11-07  6:43                             ` Eli Zaretskii
2021-11-07 10:45                               ` Andy Moreton
2021-11-07  6:31                         ` Eli Zaretskii
2021-11-06 22:19                       ` Dmitry Gutov

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).