From efe77c1c7e77274eb743e9196d99f394927b3000 Mon Sep 17 00:00:00 2001 From: Protesilaos Stavrou Date: Mon, 1 Sep 2025 20:04:45 +0300 Subject: [PATCH] emacs: add command prot-simple-update-all-my-package-repositories --- emacs/.emacs.d/prot-emacs.org | 22 ++++++++++++++++++++++ emacs/.emacs.d/prot-lisp/prot-simple.el | 22 ++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/emacs/.emacs.d/prot-emacs.org b/emacs/.emacs.d/prot-emacs.org index b6c0d504..1d6c1c23 100644 --- a/emacs/.emacs.d/prot-emacs.org +++ b/emacs/.emacs.d/prot-emacs.org @@ -17482,6 +17482,28 @@ VARIANT is either `dark' or `light'." (interactive (list (prot-simple--list-accessible-colors-prompt))) (list-colors-display (prot-simple-accessible-colors variant))) +;;;###autoload +(defun prot-simple-update-all-my-package-repositories () + "Pull or clone all `prot-emacs-my-packages'." + (unless (executable-find "git") + (user-error "Cannot find git program; install it first or add it to the $PATH; aborting")) + (unless (getenv "SSH_AUTH_SOCK") + (user-error "Cannot find $SSH_AUTH_SOCK; check your SSH connection; aborting")) + (dolist (package prot-emacs-my-packages) + (condition-case error-data + (let* ((common-directory (expand-file-name "~/Git/Projects/")) + (default-directory (expand-file-name (symbol-name package) common-directory))) + (if (file-directory-p default-directory) + (shell-command-to-string "git pull") + (let ((default-directory common-directory)) + (shell-command-to-string (format "git clone git@github.com:protesilaos/%s" package))))) + (:success + (message "Updated %s repository" package)) + ((error user-error) + (message "The package returned error data: %s" error-data)) + (quit + (message "Aborted by the user"))))) + ;;;; Global minor mode to override key maps (defvar prot-simple-override-mode-map (make-sparse-keymap) diff --git a/emacs/.emacs.d/prot-lisp/prot-simple.el b/emacs/.emacs.d/prot-lisp/prot-simple.el index e4471baa..03337967 100644 --- a/emacs/.emacs.d/prot-lisp/prot-simple.el +++ b/emacs/.emacs.d/prot-lisp/prot-simple.el @@ -1032,6 +1032,28 @@ VARIANT is either `dark' or `light'." (interactive (list (prot-simple--list-accessible-colors-prompt))) (list-colors-display (prot-simple-accessible-colors variant))) +;;;###autoload +(defun prot-simple-update-all-my-package-repositories () + "Pull or clone all `prot-emacs-my-packages'." + (unless (executable-find "git") + (user-error "Cannot find git program; install it first or add it to the $PATH; aborting")) + (unless (getenv "SSH_AUTH_SOCK") + (user-error "Cannot find $SSH_AUTH_SOCK; check your SSH connection; aborting")) + (dolist (package prot-emacs-my-packages) + (condition-case error-data + (let* ((common-directory (expand-file-name "~/Git/Projects/")) + (default-directory (expand-file-name (symbol-name package) common-directory))) + (if (file-directory-p default-directory) + (shell-command-to-string "git pull") + (let ((default-directory common-directory)) + (shell-command-to-string (format "git clone git@github.com:protesilaos/%s" package))))) + (:success + (message "Updated %s repository" package)) + ((error user-error) + (message "The package returned error data: %s" error-data)) + (quit + (message "Aborted by the user"))))) + ;;;; Global minor mode to override key maps (defvar prot-simple-override-mode-map (make-sparse-keymap)