From b38c81139a9263e60a9498f7fae9582be183f33b Mon Sep 17 00:00:00 2001 From: Leif Andersen Date: Thu, 13 Nov 2014 17:15:44 -0500 Subject: [PATCH] Fix a few edge cases for raco pkg new Also fix typos/indentation --- .../racket-test/tests/pkg/tests-new.rkt | 18 +++++++++++- racket/collects/pkg/private/new.rkt | 29 +++++++++++++------ 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/pkgs/racket-pkgs/racket-test/tests/pkg/tests-new.rkt b/pkgs/racket-pkgs/racket-test/tests/pkg/tests-new.rkt index 384fbba4a4..bcd5ad3ebd 100644 --- a/pkgs/racket-pkgs/racket-test/tests/pkg/tests-new.rkt +++ b/pkgs/racket-pkgs/racket-test/tests/pkg/tests-new.rkt @@ -36,4 +36,20 @@ (shelly-case "folder already exists" $ "raco pkg new repeat" - $ "raco pkg new repeat" =exit> 1))))) + $ "raco pkg new repeat" =exit> 1) + + (shelly-case + "package 9999" + $ "raco pkg new 9999" + $ "raco pkg install 9999/" + $ "raco pkg remove 9999") + + (shelly-case + "package %12" + $ "raco pkg new %12" =exit> 1) + + (shelly-case + "package _" + $ "raco pkg new _" + $ "raco pkg install _/" + $ "raco pkg remove _"))))) diff --git a/racket/collects/pkg/private/new.rkt b/racket/collects/pkg/private/new.rkt index 8c4320dd63..4bf25cd6ea 100644 --- a/racket/collects/pkg/private/new.rkt +++ b/racket/collects/pkg/private/new.rkt @@ -7,9 +7,13 @@ racket/system racket/string racket/date + racket/format setup/collection-name "print.rkt") +(define (package-name? package) + (regexp-match-exact? #rx"[-_a-zA-Z0-9]*" package)) + (define (pkg-new name) ;; Useful strings @@ -30,9 +34,16 @@ (define year (number->string (date-year (current-date)))) + (define sanitized-name + (if (string->number name) + (string-append "|" name "|") + name)) + ;; Because I wish I had @-expressions (define (expand/display str [table (hash #"name" name #"user" user - #"====" ==== #"year" year)]) + #"====" ==== #"year" year + #"sanitized-name" + sanitized-name)]) (let ([in (open-input-string str)]) (let loop () (let ([m (regexp-match #rx"<<([^>]*)>>" in 0 #f (current-output-port))]) @@ -44,7 +55,7 @@ (cond [(directory-exists? name) (pkg-error (format "cannot make package, folder exists~n path: ~a" name))] - [(not (collection-name-element? name)) + [(not (package-name? name)) (pkg-error (format "cannot make package, invalid collection name~n name: ~a" name))] [else @@ -165,13 +176,13 @@ EOS ;; Notice ;; To install (from within the package directory): -;; $ raco pkg install +;; $ raco pkg install ;; To install (once uploaded to pkgs.racket-lang.org): -;; $ raco pkg install <> +;; $ raco pkg install <> ;; To uninstall: -;; $ raco pkg remove <> +;; $ raco pkg remove <> ;; To view documentation: -;; $ raco doc <> +;; $ raco doc <> ;; ;; For your convenience, we have included a LICENSE.txt file, which links to ;; the GNU Lesser General Public License. @@ -191,7 +202,7 @@ EOS ) (module+ main - ;; Main entry point, executed when run with racket executable or DrRacket. + ;; Main entry point, executed when run with the `racket` executable or DrRacket. ) EOS @@ -203,13 +214,13 @@ EOS (with-output-to-file (format "~a.scrbl" name) (lambda () (expand/display #<> +@require[@for-label[<> racket/base]] @title{<>} @author{<>} -@defmodule[<>] +@defmodule[<>] Package Description Here