branch: externals/vc-got
commit d577c763aa927e6842b2664ea9fdc2ffbe4d096b
Author: Timo Myyrä <timo.my...@bittivirhe.fi>
Commit: Omar Polo <o...@omarpolo.com>

    rewrite most of vc-got-call uses to use vc-got-command
    
    benefit of this is better file argument handling. Some commands left to
    use vc-got--call as using vc-got-command was too "chatty".
    
    while at it fix or add some comments.
---
 vc-got.el | 125 ++++++++++++++++++++++++++++----------------------------------
 1 file changed, 56 insertions(+), 69 deletions(-)

diff --git a/vc-got.el b/vc-got.el
index 6d4ec8f9f1..d3b901e1ee 100755
--- a/vc-got.el
+++ b/vc-got.el
@@ -230,14 +230,13 @@ The output will be placed in the current buffer."
 (defun vc-got--add (files)
   "Add FILES to got, passing `vc-register-switches' to the command invocation."
   (with-temp-buffer
-    (vc-got--call "add" vc-register-switches "--" files)))
+    (vc-got-command t 0 files "add" vc-register-switches)))
 
 (defun vc-got--info (path)
   "Execute got info in the worktree of PATH in the current buffer."
-  (let* ((process-file-side-effects nil))
+  (let (process-file-side-effects)
     (vc-got-with-worktree path
-      (zerop (save-excursion
-               (vc-got--call "info" "--" path))))))
+      (vc-got-command t 0 path "info"))))
 
 (defun vc-got--log (&optional path limit start-commit stop-commit
                               search-pattern reverse include-diff)
@@ -260,22 +259,19 @@ worktree."
                           "-s"
                         "-S")))
     (vc-got-with-worktree (or path default-directory)
-      (when (zerop
-             (save-excursion
-               (vc-got--call "log"
-                             (and limit (list "-l" (format "%s" limit)))
+      (save-excursion
+        (apply #'vc-got-command t 0 path "log"
+               (mapcan (lambda (x)
+                         (if (listp x) x nil))
+                       (list (and limit (list "-l" (format "%s" limit)))
                              (and start-commit (list "-c" start-commit))
                              (and stop-commit (list "-x" stop-commit))
                              (and search-pattern (list search-flag
                                                        search-pattern))
                              (and reverse '("-R"))
-                             (and include-diff '("-p"))
-                             ;; "--"
-                             path)))
-        (save-excursion
-          (delete-matching-lines
-           "^-----------------------------------------------$")
-          t)))))
+                             (and include-diff '("-p")))))
+          t))))
+
 
 (defun vc-got--status (status-codes dir-or-file &optional files)
   "Return a list of lists (FILE STATUS STAGE-STATUS).
@@ -292,14 +288,12 @@ files)."
                                  (file-name-directory dir-or-file))))
            (root (vc-got-root default-directory))
            (process-file-side-effects))
