summary refs log tree commit diff
path: root/emacs/elisp/my-git-extra.el
blob: 30fff784d310a8b60e7c37a00db142b1c3c0042a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
;;; my-git-extra.el --- Extra functions to work with git
;;; Commentary:
;;; Code:

(require 'magit)
(require 'git-link)

(defun my/clone-repo (url)
  "Clone a repository in the workspace using URL."
  (interactive "sURL:")
  (let* ((repo-name (magit-clone--url-to-name url))
         (target-dir (concat  "~/workspace/" repo-name)))
    (magit-clone-regular url target-dir nil)))

(defun my/sg-instance (hostname)
  "Return the base URL for a sourcegraph instance based on HOSTNAME."
  (cond ((string-match "cl\.fcuny\.net" hostname) (format "cs.fcuny.xyz/%s" hostname))
        (t (format "sourcegraph.rbx.com/%s" hostname))))

(defun my/git-link-sourcegraph (hostname dirname filename _branch commit start end)
  "Create a link to sourcegraph given a HOSTNAME DIRNAME FILENAME _BRANCH COMMIT START and END."
  (let ((sg-base-url (my/sg-instance hostname))
        ;; Use the default branch of the repository instead of the
        ;; current one (we might be on a feature branch that is not
        ;; available on the remote).
        (main-branch (magit-main-branch))
        ;; repositories cloned with gerrit have a "a/" prefix which we
        ;; need to remove, as it's not part of the repository name in
        ;; sourcegraph.
        (dirname (replace-regexp-in-string "a\/" "" dirname)))
    (git-link-sourcegraph sg-base-url dirname filename main-branch commit start end)))

(defun my/git-link-commit-sourcegraph (hostname dirname commit)
  "Create the link to sourcegraph given a HOSTNAME DIRNAME and COMMIT."
  (let ((sg-base-url (my/sg-instance hostname))
        (dirname (replace-regexp-in-string "a\/" "" dirname)))
    (git-link-commit-sourcegraph sg-base-url dirname commit)))

;; for work related repositories, open them in our instance of sourcegraph
(add-to-list 'git-link-remote-alist '("github\\.rbx\\.com" my/git-link-sourcegraph))
(add-to-list 'git-link-commit-remote-alist '("github\\.rbx\\.com" my/git-link-work-sourcegraph))

;; for personal code I use cgit and gerrit
(add-to-list 'git-link-remote-alist '("git\\.fcuny\\.net" my/git-link-sourcegraph))
(add-to-list 'git-link-remote-alist '("cl\\.fcuny\\.net" my/git-link-sourcegraph))
(add-to-list 'git-link-commit-remote-alist '("git\\.fcuny\\.net" my/git-link-commit-sourcegraph))
(add-to-list 'git-link-commit-remote-alist '("cl\\.fcuny\\.net" my/git-link-commit-sourcegraph))

(provide 'my-git-extra)
;;; my-git-extra.el ends here