emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

feature/package+vc 077c9badf9 1/4: Add new command to clone a repository


From: Philip Kaludercic
Subject: feature/package+vc 077c9badf9 1/4: Add new command to clone a repository
Date: Mon, 14 Feb 2022 09:00:19 -0500 (EST)

branch: feature/package+vc
commit 077c9badf9322845a8d2911e48392fa8f4c5939c
Author: Philip Kaludercic <philipk@posteo.net>
Commit: Philip Kaludercic <philipk@posteo.net>

    Add new command to clone a repository
    
    * vc.el (vc-clone): Add command
---
 lisp/vc/vc.el | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el
index a6124acadd..fd0192fad2 100644
--- a/lisp/vc/vc.el
+++ b/lisp/vc/vc.el
@@ -568,6 +568,11 @@
 ;;   containing FILE-OR-DIR.  The optional REMOTE-NAME specifies the
 ;;   remote (in Git parlance) whose URL is to be returned.  It has
 ;;   only a meaning for distributed VCS and is ignored otherwise.
+;;
+;; - clone (remote directory)
+;;
+;;   Attempt to clone a REMOTE repository, into a local DIRECTORY.
+;;   Returns the symbol of the backend used if successful.
 
 ;;; Changes from the pre-25.1 API:
 ;;
@@ -3233,6 +3238,27 @@ to provide the `find-revision' operation instead."
   (interactive)
   (vc-call-backend (vc-backend buffer-file-name) 'check-headers))
 
+(defun vc-clone (backend remote &optional directory)
+  "Use BACKEND to clone REMOTE into DIRECTORY.
+If successful, returns the symbol of the backed used to clone.
+If BACKEND is nil, iterate through every known backend in
+`vc-handled-backends' until one succeeds."
+  (unless directory
+    (setq directory default-directory))
+  (if backend
+      (progn
+        (unless (memq backend vc-handled-backends)
+          (error "Unknown VC backend %s" backend))
+        (vc-call-backend backend 'clone remote directory)
+        backend)
+    (catch 'ok
+      (dolist (backend vc-handled-backends)
+        (ignore-error vc-not-supported
+          (when-let (res (vc-call-backend
+                          backend 'clone
+                          remote directory))
+            (throw 'ok backend)))))))
+
 
 
 ;; These things should probably be generally available



reply via email to

[Prev in Thread] Current Thread [Next in Thread]