From 76921742edfedbe0e01d468f298e901cf808bb0d Mon Sep 17 00:00:00 2001 From: Franck Cuny Date: Mon, 23 Aug 2021 19:39:43 -0700 Subject: emacs: git links to sourcegraph for work repo This article [1] shows how to use sourcegraph with the package `git-link'. However, it requires to modify the configuration of the repository to add a new remote named 'git-link'. This is inconvenient, and this can be automated. This change adds a function to automatically generate the remote URL when the remote origin of a repo is set to twitter.biz. We also add the configuration for our own gitea instance. [1] https://sideshowcoder.com/2020/07/02/opening-sourcegraph-from-emacs/ --- emacs/custom/fcuny-git.el | 44 ++++++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/emacs/custom/fcuny-git.el b/emacs/custom/fcuny-git.el index 340da9c..b85a9ea 100644 --- a/emacs/custom/fcuny-git.el +++ b/emacs/custom/fcuny-git.el @@ -84,34 +84,42 @@ :config (add-to-list 'forge-alist '("git.fcuny.net:222" "git.fcuny.net/api/v1" "git.fcuny.net" forge-gitea-repository))) -;; from https://sideshowcoder.com/2020/07/02/opening-sourcegraph-from-emacs/ -;; in a repo, add the following in .git/config: -;; -;; [git-link] -;; remote = mysourcegraph.sourcegraph -;; [remote "mysourcegraph.sourcegraph"] -;; url = https://sourcegraph.twitter.biz/gitpuppet.twitter.biz/puppet-twitter -;; (use-package git-link :ensure t + :bind (("C-c g l" . git-link) + ("C-c g a" . git-link-commit)) :config - (defun git-link-sourcegraph (hostname dirname filename _branch commit start end) - (let ((line-or-range (if end (format "%s-%s" start end) start))) + (defvar fcuny/map-git-remote-to-sg + '(("git.twitter.biz" "sourcegraph.twitter.biz/twitter.biz") + ("gitpuppet.twitter.biz" "sourcegraph.twitter.biz/gitpuppet.twitter.biz"))) + + (defun fcuny/get-sg-remote-from-hostname (hostname) + (nth 1 (assoc hostname fcuny/map-git-remote-to-sg))) + + (defun fcuny/git-link-work-sourcegraph (hostname dirname filename _branch commit start end) + (let ((line-or-range (if end (format "%s-%s" start end) start)) + (sg-base-url (fcuny/get-sg-remote-from-hostname hostname))) (format "https://%s/%s@%s/-/blob/%s#L%s" - hostname + sg-base-url dirname commit filename line-or-range))) - (defun git-link-commit-sourcegraph (hostname dirname commit) - (format "https://%s/%s/-/commit/%s" - hostname - dirname - commit)) + (defun fcuny/git-link-commit-work-sourcegraph (hostname dirname commit) + (let (sg-base-url (fcuny/get-sg-remote-from-hostname hostname)) + (format "https://%s/%s/-/commit/%s" + sg-base-url + dirname + commit))) + + ;; for work related repositories, open them in our instance of sourcegraph + (add-to-list 'git-link-remote-alist '("twitter" fcuny/git-link-work-sourcegraph)) + (add-to-list 'git-link-commit-remote-alist '("twitter" fcuny/git-link-commit-work-sourcegraph)) - (add-to-list 'git-link-remote-alist '("sourcegraph" git-link-sourcegraph)) - (add-to-list 'git-link-commit-remote-alist '("sourcegraph" git-link-commit-sourcegraph)) + ;; for personal code I use gitea, which is similar to codeberg + (add-to-list 'git-link-remote-alist '("git\\.fcuny\\.net" git-link-codeberg)) + (add-to-list 'git-link-commit-remote-alist '("git\\.fcuny\\.net" git-link-commit-codeberg)) (setq git-link-open-in-browser 't)) -- cgit 1.4.1