You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pollen/pollen 130801/command.rkt

62 lines
3.1 KiB
Racket

#lang racket
(define-syntax (handle-pollen-command stx)
(datum->syntax stx
(let ([arg (if (= (vector-length (current-command-line-arguments)) 0)
""
(vector-ref (current-command-line-arguments) 0))])
(case arg
[("start")
`(require (planet mb/pollen/server))]
[("regenerate")
`(begin
(displayln "Regenerate all...")
(require (planet mb/pollen/regenerate))
(regenerate-all-files))]
[("clone")
(let ([target-path (if (> (vector-length (current-command-line-arguments)) 1)
(string->path (vector-ref (current-command-line-arguments) 1))
(build-path (find-system-path 'desk-dir) (string->path "clone")))])
`(begin
(displayln "Clone & bone...")
(require racket/file)
(require (planet mb/pollen/tools))
(define (pollen-related-file? file)
(any (list
pollen-source?
preproc-source?
template-source?
pmap-source?
pollen-script?
magic-directory?
racket-file?)
file))
(define (delete-it path)
(when (directory-exists? path)
(delete-directory/files path))
(when (file-exists? path)
(delete-file path)))
(let ([source-dir (current-directory)]
[target-dir ,target-path])
(when (directory-exists? target-dir)
(delete-directory/files target-dir))
(copy-directory/files source-dir target-dir)
(map delete-it (find-files pollen-related-file? target-dir))
(displayln (format "Completed to ~a" ,target-path))
)))]
[("")
`(displayln "No command given")]
[else
(let ([possible-file (string->path arg)])
(if (file-exists? possible-file)
`(begin
(require (planet mb/pollen/regenerate))
(regenerate ,possible-file))
`(displayln (format "No command defined for ~a" ,arg))))]))))
(handle-pollen-command)