-      (when (zerop (vc-got--call "status"
-                                 (and status-codes (list "-s" status-codes))
-                                 "--"
-                                 (or files dir-or-file)))
-        (goto-char (point-min))
-        (cl-loop until (eobp)
-                 collect (vc-got--parse-status-line root)
-                 do (forward-line))))))
+      (apply #'vc-got-command t 0 (or files dir-or-file)
+             "status" (and status-codes (list "-s" status-codes)))
+      (goto-char (point-min))
+      (cl-loop until (eobp)
+               collect (vc-got--parse-status-line root)
+               do (forward-line))))))
 
 (defun vc-got--parse-status-line (root)
   "Parse a line of the the output of status.
@@ -339,25 +333,25 @@ ROOT is the root of the repo."
 (defun vc-got--cat (commit obj-id)
   "Execute got cat -c COMMIT OBJ-ID in the current buffer."
   (let (process-file-side-effects)
-    (zerop (vc-got--call "cat" "-c" commit obj-id))))
+    (vc-got-command t 0 nil "cat" "-c" commit obj-id)))
 
 (defun vc-got--revert (&rest files)
   "Execute got revert FILES."
   (vc-got-with-worktree (car files)
     (with-temp-buffer
-      (zerop (vc-got--call "revert" "--" files)))))
+      (vc-got-command t 0 files "revert"))))
 
 (defun vc-got--list-branches ()
   "Return an alist of (branch . commit)."
   (let (process-file-side-effects)
     (with-temp-buffer
-      (when (zerop (vc-got--call "branch" "-l"))
-        (let (alist)
-          (goto-char (point-min))
-          (while (re-search-forward "^\\*?[[:space:]]+\\(.+\\): 
\\([[:word:]]+\\)$"
-                                    nil t)
-            (push (cons (match-string 1) (match-string 2)) alist))
-          alist)))))
+      (vc-got-command t 0 nil "branch" "-l")
+      (let (alist)
+        (goto-char (point-min))
+        (while (re-search-forward "^\\*?[[:space:]]+\\(.+\\): 
\\([[:word:]]+\\)$"
+                                  nil t)
+          (push (cons (match-string 1) (match-string 2)) alist))
+        alist))))
 
 (defun vc-got--current-branch ()
   "Return the current branch."
@@ -369,7 +363,7 @@ ROOT is the root of the repo."
 (defun vc-got--integrate (branch)
   "Integrate BRANCH into the current one."
   (with-temp-buffer
-    (zerop (vc-got--call "integrate" branch))))
+    (vc-got-command t 0 nil "integrate" branch)))
 
 (defun vc-got--update (branch &optional paths)
   "Update to a different commit or BRANCH.
@@ -384,21 +378,20 @@ the specified PATHS."
 (defun vc-got--diff-files (files)
   "Compute the local modifications to FILES."
   (let (process-file-side-effects)
-    (zerop (vc-got--call "diff" (vc-switches 'got 'diff) "-P" "--"
-                         files))))
+    (vc-got-command t 0 files "diff" (vc-switches 'got 'diff) "-P")))
 
 (defun vc-got--diff-objects (obj1 obj2)
   "Diff the two objects OBJ1 and OBJ2.
 OBJ1 and OBJ2 are interpreted as a reference, tag name, or an
 object ID SHA1 hash."
   (let (process-file-side-effects)
-    (zerop (vc-got--call "diff" (vc-switches 'got 'diff) "--" obj1 obj2))))
+    (vc-got-command t 0 nil "diff" (vc-switches 'got 'diff) "--" obj1 obj2)))
 
 (defun vc-got--unstage (file-or-directory)
   "Unstage all the staged hunks at or within FILE-OR-DIRECTORY.
 If it's nil, unstage every staged changes across the entire work
 tree."
-  (zerop (vc-got--call "unstage" "--" file-or-directory)))
+  (vc-got-command t 0 file-or-directory "unstage"))
 
 (defun vc-got--remove (file &optional force keep-local)
   "Use got to remove FILE.
@@ -407,11 +400,9 @@ local modification.  If KEEP-LOCAL is non-nil keep the 
affected
 files on disk."
   (vc-got-with-worktree (or file default-directory)
     (with-temp-buffer
-      (zerop (vc-got--call "remove"
-                           (and force "-f")
-                           (and keep-local "-k")
-                           "--"
-                           file)))))
+      (vc-got-command t 0 file "remove"
+                      (and force "-f")
+                      (and keep-local "-k")))))
 
 (defun vc-got--ref ()
   "Return a list of all references."
@@ -422,20 +413,19 @@ files on disk."
         (table (list "HEAD")))
     (vc-got-with-worktree default-directory
       (with-temp-buffer
-        (when (zerop (vc-got--call "ref" "-l"))
-          (goto-char (point-min))
-          (while (re-search-forward re nil t)
-            (push (match-string 2) table))
-          table)))))
+        (vc-got-command t 0 nil "ref" "-l")
+        (goto-char (point-min))
+        (while (re-search-forward re nil t)
+          (push (match-string 2) table))
+        table))))
 
 (defun vc-got--branch (name)
   "Try to create and switch to the branch called NAME."
+  ;; TODO: does branch change files or does it require update
   (let (process-file-side-effects)
     (vc-got-with-worktree default-directory
       (with-temp-buffer
-        (or (zerop (vc-got--call "branch" "--" name))
-            (error "[vc-got] can't create branch %s: %s" name
-                   (buffer-string)))))))
+        (vc-got-command t 0 nil "branch" name)))))
 
 
 ;; Backend properties
