|
|
|
#lang racket/base
|
|
|
|
(require racket/system racket/port racket/file racket/string racket/date)
|
|
|
|
(require "debug.rkt" "readability.rkt")
|
|
|
|
|
|
|
|
(provide setup)
|
|
|
|
|
|
|
|
(define cd (current-directory))
|
|
|
|
|
|
|
|
(define (make-polcom-data racket-path)
|
|
|
|
(format "#! ~a
|
|
|
|
#lang racket/base
|
|
|
|
(require pollen/command)
|
|
|
|
; pollen setup run in ~a on ~a"
|
|
|
|
racket-path
|
|
|
|
cd
|
|
|
|
(format "~a at ~a" (make-datestamp) (make-timestamp))))
|
|
|
|
|
|
|
|
(define (setup)
|
|
|
|
; this function is just for export.
|
|
|
|
; it hides the test-only parameter
|
|
|
|
(setup-testable #f))
|
|
|
|
|
|
|
|
(define (setup-testable test-only)
|
|
|
|
(message (format "Set up ~a as a pollen directory? ['y' or 'yes']" cd))
|
|
|
|
(define setup-confirm (->string (read)))
|
|
|
|
(when (not (or (equal? setup-confirm "y") (equal? setup-confirm "yes")))
|
|
|
|
(begin
|
|
|
|
(message "Aborting setup")
|
|
|
|
(exit)))
|
|
|
|
(message (format "Setting up ~a as a pollen directory" cd))
|
|
|
|
|
|
|
|
(define racket-path (string-trim (with-output-to-string (λ() (system "which racket")))))
|
|
|
|
(define path-to-racket-exists? (> (len racket-path) 0))
|
|
|
|
|
|
|
|
(if path-to-racket-exists?
|
|
|
|
(let ([polcom-data (make-polcom-data racket-path)]
|
|
|
|
[polcom-filename "polcom"])
|
|
|
|
(message (format "Using ~a as racket path" racket-path))
|
|
|
|
(when (file-exists? polcom-filename)
|
|
|
|
(begin
|
|
|
|
(message (format "Deleting existing polcom file in ~a" cd))
|
|
|
|
(delete-file polcom-filename)))
|
|
|
|
(with-handlers ([exn:fail? (λ(e) (message "Couldn't write polcom file. Aborting setup"))])
|
|
|
|
(when (not test-only)
|
|
|
|
(begin
|
|
|
|
(message (format "Creating new polcom file in ~a" cd))
|
|
|
|
(display-to-file polcom-data polcom-filename)
|
|
|
|
(with-output-to-string (λ() (system (format "chmod 755 ~a" polcom-filename))))))
|
|
|
|
(message "Setup complete")
|
|
|
|
(message (format "Run '~a~a start' to start project server" cd polcom-filename))
|
|
|
|
(message (format "Or run '~a~a help' for a list of commands" cd polcom-filename))
|
|
|
|
(when (not test-only) (exit))))
|
|
|
|
(message "No path to racket binary. Aborting setup")))
|
|
|
|
|
|
|
|
(module+ main
|
|
|
|
(setup-testable #t))
|