X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/0c3f76c6335de0a2d44db37c9ddf953654ca7f32..d8462361f2d087d6f7c745305c61a266843ee19c:/lisp/vc/vc-hg.el?ds=sidebyside diff --git a/lisp/vc/vc-hg.el b/lisp/vc/vc-hg.el index 7099defb37..c841dfcdf5 100644 --- a/lisp/vc/vc-hg.el +++ b/lisp/vc/vc-hg.el @@ -1,6 +1,6 @@ ;;; vc-hg.el --- VC backend for the mercurial version control system -*- lexical-binding: t -*- -;; Copyright (C) 2006-2014 Free Software Foundation, Inc. +;; Copyright (C) 2006-2015 Free Software Foundation, Inc. ;; Author: Ivan Kanis ;; Maintainer: emacs-devel@gnu.org @@ -47,7 +47,6 @@ ;; - dir-extra-headers (dir) OK ;; - dir-printer (fileinfo) OK ;; * working-revision (file) OK -;; - latest-on-branch-p (file) ?? ;; * checkout-model (files) OK ;; - mode-line-string (file) NOT NEEDED ;; STATE-CHANGING FUNCTIONS @@ -60,7 +59,6 @@ ;; * find-revision (file rev buffer) OK ;; * checkout (file &optional rev) OK ;; * revert (file &optional contents-done) OK -;; - rollback (files) ?? PROBABLY NOT NEEDED ;; - merge (file rev1 rev2) NEEDED ;; - merge-news (file) NEEDED ;; - steal-lock (file &optional revision) NOT NEEDED @@ -133,6 +131,17 @@ If nil, use the value of `vc-diff-switches'. If t, use no switches." :version "23.1" :group 'vc-hg) +(defcustom vc-hg-annotate-switches nil + "String or list of strings specifying switches for hg annotate under VC. +If nil, use the value of `vc-annotate-switches'. If t, use no +switches." + :type '(choice (const :tag "Unspecified" nil) + (const :tag "None" t) + (string :tag "Argument String") + (repeat :tag "Argument List" :value ("") string)) + :version "25.1" + :group 'vc-hg) + (defcustom vc-hg-program "hg" "Name of the Mercurial executable (excluding any arguments)." :type 'string @@ -188,6 +197,7 @@ highlighting the Log View buffer." (defun vc-hg-state (file) "Hg-specific version of `vc-state'." + (setq file (expand-file-name file)) (let* ((status nil) (default-directory (file-name-directory file)) @@ -212,19 +222,20 @@ highlighting the Log View buffer." ;; Some problem happened. E.g. We can't find an `hg' ;; executable. (error nil))))))) - (when (eq 0 status) - (when (null (string-match ".*: No such file or directory$" out)) - (let ((state (aref out 0))) - (cond - ((eq state ?=) 'up-to-date) - ((eq state ?A) 'added) - ((eq state ?M) 'edited) - ((eq state ?I) 'ignored) - ((eq state ?R) 'removed) - ((eq state ?!) 'missing) - ((eq state ??) 'unregistered) - ((eq state ?C) 'up-to-date) ;; Older mercurial versions use this. - (t 'up-to-date))))))) + (when (and (eq 0 status) + (> (length out) 0) + (null (string-match ".*: No such file or directory$" out))) + (let ((state (aref out 0))) + (cond + ((eq state ?=) 'up-to-date) + ((eq state ?A) 'added) + ((eq state ?M) 'edited) + ((eq state ?I) 'ignored) + ((eq state ?R) 'removed) + ((eq state ?!) 'missing) + ((eq state ??) 'unregistered) + ((eq state ?C) 'up-to-date) ;; Older mercurial versions use this. + (t 'up-to-date)))))) (defun vc-hg-working-revision (file) "Hg-specific version of `vc-working-revision'." @@ -313,7 +324,7 @@ If LIMIT is non-nil, show no more than this many entries." (autoload 'vc-switches "vc") -(defun vc-hg-diff (files &optional async oldvers newvers buffer) +(defun vc-hg-diff (files &optional oldvers newvers buffer async) "Get a difference report using hg between two revisions of FILES." (let* ((firstfile (car files)) (working (and firstfile (vc-working-revision firstfile)))) @@ -358,8 +369,9 @@ If LIMIT is non-nil, show no more than this many entries." (defun vc-hg-annotate-command (file buffer &optional revision) "Execute \"hg annotate\" on FILE, inserting the contents in BUFFER. Optional arg REVISION is a revision to annotate from." - (vc-hg-command buffer 0 file "annotate" "-d" "-n" "--follow" - (when revision (concat "-r" revision)))) + (apply #'vc-hg-command buffer 0 file "annotate" "-d" "-n" "--follow" + (append (vc-switches 'hg 'annotate) + (if revision (list (concat "-r" revision)))))) (declare-function vc-annotate-convert-time "vc-annotate" (time)) @@ -613,9 +625,11 @@ REV is the revision to check out into WORKFILE." (declare-function vc-set-async-update "vc-dispatcher" (process-buffer)) (defun vc-hg-dir-status-files (dir files update-function) - (apply 'vc-hg-command (current-buffer) 'async dir "status" "-mardui" "-C" files) + (apply 'vc-hg-command (current-buffer) 'async dir "status" + (concat "-mardu" (if files "i")) + "-C" files) (vc-run-delayed - (vc-hg-after-dir-status update-function))) + (vc-hg-after-dir-status update-function))) (defun vc-hg-dir-extra-header (name &rest commands) (concat (propertize name 'face 'font-lock-type-face)