unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#58709: 29.0.50; [PATCH] Fallout 307ad21
@ 2022-10-21 17:55 dick
  2022-10-22 12:35 ` dick
  2022-10-24 19:39 ` Juri Linkov
  0 siblings, 2 replies; 5+ messages in thread
From: dick @ 2022-10-21 17:55 UTC (permalink / raw)
  To: 58709

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


Hadn't known vc-refresh-state gets into my find-file-hook
irregardless.  This won't work with git branches in a detached
HEAD state.

emacs -Q --batch -l vc-git -l log-edit --eval "\
(let* ((dir (make-temp-file \"vc-git-tests\" t)) \
       (default-directory dir)) \
(vc-git-create-repo) \
(with-temp-file \"foo\") \
(vc-git-register (split-string \"foo\")) \
(vc-git-checkin (split-string \"foo\") \"his fooness\") \
(vc-git-checkout nil (vc-git--rev-parse \"HEAD\" t)) \
(with-current-buffer (find-file-noselect \"foo\") \
(run-hooks (quote find-file-hook)))) \
"


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Fallout-307ad21.patch --]
[-- Type: text/x-diff, Size: 3887 bytes --]

From 7eb35ef941df7620c99a43f4656b0737b16f67c4 Mon Sep 17 00:00:00 2001
From: dickmao <dick.r.chiang@gmail.com>
Date: Fri, 21 Oct 2022 13:35:52 -0400
Subject: [PATCH] Fallout 307ad21

* lisp/vc/vc-git.el (vc-git-working-revision):
For better or worse, 307ad21 dupes vc-git--symbolic-ref
into this function.  Throw the sha1 onto the retval as a hack
to recover sha1.
(vc-git-mode-line-string): Recover the sha1 for John X. User.
* test/lisp/vc/vc-git-tests.el (vc-git-test--mock-repo):
(vc-git-test-detached-head): Test the failure when
vc-refresh-state goes after a detached HEAD branch.
---
 lisp/vc/vc-git.el            | 25 ++++++++-----------------
 test/lisp/vc/vc-git-tests.el | 21 +++++++++++++++++++++
 2 files changed, 29 insertions(+), 17 deletions(-)

diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el
index 3c6afec0378..ea0d5b78249 100644
--- a/lisp/vc/vc-git.el
+++ b/lisp/vc/vc-git.el
@@ -374,31 +374,22 @@ vc-git-state
 (defun vc-git-working-revision (_file)
   "Git-specific version of `vc-working-revision'."
   (let* ((process-file-side-effects nil)
-         (commit (vc-git--rev-parse "HEAD" t)))
-    (or (vc-git-symbolic-commit commit) commit)))
-
-(defun vc-git--symbolic-ref (file)
-  (or
-   (vc-file-getprop file 'vc-git-symbolic-ref)
-   (let* (process-file-side-effects
-          (str (vc-git--run-command-string nil "symbolic-ref" "HEAD")))
-     (vc-file-setprop file 'vc-git-symbolic-ref
-                      (if str
-                          (if (string-match "^\\(refs/heads/\\)?\\(.+\\)$" str)
-                              (match-string 2 str)
-                            str))))))
+         (commit (vc-git--rev-parse "HEAD" t))
+         (name (vc-git-symbolic-commit commit)))
+    (or (prog1 name
+          (add-text-properties 0 (length name) `(commit ,commit) name))
+        commit)))
 
 (defun vc-git-mode-line-string (file)
   "Return a string for `vc-mode-line' to put in the mode line for FILE."
   (let* ((rev (vc-working-revision file 'Git))
-         (disp-rev (or (vc-git--symbolic-ref file)
-                       (and rev (substring rev 0 7))))
          (def-ml (vc-default-mode-line-string 'Git file))
          (help-echo (get-text-property 0 'help-echo def-ml))
          (face   (get-text-property 0 'face def-ml)))
-    (propertize (concat (substring def-ml 0 4) disp-rev)
+    (propertize (concat (substring def-ml 0 4) rev)
                 'face face
-                'help-echo (concat help-echo "\nCurrent revision: " rev))))
+                'help-echo (concat help-echo "\nCurrent revision: "
+                                   (get-text-property 0 'commit rev)))))
 
 (cl-defstruct (vc-git-extra-fileinfo
             (:copier nil)
diff --git a/test/lisp/vc/vc-git-tests.el b/test/lisp/vc/vc-git-tests.el
index dc9641ed46b..f8ee92bbe74 100644
--- a/test/lisp/vc/vc-git-tests.el
+++ b/test/lisp/vc/vc-git-tests.el
@@ -56,6 +56,27 @@ vc-git-test-program-version-invalid-leading-dot
    "git version .2.30.1.5"
    "0"))
 
+(defmacro vc-git-test--mock-repo (&rest body)
+  (declare (indent defun))
+  `(let* ((dir (make-temp-file "vc-git-tests" t))
+          (default-directory dir))
+     (unwind-protect
+         (progn
+           (vc-git-create-repo)
+           ,@body)
+       (delete-directory dir t))))
+
+(ert-deftest vc-git-test-detached-head ()
+  (skip-unless (executable-find vc-git-program))
+  (require 'log-edit)
+  (vc-git-test--mock-repo
+    (with-temp-file "foo")
+    (vc-git-register (split-string "foo"))
+    (vc-git-checkin (split-string "foo") "his fooness")
+    (vc-git-checkout nil (vc-git--rev-parse "HEAD" t))
+    (with-current-buffer (find-file-noselect "foo")
+      (vc-git-mode-line-string (buffer-file-name)))))
+
 (defun vc-git-test--run-program-version-test
     (mock-version-string expected-output)
   (cl-letf* (((symbol-function 'vc-git--run-command-string)
-- 
2.36.1


[-- Attachment #3: Type: text/plain, Size: 12808 bytes --]




In Commercial Emacs 0.3.1snapshot 3a5723d in dev (upstream 29.0.50,
x86_64-pc-linux-gnu) built on dick
Repository revision: 3a5723d53e93e6b26e52502a9ba1835af4ef3d86
Repository branch: dev
Windowing system distributor 'The X.Org Foundation', version 11.0.12013000
System Description: Ubuntu 20.04.4 LTS

Configured using:
 'configure WERROR_CFLAGS=-Werror --prefix=/home/dick/.local
 --with-tree-sitter'

Configured features:
CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG JSON
TREE_SITTER LCMS2 LIBSELINUX LIBXML2 MODULES NOTIFY INOTIFY PDUMPER PNG
RSVG SECCOMP SOUND THREADS TIFF TOOLKIT_SCROLL_BARS WEBP X11 XDBE XIM
XINPUT2 XPM GTK3 ZLIB

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

Major mode: Magit

Minor modes in effect:
  global-git-commit-mode: t
  shell-dirtrack-mode: t
  projectile-mode: t
  flx-ido-mode: t
  global-hl-line-mode: t
  hl-line-mode: t
  winner-mode: t
  override-global-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  show-paren-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  buffer-read-only: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
/home/dick/xlsp/scratch hides /home/dick/org-gcal.el/scratch
/home/dick/gomacro-mode/gomacro-mode hides /home/dick/.emacs.d/elpa/gomacro-mode-20200326.1103/gomacro-mode
/home/dick/.emacs.d/elpa/go-rename-20190805.2101/go-rename hides /home/dick/.emacs.d/elpa/go-mode-1.6.0/go-rename
/home/dick/.emacs.d/elpa/go-guru-20181012.330/go-guru hides /home/dick/.emacs.d/elpa/go-mode-1.6.0/go-guru
/home/dick/.emacs.d/elpa/hydra-20170924.2259/lv hides /home/dick/.emacs.d/elpa/lv-0.1.0.1snapshot20200507.1518/lv
/home/dick/org-gcal.el/org-gcal hides /home/dick/.emacs.d/elpa/org-gcal-0.3/org-gcal
/home/dick/.emacs.d/elpa/request-deferred-0.2.0/request-deferred hides /home/dick/.emacs.d/elpa/request-0.3.3/request-deferred
/home/dick/.emacs.d/elpa/chess-2.0.5/_pkg hides /home/dick/.local/share/emacs/site-lisp/_pkg
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-pos hides /home/dick/.local/share/emacs/site-lisp/chess-pos
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-module hides /home/dick/.local/share/emacs/site-lisp/chess-module
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-ucb hides /home/dick/.local/share/emacs/site-lisp/chess-ucb
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-scid hides /home/dick/.local/share/emacs/site-lisp/chess-scid
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-puzzle hides /home/dick/.local/share/emacs/site-lisp/chess-puzzle
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-irc hides /home/dick/.local/share/emacs/site-lisp/chess-irc
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-network hides /home/dick/.local/share/emacs/site-lisp/chess-network
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-autosave hides /home/dick/.local/share/emacs/site-lisp/chess-autosave
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-engine hides /home/dick/.local/share/emacs/site-lisp/chess-engine
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-tutorial hides /home/dick/.local/share/emacs/site-lisp/chess-tutorial
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-german hides /home/dick/.local/share/emacs/site-lisp/chess-german
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-file hides /home/dick/.local/share/emacs/site-lisp/chess-file
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-random hides /home/dick/.local/share/emacs/site-lisp/chess-random
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-stockfish hides /home/dick/.local/share/emacs/site-lisp/chess-stockfish
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-pgn hides /home/dick/.local/share/emacs/site-lisp/chess-pgn
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-kibitz hides /home/dick/.local/share/emacs/site-lisp/chess-kibitz
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-eco hides /home/dick/.local/share/emacs/site-lisp/chess-eco
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-display hides /home/dick/.local/share/emacs/site-lisp/chess-display
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-var hides /home/dick/.local/share/emacs/site-lisp/chess-var
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-test hides /home/dick/.local/share/emacs/site-lisp/chess-test
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-ply hides /home/dick/.local/share/emacs/site-lisp/chess-ply
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-message hides /home/dick/.local/share/emacs/site-lisp/chess-message
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-ics1 hides /home/dick/.local/share/emacs/site-lisp/chess-ics1
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-phalanx hides /home/dick/.local/share/emacs/site-lisp/chess-phalanx
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-game hides /home/dick/.local/share/emacs/site-lisp/chess-game
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-log hides /home/dick/.local/share/emacs/site-lisp/chess-log
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-plain hides /home/dick/.local/share/emacs/site-lisp/chess-plain
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-perft hides /home/dick/.local/share/emacs/site-lisp/chess-perft
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-glaurung hides /home/dick/.local/share/emacs/site-lisp/chess-glaurung
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-ai hides /home/dick/.local/share/emacs/site-lisp/chess-ai
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-fruit hides /home/dick/.local/share/emacs/site-lisp/chess-fruit
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-uci hides /home/dick/.local/share/emacs/site-lisp/chess-uci
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-epd hides /home/dick/.local/share/emacs/site-lisp/chess-epd
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-database hides /home/dick/.local/share/emacs/site-lisp/chess-database
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-link hides /home/dick/.local/share/emacs/site-lisp/chess-link
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-transport hides /home/dick/.local/share/emacs/site-lisp/chess-transport
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-none hides /home/dick/.local/share/emacs/site-lisp/chess-none
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-polyglot hides /home/dick/.local/share/emacs/site-lisp/chess-polyglot
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-crafty hides /home/dick/.local/share/emacs/site-lisp/chess-crafty
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-chat hides /home/dick/.local/share/emacs/site-lisp/chess-chat
/home/dick/.emacs.d/elpa/chess-2.0.5/chess hides /home/dick/.local/share/emacs/site-lisp/chess
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-images hides /home/dick/.local/share/emacs/site-lisp/chess-images
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-gnuchess hides /home/dick/.local/share/emacs/site-lisp/chess-gnuchess
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-fen hides /home/dick/.local/share/emacs/site-lisp/chess-fen
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-ics hides /home/dick/.local/share/emacs/site-lisp/chess-ics
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-ics2 hides /home/dick/.local/share/emacs/site-lisp/chess-ics2
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-common hides /home/dick/.local/share/emacs/site-lisp/chess-common
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-input hides /home/dick/.local/share/emacs/site-lisp/chess-input
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-announce hides /home/dick/.local/share/emacs/site-lisp/chess-announce
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-clock hides /home/dick/.local/share/emacs/site-lisp/chess-clock
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-sound hides /home/dick/.local/share/emacs/site-lisp/chess-sound
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-sjeng hides /home/dick/.local/share/emacs/site-lisp/chess-sjeng
/home/dick/.emacs.d/elpa/chess-2.0.5/chess-algebraic hides /home/dick/.local/share/emacs/site-lisp/chess-algebraic
/home/dick/.emacs.d/elpa/transient-0.3.7snapshot/transient hides /home/dick/.local/share/emacs/0.3.1/lisp/transient

Features:
(shadow sort footnote mail-extr 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 mm-url gnus-undo gnus-start gnus-dbus dbus xml gnus-cloud
nnimap nnmail mail-source utf7 nnoo gnus-spec gnus-int gnus-range
gnus-win emacsbug magit-extras cl-print emms-source-file locate
completion dos-w32 find-cmd find-dired help-fns radix-tree benchmark
tree-sitter vc-git vc-dispatcher bug-reference blamer a tramp
tramp-loaddefs trampver tramp-integration cus-start files-x tramp-compat
parse-time iso8601 ls-lisp face-remap magit-patch-changelog magit-patch
magit-submodule magit-obsolete magit-blame magit-stash magit-reflog
magit-bisect magit-push magit-pull magit-fetch magit-clone magit-remote
magit-commit magit-sequence magit-notes magit-worktree magit-tag
magit-merge magit-branch magit-reset magit-files magit-refs magit-status
magit magit-repos magit-apply magit-wip magit-log which-func imenu
edebug debug backtrace magit-diff smerge-mode diff diff-mode git-commit
log-edit message sendmail yank-media puny dired-x dired dired-loaddefs
rfc822 mml mml-sec epa epg rfc6068 epg-config mm-decode mm-bodies
mm-encode mail-parse rfc2231 rfc2047 rfc2045 ietf-drums mailabbrev
gmm-utils mailheader pcvs-util add-log magit-core magit-margin
magit-transient magit-process with-editor shell pcomplete server
magit-mode transient paredit-ext paredit inf-ruby ruby-mode smie company
pcase haskell-interactive-mode haskell-presentation-mode haskell-process
haskell-session haskell-compile haskell-mode haskell-cabal haskell-utils
haskell-font-lock haskell-indentation haskell-string
haskell-sort-imports haskell-lexeme haskell-align-imports
haskell-complete-module haskell-ghc-support noutline outline
flymake-proc flymake warnings etags fileloop generator dabbrev
haskell-customize hydra lv use-package-ensure solarized-theme
solarized-definitions projectile lisp-mnt ibuf-ext ibuffer
ibuffer-loaddefs thingatpt magit-autorevert autorevert filenotify
magit-git magit-base magit-section format-spec crm dash rx compat-27
compat-26 compat grep compile comint ansi-osc ansi-color gnus nnheader
range mail-utils mm-util mail-prsvr gnus-util text-property-search
time-date flx-ido flx google-translate-default-ui
google-translate-core-ui facemenu color ido google-translate-core
google-translate-tk google-translate-backend auto-complete advice popup
cus-edit pp cus-load icons wid-edit emms-player-mplayer
emms-player-simple emms emms-compat hl-line winner edmacro kmacro
cl-extra help-mode xref project ring use-package-bind-key bind-key
easy-mmode use-package-core derived company-go-autoloads corfu-autoloads
debbugs-autoloads elpaso-disc-autoloads elpaso-autoloads find-func
company-autoloads flycheck-autoloads finder-inf go-mode-autoloads
json-reformat-autoloads json-snatcher-autoloads lsp-bridge-autoloads
lsp-mode-autoloads lv-autoloads magit-autoloads nnreddit-autoloads
epl-autoloads posframe-autoloads projectile-autoloads
markdown-mode-autoloads rust-mode-autoloads sml-mode-autoloads
tornado-template-mode-autoloads typescript-mode-autoloads
request-autoloads info wordnut-autoloads yasnippet-autoloads package
browse-url 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 password-cache
json subr-x map byte-opt gv bytecomp byte-compile cconv cldefs url-vars
cl-loaddefs cl-lib rmc iso-transl tooltip eldoc paren electric uniquify
ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win
term/common-win x-dnd 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 inotify lcms2 dynamic-setting system-font-setting
font-render-setting cairo move-toolbar gtk x-toolkit xinput2 x multi-tty
make-network-process emacs)

Memory information:
((conses 16 445661 16875)
 (symbols 48 33243 0)
 (strings 32 127275 3204)
 (string-bytes 1 3975196)
 (vectors 16 55026)
 (vector-slots 8 678469 5626)
 (floats 8 409 1104)
 (intervals 56 802 0)
 (buffers 1008 15))

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

* bug#58709: 29.0.50; [PATCH] Fallout 307ad21
  2022-10-21 17:55 bug#58709: 29.0.50; [PATCH] Fallout 307ad21 dick
@ 2022-10-22 12:35 ` dick
  2022-10-24 19:39 ` Juri Linkov
  1 sibling, 0 replies; 5+ messages in thread
From: dick @ 2022-10-22 12:35 UTC (permalink / raw)
  To: 58709

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: 0001-Fallout-307ad21.patch --]
[-- Type: text/x-diff, Size: 4111 bytes --]

From 2ad882ac82cbb03674699f09c98bdb5e7481843b Mon Sep 17 00:00:00 2001
From: dickmao <dick.r.chiang@gmail.com>
Date: Sat, 22 Oct 2022 08:33:53 -0400
Subject: [PATCH] Fallout 307ad21

* lisp/vc/vc-git.el (vc-git-working-revision):
For better or worse, 307ad21 dupes vc-git--symbolic-ref
into this function.  Throw the sha1 onto the retval as a hack
to recover sha1.
(vc-git-mode-line-string): Recover the sha1 for John Q. User.
* test/lisp/vc/vc-git-tests.el (vc-git-test--mock-repo):
(vc-git-test-detached-head): Test the failure when
vc-refresh-state goes after a detached HEAD branch.
---
 lisp/vc/vc-git.el            | 26 +++++++++-----------------
 test/lisp/vc/vc-git-tests.el | 25 +++++++++++++++++++++++++
 2 files changed, 34 insertions(+), 17 deletions(-)

diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el
index 3c6afec0378..8682770635d 100644
--- a/lisp/vc/vc-git.el
+++ b/lisp/vc/vc-git.el
@@ -374,31 +374,23 @@ vc-git-state
 (defun vc-git-working-revision (_file)
   "Git-specific version of `vc-working-revision'."
   (let* ((process-file-side-effects nil)
-         (commit (vc-git--rev-parse "HEAD" t)))
-    (or (vc-git-symbolic-commit commit) commit)))
-
-(defun vc-git--symbolic-ref (file)
-  (or
-   (vc-file-getprop file 'vc-git-symbolic-ref)
-   (let* (process-file-side-effects
-          (str (vc-git--run-command-string nil "symbolic-ref" "HEAD")))
-     (vc-file-setprop file 'vc-git-symbolic-ref
-                      (if str
-                          (if (string-match "^\\(refs/heads/\\)?\\(.+\\)$" str)
-                              (match-string 2 str)
-                            str))))))
+         (commit (vc-git--rev-parse "HEAD" t))
+         (name (vc-git-symbolic-commit commit)))
+    (or (prog1 name
+          (add-text-properties 0 (length name) `(commit ,commit) name))
+        commit)))
 
 (defun vc-git-mode-line-string (file)
   "Return a string for `vc-mode-line' to put in the mode line for FILE."
   (let* ((rev (vc-working-revision file 'Git))
-         (disp-rev (or (vc-git--symbolic-ref file)
-                       (and rev (substring rev 0 7))))
          (def-ml (vc-default-mode-line-string 'Git file))
          (help-echo (get-text-property 0 'help-echo def-ml))
          (face   (get-text-property 0 'face def-ml)))
-    (propertize (concat (substring def-ml 0 4) disp-rev)
+    (propertize (concat (substring def-ml 0 4) rev)
                 'face face
-                'help-echo (concat help-echo "\nCurrent revision: " rev))))
+                'help-echo (concat help-echo "\nCurrent revision: "
+                                   (when rev
+                                     (or (get-text-property 0 'commit rev) rev))))))
 
 (cl-defstruct (vc-git-extra-fileinfo
             (:copier nil)
diff --git a/test/lisp/vc/vc-git-tests.el b/test/lisp/vc/vc-git-tests.el
index dc9641ed46b..c46e1c55942 100644
--- a/test/lisp/vc/vc-git-tests.el
+++ b/test/lisp/vc/vc-git-tests.el
@@ -56,6 +56,31 @@ vc-git-test-program-version-invalid-leading-dot
    "git version .2.30.1.5"
    "0"))
 
+(defmacro vc-git-test--mock-repo (&rest body)
+  (declare (indent defun))
+  `(let* ((dir (make-temp-file "vc-git-tests" t))
+          (default-directory dir))
+     (unwind-protect
+         (progn
+           (vc-git-create-repo)
+           (vc-git-command nil 0 nil "config" "--add" "user.name" "frou")
+           ,@body)
+       (delete-directory dir t))))
+
+(ert-deftest vc-git-test-detached-head ()
+  (skip-unless (executable-find vc-git-program))
+  (require 'log-edit)
+  (vc-git-test--mock-repo
+    (with-temp-file "foo")
+    (condition-case err
+        (progn
+          (vc-git-register (split-string "foo"))
+          (vc-git-checkin (split-string "foo") "No-Verify: yes
+his fooness")
+          (vc-git-checkout nil (vc-git--rev-parse "HEAD" t)))
+      (error (signal (car err) (with-current-buffer "*vc*" (buffer-string)))))
+    (find-file-noselect "foo")))
+
 (defun vc-git-test--run-program-version-test
     (mock-version-string expected-output)
   (cl-letf* (((symbol-function 'vc-git--run-command-string)
-- 
2.36.1






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

* bug#58709: 29.0.50; [PATCH] Fallout 307ad21
  2022-10-21 17:55 bug#58709: 29.0.50; [PATCH] Fallout 307ad21 dick
  2022-10-22 12:35 ` dick
@ 2022-10-24 19:39 ` Juri Linkov
  2022-10-26  7:16   ` Philip Kaludercic
  1 sibling, 1 reply; 5+ messages in thread
From: Juri Linkov @ 2022-10-24 19:39 UTC (permalink / raw)
  To: dick; +Cc: Philip Kaludercic, 58709

> Hadn't known vc-refresh-state gets into my find-file-hook
> irregardless.  This won't work with git branches in a detached
> HEAD state.
>...
>  (defun vc-git-working-revision (_file)
>    "Git-specific version of `vc-working-revision'."
>    (let* ((process-file-side-effects nil)
> -         (commit (vc-git--rev-parse "HEAD" t)))
> -    (or (vc-git-symbolic-commit commit) commit)))

Maybe Philip could comment on this (Cc:ed).

Regarding the commit 307ad21, what I noticed is that after this commit,
typing 'C-c C-w' (log-edit-generate-changelog-from-diff) in log-edit mode,
creates temporary buffers with names that contain symbolic revision names
in their buffer names instead of hash numbers, that looks very strange.





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

* bug#58709: 29.0.50; [PATCH] Fallout 307ad21
  2022-10-24 19:39 ` Juri Linkov
@ 2022-10-26  7:16   ` Philip Kaludercic
  2022-11-07 17:39     ` Matt Armstrong
  0 siblings, 1 reply; 5+ messages in thread
From: Philip Kaludercic @ 2022-10-26  7:16 UTC (permalink / raw)
  To: Juri Linkov; +Cc: 58709, dick

Juri Linkov <juri@linkov.net> writes:

>> Hadn't known vc-refresh-state gets into my find-file-hook
>> irregardless.  This won't work with git branches in a detached
>> HEAD state.
>>...
>>  (defun vc-git-working-revision (_file)
>>    "Git-specific version of `vc-working-revision'."
>>    (let* ((process-file-side-effects nil)
>> -         (commit (vc-git--rev-parse "HEAD" t)))
>> -    (or (vc-git-symbolic-commit commit) commit)))
>
> Maybe Philip could comment on this (Cc:ed).
>
> Regarding the commit 307ad21, what I noticed is that after this commit,
> typing 'C-c C-w' (log-edit-generate-changelog-from-diff) in log-edit mode,
> creates temporary buffers with names that contain symbolic revision names
> in their buffer names instead of hash numbers, that looks very strange.

If that is the case, the change should be reverted, and ideally some
other way could be found to request that vc-working-revision generates a
symbolic reference.  Perhaps using a dynamic variable?





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

* bug#58709: 29.0.50; [PATCH] Fallout 307ad21
  2022-10-26  7:16   ` Philip Kaludercic
@ 2022-11-07 17:39     ` Matt Armstrong
  0 siblings, 0 replies; 5+ messages in thread
From: Matt Armstrong @ 2022-11-07 17:39 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: 58709-done, dick, Juri Linkov

Philip Kaludercic <philipk@posteo.net> writes:

> Juri Linkov <juri@linkov.net> writes:
>
>>> Hadn't known vc-refresh-state gets into my find-file-hook
>>> irregardless.  This won't work with git branches in a detached
>>> HEAD state.
>>>...
>>>  (defun vc-git-working-revision (_file)
>>>    "Git-specific version of `vc-working-revision'."
>>>    (let* ((process-file-side-effects nil)
>>> -         (commit (vc-git--rev-parse "HEAD" t)))
>>> -    (or (vc-git-symbolic-commit commit) commit)))
>>
>> Maybe Philip could comment on this (Cc:ed).
>>
>> Regarding the commit 307ad21, what I noticed is that after this commit,
>> typing 'C-c C-w' (log-edit-generate-changelog-from-diff) in log-edit mode,
>> creates temporary buffers with names that contain symbolic revision names
>> in their buffer names instead of hash numbers, that looks very strange.
>
> If that is the case, the change should be reverted, and ideally some
> other way could be found to request that vc-working-revision generates a
> symbolic reference.  Perhaps using a dynamic variable?

Closing as the commit in question was reverted by Philip in the commit
below.

8fe62b2ab5 (Revert "* lisp/vc/vc-git.el (vc-git--rev-parse): Allow abbreviating commits", 2022-11-06)





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

end of thread, other threads:[~2022-11-07 17:39 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-21 17:55 bug#58709: 29.0.50; [PATCH] Fallout 307ad21 dick
2022-10-22 12:35 ` dick
2022-10-24 19:39 ` Juri Linkov
2022-10-26  7:16   ` Philip Kaludercic
2022-11-07 17:39     ` Matt Armstrong

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).