X-Git-Url: https://git.distorted.org.uk/~mdw/stgit/blobdiff_plain/ce3b6130ae157ac6280729cdae700a9495a8babd..5115dea02ba6a90485f2a0d7b77e90a01f0d00a5:/contrib/stgit.el?ds=sidebyside diff --git a/contrib/stgit.el b/contrib/stgit.el index 8c69d51..65fe68a 100644 --- a/contrib/stgit.el +++ b/contrib/stgit.el @@ -164,6 +164,17 @@ Returns nil if there was no output." "Returns non-nil if the index contains no changes from HEAD." (zerop (stgit-run-git-silent "diff-index" "--cached" "--quiet" "HEAD"))) +(defvar stgit-index-node nil) +(defvar stgit-worktree-node nil) + +(defun stgit-refresh-index () + (when stgit-index-node + (ewoc-invalidate (car stgit-index-node) (cdr stgit-index-node)))) + +(defun stgit-refresh-worktree () + (when stgit-worktree-node + (ewoc-invalidate (car stgit-worktree-node) (cdr stgit-worktree-node)))) + (defun stgit-run-series (ewoc) (let ((first-line t)) (with-temp-buffer @@ -192,19 +203,20 @@ Returns nil if there was no output." :empty (string= (match-string 1) "0")))) (setq first-line nil) (forward-line 1))))) - (when stgit-show-worktree - (ewoc-enter-last ewoc - (make-stgit-patch - :status 'index - :name :index - :desc nil - :empty nil)) - (ewoc-enter-last ewoc - (make-stgit-patch - :status 'work - :name :work - :desc nil - :empty nil))))) + (if stgit-show-worktree + (setq stgit-index-node (cons ewoc (ewoc-enter-last ewoc + (make-stgit-patch + :status 'index + :name :index + :desc nil + :empty nil))) + stgit-worktree-node (cons ewoc (ewoc-enter-last ewoc + (make-stgit-patch + :status 'work + :name :work + :desc nil + :empty nil)))) + (setq stgit-worktree-node nil)))) (defun stgit-reload () @@ -423,11 +435,8 @@ Cf. `stgit-file-type-change-string'." 'file-data file)))) (defun stgit-insert-patch-files (patch) - "Expand (show modification of) the patch with name PATCHSYM (a -symbol) after the line at point. -`stgit-expand-find-copies-harder' controls how hard to try to -find copied files." - (insert "\n") + "Expand (show modification of) the patch PATCH after the line +at point." (let* ((patchsym (stgit-patch-name patch)) (end (progn (insert "#") (prog1 (point-marker) (forward-char -1)))) (args (list "-z" (if stgit-expand-find-copies-harder @@ -643,8 +652,7 @@ Commands: (buffer (and gitdir (stgit-find-buffer gitdir)))) (when buffer (with-current-buffer buffer - ;; FIXME: just invalidate ewoc node - (stgit-reload))))) + (stgit-refresh-worktree))))) (defun stgit-add-mark (patchsym) "Mark the patch PATCHSYM." @@ -868,13 +876,13 @@ If PATCHSYM is a keyword, returns PATCHSYM unmodified." (goto-char (point-min)) (diff-mode)))) -(defun stgit-move-change-to-index (file status) +(defun stgit-move-change-to-index (file) "Copies the workspace state of FILE to index, using git add or git rm" - (let ((op (if (file-exists-p file) "add" "rm"))) + (let ((op (if (file-exists-p file) '("add") '("rm" "-q")))) (stgit-capture-output "*git output*" - (stgit-run-git op "--" file)))) + (apply 'stgit-run-git (append op '("--") (list file)))))) -(defun stgit-remove-change-from-index (file status) +(defun stgit-remove-change-from-index (file) "Unstages the change in FILE from the index" (stgit-capture-output "*git output*" (stgit-run-git "reset" "-q" "--" file))) @@ -887,15 +895,13 @@ If PATCHSYM is a keyword, returns PATCHSYM unmodified." (error "No file on the current line")) (let ((patch-name (stgit-patch-name-at-point))) (cond ((eq patch-name :work) - (stgit-move-change-to-index (stgit-file-file patched-file) - (stgit-file-status patched-file))) + (stgit-move-change-to-index (stgit-file-file patched-file))) ((eq patch-name :index) - (stgit-remove-change-from-index (stgit-file-file patched-file) - (stgit-file-status patched-file))) + (stgit-remove-change-from-index (stgit-file-file patched-file))) (t (error "Can only move files in the working tree to index"))))) - ;; FIXME: invalidate ewoc - (stgit-reload)) + (stgit-refresh-worktree) + (stgit-refresh-index)) (defun stgit-edit () "Edit the patch on the current line."