git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 2/3] git.el: Retrieve the permissions for up-to-date files.
@ 2008-01-06 11:13 Alexandre Julliard
  0 siblings, 0 replies; only message in thread
From: Alexandre Julliard @ 2008-01-06 11:13 UTC (permalink / raw)
  To: git

This allows displaying correctly the executable flag for the initial
commit, and will make it possible to show the file type for up-to-date
symlinks and subprojects.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
---
 contrib/emacs/git.el |   20 ++++++++++++++++++--
 1 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/contrib/emacs/git.el b/contrib/emacs/git.el
index e0e6316..820df11 100644
--- a/contrib/emacs/git.el
+++ b/contrib/emacs/git.el
@@ -642,6 +642,22 @@ Return the list of files that haven't been handled."
     (git-insert-info-list status infolist)
     files))
 
+(defun git-run-ls-files-cached (status files default-state)
+  "Run git-ls-files -c on FILES and parse the results into STATUS.
+Return the list of files that haven't been handled."
+  (let (infolist)
+    (with-temp-buffer
+      (apply #'git-call-process-env t nil "ls-files" "-z" "-s" "-c" "--" files)
+      (goto-char (point-min))
+      (while (re-search-forward "\\([0-7]\\{6\\}\\) [0-9a-f]\\{40\\} [0-3]\t\\([^\0]+\\)\0" nil t)
+        (let* ((new-perm (string-to-number (match-string 1) 8))
+               (old-perm (if (eq default-state 'added) 0 new-perm))
+               (name (match-string 2)))
+          (push (git-create-fileinfo default-state name old-perm new-perm) infolist)
+          (setq files (delete name files)))))
+    (git-insert-info-list status infolist)
+    files))
+
 (defun git-run-ls-unmerged (status files)
   "Run git-ls-files -u on FILES and parse the results into STATUS."
   (with-temp-buffer
@@ -673,10 +689,10 @@ Return the list of files that haven't been handled."
   "Update the status of FILES from the index."
   (unless git-status (error "Not in git-status buffer."))
   (unless files
-    (when git-show-uptodate (git-run-ls-files git-status nil 'uptodate "-c")))
+    (when git-show-uptodate (git-run-ls-files-cached git-status nil 'uptodate)))
   (let* ((remaining-files
           (if (git-empty-db-p) ; we need some special handling for an empty db
-              (git-run-ls-files git-status files 'added "-c")
+              (git-run-ls-files-cached git-status files 'added)
             (git-run-diff-index git-status files))))
     (git-run-ls-unmerged git-status files)
     (when (or remaining-files (and git-show-unknown (not files)))
-- 
1.5.4.rc2.53.gb6f8

-- 
Alexandre Julliard
julliard@winehq.org

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2008-01-06 11:13 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-01-06 11:13 [PATCH 2/3] git.el: Retrieve the permissions for up-to-date files Alexandre Julliard

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 NNTP newsgroup(s).