;;; vc-hg.el --- VC backend for the mercurial version control system
-;; Copyright (C) 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+;; Copyright (C) 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
;; Author: Ivan Kanis
;; Keywords: tools
;; - merge-news (file) NEEDED
;; - steal-lock (file &optional revision) NOT NEEDED
;; HISTORY FUNCTIONS
-;; * print-log (files buffer &optional shortlog) OK
+;; * print-log (files buffer &optional shortlog start-revision limit) OK
;; - log-view-mode () OK
;; - show-log-entry (revision) NOT NEEDED, DEFAULT IS GOOD
;; - comment-history (file) NOT NEEDED
(setq status
(condition-case nil
;; Ignore all errors.
- (process-file
+ (let ((process-environment
+ ;; Avoid localization of messages so we can parse the output.
+ (append (list "TERM=dumb" "LANGUAGE=C" "HGRC=") process-environment)))
+
+ (process-file
"hg" nil t nil
- "status" "-A" (file-relative-name file))
+ "status" "-A" (file-relative-name file)))
;; Some problem happened. E.g. We can't find an `hg'
;; executable.
(error nil)))))))
standard-output
(setq status
(condition-case nil
- ;; Ignore all errors.
- (process-file
- "hg" nil t nil
- "log" "-l1" (file-relative-name file))
+ (let ((process-environment
+ ;; Avoid localization of messages so we can parse the output.
+ (append (list "TERM=dumb" "LANGUAGE=C" "HGRC=")
+ process-environment)))
+ ;; Ignore all errors.
+ (process-file
+ "hg" nil t nil
+ "parent" "--template" "{rev}" (file-relative-name file)))
;; Some problem happened. E.g. We can't find an `hg'
;; executable.
(error nil)))))))
- (when (eq 0 status)
- (if (string-match "changeset: *\\([0-9]*\\)" out)
- (match-string 1 out)
- "0"))))
+ (when (eq 0 status) out)))
;;; History functions
(repeat :tag "Argument List" :value ("") string))
:group 'vc-hg)
-(defun vc-hg-print-log (files buffer &optional shortlog limit)
+(defun vc-hg-print-log (files buffer &optional shortlog start-revision limit)
"Get change log associated with FILES."
;; `vc-do-command' creates the buffer, but we need it before running
;; the command.
buffer
(apply 'vc-hg-command buffer 0 files "log"
(append
+ (when start-revision (list (format "-r%s:" start-revision)))
(when limit (list "-l" (format "%s" limit)))
(when shortlog '("--style" "compact"))
vc-hg-log-switches)))))
(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-relative-name file cwd)) files)
- "diff"
+ (apply #'vc-hg-command (or buffer "*vc-diff*") nil files "diff"
(append
(vc-switches 'hg 'diff)
(when oldvers