aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Pittman2018-10-23 11:24:04 -0400
committerEli Zaretskii2018-11-03 10:34:56 +0200
commit9d5c4d07462e69b4e0552e7f09e3e59a3fd10b6a (patch)
treee8e47ede42d9f10959b9c8cea7bf5c4a2a728e73
parent7b82d514371f77072b30a4a6a75cba6684ea56b4 (diff)
downloademacs-9d5c4d07462e69b4e0552e7f09e3e59a3fd10b6a.tar.gz
emacs-9d5c4d07462e69b4e0552e7f09e3e59a3fd10b6a.zip
Fix interaction between vc-hg find-file-hook and vc state caching
Bad assumptions in the `vc-hg-find-file-hook' prevented it from working. This correctly them. (Bug#33129). 2018-10-23 Daniel Pittman <slippycheeze@google.com> * lisp/vc/vc-hg.el (vc-hg-find-file-hook): This function made two assumptions about conflicted files that were not accurate, preventing conflicts in files ever being detected. The first was that the `vc-state' was cache by the time this was invoked, which it is not - at least when visiting the file, or using `vc-refresh-state'. The second was that a file with the ".orig" extension would be present, next to the file being visited. This is the default behavior of Mercurial, but can be overridden by the user. Since the VC mode-line code will shortly calculate the state for display, the optimization of testing for the ".orig" file only delayed this work by a few moments.
-rw-r--r--etc/NEWS6
-rw-r--r--lisp/vc/vc-hg.el4
2 files changed, 7 insertions, 3 deletions
diff --git a/etc/NEWS b/etc/NEWS
index ac23b3b1814..b71ac804e39 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -339,6 +339,12 @@ When no files are marked, all modified files are stashed, as before.
339 339
340*** The new hook 'vc-retrieve-tag-hook' runs after retrieving a tag. 340*** The new hook 'vc-retrieve-tag-hook' runs after retrieving a tag.
341 341
342--- `vc-hg' now invokes `smerge-mode' correctly when visiting files.
343Code that attempted to invoke `smerge-mode' when visiting an Hg file
344with conflicts existed in earlier versions of Emacs, but incorrectly
345never detected a conflict due to invalid assumptions about cached
346values.
347
342** diff-mode 348** diff-mode
343*** Hunks are now automatically refined by default. 349*** Hunks are now automatically refined by default.
344To disable it, set the new defcustom 'diff-font-lock-refine' to nil. 350To disable it, set the new defcustom 'diff-font-lock-refine' to nil.
diff --git a/lisp/vc/vc-hg.el b/lisp/vc/vc-hg.el
index 36965735959..d528813bc08 100644
--- a/lisp/vc/vc-hg.el
+++ b/lisp/vc/vc-hg.el
@@ -1142,11 +1142,9 @@ REV is the revision to check out into WORKFILE."
1142 1142
1143(defun vc-hg-find-file-hook () 1143(defun vc-hg-find-file-hook ()
1144 (when (and buffer-file-name 1144 (when (and buffer-file-name
1145 (file-exists-p (concat buffer-file-name ".orig"))
1146 ;; Hg does not seem to have a "conflict" status, eg 1145 ;; Hg does not seem to have a "conflict" status, eg
1147 ;; hg http://bz.selenic.com/show_bug.cgi?id=2724 1146 ;; hg http://bz.selenic.com/show_bug.cgi?id=2724
1148 (memq (vc-file-getprop buffer-file-name 'vc-state) 1147 (memq (vc-state buffer-file-name) '(edited conflict))
1149 '(edited conflict))
1150 ;; Maybe go on to check that "hg resolve -l" says "U"? 1148 ;; Maybe go on to check that "hg resolve -l" says "U"?
1151 ;; If "hg resolve -l" says there's a conflict but there are no 1149 ;; If "hg resolve -l" says there's a conflict but there are no
1152 ;; conflict markers, it's not clear what we should do. 1150 ;; conflict markers, it's not clear what we should do.