From 41c0156fe3acf5545d12ffd166c3e71a79efb0c2 Mon Sep 17 00:00:00 2001 From: Eli Barzilay Date: Tue, 9 Jul 2013 20:45:41 -0400 Subject: [PATCH] Delay running git, to avoid a premature warning about $GIT_DIR. --- pkgs/plt-services/meta/web/download/data.rkt | 19 +++++++++++---- .../meta/web/download/release-info.rkt | 23 +++++++++++-------- .../meta/web/download/version.rkt | 4 ++-- 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/pkgs/plt-services/meta/web/download/data.rkt b/pkgs/plt-services/meta/web/download/data.rkt index 62470162ba..f21ee91a88 100644 --- a/pkgs/plt-services/meta/web/download/data.rkt +++ b/pkgs/plt-services/meta/web/download/data.rkt @@ -111,7 +111,7 @@ set-announcements-file!) (require racket/list racket/file version/utils racket/runtime-path - "release-info.rkt") + racket/promise "release-info.rkt") ;; ---------------------------------------------------------------------------- ;; Mirror information @@ -204,8 +204,17 @@ [else (loop (cdr l) (add1 n))]))) (λ (x y) (< (num-of x) (num-of y)))) +;; use this to avoid parsing the installers until generation starts +(define-syntax-rule (define-lazy name expr) + (begin (define p (lazy expr)) + (define-syntax name + (syntax-id-rules (set!) + [(set! _ x) (error 'name "unmodifiable binding")] + [(_ x (... ...)) ((force p) x (... ...))] + [_ (force p)])))) + ;; sorted by version (newest first), and then by -installer-orders- -(define all-installers +(define-lazy all-installers (sort (call-with-input-file installers-data parse-installers) (let ([fns `([,(λ (i) @@ -220,11 +229,11 @@ (let* ([get (caar fns)] [name (let ([t (make-hasheq)]) diff --git a/pkgs/plt-services/meta/web/download/release-info.rkt b/pkgs/plt-services/meta/web/download/release-info.rkt index b9fb918342..f8c5ad001c 100644 --- a/pkgs/plt-services/meta/web/download/release-info.rkt +++ b/pkgs/plt-services/meta/web/download/release-info.rkt @@ -1,8 +1,9 @@ #lang racket/base -(require racket/system racket/port racket/match racket/runtime-path) +(require racket/system racket/port racket/match racket/runtime-path + racket/promise) -(define-runtime-path THIS-GIT "../../../../.git") +(define-runtime-path THIS-GIT "../../../../../.git") (define (warn fmt . xs) (eprintf "Warning: ~a\a\n" (apply format fmt xs)) @@ -10,14 +11,15 @@ (sleep 1) #f) -(define git - (let* ([exe (or (find-executable-path "git") - (warn "no `git' executable => no release info"))] - [try (λ (dir) (and dir (directory-exists? dir) dir))] - [dir (and exe (or (ormap try (list (getenv "GIT_DIR") THIS-GIT)) - (warn "no git dir found => no release info\n (~a)" - "set $GIT_DIR to a racket repo .git dir")))] - [nowhere (open-output-nowhere)]) +(define git* + (lazy + (define exe (or (find-executable-path "git") + (warn "no `git' executable => no release info"))) + (define (try dir) (and dir (directory-exists? dir) dir)) + (define dir (and exe (or (ormap try (list (getenv "GIT_DIR") THIS-GIT)) + (warn "no git dir found => no release info\n (~a)" + "set $GIT_DIR to a racket repo .git dir")))) + (define nowhere (open-output-nowhere)) (and dir (λ args (define o (open-output-string)) (parameterize ([current-directory dir] [current-output-port o] @@ -27,6 +29,7 @@ (provide get-version-tag-info) (define (get-version-tag-info version) + (define git (force git*)) (let/ec return (unless git (return #f)) (define (bad . args) (apply warn args) (return #f)) diff --git a/pkgs/plt-services/meta/web/download/version.rkt b/pkgs/plt-services/meta/web/download/version.rkt index 6f2f144449..88e63e95df 100644 --- a/pkgs/plt-services/meta/web/download/version.rkt +++ b/pkgs/plt-services/meta/web/download/version.rkt @@ -3,5 +3,5 @@ (require "resources.rkt" "data.rkt") (define version.txt - (let ([v (release-version current-release)]) - (plain (format "~s" `((recent ,v) (stable ,v)))))) + (plain (lazy (let ([v (release-version current-release)]) + (format "~s" `((recent ,v) (stable ,v)))))))