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*
|
(for-each make-directory*
|
||||||
(list (pkg-dir) (pkg-installed-dir)))
|
(list (pkg-dir) (pkg-installed-dir)))
|
||||||
|
|
||||||
|
|
||||||
(define (make-metadata-namespace)
|
(define (make-metadata-namespace)
|
||||||
(make-base-empty-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])
|
#:checker [checker void])
|
||||||
(define get-info (get-info/full pkg-dir #:namespace metadata-ns))
|
(define get-info (get-info/full pkg-dir #:namespace metadata-ns))
|
||||||
(define v
|
(define v
|
||||||
(if get-info
|
(if get-info
|
||||||
(get-info key (lambda () default))
|
(get-info key get-default)
|
||||||
;; during a transition period, also check for "METADATA.rktd":
|
;; during a transition period, also check for "METADATA.rktd":
|
||||||
(and (eq? key 'deps)
|
(if (eq? key 'deps)
|
||||||
(dict-ref (file->value* (build-path pkg-dir "METADATA.rktd") empty)
|
(dict-ref (file->value* (build-path pkg-dir "METADATA.rktd") empty)
|
||||||
'dependency default))))
|
'dependency (get-default))
|
||||||
|
(get-default))))
|
||||||
(checker v)
|
(checker v)
|
||||||
v)
|
v)
|
||||||
|
|
||||||
|
@ -146,6 +146,10 @@
|
||||||
(define-syntax-rule (with-package-lock e ...)
|
(define-syntax-rule (with-package-lock e ...)
|
||||||
(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 (read-pkg-cfg/def k)
|
||||||
(define c (read-pkg-cfg))
|
(define c (read-pkg-cfg))
|
||||||
(hash-ref c k
|
(hash-ref c k
|
||||||
|
@ -603,7 +607,7 @@
|
||||||
(not (eq? dep-behavior 'force))
|
(not (eq? dep-behavior 'force))
|
||||||
(let ()
|
(let ()
|
||||||
(define deps (get-metadata metadata-ns pkg-dir
|
(define deps (get-metadata metadata-ns pkg-dir
|
||||||
'deps empty
|
'deps (lambda () empty)
|
||||||
#:checker check-dependencies))
|
#:checker check-dependencies))
|
||||||
(define unsatisfied-deps
|
(define unsatisfied-deps
|
||||||
(filter-not (λ (dep)
|
(filter-not (λ (dep)
|
||||||
|
@ -674,12 +678,31 @@
|
||||||
(define infos
|
(define infos
|
||||||
(for/list ([v (in-list descs)])
|
(for/list ([v (in-list descs)])
|
||||||
(install-package (pkg-desc-source v) (pkg-desc-type v) (pkg-desc-name v))))
|
(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
|
(define do-its
|
||||||
(map (curry install-package/outer (append old-infos infos))
|
(map (curry install-package/outer (append old-infos infos))
|
||||||
(append old-descs descs)
|
(append old-descs descs)
|
||||||
(append old-infos infos)))
|
(append old-infos infos)))
|
||||||
(pre-succeed)
|
(pre-succeed)
|
||||||
(for-each (λ (t) (t)) do-its))
|
(for-each (λ (t) (t)) do-its)
|
||||||
|
setup-collects)
|
||||||
|
|
||||||
(define (install-cmd descs
|
(define (install-cmd descs
|
||||||
#:old-infos [old-infos empty]
|
#:old-infos [old-infos empty]
|
||||||
|
@ -743,7 +766,7 @@
|
||||||
|
|
||||||
(define ((package-dependencies metadata-ns) pkg-name)
|
(define ((package-dependencies metadata-ns) pkg-name)
|
||||||
(get-metadata metadata-ns (package-directory pkg-name)
|
(get-metadata metadata-ns (package-directory pkg-name)
|
||||||
'deps empty
|
'deps (lambda () empty)
|
||||||
#:checker check-dependencies))
|
#:checker check-dependencies))
|
||||||
|
|
||||||
(define (update-packages in-pkgs
|
(define (update-packages in-pkgs
|
||||||
|
@ -771,8 +794,7 @@
|
||||||
#:updating? #t
|
#:updating? #t
|
||||||
#:pre-succeed (λ () (for-each (compose remove-package pkg-desc-name) to-update))
|
#:pre-succeed (λ () (for-each (compose remove-package pkg-desc-name) to-update))
|
||||||
#:dep-behavior dep-behavior
|
#:dep-behavior dep-behavior
|
||||||
to-update)
|
to-update)]))
|
||||||
#t]))
|
|
||||||
|
|
||||||
(define (show-cmd)
|
(define (show-cmd)
|
||||||
(let ()
|
(let ()
|
||||||
|
|
|
@ -4,10 +4,17 @@
|
||||||
"commands.rkt"
|
"commands.rkt"
|
||||||
(prefix-in setup: setup/setup))
|
(prefix-in setup: setup/setup))
|
||||||
|
|
||||||
(define (setup no-setup)
|
(define (setup no-setup? installation? setup-collects)
|
||||||
(unless (or no-setup
|
(unless (or no-setup?
|
||||||
(equal? "1" (getenv "PLT_PLANET2_NOSETUP")))
|
(getenv "PLT_PLANET2_NOSETUP"))
|
||||||
(setup:setup)))
|
(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
|
(commands
|
||||||
"This tool is used for managing installed packages."
|
"This tool is used for managing installed packages."
|
||||||
|
@ -39,12 +46,13 @@
|
||||||
#:args pkg-source
|
#:args pkg-source
|
||||||
(parameterize ([current-install-system-wide? installation])
|
(parameterize ([current-install-system-wide? installation])
|
||||||
(with-package-lock
|
(with-package-lock
|
||||||
(install-cmd #:dep-behavior deps
|
(define setup-collects
|
||||||
#:force? force
|
(install-cmd #:dep-behavior deps
|
||||||
#:ignore-checksums? ignore-checksums
|
#:force? force
|
||||||
(for/list ([p (in-list pkg-source)])
|
#:ignore-checksums? ignore-checksums
|
||||||
(pkg-desc p (or (and link 'link) type) name #f)))
|
(for/list ([p (in-list pkg-source)])
|
||||||
(setup no-setup)))]
|
(pkg-desc p (or (and link 'link) type) name #f))))
|
||||||
|
(setup no-setup installation setup-collects)))]
|
||||||
[update
|
[update
|
||||||
"Update packages"
|
"Update packages"
|
||||||
[#:bool no-setup () ("Don't run 'raco setup' after changing packages"
|
[#:bool no-setup () ("Don't run 'raco setup' after changing packages"
|
||||||
|
@ -66,11 +74,13 @@
|
||||||
#:args pkgs
|
#:args pkgs
|
||||||
(parameterize ([current-install-system-wide? installation])
|
(parameterize ([current-install-system-wide? installation])
|
||||||
(with-package-lock
|
(with-package-lock
|
||||||
(when (update-packages pkgs
|
(define setup-collects
|
||||||
#:all? all
|
(update-packages pkgs
|
||||||
#:dep-behavior deps
|
#:all? all
|
||||||
#:deps? update-deps)
|
#:dep-behavior deps
|
||||||
(setup no-setup))))]
|
#:deps? update-deps))
|
||||||
|
(when setup-collects
|
||||||
|
(setup no-setup installation setup-collects))))]
|
||||||
[remove
|
[remove
|
||||||
"Remove packages"
|
"Remove packages"
|
||||||
[#:bool no-setup () ("Don't run 'raco setup' after changing packages"
|
[#:bool no-setup () ("Don't run 'raco setup' after changing packages"
|
||||||
|
@ -84,7 +94,7 @@
|
||||||
(remove-packages pkgs
|
(remove-packages pkgs
|
||||||
#:auto? auto
|
#:auto? auto
|
||||||
#:force? force)
|
#:force? force)
|
||||||
(setup no-setup)))]
|
(setup no-setup installation #f)))]
|
||||||
[show
|
[show
|
||||||
"Show information about installed packages"
|
"Show information about installed packages"
|
||||||
[#:bool installation ("-i") "Operate on the installation-wide package database"]
|
[#:bool installation ("-i") "Operate on the installation-wide package database"]
|
||||||
|
|
|
@ -200,7 +200,7 @@ sub-sub-commands:
|
||||||
inferred for each @nonterm{pkg-source}.}
|
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
|
@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.}
|
@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
|
on package names, not package sources), while the @tech{package source} indicates
|
||||||
where to get the package if needed to satisfy the dependency.}
|
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
|
For example, a basic @filepath{info.rkt} file might be
|
||||||
|
|
Loading…
Reference in New Issue
Block a user