~ruther/guix-local

d55a99fed30b2ee47725f07bf26208fb4b13a110 — Ludovic Courtès 13 years ago cac137a
gnu-maintenance: Optimize `release-file'.

* guix/gnu-maintenance.scm (tarball-regexp): Remove.
  (%tarball-rx): New variable.
  (release-file): Adjust to use %TARBALL-RX.
1 files changed, 10 insertions(+), 11 deletions(-)

M guix/gnu-maintenance.scm
M guix/gnu-maintenance.scm => guix/gnu-maintenance.scm +10 -11
@@ 252,26 252,25 @@ stored."
    (_
     (values "ftp.gnu.org" (string-append "/gnu/" project)))))

(define tarball-regexp
  (memoize
   (lambda (project)
     "Return a regexp matching tarball names for PROJECT."
     (make-regexp (string-append "^" project
                                 "-([0-9]|[^-])*(-src)?\\.tar\\.")))))

(define %alpha-tarball-rx
  (make-regexp "^.*-.*[0-9](-|~)?(alpha|beta|rc|cvs|svn|git)-?[0-9\\.]*\\.tar\\."))

(define (sans-extension tarball)
  "Return TARBALL without its .tar.* extension."
  (let ((end (string-contains tarball ".tar")))
    (substring tarball 0 end)))

(define %tarball-rx
  (make-regexp "^(.+)-([0-9]|[^-])*(-src)?\\.tar\\."))

(define %alpha-tarball-rx
  (make-regexp "^.*-.*[0-9](-|~)?(alpha|beta|rc|cvs|svn|git)-?[0-9\\.]*\\.tar\\."))

(define (release-file project file)
  "Return #f if FILE is not a release tarball of PROJECT, otherwise return
PACKAGE-VERSION."
  (and (not (string-suffix? ".sig" file))
       (regexp-exec (tarball-regexp project) file)
       (and=> (regexp-exec %tarball-rx file)
              (lambda (match)
                ;; Filter out unrelated files, like `guile-www-1.1.1'.
                (equal? project (match:substring match 1))))
       (not (regexp-exec %alpha-tarball-rx file))
       (let ((s (sans-extension file)))
         (and (regexp-exec %package-name-rx s) s))))