GNU bug report logs - #78405
31.0.50; vc-next-action from *vc-diff* on remote file: Git error

Previous Next

Package: emacs;

Reported by: Manuel Giraud <manuel <at> ledu-giraud.fr>

Date: Tue, 13 May 2025 12:07:01 UTC

Severity: normal

Found in version 31.0.50

Done: Sean Whitton <spwhitton <at> spwhitton.name>

To reply to this bug, email your comments to 78405 AT debbugs.gnu.org.
There is no need to reopen the bug first.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#78405; Package emacs. (Tue, 13 May 2025 12:07:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to Manuel Giraud <manuel <at> ledu-giraud.fr>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Tue, 13 May 2025 12:07:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Manuel Giraud <manuel <at> ledu-giraud.fr>
To: bug-gnu-emacs <at> gnu.org
Subject: 31.0.50; vc-next-action from *vc-diff* on remote file: Git error
Date: Tue, 13 May 2025 14:06:19 +0200
Hi,

Using git, it seems that `vc-next-action' from a *vc-diff* buffer on
remote files does not work anymore.  Here's a recipe:

     - emacs -Q
     - C-x C-f /-:host:/path/to/file/in_a_git_repo
     - *some edit*
     - C-x v =  ;; now in a *vc-diff* buffer
     - C-x v v  ;; jumps to *vc-log* buffer
     - *edit log* and C-c C-c

I get the following error in the *Messages* buffer:
vc-do-command: Failed (status 128): git --no-pager apply --cached /scp:host:/tmp/git-patch2KyUYD .

and the *vc* buffer contains:
error: can't open patch '/scp:host:/tmp/git-patch2KyUYD': No such file or directory

Note: this works locally and this also works on remote file when there
is no *vc-diff* buffer involved.


In GNU Emacs 31.0.50 (build 2, x86_64-unknown-openbsd7.7) of 2025-05-13
 built on computer
Repository revision: e17001b2e181ae5f6d568573788e94f19e1cff0a
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12101016
System Description: OpenBSD computer 7.7 GENERIC.MP#658 amd64

Configured using:
 'configure CC=egcc CPPFLAGS=-I/usr/local/include
 LDFLAGS=-L/usr/local/lib MAKEINFO=gmakeinfo --prefix=/home/manuel/emacs
 --bindir=/home/manuel/bin --with-x-toolkit=no
 --with-toolkit-scroll-bars=no --without-cairo
 --without-compress-install'

Configured features:
DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG LCMS2 LIBOTF
LIBXML2 M17N_FLT MODULES NOTIFY KQUEUE OLDXMENU PDUMPER PNG RSVG SQLITE3
THREADS TIFF TREE_SITTER WEBP X11 XDBE XFT XIM XINERAMA XINPUT2 XPM
XRANDR ZLIB

Important settings:
  value of $LC_CTYPE: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Help

Minor modes in effect:
  display-time-mode: t
  display-battery-mode: t
  desktop-save-mode: t
  exwm-randr-mode: t
  server-mode: t
  electric-pair-mode: t
  override-global-mode: t
  repeat-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  isearch-fold-quotes-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  minibuffer-regexp-mode: t
  buffer-read-only: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
/home/manuel/prog/elisp/exwm/exwm hides /home/manuel/.emacs.d/elpa/exwm-0.33/exwm
/home/manuel/prog/elisp/exwm/exwm-xsettings hides /home/manuel/.emacs.d/elpa/exwm-0.33/exwm-xsettings
/home/manuel/prog/elisp/exwm/exwm-xim hides /home/manuel/.emacs.d/elpa/exwm-0.33/exwm-xim
/home/manuel/prog/elisp/exwm/exwm-workspace hides /home/manuel/.emacs.d/elpa/exwm-0.33/exwm-workspace
/home/manuel/prog/elisp/exwm/exwm-randr hides /home/manuel/.emacs.d/elpa/exwm-0.33/exwm-randr
/home/manuel/prog/elisp/exwm/exwm-manage hides /home/manuel/.emacs.d/elpa/exwm-0.33/exwm-manage
/home/manuel/prog/elisp/exwm/exwm-layout hides /home/manuel/.emacs.d/elpa/exwm-0.33/exwm-layout
/home/manuel/prog/elisp/exwm/exwm-input hides /home/manuel/.emacs.d/elpa/exwm-0.33/exwm-input
/home/manuel/prog/elisp/exwm/exwm-floating hides /home/manuel/.emacs.d/elpa/exwm-0.33/exwm-floating
/home/manuel/prog/elisp/exwm/exwm-systemtray hides /home/manuel/.emacs.d/elpa/exwm-0.33/exwm-systemtray
/home/manuel/prog/elisp/exwm/exwm-core hides /home/manuel/.emacs.d/elpa/exwm-0.33/exwm-core
/home/manuel/prog/elisp/exwm/exwm-background hides /home/manuel/.emacs.d/elpa/exwm-0.33/exwm-background
/home/manuel/.emacs.d/elpa/ef-themes-1.9.0/theme-loaddefs hides /home/manuel/emacs/share/emacs/31.0.50/lisp/theme-loaddefs
/home/manuel/.emacs.d/elpa/idlwave-6.5.1/idlwave hides /home/manuel/emacs/share/emacs/31.0.50/lisp/obsolete/idlwave
/home/manuel/.emacs.d/elpa/idlwave-6.5.1/idlw-toolbar hides /home/manuel/emacs/share/emacs/31.0.50/lisp/obsolete/idlw-toolbar
/home/manuel/.emacs.d/elpa/idlwave-6.5.1/idlw-shell hides /home/manuel/emacs/share/emacs/31.0.50/lisp/obsolete/idlw-shell
/home/manuel/.emacs.d/elpa/idlwave-6.5.1/idlw-help hides /home/manuel/emacs/share/emacs/31.0.50/lisp/obsolete/idlw-help
/home/manuel/.emacs.d/elpa/idlwave-6.5.1/idlw-complete-structtag hides /home/manuel/emacs/share/emacs/31.0.50/lisp/obsolete/idlw-complete-structtag

Features:
(shadow sort mail-extr shortdoc comp-common emacsbug lisp-mnt pulse
smerge-mode diff misearch multi-isearch tramp-cmds tramp-cache
time-stamp tramp-sh org-agenda hi-lock org-indent
semantic/wisent/grammar semantic/bovine semantic/grammar help-fns
radix-tree semantic/idle semantic/analyze semantic/sort semantic/scope
semantic/analyze/fcn semantic/db semantic/grammar-wy semantic/format
semantic/tag-ls semantic/find semantic/ctxt semantic/wisent
semantic/wisent/wisent semantic/util-modes semantic/util semantic
semantic/tag semantic/lex semantic/fw mode-local cedet on-screen view
macrostep-c cmacexp conf-mode oc-basic org-element org-persist org-id
org-element-ast inline avl-tree ol-eww eww vtable mule-util url-queue
mm-url ol-rmail ol-mhe ol-irc ol-info ol-gnus nnselect ol-docview
doc-view filenotify jka-compr image-mode exif ol-bibtex bibtex ol-bbdb
ol-w3m ol-doi org-link-doi gnus-icalendar org-capture org-refile org ob
ob-tangle ob-ref ob-lob ob-table ob-exp org-macro org-src ob-comint
org-pcomplete org-list org-footnote org-faces org-entities org-version
ob-emacs-lisp ob-core ob-eval org-cycle org-table ol org-fold
org-fold-core org-keys oc org-loaddefs org-compat org-macs texinfo
texinfo-loaddefs sh-script smie executable slime-asdf grep slime-tramp
tramp trampver tramp-integration tramp-message tramp-compat
tramp-loaddefs slime-fancy slime-indentation slime-cl-indent cl-indent
slime-trace-dialog slime-fontifying-fu slime-package-fu slime-references
slime-compiler-notes-tree advice slime-scratch slime-presentations
slime-macrostep macrostep slime-mdot-fu slime-enclosing-context
slime-fuzzy slime-fancy-trace slime-fancy-inspector slime-c-p-c
slime-editing-commands slime-autodoc slime-repl slime-parse cus-start
slime apropos etags fileloop generator xref arc-mode archive-mode
noutline outline hyperspec tex-mode shell pcomplete make-mode flymake
compile vc-hg vc-bzr vc-src vc-sccs vc-svn vc-cvs vc-rcs log-view
log-edit add-log pcvs-util debbugs-browse bug-reference python rx
project treesit comint ansi-osc ansi-color gnus-dired vc-git diff-mode
track-changes files-x vc-dir ewoc vc vc-dispatcher format-spec time
battery desktop frameset exwm-randr xcb-randr exwm exwm-input
xcb-keysyms xcb-xkb exwm-manage exwm-floating xcb-cursor xcb-render
exwm-layout exwm-workspace exwm-core xcb-ewmh xcb-icccm xcb xcb-xproto
xcb-types xcb-debug server ef-themes modus-operandi-tinted-theme
modus-themes zone speed-type dash thingatpt url-http url-auth url-gw nsm
compat ytdious ring mpdired transmission color calc-bin calc-ext calc
calc-loaddefs rect calc-macs supercite regi ebdb-gnus gnus-msg gnus-art
mm-uu mml2015 mm-view mml-smime smime gnutls dig gnus-sum shr pixel-fill
kinsoku url-file svg dom gnus-group gnus-undo gnus-start gnus-dbus dbus
xml gnus-cloud nnimap nnmail mail-source utf7 nnoo parse-time iso8601
gnus-spec gnus-int gnus-range gnus-win ebdb-message message yank-media
puny rfc822 mml mml-sec epa derived epg rfc6068 epg-config mm-decode
mm-bodies mm-encode mail-parse rfc2231 gmm-utils mailheader ebdb-mua
ebdb-com crm ebdb-format ebdb mailabbrev eieio-opt speedbar ezimage
dframe find-func eieio-base timezone icalendar gnus nnheader gnus-util
text-property-search time-date range sendmail rfc2047 rfc2045 ietf-drums
mm-util mail-prsvr mail-utils erlang-start idlwave idlwave-menus
idlw-menus idlwave-bindings idlw-bindings idlwave-routine idlw-routine
idlwave-scan idlw-scan idlwave-help idlw-help idlwave-complete
idlw-complete idlwave-variables idlw-variables skeleton cc-mode cc-fonts
cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs
elec-pair appt diary-lib diary-loaddefs cal-menu calendar cal-loaddefs
pcase dired-x dired-aux dired dired-loaddefs edmacro kmacro
use-package-bind-key bind-key use-package-core repeat easy-mmode
cus-edit pp cus-load wid-edit debbugs-autoloads ebdb-autoloads cl-extra
help-mode ef-themes-autoloads elpher-autoloads exwm-autoloads
gnuplot-autoloads hyperbole-autoloads kotl-autoloads hact set hhist
idlwave-autoloads notmuch-autoloads on-screen-autoloads osm-autoloads
pdf-tools-autoloads rust-mode-autoloads slime-autoloads warnings
macrostep-autoloads speed-type-autoloads info dash-autoloads
sudo-edit-autoloads svg-clock-autoloads tablist-autoloads
transmission-autoloads xelb-autoloads ytdious-autoloads package
browse-url xdg url url-proxy url-privacy url-expand url-methods
url-history url-cookie generate-lisp-file url-domsuf url-util mailcap
url-handlers url-parse auth-source cl-seq eieio eieio-core cl-macs icons
password-cache json subr-x map byte-opt gv bytecomp byte-compile
url-vars cl-loaddefs cl-lib rmc iso-transl tooltip cconv eldoc paren
electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel
term/x-win x-win term/common-win x-dnd touch-screen tool-bar dnd fontset
image regexp-opt fringe tabulated-list replace newcomment text-mode
lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch
easymenu timer select scroll-bar mouse jit-lock font-lock syntax
font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic
indonesian philippine cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek
romanian slovak czech european ethiopic indian cyrillic chinese
composite emoji-zwj charscript charprop case-table epa-hook
jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs
theme-loaddefs faces cus-face macroexp files window text-properties
overlay sha1 md5 base64 format env code-pages mule custom widget keymap
hashtable-print-readable backquote threads dbusbind kqueue lcms2
dynamic-setting system-font-setting font-render-setting xinput2 x
multi-tty move-toolbar make-network-process tty-child-frames emacs)

Memory information:
((conses 16 918527 628844) (symbols 48 58686 2)
 (strings 32 266811 38105) (string-bytes 1 6773976)
 (vectors 16 161098) (vector-slots 8 2189777 50714) (floats 8 668 536)
 (intervals 56 23015 134) (buffers 1064 184))

-- 
Manuel Giraud




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#78405; Package emacs. (Tue, 13 May 2025 18:00:02 GMT) Full text and rfc822 format available.

Message #8 received at 78405 <at> debbugs.gnu.org (full text, mbox):

From: Sean Whitton <spwhitton <at> spwhitton.name>
To: Manuel Giraud <manuel <at> ledu-giraud.fr>
Cc: 78405 <at> debbugs.gnu.org
Subject: Re: bug#78405: 31.0.50; vc-next-action from *vc-diff* on remote
 file: Git error
Date: Tue, 13 May 2025 18:59:02 +0100
Hello,

On Tue 13 May 2025 at 02:06pm +02, Manuel Giraud wrote:

> Hi,
>
> Using git, it seems that `vc-next-action' from a *vc-diff* buffer on
> remote files does not work anymore.  Here's a recipe:
>
>      - emacs -Q
>      - C-x C-f /-:host:/path/to/file/in_a_git_repo
>      - *some edit*
>      - C-x v =  ;; now in a *vc-diff* buffer
>      - C-x v v  ;; jumps to *vc-log* buffer
>      - *edit log* and C-c C-c
>
> I get the following error in the *Messages* buffer:
> vc-do-command: Failed (status 128): git --no-pager apply --cached /scp:host:/tmp/git-patch2KyUYD .
>
> and the *vc* buffer contains:
> error: can't open patch '/scp:host:/tmp/git-patch2KyUYD': No such file or directory
>
> Note: this works locally and this also works on remote file when there
> is no *vc-diff* buffer involved.

