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:
parent
381d9d84d6
commit
567a84cd31
|
@ -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 ()
|
||||
|
|
|
@ -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"]
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue
Block a user