From 1fd3aa4b3afe4064bcc78787b99f4fa336e4031d Mon Sep 17 00:00:00 2001 Message-ID: <1fd3aa4b3afe4064bcc78787b99f4fa336e4031d.1726751543.git.avityazev@disroot.org> From: Aleksandr Vityazev Date: Thu, 19 Sep 2024 16:11:31 +0300 Subject: [PATCH] Make vc-clone interactive * lisp/vc/vc.el (vc-clone): Make interactive. (vc--remotes-history): New defvar. --- lisp/vc/vc.el | 40 +++++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index 597a1622f5a..d3d3a302d45 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -3804,6 +3804,8 @@ vc-check-headers (interactive) (vc-call-backend (vc-backend buffer-file-name) 'check-headers)) +(defvar vc--remotes-history) + (defun vc-clone (remote &optional backend directory rev) "Clone repository REMOTE using version-control BACKEND, into DIRECTORY. If successful, return the string with the directory of the checkout; @@ -3815,19 +3817,31 @@ vc-clone backend in `vc-handled-backends' until one succeeds to clone REMOTE. If REV is non-nil, it indicates a specific revision to check out after cloning; the syntax of REV depends on what BACKEND accepts." - (setq directory (expand-file-name (or 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 rev)) - (catch 'ok - (dolist (backend vc-handled-backends) - (ignore-error vc-not-supported - (when-let ((res (vc-call-backend - backend 'clone - remote directory rev))) - (throw 'ok res))))))) + (interactive + (list (read-string "Remote: " nil 'vc--remotes-history) + (intern (completing-read "Backend: " vc-handled-backends nil t)) + (expand-file-name + (read-directory-name "Clone dir: ")) + (read-string "Revision (RET if not needed): "))) + (let ((directory (expand-file-name (or directory default-directory))) + (rev (unless (string-empty-p rev) rev))) + (setq directory + (if backend + (progn + (unless (memq backend vc-handled-backends) + (error "Unknown VC backend %s" backend)) + (vc-call-backend backend 'clone remote directory rev)) + (catch 'ok + (dolist (backend vc-handled-backends) + (ignore-error vc-not-supported + (when-let ((res (vc-call-backend + backend 'clone + remote directory rev))) + (throw 'ok res))))))) + (when (file-directory-p directory) + (if (called-interactively-p 'interactive) + (find-file directory) + directory)))) (declare-function log-view-current-tag "log-view" (&optional pos)) (defun vc-default-last-change (_backend file line) -- 2.46.0