Thanks.  The problem was introduced by my commit
7f60aa45aab4191a44d6d83ec6c3004e4901469b.

I am not sure how to fix it, yet.

-- 
Sean Whitton




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#78405; Package emacs. (Wed, 14 May 2025 11:32:03 GMT) Full text and rfc822 format available.

Message #11 received at 78405 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Sean Whitton <spwhitton <at> spwhitton.name>
Cc: 78405 <at> debbugs.gnu.org, manuel <at> ledu-giraud.fr
Subject: Re: bug#78405: 31.0.50;
 vc-next-action from *vc-diff* on remote file: Git error
Date: Wed, 14 May 2025 14:31:31 +0300
> Cc: 78405 <at> debbugs.gnu.org
> From: Sean Whitton <spwhitton <at> spwhitton.name>
> Date: Tue, 13 May 2025 18:59:02 +0100
> 
> On Tue 13 May 2025 at 02:06pm +02, Manuel Giraud wrote:
> 
> > Hi,
> >
> > Using git, it seems that `vc-next-action' from a *vc-diff* buffer on
> > remote files does not work anymore.  Here's a recipe:
> >
> >      - emacs -Q
> >      - C-x C-f /-:host:/path/to/file/in_a_git_repo
> >      - *some edit*
> >      - C-x v =  ;; now in a *vc-diff* buffer
> >      - C-x v v  ;; jumps to *vc-log* buffer
> >      - *edit log* and C-c C-c
> >
> > I get the following error in the *Messages* buffer:
> > vc-do-command: Failed (status 128): git --no-pager apply --cached /scp:host:/tmp/git-patch2KyUYD .
> >
> > and the *vc* buffer contains:
> > error: can't open patch '/scp:host:/tmp/git-patch2KyUYD': No such file or directory
> >
> > Note: this works locally and this also works on remote file when there
> > is no *vc-diff* buffer involved.
> 
> Thanks.  The problem was introduced by my commit
> 7f60aa45aab4191a44d6d83ec6c3004e4901469b.
> 
> I am not sure how to fix it, yet.

If you could explain the rationale for that commit and why you changed
the code in that particular way, maybe someone here could suggest a
solution.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#78405; Package emacs. (Wed, 14 May 2025 12:02:08 GMT) Full text and rfc822 format available.

Message #14 received at 78405 <at> debbugs.gnu.org (full text, mbox):

From: Manuel Giraud <manuel <at> ledu-giraud.fr>
To: Sean Whitton <spwhitton <at> spwhitton.name>
Cc: 78405 <at> debbugs.gnu.org
Subject: Re: bug#78405: 31.0.50; vc-next-action from *vc-diff* on remote
 file: Git error
Date: Wed, 14 May 2025 14:01:09 +0200
Sean Whitton <spwhitton <at> spwhitton.name> writes:

> Hello,
>
> On Tue 13 May 2025 at 02:06pm +02, Manuel Giraud wrote:
>
>> Hi,
>>
>> Using git, it seems that `vc-next-action' from a *vc-diff* buffer on
>> remote files does not work anymore.  Here's a recipe:
>>
>>      - emacs -Q
>>      - C-x C-f /-:host:/path/to/file/in_a_git_repo
>>      - *some edit*
>>      - C-x v =  ;; now in a *vc-diff* buffer
>>      - C-x v v  ;; jumps to *vc-log* buffer
>>      - *edit log* and C-c C-c
>>
>> I get the following error in the *Messages* buffer:
>> vc-do-command: Failed (status 128): git --no-pager apply --cached /scp:host:/tmp/git-patch2KyUYD .
>>
>> and the *vc* buffer contains:
>> error: can't open patch '/scp:host:/tmp/git-patch2KyUYD': No such file or directory
>>
>> Note: this works locally and this also works on remote file when there
>> is no *vc-diff* buffer involved.
>
> Thanks.  The problem was introduced by my commit
> 7f60aa45aab4191a44d6d83ec6c3004e4901469b.
>
> I am not sure how to fix it, yet.

