;;; vc-hg.el --- VC backend for the mercurial version control system
-;; Copyright (C) 2006, 2007, 2008 Free Software Foundation, Inc.
+;; Copyright (C) 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
;; Author: Ivan Kanis
;; Keywords: tools
;; - state-heuristic (file) NOT NEEDED
;; - dir-status (dir update-function) OK
;; - dir-status-files (dir files ds uf) OK
-;; - dir-extra-headers (dir) OK
-;; - dir-printer (fileinfo) OK
+;; - dir-extra-headers (dir) OK
+;; - dir-printer (fileinfo) OK
;; * working-revision (file) OK
;; - latest-on-branch-p (file) ??
;; * checkout-model (files) OK
;; - annotate-current-time () NOT NEEDED
;; - annotate-extract-revision-at-line () OK
;; TAG SYSTEM
-;; - create-tag (dir name branchp) NEEDED
-;; - retrieve-tag (dir name update) NEEDED
+;; - create-tag (dir name branchp) NEEDED
+;; - retrieve-tag (dir name update) NEEDED
;; MISCELLANEOUS
;; - make-version-backups-p (file) ??
;; - repository-hostname (dirname) ??
;;; Customization options
-(defcustom vc-hg-program "hg"
- "Name of the Hg executable."
- :type 'string
- :version "23.1"
- :group 'vc)
-
(defcustom vc-hg-global-switches nil
- "*Global switches to pass to any Hg command."
+ "Global switches to pass to any Hg command."
:type '(choice (const :tag "None" nil)
(string :tag "Argument String")
- (repeat :tag "Argument List"
- :value ("")
- string))
+ (repeat :tag "Argument List" :value ("") string))
:version "22.2"
:group 'vc)
-(defcustom vc-hg-diff-switches
- t ; Hg doesn't support common args like -u
- "String or list of strings specifying extra switches for Hg diff under VC.
-If nil, use the value of `vc-diff-switches'.
-If you want to force an empty list of arguments, use t."
+(defcustom vc-hg-diff-switches t ; Hg doesn't support common args like -u
+ "String or list of strings specifying switches for Hg diff under VC.
+If nil, use the value of `vc-diff-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))
+ (repeat :tag "Argument List" :value ("") string))
:version "23.1"
:group 'vc)
(condition-case nil
;; Ignore all errors.
(call-process
- vc-hg-program nil t nil
- "--cwd" (file-name-directory file)
+ "hg" nil t nil "--cwd" (file-name-directory file)
"status" "-A" (file-name-nondirectory file))
;; Some problem happened. E.g. We can't find an `hg'
;; executable.
(condition-case nil
;; Ignore all errors.
(call-process
- vc-hg-program nil t nil
- "--cwd" (file-name-directory file)
+ "hg" nil t nil "--cwd" (file-name-directory file)
"log" "-l1" (file-name-nondirectory file))
;; Some problem happened. E.g. We can't find an `hg'
;; executable.
(defun vc-hg-diff (files &optional oldvers newvers buffer)
"Get a difference report using hg between two revisions of FILES."
(let* ((firstfile (car files))
+ (cwd (if firstfile (file-name-directory firstfile)
+ (expand-file-name default-directory)))
(working (and firstfile (vc-working-revision firstfile))))
(when (and (equal oldvers working) (not newvers))
(setq oldvers nil))
(when (and (not oldvers) newvers)
(setq oldvers working))
(apply #'vc-hg-command (or buffer "*vc-diff*") nil
- (mapcar (lambda (file) (file-name-nondirectory file)) files)
- "--cwd" (or (when firstfile (file-name-directory firstfile))
- (expand-file-name default-directory))
+ (mapcar (lambda (file) (file-relative-name file cwd)) files)
+ "--cwd" cwd
"diff"
(append
- (vc-switches (if vc-hg-diff-switches 'hg) 'diff)
+ (vc-switches 'hg 'diff)
(when oldvers
(if newvers
(list "-r" oldvers "-r" newvers)
(defun vc-hg-command (buffer okstatus file-or-list &rest flags)
"A wrapper around `vc-do-command' for use in vc-hg.el.
-The difference to vc-do-command is that this function always invokes
-`vc-hg-program', and that it passes `vc-hg-global-switches' to it before FLAGS."
- (apply 'vc-do-command (or buffer "*vc*") okstatus vc-hg-program file-or-list
+The difference to vc-do-command is that this function always invokes `hg',
+and that it passes `vc-hg-global-switches' to it before FLAGS."
+ (apply 'vc-do-command (or buffer "*vc*") okstatus "hg" file-or-list
(if (stringp vc-hg-global-switches)
(cons vc-hg-global-switches flags)
(append vc-hg-global-switches