+2007-07-05 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * vc-hg.el (vc-hg-internal-status): Inline in `vc-hg-state', the
+ only caller, and delete.
+ (vc-hg-state): Deal with exceptions and only parse the output on
+ successful return.
+
+ * vc-hg.el (vc-hg-internal-log): Inline in
+ `vc-hg-workfile-version', the only caller, and delete.
+ (vc-hg-workfile-version): Deal with exceptions and only parse the
+ output on successful return.
+
2007-07-04 Jay Belanger <jay.p.belanger@gmail.com>
* calculator.el (calculator-expt): Use more cases to determine
(defun vc-hg-state (file)
"Hg-specific version of `vc-state'."
- (let ((out (vc-hg-internal-status file)))
- (if (eq 0 (length out)) 'up-to-date
- (let ((state (aref out 0)))
- (cond
- ((eq state ?M) 'edited)
- ((eq state ?A) 'edited)
- ((eq state ?P) 'needs-patch)
- ((eq state ??) nil)
- (t 'up-to-date))))))
+ (let*
+ ((status nil)
+ (out
+ (with-output-to-string
+ (with-current-buffer
+ standard-output
+ (setq status
+ (condition-case nil
+ ;; Ignore all errors.
+ (call-process
+ "hg" nil t nil "--cwd" (file-name-directory file)
+ "status" (file-name-nondirectory file))
+ ;; Some problem happened. E.g. We can't find an `hg'
+ ;; executable.
+ (error nil)))))))
+ (when (eq 0 status)
+ (if (eq 0 (length out)) 'up-to-date
+ (let ((state (aref out 0)))
+ (cond
+ ((eq state ?M) 'edited)
+ ((eq state ?A) 'edited)
+ ((eq state ?P) 'needs-patch)
+ ((eq state ??) nil)
+ (t 'up-to-date)))))))
(defun vc-hg-workfile-version (file)
"Hg-specific version of `vc-workfile-version'."
- (let ((out (vc-hg-internal-log file)))
- (if (string-match "changeset: *\\([0-9]*\\)" out)
- (match-string 1 out)
- "0")))
+ (let*
+ ((status nil)
+ (out
+ (with-output-to-string
+ (with-current-buffer
+ standard-output
+ (setq status
+ (condition-case nil
+ ;; Ignore all errors.
+ (call-process
+ "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.
+ (error nil)))))))
+ (when (eq 0 status)
+ (if (string-match "changeset: *\\([0-9]*\\)" out)
+ (match-string 1 out)
+ "0"))))
;;; History functions
(defun vc-hg-checkout-model (file)
'implicit)
+;; Modelled after the similar function in vc-bzr.el
+(defun vc-hg-revert (file &optional contents-done)
+ (unless contents-done
+ (with-temp-buffer (vc-hg-command t nil file "revert"))))
+
;;; Internal functions
(defun vc-hg-command (buffer okstatus file &rest flags)
(append vc-hg-global-switches
flags))))
-(defun vc-hg-internal-log (file &optional buffer)
- "Return log of FILE."
- (with-output-to-string
- (with-current-buffer
- standard-output
- (call-process
- "hg" nil t nil "--cwd" (file-name-directory file)
- "log" "-l1" (file-name-nondirectory file)))))
-
-(defun vc-hg-internal-status(file)
- "Return status of FILE."
- (with-output-to-string
- (with-current-buffer
- standard-output
- (call-process
- "hg" nil t nil "--cwd" (file-name-directory file)
- "status" (file-name-nondirectory file)))))
-
(provide 'vc-hg)
;;; vc-hg.el ends here