unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#14459: git vc-annotate fails in detached HEAD state
@ 2013-05-24 13:07 Claudio Bley
  2013-05-24 19:07 ` Dmitry Gutov
  0 siblings, 1 reply; 5+ messages in thread
From: Claudio Bley @ 2013-05-24 13:07 UTC (permalink / raw)
  To: 14459

Hi.

1. I open a git versioned file with vc-git enabled in a directory
   currently in detached HEAD state (e.g. after checking out a tag)
2. notice the mode line says "Git:!"

Now, when I do

C-x v g (vc-annotate)

The annotation buffer will be displayed, only saying

,----
| fatal: bad revision ''
`----

Apparently, vc-git-working-revision calls "git symbolic-ref HEAD",
which - in this case - gives:

$ git symbolic-ref HEAD
fatal: ref HEAD is not a symbolic ref

So, vc-git-working-revision returns an empty string as the current
"revision" vc-mode refers to.

M-: (vc-git-working-revision (buffer-file-name))

-> ""

When calling vc-annotate, the vc-git-annotate-command gets called with
the empty string for the rev parameter leading to the error.

This patch fixes it for me:

----------------- 8< --------------------- 8< -------------
diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el
index 06474cb..63a7115 100644
--- a/lisp/vc/vc-git.el
+++ b/lisp/vc/vc-git.el
@@ -885,7 +885,7 @@ or BRANCH^ (where \"^\" can be repeated)."
 
 (defun vc-git-annotate-command (file buf &optional rev)
   (let ((name (file-relative-name file)))
-    (vc-git-command buf 'async nil "blame" "--date=iso" "-C" "-C" rev "--" name)))
+    (vc-git-command buf 'async nil "blame" "--date=iso" "-C" "-C" (if (> (length rev) 0) rev) "--" name)))
 
 (declare-function vc-annotate-convert-time "vc-annotate" (time))
 
-- 
Claudio







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

* bug#14459: git vc-annotate fails in detached HEAD state
  2013-05-24 13:07 bug#14459: git vc-annotate fails in detached HEAD state Claudio Bley
@ 2013-05-24 19:07 ` Dmitry Gutov
  2013-05-27  6:41   ` Claudio Bley
  0 siblings, 1 reply; 5+ messages in thread
From: Dmitry Gutov @ 2013-05-24 19:07 UTC (permalink / raw)
  To: Claudio Bley; +Cc: 14459

claudio.bley@gmail.com (Claudio Bley) writes:

> Apparently, vc-git-working-revision calls "git symbolic-ref HEAD",
> which - in this case - gives:
>
> $ git symbolic-ref HEAD
> fatal: ref HEAD is not a symbolic ref
>
> So, vc-git-working-revision returns an empty string as the current
> "revision" vc-mode refers to.
>
> M-: (vc-git-working-revision (buffer-file-name))
>
> -> ""
>
> When calling vc-annotate, the vc-git-annotate-command gets called with
> the empty string for the rev parameter leading to the error.
>
> This patch fixes it for me: ...

I think we should fix `vc-git-working-revision' instead. After all,
`vc-working-revision' says it returns nil when the file is not
registered at all.

Please try this patch:

=== modified file 'lisp/vc/vc-git.el'
--- lisp/vc/vc-git.el	2013-04-24 07:52:00 +0000
+++ lisp/vc/vc-git.el	2013-05-24 19:07:09 +0000
@@ -237,9 +237,8 @@
 (defun vc-git-working-revision (_file)
   "Git-specific version of `vc-working-revision'."
   (let* (process-file-side-effects
-	 (str (with-output-to-string
-		(with-current-buffer standard-output
-		  (vc-git--out-ok "symbolic-ref" "HEAD")))))
+         (str (or (vc-git--run-command-string nil "symbolic-ref" "HEAD")
+                  (vc-git--run-command-string nil "rev-parse" "HEAD"))))
     (if (string-match "^\\(refs/heads/\\)?\\(.+\\)$" str)
         (match-string 2 str)
       str)))






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

* bug#14459: git vc-annotate fails in detached HEAD state
  2013-05-24 19:07 ` Dmitry Gutov
@ 2013-05-27  6:41   ` Claudio Bley
  2013-05-27 15:10     ` Stefan Monnier
  0 siblings, 1 reply; 5+ messages in thread
From: Claudio Bley @ 2013-05-27  6:41 UTC (permalink / raw)
  To: 14459

At Fri, 24 May 2013 23:07:49 +0400,
Dmitry Gutov wrote:
> 
> claudio.bley@gmail.com (Claudio Bley) writes:
> 
> > Apparently, vc-git-working-revision calls "git symbolic-ref HEAD",
> > which - in this case - gives:
> >
> > $ git symbolic-ref HEAD
> > fatal: ref HEAD is not a symbolic ref
> >
> > So, vc-git-working-revision returns an empty string as the current
> > "revision" vc-mode refers to.
> >
> > M-: (vc-git-working-revision (buffer-file-name))
> >
> > -> ""
> >
> > When calling vc-annotate, the vc-git-annotate-command gets called with
> > the empty string for the rev parameter leading to the error.
> >
> > This patch fixes it for me: ...
> 
> I think we should fix `vc-git-working-revision' instead. After all,
> `vc-working-revision' says it returns nil when the file is not
> registered at all.
> 
> Please try this patch:
> 
> === modified file 'lisp/vc/vc-git.el'
> --- lisp/vc/vc-git.el	2013-04-24 07:52:00 +0000
> +++ lisp/vc/vc-git.el	2013-05-24 19:07:09 +0000
> @@ -237,9 +237,8 @@
>  (defun vc-git-working-revision (_file)
>    "Git-specific version of `vc-working-revision'."
>    (let* (process-file-side-effects
> -	 (str (with-output-to-string
> -		(with-current-buffer standard-output
> -		  (vc-git--out-ok "symbolic-ref" "HEAD")))))
> +         (str (or (vc-git--run-command-string nil "symbolic-ref" "HEAD")
> +                  (vc-git--run-command-string nil "rev-parse" "HEAD"))))
>      (if (string-match "^\\(refs/heads/\\)?\\(.+\\)$" str)
>          (match-string 2 str)
>        str)))

Yes, this is way better than what I've come up with. But shouldn't we
also use the "--short[=n]" option to restrict the length of the
revision string as it is displayed in the modeline? I think 40 chars
is a bit long a text taking up precious space in my modeline.

- Claudio
-- 
Claudio





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

* bug#14459: git vc-annotate fails in detached HEAD state
  2013-05-27  6:41   ` Claudio Bley
@ 2013-05-27 15:10     ` Stefan Monnier
  2013-05-27 23:14       ` Dmitry Gutov
  0 siblings, 1 reply; 5+ messages in thread
From: Stefan Monnier @ 2013-05-27 15:10 UTC (permalink / raw)
  To: 14459

> Yes, this is way better than what I've come up with. But shouldn't we
> also use the "--short[=n]" option to restrict the length of the
> revision string as it is displayed in the modeline? I think 40 chars
> is a bit long a text taking up precious space in my modeline.

The shortening could also be limited to the modeline.


        Stefan





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

* bug#14459: git vc-annotate fails in detached HEAD state
  2013-05-27 15:10     ` Stefan Monnier
@ 2013-05-27 23:14       ` Dmitry Gutov
  0 siblings, 0 replies; 5+ messages in thread
From: Dmitry Gutov @ 2013-05-27 23:14 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: 14459-done

Version: 24.4

Claudio Bley <claudio.bley@googlemail.com> writes:
> Yes, this is way better than what I've come up with. But shouldn't we
> also use the "--short[=n]" option to restrict the length of the
> revision string as it is displayed in the modeline? I think 40 chars
> is a bit long a text taking up precious space in my modeline.

Thanks, I missed that. And also the fact that
`vc-git-mode-line-string' relied on the non-standard return value (empty
string) to determine whether it should add the appropriate help-echo,
("No current branch (detached HEAD)").

I've checked in a more comprehensive patch, using the same help-echo
format in both cases.

Stefan Monnier <monnier@iro.umontreal.ca> writes:
> The shortening could also be limited to the modeline.

Done. Shortening the mode-line format in `vc-git-mode-line-string'
wasn't an obvious solution for me, but it seems to work well enough.





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

end of thread, other threads:[~2013-05-27 23:14 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-05-24 13:07 bug#14459: git vc-annotate fails in detached HEAD state Claudio Bley
2013-05-24 19:07 ` Dmitry Gutov
2013-05-27  6:41   ` Claudio Bley
2013-05-27 15:10     ` Stefan Monnier
2013-05-27 23:14       ` 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).