diff --git a/racket/collects/pkg/private/install.rkt b/racket/collects/pkg/private/install.rkt index c594c8be3e..28fe47b4b8 100644 --- a/racket/collects/pkg/private/install.rkt +++ b/racket/collects/pkg/private/install.rkt @@ -1177,7 +1177,10 @@ (define all-mode? (and all? (empty? in-pkgs))) (define pkgs (cond [all-mode? (hash-keys db)] - [else in-pkgs])) + [else + (unless skip-uninstalled? + (ensure-installed in-pkgs db)) + in-pkgs])) (define update-cache (make-hash)) (define catalog-lookup-cache (make-hash)) (define remote-checksum-cache (make-hash)) @@ -1278,6 +1281,18 @@ ;; ---------------------------------------- +(define (ensure-installed in-pkgs db) + (for ([d (in-list in-pkgs)]) + (define name + (if (pkg-desc? d) + (or (pkg-desc-name d) + (package-source->name (pkg-desc-source d) + (pkg-desc-type d))) + (package-source->name d))) + (void (package-info name #:db db)))) + +;; ---------------------------------------- + (define (clear-checksums-in-cache! update-cache) (define l (for/list ([(k v) (in-hash update-cache)] #:when (string? v))