raco setup: remove any extra documentation dirs in installation
After uninstalling a package in installation scope, its documentation should be removed. A new `raco setup' step takes care of that. Merge to v5.3.4
This commit is contained in:
parent
0b2c9af57c
commit
ff324f9270
|
@ -1,4 +1,4 @@
|
||||||
#lang scheme/base
|
#lang racket/base
|
||||||
|
|
||||||
(require "getinfo.rkt"
|
(require "getinfo.rkt"
|
||||||
"dirs.rkt"
|
"dirs.rkt"
|
||||||
|
@ -8,12 +8,13 @@
|
||||||
"main-doc.rkt"
|
"main-doc.rkt"
|
||||||
"parallel-do.rkt"
|
"parallel-do.rkt"
|
||||||
"doc-db.rkt"
|
"doc-db.rkt"
|
||||||
scheme/class
|
racket/class
|
||||||
scheme/list
|
racket/list
|
||||||
scheme/file
|
racket/file
|
||||||
scheme/fasl
|
racket/fasl
|
||||||
scheme/match
|
racket/match
|
||||||
scheme/serialize
|
racket/serialize
|
||||||
|
racket/set
|
||||||
compiler/cm
|
compiler/cm
|
||||||
scribble/base-render
|
scribble/base-render
|
||||||
scribble/core
|
scribble/core
|
||||||
|
@ -188,6 +189,30 @@
|
||||||
[infos (map get-info/full (map directory-record-path recs))])
|
[infos (map get-info/full (map directory-record-path recs))])
|
||||||
(filter-user-docs (append-map (get-docs main-dirs) infos recs) make-user?)))
|
(filter-user-docs (append-map (get-docs main-dirs) infos recs) make-user?)))
|
||||||
(define-values (main-docs user-docs) (partition doc-under-main? docs))
|
(define-values (main-docs user-docs) (partition doc-under-main? docs))
|
||||||
|
|
||||||
|
(unless only-dirs
|
||||||
|
;; Check for extra document directories that we should remove
|
||||||
|
;; in the main installation:
|
||||||
|
(log-setup-info "checking installation document directories")
|
||||||
|
(define main-doc-dir (find-doc-dir))
|
||||||
|
(define extra-dirs (call-with-input-file*
|
||||||
|
(build-path main-doc-dir "keep-dirs.rktd")
|
||||||
|
(lambda (i) (read i))))
|
||||||
|
(define expected (set-union
|
||||||
|
(for/set ([doc (in-list main-docs)])
|
||||||
|
(doc-dest-dir doc))
|
||||||
|
(for/set ([i (in-list extra-dirs)])
|
||||||
|
(build-path main-doc-dir i))))
|
||||||
|
(for ([i (in-list (directory-list main-doc-dir))])
|
||||||
|
(define p (build-path main-doc-dir i))
|
||||||
|
(when (directory-exists? p)
|
||||||
|
(unless (set-member? expected (build-path p))
|
||||||
|
(setup-printf
|
||||||
|
"removing"
|
||||||
|
"~a (documentation directory)"
|
||||||
|
(path->relative-string/setup p))
|
||||||
|
(delete-directory/files p)))))
|
||||||
|
|
||||||
(define (can-build*? docs) (can-build? only-dirs docs))
|
(define (can-build*? docs) (can-build? only-dirs docs))
|
||||||
(define auto-main? (and auto-start-doc? (ormap can-build*? main-docs)))
|
(define auto-main? (and auto-start-doc? (ormap can-build*? main-docs)))
|
||||||
(define auto-user? (and auto-start-doc? (ormap can-build*? user-docs)))
|
(define auto-user? (and auto-start-doc? (ormap can-build*? user-docs)))
|
||||||
|
@ -505,6 +530,7 @@
|
||||||
#:when (info-build? i))
|
#:when (info-build? i))
|
||||||
(add1 count)))
|
(add1 count)))
|
||||||
(make-loop #f (add1 iter))))))
|
(make-loop #f (add1 iter))))))
|
||||||
|
|
||||||
(when infos
|
(when infos
|
||||||
(make-loop #t 0)
|
(make-loop #t 0)
|
||||||
;; cache info to disk
|
;; cache info to disk
|
||||||
|
|
13
doc/keep-dirs.rktd
Normal file
13
doc/keep-dirs.rktd
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
;; Data is a list of directory names that should be preserved but are
|
||||||
|
;; not they result of any "info.rkt"'s 'scribblings entry. Such
|
||||||
|
;; directories usually hold content that is static (i.e., not built
|
||||||
|
;; from Scribble sources).
|
||||||
|
;;
|
||||||
|
;; The `setup/scribblings' library uses this list to avoid deleting
|
||||||
|
;; those drectories.
|
||||||
|
|
||||||
|
("release-notes"
|
||||||
|
"r5rs-std"
|
||||||
|
"r6rs-std"
|
||||||
|
"r6rs-lib-std"
|
||||||
|
"srfi-std")
|
Loading…
Reference in New Issue
Block a user