# HG changeset patch # User Dan Nicolaescu # Date 1248331370 0 # Node ID 772f278e1024119ed79169b281d80c082058d506 # Parent 47d49939ab41f5eb08a2718290f263d0ff472fd0 (vc-git--run-command-string): Accept a nil FILE argument. (vc-git-stash-list): New function. (vc-git-dir-extra-headers): Use it. diff -r 47d49939ab41 -r 772f278e1024 lisp/ChangeLog --- a/lisp/ChangeLog Thu Jul 23 05:41:24 2009 +0000 +++ b/lisp/ChangeLog Thu Jul 23 06:42:50 2009 +0000 @@ -8,6 +8,9 @@ (vc-git-checkin): Use it. (vc-git-toggle-signoff): New function. (vc-git-extra-menu-map): Bind it to menu. + (vc-git--run-command-string): Accept a nil FILE argument. + (vc-git-stash-list): New function. + (vc-git-dir-extra-headers): Use it. 2009-07-23 Glenn Morris diff -r 47d49939ab41 -r 772f278e1024 lisp/vc-git.el --- a/lisp/vc-git.el Thu Jul 23 05:41:24 2009 +0000 +++ b/lisp/vc-git.el Thu Jul 23 06:42:50 2009 +0000 @@ -400,13 +400,21 @@ (defun vc-git-dir-extra-headers (dir) (let ((str (with-output-to-string (with-current-buffer standard-output - (vc-git--out-ok "symbolic-ref" "HEAD"))))) + (vc-git--out-ok "symbolic-ref" "HEAD")))) + (stash (vc-git-stash-list))) + ;; FIXME: maybe use a different face when nothing is stashed. + (when (string= stash "") (setq stash "Nothing stashed")) (concat (propertize "Branch : " 'face 'font-lock-type-face) (propertize (if (string-match "^\\(refs/heads/\\)?\\(.+\\)$" str) (match-string 2 str) "not (detached HEAD)") + 'face 'font-lock-variable-name-face) + "\n" + (propertize "Stash : " 'face 'font-lock-type-face) + (propertize + stash 'face 'font-lock-variable-name-face)))) ;;; STATE-CHANGING FUNCTIONS @@ -708,6 +716,13 @@ (compilation-start command 'grep-mode)) (if (eq next-error-last-buffer (current-buffer)) (setq default-directory dir)))))) + +(defun vc-git-stash-list () + (replace-regexp-in-string + "\n" "\n " + (replace-regexp-in-string + "^stash@" "" (vc-git--run-command-string nil "stash" "list")))) + ;;; Internal commands @@ -733,13 +748,16 @@ (zerop (apply 'vc-git--call '(t nil) command args))) (defun vc-git--run-command-string (file &rest args) - "Run a git command on FILE and return its output as string." + "Run a git command on FILE and return its output as string. +FILE can be nil." (let* ((ok t) (str (with-output-to-string (with-current-buffer standard-output (unless (apply 'vc-git--out-ok - (append args (list (file-relative-name - file)))) + (if file + (append args (list (file-relative-name + file))) + args)) (setq ok nil)))))) (and ok str)))