[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/lisp/vc-git.el,v
From: |
Dan Nicolaescu |
Subject: |
[Emacs-diffs] Changes to emacs/lisp/vc-git.el,v |
Date: |
Sat, 22 Mar 2008 17:33:55 +0000 |
CVSROOT: /cvsroot/emacs
Module name: emacs
Changes by: Dan Nicolaescu <dann> 08/03/22 17:33:54
Index: vc-git.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/vc-git.el,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -b -r1.44 -r1.45
--- vc-git.el 22 Mar 2008 17:21:48 -0000 1.44
+++ vc-git.el 22 Mar 2008 17:33:51 -0000 1.45
@@ -149,7 +149,7 @@
(if (and diff (string-match ":[0-7]\\{6\\} [0-7]\\{6\\} [0-9a-f]\\{40\\}
[0-9a-f]\\{40\\} \\([ADMU]\\)\0[^\0]+\0"
diff))
(if (string= (match-string 1 diff) "A") 'added 'edited)
- 'up-to-date)))
+ (if (vc-git--empty-db-p) 'added 'up-to-date))))
(defun vc-git--ls-files-state (state &rest args)
"Set state to STATE on all files found with git-ls-files ARGS."
@@ -229,10 +229,19 @@
(vc-exec-after
`(vc-git-after-dir-status-stage2 (quote ,update-function) ,status-buffer)))
+(defun vc-git-after-dir-status-stage1-empty-db (update-function status-buffer)
+ (goto-char (point-min))
+ (while (re-search-forward "\\([^\0]*?\\)\0" nil t 1)
+ (push (cons (match-string 1) 'added) vc-git-status-result))
+ (erase-buffer)
+ (vc-git-command (current-buffer) 'async nil "ls-files" "-z" "-o"
+ "--directory" "--no-empty-directory" "--exclude-standard")
+ (vc-exec-after
+ `(vc-git-after-dir-status-stage2 (quote ,update-function) ,status-buffer)))
+
(defun vc-git-dir-status (dir update-function status-buffer)
"Return a list of conses (file . state) for DIR."
;; Further things that would have to be fixed later:
- ;; - support for an empty repository (with no initial commit)
;; - how to handle unregistered directories
;; - how to support vc-status on a subdir of the project tree
(with-current-buffer
@@ -241,9 +250,14 @@
(set (make-local-variable 'vc-git-status-result) nil)
(cd dir)
(erase-buffer)
+ (if (vc-git--empty-db-p)
+ (progn
+ (vc-git-command (current-buffer) 'async nil "ls-files" "-z" "-c")
+ (vc-exec-after
+ `(vc-git-after-dir-status-stage1-empty-db (quote ,update-function)
,status-buffer)))
(vc-git-command (current-buffer) 'async nil "diff-index" "-z" "HEAD")
(vc-exec-after
- `(vc-git-after-dir-status-stage1 (quote ,update-function) ,status-buffer))
+ `(vc-git-after-dir-status-stage1 (quote ,update-function)
,status-buffer)))
(current-buffer)))
;;; STATE-CHANGING FUNCTIONS
@@ -482,6 +496,10 @@
The difference to vc-do-command is that this function always invokes `git'."
(apply 'vc-do-command buffer okstatus "git" file-or-list flags))
+(defun vc-git--empty-db-p ()
+ "Check if the git db is empty (no commit done yet)."
+ (not (eq 0 (vc-git--call nil "rev-parse" "--verify" "HEAD"))))
+
(defun vc-git--call (buffer command &rest args)
;; We don't need to care the arguments. If there is a file name, it
;; is always a relative one. This works also for remote
- [Emacs-diffs] Changes to emacs/lisp/vc-git.el,v, Dan Nicolaescu, 2008/03/21
- [Emacs-diffs] Changes to emacs/lisp/vc-git.el,v, Dan Nicolaescu, 2008/03/21
- [Emacs-diffs] Changes to emacs/lisp/vc-git.el,v, Dan Nicolaescu, 2008/03/21
- [Emacs-diffs] Changes to emacs/lisp/vc-git.el,v, Stefan Monnier, 2008/03/21
- [Emacs-diffs] Changes to emacs/lisp/vc-git.el,v, Dan Nicolaescu, 2008/03/22
- [Emacs-diffs] Changes to emacs/lisp/vc-git.el,v,
Dan Nicolaescu <=
- [Emacs-diffs] Changes to emacs/lisp/vc-git.el,v, Dan Nicolaescu, 2008/03/24
- [Emacs-diffs] Changes to emacs/lisp/vc-git.el,v, Dan Nicolaescu, 2008/03/26
- [Emacs-diffs] Changes to emacs/lisp/vc-git.el,v, Dan Nicolaescu, 2008/03/27
- [Emacs-diffs] Changes to emacs/lisp/vc-git.el,v, Dan Nicolaescu, 2008/03/29
- [Emacs-diffs] Changes to emacs/lisp/vc-git.el,v, Dan Nicolaescu, 2008/03/30