diff options
Diffstat (limited to 'lisp/vc/vc-hg.el')
-rw-r--r-- | lisp/vc/vc-hg.el | 46 |
1 files changed, 39 insertions, 7 deletions
diff --git a/lisp/vc/vc-hg.el b/lisp/vc/vc-hg.el index 18667117714..feec015e52a 100644 --- a/lisp/vc/vc-hg.el +++ b/lisp/vc/vc-hg.el @@ -93,7 +93,7 @@ ;; - clear-headers () ?? ;; - delete-file (file) TEST IT ;; - rename-file (old new) OK -;; - find-file-hook () PROBABLY NOT NEEDED +;; - find-file-hook () added for bug#10709 ;; 2) Implement Stefan Monnier's advice: ;; vc-hg-registered and vc-hg-state @@ -152,7 +152,7 @@ If nil, use the value of `vc-diff-switches'. If t, use no switches." (2 'change-log-list) (3 'change-log-name) (4 'change-log-date))) - "Mercurial log template for `vc-print-root-log'. + "Mercurial log template for `vc-hg-print-log' short format. This should be a list (TEMPLATE REGEXP KEYWORDS), where TEMPLATE is the \"--template\" argument string to pass to Mercurial, REGEXP is a regular expression matching the resulting Mercurial @@ -176,7 +176,7 @@ highlighting the Log View buffer." ;;;###autoload "Return non-nil if FILE is registered with hg." ;;;###autoload (if (vc-find-root file ".hg") ; short cut ;;;###autoload (progn -;;;###autoload (load "vc-hg") +;;;###autoload (load "vc-hg" nil t) ;;;###autoload (vc-hg-registered file)))) ;; Modeled after the similar function in vc-bzr.el @@ -246,7 +246,10 @@ highlighting the Log View buffer." :group 'vc-hg) (defun vc-hg-print-log (files buffer &optional shortlog start-revision limit) - "Get change log associated with FILES." + "Print commit log associated with FILES into specified BUFFER. +If SHORTLOG is non-nil, use a short format based on `vc-hg-root-log-format'. +If START-REVISION is non-nil, it is the newest revision to show. +If LIMIT is non-nil, show no more than this many entries." ;; `vc-do-command' creates the buffer, but we need it before running ;; the command. (vc-setup-buffer buffer) @@ -257,7 +260,7 @@ highlighting the Log View buffer." buffer (apply 'vc-hg-command buffer 0 files "log" (nconc - (when start-revision (list (format "-r%s:" start-revision))) + (when start-revision (list (format "-r%s:0" start-revision))) (when limit (list "-l" (format "%s" limit))) (when shortlog (list "--template" (car vc-hg-root-log-format))) vc-hg-log-switches))))) @@ -357,7 +360,7 @@ Optional arg REVISION is a revision to annotate from." ;;215 Wed Jun 20 21:22:58 2007 -0700 foo.c: CONTENTS ;; i.e. VERSION_NUMBER DATE FILENAME: CONTENTS (defconst vc-hg-annotate-re - "^[ \t]*\\([0-9]+\\) \\(.\\{30\\}\\)\\(?:\\(: \\)\\|\\(?: +\\(.+\\): \\)\\)") + "^[ \t]*\\([0-9]+\\) \\(.\\{30\\}\\)\\(?:\\(: \\)\\|\\(?: +\\([^:\n]+\\(?::\\(?:[^: \n][^:\n]*\\)?\\)*\\): \\)\\)") (defun vc-hg-annotate-time () (when (looking-at vc-hg-annotate-re) @@ -384,7 +387,7 @@ Optional arg REVISION is a revision to annotate from." (let ((newrev (1+ (string-to-number rev))) (tip-revision (with-temp-buffer - (vc-hg-command t 0 nil "tip") + (vc-hg-command t 0 nil "tip" "--style=default") (goto-char (point-min)) (re-search-forward "^changeset:[ \t]*\\([0-9]+\\):") (string-to-number (match-string-no-properties 1))))) @@ -464,6 +467,35 @@ REV is the revision to check out into WORKFILE." (vc-hg-command t 0 file "cat" "-r" rev) (vc-hg-command t 0 file "cat"))))) +(defun vc-hg-resolve-when-done () + "Call \"hg resolve -m\" if the conflict markers have been removed." + (save-excursion + (goto-char (point-min)) + (unless (re-search-forward "^<<<<<<< " nil t) + (vc-hg-command nil 0 buffer-file-name "resolve" "-m") + ;; Remove the hook so that it is not called multiple times. + (remove-hook 'after-save-hook 'vc-hg-resolve-when-done t)))) + +(defun vc-hg-find-file-hook () + (when (and buffer-file-name + (file-exists-p (concat buffer-file-name ".orig")) + ;; Hg does not seem to have a "conflict" status, eg + ;; hg http://bz.selenic.com/show_bug.cgi?id=2724 + (memq (vc-file-getprop buffer-file-name 'vc-state) + '(edited conflict)) + ;; Maybe go on to check that "hg resolve -l" says "U"? + ;; If "hg resolve -l" says there's a conflict but there are no + ;; conflict markers, it's not clear what we should do. + (save-excursion + (goto-char (point-min)) + (re-search-forward "^<<<<<<< " nil t))) + ;; Hg may not recognize "conflict" as a state, but we can do better. + (vc-file-setprop buffer-file-name 'vc-state 'conflict) + (smerge-start-session) + (add-hook 'after-save-hook 'vc-hg-resolve-when-done nil t) + (message "There are unresolved conflicts in this file"))) + + ;; Modeled after the similar function in vc-bzr.el (defun vc-hg-workfile-unchanged-p (file) (eq 'up-to-date (vc-hg-state file))) |