summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp
diff options
context:
space:
mode:
authorPhilip Kaludercic <philipk@posteo.net>2022-10-07 19:19:44 +0200
committerPhilip Kaludercic <philipk@posteo.net>2022-10-08 11:57:38 +0200
commit432252c23f9855d9f43dabd600415305ab0c8b91 (patch)
treeb1d641a8e0b63f8026fb1b8735910a9b5e876779 /lisp/emacs-lisp
parent077c1533dffc4d1fbd05c8ec29e47bef09934bb8 (diff)
downloademacs-432252c23f9855d9f43dabd600415305ab0c8b91.tar.gz
emacs-432252c23f9855d9f43dabd600415305ab0c8b91.tar.bz2
emacs-432252c23f9855d9f43dabd600415305ab0c8b91.zip
Extend package-vc heuristics to multiple source forges
* package-vc.el (package-vc-probable-repository-regexp): Rename to 'package-vc-heusitic-alist'. (package-vc-heusitic-alist): Add support for multiple VC backends. (package-vc-sourced-packages-list): Use 'package-vc-heusitic-alist'
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r--lisp/emacs-lisp/package-vc.el66
1 files changed, 41 insertions, 25 deletions
diff --git a/lisp/emacs-lisp/package-vc.el b/lisp/emacs-lisp/package-vc.el
index 2d3769448d2..d9903b3ca3d 100644
--- a/lisp/emacs-lisp/package-vc.el
+++ b/lisp/emacs-lisp/package-vc.el
@@ -50,24 +50,44 @@
:group 'package
:version "29.1")
-(defcustom package-vc-probable-repository-regexp
- (rx bos "http" (? "s") "://"
- (or (: (? "www.") "github.com"
- "/" (+ (or alnum "-" "." "_"))
- "/" (+ (or alnum "-" "." "_")))
- (: "codeberg.org"
- "/" (+ (or alnum "-" "." "_"))
- "/" (+ (or alnum "-" "." "_")))
- (: (? "www.") "gitlab" (+ "." (+ alnum))
- "/" (+ (or alnum "-" "." "_"))
- "/" (+ (or alnum "-" "." "_")))
- (: "git.sr.ht"
- "/~" (+ (or alnum "-" "." "_"))
- "/" (+ (or alnum "-" "." "_"))))
- (or (? "/") ".git") eos)
- "Regular expression matching URLs that are repositories."
- :version "29.1"
- :type 'regex)
+(defcustom package-vc-heusitic-alist
+ `((,(rx bos "http" (? "s") "://"
+ (or (: (? "www.") "github.com"
+ "/" (+ (or alnum "-" "." "_"))
+ "/" (+ (or alnum "-" "." "_")))
+ (: "codeberg.org"
+ "/" (+ (or alnum "-" "." "_"))
+ "/" (+ (or alnum "-" "." "_")))
+ (: (? "www.") "gitlab" (+ "." (+ alnum))
+ "/" (+ (or alnum "-" "." "_"))
+ "/" (+ (or alnum "-" "." "_")))
+ (: "git.sr.ht"
+ "/~" (+ (or alnum "-" "." "_"))
+ "/" (+ (or alnum "-" "." "_")))
+ (: "git." (or "savannah" "sv") "." (? "non") "gnu.org/"
+ (or "r" "git") "/"
+ (+ (or alnum "-" "." "_")) (? "/")))
+ (or (? "/") ".git") eos)
+ . Git)
+ (,(rx bos "http" (? "s") "://"
+ (or (: "hg.sr.ht"
+ "/~" (+ (or alnum "-" "." "_"))
+ "/" (+ (or alnum "-" "." "_")))
+ (: "hg." (or "savannah" "sv") "." (? "non") "gnu.org/hgweb/"
+ (+ (or alnum "-" "." "_")) (? "/")))
+ eos)
+ . Hg)
+ (,(rx bos "http" (? "s") "://"
+ (or (: "bzr." (or "savannah" "sv") "." (? "non") "gnu.org/r/"
+ (+ (or alnum "-" "." "_")) (? "/")))
+ eos)
+ . Bzr))
+ "Heuristic mapping URL regular expressions to VC backends."
+ :type `(alist :key-type (regexp :tag "Regular expression matching URLs")
+ :value-type (choice :tag "VC Backend"
+ ,@(mapcar (lambda (b) `(const ,b))
+ vc-handled-backends)))
+ :version "29.1")
(defun package-vc-commit (pkg)
"Extract the commit of a development package PKG."
@@ -223,14 +243,10 @@ The output is written out into PKG-FILE."
;; heuristic and use the URL header, that might already be
;; pointing towards a repository, and use that as a backup
(and-let* ((url (alist-get :url extras))
- ((string-match-p package-vc-probable-repository-regexp
- url)))
- ;; XXX: Currently `package-vc-probable-repository-regexp'
- ;; only contains Git repositories, so we can infer the
- ;; repository type. This might work for now, but is not a
- ;; particularly resilient approach.
+ (backend (alist-get url package-vc-heusitic-alist
+ nil nil #'string-match-p)))
(setf (alist-get :vc (package-desc-extras (cadr pkg)))
- (list 'Git url))
+ (list backend url))
t))))
package-archive-contents))