all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* [PATCH] vc-git: Do not show `.git/*' files with vc-dir
@ 2010-06-30 12:38 Eric James Michael Ritz
  2010-06-30 12:57 ` Deniz Dogan
  0 siblings, 1 reply; 10+ messages in thread
From: Eric James Michael Ritz @ 2010-06-30 12:38 UTC (permalink / raw)
  To: emacs-devel


When using vc-dir to work with a directory under source control by
Git, it is possible for vc-dir to show files under the top-level
`.git' directory as being unregistered.  As correctly guessed by Dan
Nicolescu, this is caused when a user has $EDITOR configured to be
emacsclient, and he performs certain Git operations outside of
vc-mode, e.g. running `git-commit' from the command line.

It is unlikely that any user would want to perform operations on a
file inside of the `.git' directory via vc-dir.  Therefore we can
prevent those files from appearing by teaching `vc-git-state' to
return nil for any file in those directories.

Signed-off-by: Eric James Michael Ritz <Eric@cybersprocket.com>
---
 lisp/vc-git.el |   25 +++++++++++++++----------
 1 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/lisp/vc-git.el b/lisp/vc-git.el
index 24062a0..ae5b0ff 100644
--- a/lisp/vc-git.el
+++ b/lisp/vc-git.el
@@ -171,16 +171,21 @@ If nil, use the value of `vc-diff-switches'.  If t, use no switches."

 (defun vc-git-state (file)
   "Git-specific version of `vc-state'."
-  ;; FIXME: This can't set 'ignored yet
-  (if (not (vc-git-registered file))
-      'unregistered
-    (vc-git--call nil "add" "--refresh" "--" (file-relative-name file))
-    (let ((diff (vc-git--run-command-string
-                 file "diff-index" "-z" "HEAD" "--")))
-      (if (and diff (string-match ":[0-7]\\{6\\} [0-7]\\{6\\} [0-9a-f]\\{40\\} [0-9a-f]\\{40\\} \\([ADMUT]\\)\0[^\0]+\0"
-				  diff))
-	  (vc-git--state-code (match-string 1 diff))
-	(if (vc-git--empty-db-p) 'added 'up-to-date)))))
+  ;; We never want to perform VC operations on files in the `.git'
+  ;; directory.
+  (cond ((string-match ".git" file)
+         nil)
+        ;; FIXME: This can't set 'ignored yet.
+        ((not (vc-git-registered file))
+         'unregistered)
+        (t
+         (vc-git--call nil "add" "--refresh" "--" (file-relative-name file))
+         (let ((diff (vc-git--run-command-string
+                      file "diff-index" "-z" "HEAD" "--")))
+           (if (and diff (string-match ":[0-7]\\{6\\} [0-7]\\{6\\} [0-9a-f]\\{40\\} [0-9a-f]\\{40\\} \\([ADMUT]\\)\0[^\0]+\0"
+                                       diff))
+               (vc-git--state-code (match-string 1 diff))
+             (if (vc-git--empty-db-p) 'added 'up-to-date))))))

 (defun vc-git-working-revision (file)
   "Git-specific version of `vc-working-revision'."
--
1.7.2.rc0




^ permalink raw reply related	[flat|nested] 10+ messages in thread
* Re: [PATCH] vc-git: Do not show `.git/*' files with vc-dir
@ 2010-06-30 14:17 Eric James Michael Ritz
  2010-06-30 19:35 ` Dan Nicolaescu
  0 siblings, 1 reply; 10+ messages in thread
From: Eric James Michael Ritz @ 2010-06-30 14:17 UTC (permalink / raw)
  To: emacs-devel


On 06/30/2010 08:58 AM, Deniz Dogan wrote:
> 2010/6/30 Deniz Dogan <deniz.a.m.dogan@gmail.com>:
>> 2010/6/30 Eric James Michael Ritz <Eric@cybersprocket.com>:
>>> +  (cond ((string-match ".git" file)
>>
>> Wouldn't "\\`\\.git\\'" be more appropriate? ".git" would match
>> anything which contains "git" preceded by at least one character.
>>
>
> Or actually, (string= ".git" file), I suppose. :)

Whoops, you’re right.  Thanks for the catch :)  Fixed patch below:

diff --git a/lisp/vc-git.el b/lisp/vc-git.el
index 24062a0..62e0c55 100644
--- a/lisp/vc-git.el
+++ b/lisp/vc-git.el
@@ -171,16 +171,21 @@ If nil, use the value of `vc-diff-switches'.  If t, use no switches."

 (defun vc-git-state (file)
   "Git-specific version of `vc-state'."
-  ;; FIXME: This can't set 'ignored yet
-  (if (not (vc-git-registered file))
-      'unregistered
-    (vc-git--call nil "add" "--refresh" "--" (file-relative-name file))
-    (let ((diff (vc-git--run-command-string
-                 file "diff-index" "-z" "HEAD" "--")))
-      (if (and diff (string-match ":[0-7]\\{6\\} [0-7]\\{6\\} [0-9a-f]\\{40\\} [0-9a-f]\\{40\\} \\([ADMUT]\\)\0[^\0]+\0"
-				  diff))
-	  (vc-git--state-code (match-string 1 diff))
-	(if (vc-git--empty-db-p) 'added 'up-to-date)))))
+  ;; We never want to perform VC operations on files in the `.git'
+  ;; directory.
+  (cond ((string= ".git" file)
+         nil)
+        ;; FIXME: This can't set 'ignored yet.
+        ((not (vc-git-registered file))
+         'unregistered)
+        (t
+         (vc-git--call nil "add" "--refresh" "--" (file-relative-name file))
+         (let ((diff (vc-git--run-command-string
+                      file "diff-index" "-z" "HEAD" "--")))
+           (if (and diff (string-match ":[0-7]\\{6\\} [0-7]\\{6\\} [0-9a-f]\\{40\\} [0-9a-f]\\{40\\} \\([ADMUT]\\)\0[^\0]+\0"
+                                       diff))
+               (vc-git--state-code (match-string 1 diff))
+             (if (vc-git--empty-db-p) 'added 'up-to-date))))))

 (defun vc-git-working-revision (file)
   "Git-specific version of `vc-working-revision'."





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

end of thread, other threads:[~2010-07-01  1:20 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-06-30 12:38 [PATCH] vc-git: Do not show `.git/*' files with vc-dir Eric James Michael Ritz
2010-06-30 12:57 ` Deniz Dogan
2010-06-30 12:58   ` Deniz Dogan
2010-06-30 13:08     ` Eric James Michael Ritz
  -- strict thread matches above, loose matches on Subject: below --
2010-06-30 14:17 Eric James Michael Ritz
2010-06-30 19:35 ` Dan Nicolaescu
2010-06-30 20:01   ` Eric James Michael Ritz
2010-06-30 22:21     ` Dan Nicolaescu
2010-07-01  0:07   ` Deniz Dogan
2010-07-01  1:20     ` Dan Nicolaescu

Code repositories for project(s) associated with this external index

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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.