;;; my-magit.el -- Extensions for magit -*- lexical-binding: t -*- ;; Copyright (C) 2023 Free Software Foundation. ;; Author: Yuchen Pei ;; Package-Requires: ((emacs "28.2")) ;; This file is part of dotfiles. ;; dotfiles is free software: you can redistribute it and/or modify it under ;; the terms of the GNU Affero General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; dotfiles is distributed in the hope that it will be useful, but WITHOUT ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General ;; Public License for more details. ;; You should have received a copy of the GNU Affero General Public ;; License along with dotfiles. If not, see . ;;; Commentary: ;; Extensions for magit. ;;; Code: (require 'magit) (require 'my-project) (require 'org) (defun my-magit-clone-org-source (arg) (interactive "P") (let* ((url (or (org-entry-get (point) "Source") (org-entry-get (point) "Website"))) (default-base-dir (alist-get "3p" my-projects-root-dirs nil nil 'string=)) (default-name (progn (string-match "^.*/\\(.*?\\)\\(\\.git\\)?$" url) (match-string 1 url))) (dir (read-file-name (if arg "Clone to: " "Shallow clone to: ") (concat default-base-dir "/") nil nil default-name))) (if arg (magit-clone-regular url dir nil) (magit-clone-shallow url dir nil 1)) (org-set-property "Local-source" (format "" dir)))) (defun my-project-magit-at () (interactive) (magit-status (my-project-read-project-root))) ;; override `magit-status' to allow build dir and src dir distinction ;; FIXME: there ought to be a better solution to do project things ;; from the builddir (defun my-magit-status () (interactive) (if (magit-toplevel) (magit-status) (magit-status (replace-regexp-in-string "/build\\>.*" "/src" default-directory)))) (defun my-magit-ignore-other-worktrees (rev-and-args) "Add --ignore-other-worktrees to the second element of REV-AND-ARGS. For use as a :filter-args advice" (pcase-let ((`(,revision ,args) rev-and-args)) (list revision (cons "--ignore-other-worktrees" args)))) (provide 'my-magit) ;;; my-magit.el ends here