branch: elpa/vc-fossil
commit 6eb44a204bcff59deea541c368a3e40929f8c9fc
Author: fifr <fifr>
Commit: fifr <fifr>

    Refactor next-revision and previous-revision commands.
---
 vc/el/vc-fossil.el | 36 ++++++++++++------------------------
 1 file changed, 12 insertions(+), 24 deletions(-)

diff --git a/vc/el/vc-fossil.el b/vc/el/vc-fossil.el
index 86c1344..f5add58 100644
--- a/vc/el/vc-fossil.el
+++ b/vc/el/vc-fossil.el
@@ -338,18 +338,12 @@ If REV is specified, annotate that revision."
   "Fossil specific version of the `vc-previous-revision'."
   (if file
       (with-temp-buffer
-        (let ((found (not rev))
-              (newver nil))
-          (vc-fossil-command t 0 (file-truename file) "finfo" "-l" "-b")
-          ;; (vc-fossil--call "fossil" "finfo" "-l" "-b" file)
-          (goto-char (point-min))
-          (while (not (eobp))
-            (let* ((line (buffer-substring-no-properties (point) 
(line-end-position)))
-                   (version (car (split-string line))))
-              (setq newver (or newver (and found version)))
-              (setq found  (string= version rev)))
-            (forward-line))
-          newver))
+        (vc-fossil-command t 0 (file-truename file) "finfo" "-l" "-b")
+        (goto-char (point-min))
+        (and (re-search-forward (concat "^" (regexp-quote rev)))
+             (zerop (forward-line))
+             (looking-at "^\\([0-9a-zA-Z]+\\)")
+             (match-string 1)))
     (let ((info (vc-fossil--run "info" rev)))
       (and (string-match "parent: *\\([0-9a-fA-F]+\\)" info)
            (match-string 1 info)))))
@@ -358,18 +352,12 @@ If REV is specified, annotate that revision."
   "Fossil specific version of the `vc-previous-revision'."
   (if file
       (with-temp-buffer
-        (let ((found (not rev))
-              (oldver nil))
-          (vc-fossil-command t 0 (file-truename file) "finfo" "-l" "-b")
-          ;; (vc-fossil--call "fossil" "finfo" "-l" "-b" file)
-          (goto-char (point-min))
-          (while (not (eobp))
-            (let* ((line (buffer-substring-no-properties (point) 
(line-end-position)))
-                   (version (car (split-string line))))
-              (setq found  (string= version rev))
-              (setq oldver (or oldver found version)))
-            (forward-line))
-          oldver))
+        (vc-fossil-command t 0 (file-truename file) "finfo" "-l" "-b")
+        (goto-char (point-min))
+        (and (re-search-forward (concat "^" (regexp-quote rev)))
+             (zerop (forward-line -1))
+             (looking-at "^\\([0-9a-zA-Z]+\\)")
+             (match-string 1)))
     (let ((info (vc-fossil--run "info" rev)))
       (and (string-match "child: *\\([0-9a-fA-F]+\\)" info)
            (match-string 1 info)))))

Reply via email to