Thanks for looking into this.  I don't really understand the goal of
your commit but maybe is related to the fact that 'patch-file' and
'cached' there end up having a TRAMP form (like "/scp:host:/foo") that
git cannot understand.
-- 
Manuel Giraud




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#78405; Package emacs. (Wed, 14 May 2025 14:37:02 GMT) Full text and rfc822 format available.

Message #17 received at 78405 <at> debbugs.gnu.org (full text, mbox):

From: Sean Whitton <spwhitton <at> spwhitton.name>
To: Manuel Giraud <manuel <at> ledu-giraud.fr>
Cc: 78405 <at> debbugs.gnu.org
Subject: Re: bug#78405: 31.0.50; vc-next-action from *vc-diff* on remote
 file: Git error
Date: Wed, 14 May 2025 15:36:31 +0100
Hello both,

The FILES-OR-LIST argument to vc-do-command is meant to be VCS-managed
file names, only.  The temporary patch file is not that, so it shouldn't
be passed through there.

The actual bug was that the paths to temporary files were being
relativised to the repository root by the call to file-relative-name in
vc-do-command.

We need to de-TRAMP the temporary file name before passing it to git.

-- 
Sean Whitton




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#78405; Package emacs. (Wed, 14 May 2025 22:42:01 GMT) Full text and rfc822 format available.

