From 4c575df367b4cee0d539d1ac5d9b26e45b156b96 Mon Sep 17 00:00:00 2001 From: Andreas Gerler Date: Fri, 24 Apr 2026 18:45:36 +0200 Subject: [PATCH] update git-link --- .../git-link-autoloads.el | 0 .../git-link-pkg.el | 6 +- .../git-link-transient.el | 0 .../git-link.el | 135 ++++++++++-------- 4 files changed, 81 insertions(+), 60 deletions(-) rename elpa/{git-link-20250214.1240 => git-link-20250812.1427}/git-link-autoloads.el (100%) rename elpa/{git-link-20250214.1240 => git-link-20250812.1427}/git-link-pkg.el (75%) rename elpa/{git-link-20250214.1240 => git-link-20250812.1427}/git-link-transient.el (100%) rename elpa/{git-link-20250214.1240 => git-link-20250812.1427}/git-link.el (91%) diff --git a/elpa/git-link-20250214.1240/git-link-autoloads.el b/elpa/git-link-20250812.1427/git-link-autoloads.el similarity index 100% rename from elpa/git-link-20250214.1240/git-link-autoloads.el rename to elpa/git-link-20250812.1427/git-link-autoloads.el diff --git a/elpa/git-link-20250214.1240/git-link-pkg.el b/elpa/git-link-20250812.1427/git-link-pkg.el similarity index 75% rename from elpa/git-link-20250214.1240/git-link-pkg.el rename to elpa/git-link-20250812.1427/git-link-pkg.el index b73e2ef2..cfa5a604 100644 --- a/elpa/git-link-20250214.1240/git-link-pkg.el +++ b/elpa/git-link-20250812.1427/git-link-pkg.el @@ -1,10 +1,10 @@ ;; -*- no-byte-compile: t; lexical-binding: nil -*- -(define-package "git-link" "20250214.1240" +(define-package "git-link" "20250812.1427" "Get the GitHub/Bitbucket/GitLab URL for a buffer location." '((emacs "24.3")) :url "http://github.com/sshaw/git-link" - :commit "8d0f98cf36f6b9c31285329b054ae77f9a3d9b33" - :revdesc "8d0f98cf36f6" + :commit "e4cfed05d110a6af07543d069f12e1894f553c2e" + :revdesc "e4cfed05d110" :keywords '("git" "vc" "github" "bitbucket" "gitlab" "sourcehut" "aws" "azure" "convenience") :authors '(("Skye Shaw" . "skye.shaw@gmail.com")) :maintainers '(("Skye Shaw" . "skye.shaw@gmail.com"))) diff --git a/elpa/git-link-20250214.1240/git-link-transient.el b/elpa/git-link-20250812.1427/git-link-transient.el similarity index 100% rename from elpa/git-link-20250214.1240/git-link-transient.el rename to elpa/git-link-20250812.1427/git-link-transient.el diff --git a/elpa/git-link-20250214.1240/git-link.el b/elpa/git-link-20250812.1427/git-link.el similarity index 91% rename from elpa/git-link-20250214.1240/git-link.el rename to elpa/git-link-20250812.1427/git-link.el index 5d285a6b..f81c575b 100644 --- a/elpa/git-link-20250214.1240/git-link.el +++ b/elpa/git-link-20250812.1427/git-link.el @@ -2,8 +2,8 @@ ;; Copyright (C) 2013-2022 Skye Shaw and others ;; Author: Skye Shaw -;; Package-Version: 20250214.1240 -;; Package-Revision: 8d0f98cf36f6 +;; Package-Version: 20250812.1427 +;; Package-Revision: e4cfed05d110 ;; Keywords: git, vc, github, bitbucket, gitlab, sourcehut, aws, azure, convenience ;; URL: http://github.com/sshaw/git-link ;; Package-Requires: ((emacs "24.3")) @@ -326,7 +326,10 @@ This can be used when custom deployments serve SSH access and the web interface under different host names. For example, if Git uses \"ssh.gitlab.company.com\" but the web interface is at \"gitlab.company.com\", add -`(\"ssh\\\\.gitlab\\\\.company\\\\.com\" . \"gitlab.company.com\")'." +`(\"ssh\\\\.gitlab\\\\.company\\\\.com\" . \"gitlab.company.com\")'. +By default this will create a link using the \\='https://\\=' scheme. +If you want \\='http://\\=' instead prefix the host with it: +`(\"ssh\\\\.gitlab\\\\.company\\\\.com\" . \"http://gitlab.company.com\")'." :type '(alist :key-type string :value-type string) :group 'git-link) @@ -421,10 +424,11 @@ Return nil, (defun git-link--parse-vc-revision (filename) "If FILENAME appears to be from `vc-revision-other-window' return (FILENAME . REVISION) otherwise nil." - (when (and (string-match "\\(.+\\)\\.~\\([^~]+\\)~$" filename) - (file-exists-p (match-string 1 filename))) - (cons (match-string 1 filename) - (match-string 2 filename)))) + (let ((default-directory (git-link--repo-root))) + (when (and (string-match "\\(.+\\)\\.~\\([^~]+\\)~$" filename) + (file-exists-p (match-string 1 filename))) + (cons (match-string 1 filename) + (match-string 2 filename))))) (defvar magit-buffer-file-name) @@ -451,7 +455,7 @@ return (FILENAME . REVISION) otherwise nil." (defun git-link--parse-remote (url) "Parse URL and return a list as (HOST DIR). DIR has no leading slash or `git' extension." (let (host path parsed) - (unless (string-match "^[a-zA-Z0-9]+://" url) + (unless (string-match "^[a-zA-Z0-9+]+://" url) (setq url (concat "ssh://" url))) (setq parsed (url-generic-parse-url url) @@ -589,20 +593,33 @@ return (FILENAME . REVISION) otherwise nil." link ) +(defun git-link--web-host (git-host) + "Determine the web host to use for GIT-HOST. + +The translation is based on `git-link-web-host-alist'. If there +is no entry for GIT-HOST in the list, it is returned unmodified. +If a WEB-HOST value does not already have a URL scheme, \\='https://\\=' +is prepended to it." + (let ((web-host (or (assoc-default git-host git-link-web-host-alist #'string-match-p) + git-host))) + (if (string-match-p "^[a-zA-Z][a-zA-Z0-9+.-]+://" web-host) + web-host + (concat "https://" web-host)))) + (defun git-link-codeberg (hostname dirname filename branch commit start end) - (format "https://%s/%s/src/%s/%s" - hostname - dirname - (or branch commit) - (concat filename - (when start - (concat "#" - (if end - (format "L%s-L%s" start end) - (format "L%s" start))))))) + (format "%s/%s/src/%s/%s" + hostname + dirname + (or branch (concat "commit/" commit)) + (concat filename + (when start + (concat "#" + (if end + (format "L%s-L%s" start end) + (format "L%s" start))))))) (defun git-link-gitlab (hostname dirname filename branch commit start end) - (format "https://%s/%s/-/blob/%s/%s" + (format "%s/%s/-/blob/%s/%s" hostname dirname (or branch commit) @@ -614,11 +631,11 @@ return (FILENAME . REVISION) otherwise nil." (format "L%s" start))))))) (defun git-link-github (hostname dirname filename branch commit start end) - (format "https://%s/%s/blob/%s/%s" - hostname - dirname - (or branch commit) - (concat filename + (format "%s/%s/blob/%s/%s" + hostname + dirname + (or branch commit) + (concat filename (when start (concat (if (git-link--should-render-plain filename) "?plain=1#" "#") (if end @@ -626,7 +643,7 @@ return (FILENAME . REVISION) otherwise nil." (format "L%s" start))))))) (defun git-link-googlesource (hostname dirname filename branch commit start _end) - (format "https://%s/%s/+/%s/%s" + (format "%s/%s/+/%s/%s" hostname dirname (or branch commit) @@ -636,7 +653,7 @@ return (FILENAME . REVISION) otherwise nil." )))) (defun git-link-azure (hostname dirname filename branch commit start end) - (format "https://%s/%s?path=%%2F%s&version=%s&line=%s&lineEnd=%s&lineStartColumn=1&lineEndColumn=9999&lineStyle=plain" + (format "%s/%s?path=%%2F%s&version=%s&line=%s&lineEnd=%s&lineStartColumn=1&lineEndColumn=9999&lineStyle=plain" hostname dirname filename @@ -645,7 +662,7 @@ return (FILENAME . REVISION) otherwise nil." (or end start ""))) (defun git-link-sourcehut (hostname dirname filename branch commit start end) - (format "https://%s/%s/tree/%s/%s" + (format "%s/%s/tree/%s/%s" hostname dirname (or branch commit) @@ -657,25 +674,25 @@ return (FILENAME . REVISION) otherwise nil." (format "L%s" start))))))) (defun git-link-commit-gitlab (hostname dirname commit) - (format "https://%s/%s/-/commit/%s" + (format "%s/%s/-/commit/%s" hostname dirname commit)) (defun git-link-commit-github (hostname dirname commit) - (format "https://%s/%s/commit/%s" + (format "%s/%s/commit/%s" hostname dirname commit)) (defun git-link-commit-googlesource (hostname dirname commit) - (format "https://%s/%s/+/%s" + (format "%s/%s/+/%s" hostname dirname commit)) (defun git-link-commit-azure (hostname dirname commit) - (format "https://%s/%s/commit/%s" + (format "%s/%s/commit/%s" hostname dirname @@ -683,13 +700,13 @@ return (FILENAME . REVISION) otherwise nil." (car (git-link--exec "rev-parse" commit)))) (defun git-link-commit-codeberg (hostname dirname commit) - (format "https://%s/%s/commit/%s" + (format "%s/%s/commit/%s" hostname dirname commit)) (defun git-link-gitorious (hostname dirname filename _branch commit start _end) - (format "https://%s/%s/source/%s:%s#L%s" + (format "%s/%s/source/%s:%s#L%s" hostname dirname commit @@ -697,14 +714,14 @@ return (FILENAME . REVISION) otherwise nil." start)) (defun git-link-commit-gitorious (hostname dirname commit) - (format "https://%s/%s/commit/%s" + (format "%s/%s/commit/%s" hostname dirname commit)) (defun git-link-bitbucket (hostname dirname filename _branch commit start end) ;; ?at=branch-name - (format "https://%s/%s/%s/%s/%s" + (format "%s/%s/%s/%s/%s" hostname dirname (git-link--should-render-via-bitbucket-annotate filename) @@ -721,13 +738,13 @@ return (FILENAME . REVISION) otherwise nil." (defun git-link-commit-bitbucket (hostname dirname commit) ;; ?at=branch-name - (format "https://%s/%s/commits/%s" + (format "%s/%s/commits/%s" hostname dirname commit)) (defun git-link-cgit (hostname dirname filename branch commit start _end) - (format "https://%s/%s/tree/%s?h=%s" + (format "%s/%s/tree/%s?h=%s" hostname dirname filename @@ -737,7 +754,7 @@ return (FILENAME . REVISION) otherwise nil." (concat "#" (format "n%s" start)))))) (defun git-link-commit-cgit (hostname dirname commit) - (format "https://%s/%s/commit/?id=%s" + (format "%s/%s/commit/?id=%s" hostname dirname commit)) @@ -762,7 +779,7 @@ return (FILENAME . REVISION) otherwise nil." (t ""))) (branch-or-commit (or branch commit)) (dir-file-name (directory-file-name dirname))) - (format "https://%s/%s@%s/-/blob/%s%s" + (format "%s/%s@%s/-/blob/%s%s" hostname dir-file-name branch-or-commit @@ -771,18 +788,18 @@ return (FILENAME . REVISION) otherwise nil." (defun git-link-commit-sourcegraph (hostname dirname commit) (let ((dir-file-name (directory-file-name dirname))) - (format "https://%s/%s/-/commit/%s" + (format "%s/%s/-/commit/%s" hostname dir-file-name commit))) (defun git-link-homepage-github (hostname dirname) - (format "https://%s/%s" + (format "%s/%s" hostname dirname)) (defun git-link-homepage-savannah (hostname dirname) - (format "https://%s/cgit/%s.git/" + (format "%s/cgit/%s.git/" hostname dirname)) @@ -793,7 +810,7 @@ return (FILENAME . REVISION) otherwise nil." commit start end) - (format "https://%s/%s/browse/refs/heads/%s/--/%s" + (format "%s/%s/browse/refs/heads/%s/--/%s" hostname dirname (or branch commit) @@ -804,10 +821,10 @@ return (FILENAME . REVISION) otherwise nil." (or end start)))))) (defun git-link-commit-codecommit (hostname dirname commit) - (format "https://%s/%s/commit/%s" hostname dirname commit)) + (format "%s/%s/commit/%s" hostname dirname commit)) (defun git-link-homepage-codecommit (hostname dirname) - (format "https://%s/%s/browse" hostname dirname)) + (format "%s/%s/browse" hostname dirname)) (define-obsolete-function-alias 'git-link-homepage-svannah 'git-link-homepage-savannah "cf947f9") @@ -873,8 +890,7 @@ With a double prefix argument invert the value of branch (git-link--branch) commit (git-link--commit) handler (git-link--handler git-link-remote-alist git-host) - web-host (or (assoc-default git-host git-link-web-host-alist #'string-match-p) - git-host)) + web-host (git-link--web-host git-host)) (cond ((null filename) (message "Can't figure out what to link to")) @@ -918,24 +934,27 @@ With a prefix argument prompt for the remote's name. Defaults to \"origin\"." (interactive (list (git-link--select-remote))) - (let* (commit handler remote-info (remote-url (git-link--remote-url remote))) + (let* ((remote-url (git-link--remote-url remote)) + commit handler remote-info git-host web-host) (if (null remote-url) (message "Remote `%s' not found" remote) (setq remote-info (git-link--parse-remote remote-url) + git-host (car remote-info) commit (word-at-point) - handler (git-link--handler git-link-commit-remote-alist (car remote-info))) + handler (git-link--handler git-link-commit-remote-alist git-host) + web-host (git-link--web-host git-host)) - (cond ((null (car remote-info)) + (cond ((null git-host) (message "Remote `%s' contains an unsupported URL" remote)) ((not (string-match-p "[a-fA-F0-9]\\{7,40\\}" (or commit ""))) (message "Point is not on a commit hash")) ((not (functionp handler)) - (message "No handler for %s" (car remote-info))) + (message "No handler for %s" git-host)) ;; null ret val ((git-link--new (funcall handler - (car remote-info) + web-host (cadr remote-info) (substring-no-properties commit)))))))) @@ -952,15 +971,17 @@ Defaults to \"origin\"." (interactive (list (git-link--select-remote))) - (let* (handler remote-info - (remote-url (git-link--remote-url remote)) - (git-link-open-in-browser (or git-link-open-in-browser (equal (list 16) current-prefix-arg)))) + (let* ((remote-url (git-link--remote-url remote)) + (git-link-open-in-browser (or git-link-open-in-browser (equal (list 16) current-prefix-arg))) + handler remote-info git-host web-host) (if (null remote-url) (message "Remote `%s' not found" remote) (setq remote-info (git-link--parse-remote remote-url) - handler (git-link--handler git-link-homepage-remote-alist (car remote-info))) + git-host (car remote-info) + handler (git-link--handler git-link-homepage-remote-alist git-host) + web-host (git-link--web-host git-host)) (cond ((null (car remote-info)) (message "Remote `%s' contains an unsupported URL" remote)) @@ -969,7 +990,7 @@ Defaults to \"origin\"." ;; null ret val ((git-link--new (funcall handler - (car remote-info) + web-host (cadr remote-info)))))))) (provide 'git-link) -- 2.47.3