[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