Message #20 received at 78405 <at> debbugs.gnu.org (full text, mbox):

From: Dmitry Gutov <dmitry <at> gutov.dev>
To: Sean Whitton <spwhitton <at> spwhitton.name>,
 Manuel Giraud <manuel <at> ledu-giraud.fr>
Cc: 78405 <at> debbugs.gnu.org
Subject: Re: bug#78405: 31.0.50; vc-next-action from *vc-diff* on remote file:
 Git error
Date: Thu, 15 May 2025 01:40:48 +0300
On 14/05/2025 17:36, Sean Whitton wrote:
> The FILES-OR-LIST argument to vc-do-command is meant to be VCS-managed
> file names, only.  The temporary patch file is not that, so it shouldn't
> be passed through there.
> 
> The actual bug was that the paths to temporary files were being
> relativised to the repository root by the call to file-relative-name in
> vc-do-command.
> 
> We need to de-TRAMP the temporary file name before passing it to git.

Something like (100% untested)?

diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el
index 4acacaff203..3feb957271a 100644
--- a/lisp/vc/vc-git.el
+++ b/lisp/vc/vc-git.el
@@ -1206,7 +1206,7 @@ vc-git-checkin
           (with-temp-file patch-file
             (insert vc-git-patch-string))
           (unwind-protect
-              (vc-git-command nil 0 nil "apply" "--cached" patch-file)
+              (vc-git-command nil 0 nil "apply" "--cached" 
(file-local-name patch-file))
             (delete-file patch-file))))
       (when to-stash (vc-git--stash-staged-changes to-stash)))
     ;; When operating on the whole tree, better pass "-a" than ".",
