Extract tag information from a git repo instead of manually specified

version/date pairs.

Also switch to using `release' structs instead of version strings.
This commit is contained in:
Eli Barzilay 2011-05-27 03:50:22 -04:00
parent 7fcbb2eb96
commit 56820287ac
6 changed files with 74 additions and 109 deletions

View File

@ -2008,11 +2008,11 @@ BUILD_WEB() {
# distribute only if this is a normal build
if [[ "$prewebdir" = "$prewebdir_default" ]]; then
separator "Making and distributing web content"
_run "$PLTHOME/$webscript" $webflags --dist
webflags="$webflags --dist"
else
separator "Making web content -- not distributing"
_run "$PLTHOME/$webscript" $webflags
fi
GIT_DIR="$maindir/$cleandir/.git" _run "$PLTHOME/$webscript" $webflags
}

View File

@ -1,51 +1,5 @@
#lang racket/base
(define -versions+dates-
'(["5.1.1" "April 2011"]
["5.1" "February 2011"]
["5.0.2" "November 2010"]
["5.0.1" "August 2010"]
["5.0" "June 2010"]
["4.2.5" "April 2010"]
["4.2.4" "January 2010"]
["4.2.3" "December 2009"]
["4.2.2" "October 2009"]
["4.2.1" "July 2009"]
["4.2" "June 2009"]
["4.1.5" "March 2009"]
["4.1.4" "January 2009"]
["4.1.3" "November 2008"]
["4.1.2" "October 2008"]
["4.1.1" "October 2008"]
["4.1" "August 2008"]
["4.0.2" "July 2008"]
["4.0.1" "June 2008"]
["4.0" "June 2008"]
["372" "December 2007"]
["371" "August 2007"]
["370" "May 2007"]
["360" "November 2006"]
["352" "July 2006"]
["351" "July 2006"]
["350" "June 2006"]
["301" "January 2006"]
["300" "December 2005"]
["209" "December 2004"]
["208" "August 2004"]
["207" "May 2004"]
["206p1" "January 2004"]
["206" "January 2004"]
["205" "August 2003"]
["204" "May 2003"]
["203" "December 2002"]
["202" "August 2002"]
["201" "July 2002"]
["200" "June 2002"]
["103p1" "August 2001"]
["103" "September 2000"]
["053" "July 1998"]
))
(define -platform-names-
`(;; source platforms
["win" "Windows"]
@ -134,7 +88,7 @@
"solsona@acm.org"]
))
;; Used to sort packages when more then one is rendered on a page
;; Used to sort packages when more then one is rendered on a page (delayed)
(define (-installer-orders-)
`((,installer-package ,eq? (racket racket-textual))
(,installer-binary? ,eq? (#t #f))
@ -145,38 +99,17 @@
;; ----------------------------------------------------------------------------
(provide versions+dates all-versions current-version version->date
(struct-out mirror) mirrors
(struct-out installer) all-installers
package->name platform->name suffix->name)
(provide (struct-out mirror) mirrors
(struct-out release) (struct-out installer)
all-installers current-release all-releases all-packages
package->name platform->name suffix->name
set-announcements-file!)
(require racket/list racket/file version/utils racket/runtime-path)
;; ----------------------------------------------------------------------------
;; accepts "053"
(define (version->integer* v)
(version->integer (regexp-replace #rx"^0+" v "")))
(define versions+dates
(sort -versions+dates- <
#:key (lambda (vd) (version->integer* (car vd)))
#:cache-keys? #t))
;; sorted from oldest to newest
(define all-versions (map car versions+dates))
(define current-version (last all-versions))
(define version->date
(let ([t (make-hash)])
(for ([vd (in-list versions+dates)])
(hash-set! t (car vd) (cadr vd)))
(lambda (v)
(hash-ref t v (lambda ()
(error 'version->date "unknown version: ~e" v))))))
(require racket/list racket/file version/utils racket/runtime-path
"release-info.rkt")
;; ----------------------------------------------------------------------------
;; Mirror information
(struct mirror (location url person email))
@ -187,19 +120,43 @@
-mirrors-))
;; ----------------------------------------------------------------------------
;; Release information
(struct release (version date date-string announcement))
(define announcements #f)
(define (set-announcements-file! file)
(set! announcements #t))
(define version->release
(let ([t (make-hash)]
[months '#("January" "February" "March" "April" "May" "June" "July"
"August" "September" "October" "November" "December")])
(lambda (v)
(hash-ref! t v
(lambda ()
(let* ([info (get-version-tag-info v)]
[tagger (car info)]
[date (cadr info)]
[announcement (caddr info)]
[year (date-year date)]
[month (vector-ref months (sub1 (date-month date)))])
(release v date (format "~a ~a" month year) announcement)))))))
;; ----------------------------------------------------------------------------
;; Installer information
(define-runtime-path installers-data "installers.txt")
(struct installer
(path ; path to file from the installers directory
file ; just the file name
version ; version of the installer (as a string)
version-number ; version as a number (via version->integer*)
size ; human-readable size string
package ; package kind symbol 'racket or 'racket-textual
binary? ; #t = binary distribution, #f = source distribution
platform ; platform name string (generic for srcs, cpu-os for bins)
suffix)) ; string
(path ; path to file from the installers directory
file ; just the file name
release ; the release that this installer comes from
size ; human-readable size string
package ; package kind symbol 'racket or 'racket-textual
binary? ; #t = binary distribution, #f = source distribution
platform ; platform name string (generic for srcs, cpu-os for bins)
suffix)) ; string
(define installer-rx
(pregexp (string-append
@ -219,7 +176,7 @@
"))$")))
(define (make-installer size path version package file type platform suffix)
(installer path file version (version->integer* version) size
(installer path file (version->release version) size
(string->symbol package) (equal? "bin" type) platform suffix))
(define (parse-installers in)
@ -245,7 +202,9 @@
(define all-installers
(sort
(call-with-input-file installers-data parse-installers)
(let ([fns `([,installer-version-number . ,>]
(let ([fns `([,(lambda (i)
(version->integer (release-version (installer-release i))))
. ,>]
,@(map (lambda (o) (cons (car o) (order->precedes (cdr o))))
(-installer-orders-)))])
(lambda (i1 i2)
@ -255,6 +214,12 @@
(let* ([get (caar fns)] [<? (cdar fns)] [x1 (get i1)] [x2 (get i2)])
(or (<? x1 x2) (and (equal? x1 x2) (loop (cdr fns)))))))))))
(define all-releases ; still sorted from newest to oldest
(remove-duplicates (map installer-release all-installers)))
(define all-packages ; also sorted
(remove-duplicates (map installer-package all-installers)))
(define current-release (car all-releases))
(define package->name
(let ([t (make-hasheq)])
(lambda (package)

View File

@ -4,17 +4,18 @@
(prefix-in pre: "../stubs/pre.rkt"))
(provide render-download-page)
(define (render-download-page [version current-version] [package 'racket])
(define (render-download-page [release current-release] [package 'racket])
(define version (release-version release))
@center-div{
@h2{Download @(package->name package)
v@version (@(version->date version))}
v@version (@(release-date-string release))}
@div[id: "download_panel" style: "display: none;"]{
Platform:
@select[id: "platform_selector"
onchange: "selection_changed();"
onkeypress: "selection_changed();"]{
@(for/list ([i (in-list all-installers)]
#:when (and (equal? version (installer-version i))
#:when (and (equal? release (installer-release i))
(equal? package (installer-package i))))
(installer->page i 'render-option))}
@input[type: 'submit value: "Download" onclick: "do_jump();"]
@ -36,23 +37,20 @@
@noscript{
Installers are available for the following platforms:
@ul{@(for/list ([i (in-list all-installers)]
#:when (and (equal? version (installer-version i))
#:when (and (equal? release (installer-release i))
(equal? package (installer-package i))))
@li{@(installer->page i 'only-platform)})}}})
(define all-version-pages
(let ()
(define all-versions
(remove-duplicates (map installer-version all-installers)))
(define all-packages
(remove-duplicates (map installer-package all-installers)))
(define (make-page ver pkg)
(define (make-page rel pkg)
(define ver (release-version rel))
(define file (format "~a-v~a.html" pkg ver))
(define title @list{@(package->name pkg) v@ver})
(define label @list{v@ver @small{(@(version->date ver))}})
(define label @list{v@ver @small{(@(release-date-string rel))}})
(define the-page
@page[#:file file #:title title #:part-of 'download]{
@(render-download-page ver pkg)})
@(render-download-page rel pkg)})
(the-page label))
@page[#:id 'all-versions #:title "All Versions" #:part-of 'download]{
@table[width: "90%" align: 'center cellspacing: 10 cellpadding: 10
@ -63,10 +61,10 @@
@th[width: "50%" align: 'center]{@(package->name p)})
all-packages)}}
@tbody{
@(map (lambda (v)
(tr (map (lambda (p) (td align: 'center (make-page v p)))
@(map (lambda (r)
(tr (map (lambda (p) (td align: 'center (make-page r p)))
all-packages)))
all-versions)
all-releases)
@tr{@td[align: 'center colspan: 2 style: "border-top: solid 1px;"]{
@pre:installers}}}}}))

View File

@ -6,8 +6,9 @@
(define path (installer-path installer))
(define file (installer-file installer))
(define html-file (string-append (regexp-replace* #rx"\\." file "-") ".html"))
(define version (installer-version installer))
(define date (version->date version))
(define release (installer-release installer))
(define version (release-version release))
(define date (release-date-string release))
(define package (package->name (installer-package installer)))
(define size (installer-size installer))
(define type (if (installer-binary? installer) "" " source"))

View File

@ -3,4 +3,5 @@
(require "resources.rkt" "data.rkt")
(define version.txt
(plain (format "~s" `((recent ,current-version) (stable ,current-version)))))
(let ([v (release-version current-release)])
(plain (format "~s" `((recent ,v) (stable ,v))))))

View File

@ -78,9 +78,9 @@
@h2{Specific Versions}
@blockquote{
@table[frame: 'box rules: 'rows cellpadding: 10]{
@(for/list ([v (remove-duplicates
(map installer-version all-installers))])
@tr{@td{@b{@v} @br @small{(@version->date[v])}}
@(for/list ([r (in-list all-releases)])
(define v (release-version r))
@tr{@td{@b{@v} @br @small{(@(release-date-string r))}}
@td{@TT{\cite[Version @v]{plt-tr@num}} @br
@TT|{@cite[(in-bib plt-tr|@num "Version |@v")]}|}
@td{@link['html v], @link['pdf v]}})}