raco pkg install: limit `raco setup' to installed collections

A package can specify `setup-collects' in its "info.rkt" to override
this default.
This commit is contained in:
Matthew Flatt 2012-11-30 13:59:07 -07:00
parent 381d9d84d6
commit 567a84cd31
3 changed files with 68 additions and 28 deletions

View File

@ -95,20 +95,20 @@
(for-each make-directory*
(list (pkg-dir) (pkg-installed-dir)))
(define (make-metadata-namespace)
(make-base-empty-namespace))
(define (get-metadata metadata-ns pkg-dir key default
(define (get-metadata metadata-ns pkg-dir key get-default
#:checker [checker void])
(define get-info (get-info/full pkg-dir #:namespace metadata-ns))
(define v
(if get-info
(get-info key (lambda () default))
(get-info key get-default)
;; during a transition period, also check for "METADATA.rktd":
(and (eq? key 'deps)
(dict-ref (file->value* (build-path pkg-dir "METADATA.rktd") empty)
'dependency default))))
(if (eq? key 'deps)
(dict-ref (file->value* (build-path pkg-dir "METADATA.rktd") empty)
'dependency (get-default))
(get-default))))
(checker v)
v)
@ -146,6 +146,10 @@
(define-syntax-rule (with-package-lock e ...)
(with-package-lock* (λ () e ...)))
(define (maybe-append lists)
(and (for/and ([v (in-list lists)]) (not (eq? v 'all)))
(apply append lists)))
(define (read-pkg-cfg/def k)
(define c (read-pkg-cfg))
(hash-ref c k
@ -603,7 +607,7 @@
(not (eq? dep-behavior 'force))
(let ()
(define deps (get-metadata metadata-ns pkg-dir
'deps empty
'deps (lambda () empty)
#:checker check-dependencies))
(define unsatisfied-deps
(filter-not (λ (dep)
@ -674,12 +678,31 @@
(define infos
(for/list ([v (in-list descs)])
(install-package (pkg-desc-source v) (pkg-desc-type v) (pkg-desc-name v))))
(define setup-collects
(maybe-append
(for/list ([info (in-list (append old-infos infos))])
(define pkg-dir (install-info-directory info))
(get-metadata metadata-ns pkg-dir
'setup-collects (lambda () (package-collections
pkg-dir
metadata-ns))
#:checker (lambda (v)
(unless (or (eq? v 'all)
(and (list? v)
(for ([c (in-list v)])
(or (path-string? c)
(and (list? c)
(pair? c)
(andmap path-string? c))))))
(error 'pkg "bad 'setup-collects value\n value: ~e"
v)))))))
(define do-its
(map (curry install-package/outer (append old-infos infos))
(append old-descs descs)
(append old-infos infos)))
(pre-succeed)
(for-each (λ (t) (t)) do-its))
(for-each (λ (t) (t)) do-its)
setup-collects)
(define (install-cmd descs
#:old-infos [old-infos empty]
@ -743,7 +766,7 @@
(define ((package-dependencies metadata-ns) pkg-name)
(get-metadata metadata-ns (package-directory pkg-name)
'deps empty
'deps (lambda () empty)
#:checker check-dependencies))
(define (update-packages in-pkgs
@ -771,8 +794,7 @@
#:updating? #t
#:pre-succeed (λ () (for-each (compose remove-package pkg-desc-name) to-update))
#:dep-behavior dep-behavior
to-update)
#t]))
to-update)]))
(define (show-cmd)
(let ()

View File

@ -4,10 +4,17 @@
"commands.rkt"
(prefix-in setup: setup/setup))
(define (setup no-setup)
(unless (or no-setup
(equal? "1" (getenv "PLT_PLANET2_NOSETUP")))
(setup:setup)))
(define (setup no-setup? installation? setup-collects)
(unless (or no-setup?
(getenv "PLT_PLANET2_NOSETUP"))
(setup:setup
#:make-user? (not installation?)
#:collections (and setup-collects
(map (lambda (s)
(if (list? s) s (list s)))
(append setup-collects
(if installation? '("scribblings/main") null)
'("scribblings/main/user")))))))
(commands
"This tool is used for managing installed packages."
@ -39,12 +46,13 @@
#:args pkg-source
(parameterize ([current-install-system-wide? installation])
(with-package-lock
(install-cmd #:dep-behavior deps
#:force? force
#:ignore-checksums? ignore-checksums
(for/list ([p (in-list pkg-source)])
(pkg-desc p (or (and link 'link) type) name #f)))
(setup no-setup)))]
(define setup-collects
(install-cmd #:dep-behavior deps
#:force? force
#:ignore-checksums? ignore-checksums
(for/list ([p (in-list pkg-source)])
(pkg-desc p (or (and link 'link) type) name #f))))
(setup no-setup installation setup-collects)))]
[update
"Update packages"
[#:bool no-setup () ("Don't run 'raco setup' after changing packages"
@ -66,11 +74,13 @@
#:args pkgs
(parameterize ([current-install-system-wide? installation])
(with-package-lock
(when (update-packages pkgs
#:all? all
#:dep-behavior deps
#:deps? update-deps)
(setup no-setup))))]
(define setup-collects
(update-packages pkgs
#:all? all
#:dep-behavior deps
#:deps? update-deps))
(when setup-collects
(setup no-setup installation setup-collects))))]
[remove
"Remove packages"
[#:bool no-setup () ("Don't run 'raco setup' after changing packages"
@ -84,7 +94,7 @@
(remove-packages pkgs
#:auto? auto
#:force? force)
(setup no-setup)))]
(setup no-setup installation #f)))]
[show
"Show information about installed packages"
[#:bool installation ("-i") "Operate on the installation-wide package database"]

View File

@ -200,7 +200,7 @@ sub-sub-commands:
inferred for each @nonterm{pkg-source}.}
@item{@DFlag{no-setup} --- Does not run @exec{raco setup} after installation. This behavior is also the case if the
environment variable @envvar{PLT_PLANET2_NOSETUP} is set to @exec{1}.}
environment variable @envvar{PLT_PLANET2_NOSETUP} is set (to anything).}
@item{@DFlag{installation} or @Flag{i} --- Install system-wide rather than user-local.}
@ -482,6 +482,14 @@ The following fields are used by the package manager:
on package names, not package sources), while the @tech{package source} indicates
where to get the package if needed to satisfy the dependency.}
@item{@racketidfont{setup-collects} --- a list of path strings and/or
lists of path strings, which are used as collection names to
set up via @exec{raco setup} after the package is installed, or
@racket['all] to indicate that all collections need to be
setup. By default, only collections included in the package are
set up (plus collections for global documentation indexes and
links).}
]
For example, a basic @filepath{info.rkt} file might be