@@ -1232,7 +1232,7 @@ vc-git-checkin
         (unwind-protect
             (progn (with-temp-file cached
                      (vc-git-command t 0 nil "stash" "show" "-p"))
-                   (vc-git-command nil 0 nil "apply" "--cached" cached))
+                   (vc-git-command nil 0 nil "apply" "--cached" 
(file-local-name cached)))
           (delete-file cached))
         (vc-git-command nil 0 nil "stash" "drop")))))







Reply sent to Sean Whitton <spwhitton <at> spwhitton.name>:
You have taken responsibility. (Thu, 15 May 2025 12:48:02 GMT) Full text and rfc822 format available.

Notification sent to Manuel Giraud <manuel <at> ledu-giraud.fr>:
bug acknowledged by developer. (Thu, 15 May 2025 12:48:03 GMT) Full text and rfc822 format available.

Message #25 received at 78405-done <at> debbugs.gnu.org (full text, mbox):

From: Sean Whitton <spwhitton <at> spwhitton.name>
To: Dmitry Gutov <dmitry <at> gutov.dev>
Cc: 78405-done <at> debbugs.gnu.org, Manuel Giraud <manuel <at> ledu-giraud.fr>
Subject: Re: bug#78405: 31.0.50; vc-next-action from *vc-diff* on remote
 file: Git error
Date: Thu, 15 May 2025 13:47:23 +0100
Hello,

Thanks.  I did some testing and thought about it a bit and I think this
is indeed the correct thing.  Installed, and closing the bug.

-- 
Sean Whitton




This bug report was last modified today.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.