@@ -472,6 +462,7 @@ files on disk."
       ;; Manually calling got status and checking the result inline to
       ;; avoid building the data structure in vc-got--status.
       (with-temp-buffer
+        ;; too noisy to use: (vc-got-command t nil file "status"))
         (when (zerop (vc-got--call "status" "--" file))
           (goto-char (point-min))
           (if (eobp)
@@ -491,7 +482,7 @@ files on disk."
 The builded result is given to the callback UPDATE-FUNCTION.  If
 FILES is nil, consider all the files in DIR."
   (let* ((fs (vc-got--dir-filter-files (or files (directory-files dir))))
-         ;; XXX: we call with files, wich will probably be nil on the
+         ;; XXX: we call with files, which will probably be nil on the
          ;; first run, so we catch deleted, missing and edited files
          ;; in subdirectories.
          (res (vc-got--status nil dir files))
@@ -606,13 +597,12 @@ Got uses an implicit checkout model for every file."
 (defun vc-got-checkin (files comment &optional _rev)
   "Commit FILES with COMMENT as commit message."
   (with-temp-buffer
-    (unless (zerop (vc-got--call "commit" "-m"
-                                 (log-edit-extract-headers
-                                  '(("Author" . "-A"))
-                                  comment)
-                                 "--"
-                                 files))
-      (error "[vc-got] can't commit: %s" (buffer-string)))))
+    (vc-got-command t 0 files
+                    "commit" "-m"
+                    (log-edit-extract-headers
+                     '(("Author" . "-A"))
+                     comment))))
+
 
 (defun vc-got-find-revision (file rev buffer)
   "Fill BUFFER with the content of FILE in the given revision REV."
@@ -805,10 +795,8 @@ revisions''; instead, like with git, you have tags and 
branches."
       ;; by got unless vc-parent-buffer points to a buffer managed by got.
       ;; investigate why this is needed.
       (setq-local vc-parent-buffer (find-file-noselect file))
-      (vc-got--call "blame"
-                    (when rev (list "-c" rev))
-                    "--"
-                    file))))
+      (apply #'vc-got-command t 0 file "blame"
+             (when rev (list "-c" rev))))))
 
 (defconst vc-got--annotate-re
   (concat "^[0-9]\\{1,\\}) " ; line number followed by )
@@ -858,19 +846,18 @@ Creates the TAG using the content of the current buffer."
   (let ((msg (buffer-substring-no-properties (point-min)
                                              (point-max))))
     (with-temp-buffer
-      (unless (zerop (vc-got--call "tag"
-                                   "-m"
-                                   (log-edit-extract-headers nil msg)
-                                   "--"
-                                   tag))
-        (error "[vc-got] can't create tag %s: %s" tag (buffer-string))))))
+      (vc-got-command t 0 nil "tag"
+                      "-m"
+                      (log-edit-extract-headers nil msg)
+                      "--"
+                      tag))))
 
 (defun vc-got-create-tag (_dir name branchp)
   "Attach the tag NAME to the state of the worktree.
 DIR is ignored (tags are global, not per-file).  If BRANCHP is
 true, NAME should create a new branch otherwise it will pop-up a
 `log-edit' buffer to provide the tag message."
-  ;; TODO: vc reccomends to ensure that all the file are in a clean
+  ;; TODO: vc recommends to ensure that all of the files are in a clean
   ;; state, but is it useful?
   (if branchp
       (vc-got--branch name)

Reply via email to