]> git.eshelyaron.com Git - emacs.git/commitdiff
vc-git-after-dir-status-stage: Avoid erroneous up-to-date status
authorDmitry Gutov <dgutov@yandex.ru>
Mon, 16 Dec 2019 21:55:11 +0000 (23:55 +0200)
committerDmitry Gutov <dgutov@yandex.ru>
Mon, 16 Dec 2019 23:50:09 +0000 (01:50 +0200)
* lisp/vc/vc-git.el (vc-git-after-dir-status-stage):
Don't set `up-to-date' status if the previous stage (`diff-index')
has assigned some other status to the file (bug#38615).

lisp/vc/vc-git.el

index 71307cdffda44add1426fe2825545329a5e72e73..021b48a5d1e6d97790cd996c462b2fd76a1f1bdb 100644 (file)
@@ -521,14 +521,19 @@ or an empty string if none."
       ('ls-files-up-to-date
        (setq next-stage 'ls-files-unknown)
        (while (re-search-forward "\\([0-7]\\{6\\}\\) [0-9a-f]\\{40\\} \\([0-3]\\)\t\\([^\0]+\\)\0" nil t)
-         (let ((perm (string-to-number (match-string 1) 8))
-               (state (match-string 2))
-               (name (match-string 3)))
-           (vc-git-dir-status-update-file
-            git-state name (if (equal state "0")
-                               'up-to-date
-                             'conflict)
-            (vc-git-create-extra-fileinfo perm perm)))))
+         (let* ((perm (string-to-number (match-string 1) 8))
+                (state (match-string 2))
+                (name (match-string 3))
+                (file-info (vc-git-create-extra-fileinfo perm perm)))
+           (if (equal state "0")
+               (unless (gethash name (vc-git-dir-status-state->hash git-state))
+                 ;; `diff-index' stage has not produced a more precise info.
+                 (vc-git-dir-status-update-file
+                  git-state name 'up-to-date file-info))
+             ;; `diff-index' assigns `edited' status to conflicted
+             ;; files, so we can't do the above in both cases.
+             (vc-git-dir-status-update-file
+              git-state name 'conflict file-info)))))
       ('ls-files-conflict
        (setq next-stage 'ls-files-unknown)
        ;; It's enough to look for "3" to notice a conflict.