
A package catalog now supplies information about a package's modules and dependencies, so propagate it when copying a catalog, make the information accessible via `raco pkg catalog-show', and so on.
98 lines
3.9 KiB
Racket
98 lines
3.9 KiB
Racket
#lang racket/base
|
|
(require pkg/lib
|
|
(prefix-in db: pkg/db)
|
|
racket/file
|
|
racket/format
|
|
"shelly.rkt"
|
|
"util.rkt")
|
|
|
|
(pkg-tests
|
|
(shelly-begin
|
|
(initialize-catalogs)
|
|
|
|
$ "raco pkg config --set catalogs http://localhost:9990"
|
|
|
|
$ "racket -l racket/base -l pkg/lib -e '(pkg-config-catalogs)'"
|
|
=stdout> "'(\"http://localhost:9990\")\n"
|
|
|
|
$ "racket -l racket/base -l tests/pkg/test-catalogs-api -e '(test-api)'"
|
|
=stderr> ""
|
|
|
|
(define d (make-temporary-file "pkg-~a" 'directory))
|
|
(define db (build-path d "catalog.sqlite"))
|
|
(define dir (build-path d "catalog"))
|
|
(define dir2 (build-path d "catalog2"))
|
|
$ (~a "raco pkg catalog-copy --from-config " (path->string db))
|
|
$ (~a "raco pkg config --set catalogs file://" (path->string db))
|
|
|
|
$ "raco pkg catalog-show pkg-test1"
|
|
=stdout> #rx"Source: http://localhost:9999/pkg-test1.zip"
|
|
|
|
(parameterize ([db:current-pkg-catalog-file db])
|
|
(db:set-pkgs! "local"
|
|
(append (db:get-pkgs)
|
|
(list
|
|
(db:pkg "fish" "local" "nemo@sub" "http://localhost:9999/fish.zip" "123"
|
|
"Not a whale"))))
|
|
(db:set-pkg-modules! "fish" "local" "123" '((lib "fish/main.rkt") (lib "fish/food.rkt")))
|
|
(db:set-pkg-dependencies! "fish" "local" "123"
|
|
'("ocean" ("water" "1.0") ("crash-helmet" #:platform windows))))
|
|
$ "raco pkg catalog-show fish" =stdout> #rx"Checksum: 123"
|
|
$ "raco pkg catalog-show fish" =stdout> #rx"ocean"
|
|
$ "raco pkg catalog-show fish" =stdout> #rx"water version 1.0"
|
|
$ "raco pkg catalog-show fish" =stdout> #rx"crash-helmet on platform 'windows"
|
|
$ "raco pkg catalog-show --modules fish" =stdout> #rx"fish/food"
|
|
|
|
$ (~a "raco pkg catalog-copy " (path->string db) " " (path->string dir))
|
|
$ (~a "raco pkg config --set catalogs file://" (path->string dir))
|
|
$ "raco pkg catalog-show fish" =stdout> #rx"Checksum: 123"
|
|
$ "raco pkg catalog-show --only-names fish" =stdout> #rx"fish"
|
|
$ "raco pkg catalog-show --only-names --all" =stdout> #rx"fish"
|
|
$ "raco pkg catalog-show --modules fish" =stdout> #rx"fish/food"
|
|
$ "raco pkg catalog-show fish" =stdout> #rx"water version 1.0"
|
|
|
|
(delete-file (build-path dir "pkgs"))
|
|
(delete-file (build-path dir "pkgs-all"))
|
|
$ "raco pkg catalog-show fish" =stdout> #rx"Checksum: 123"
|
|
$ "raco pkg catalog-show --only-names fish" =stdout> #rx"^fish"
|
|
$ "raco pkg catalog-show --only-names --all" =stdout> #rx"^fish"
|
|
$ "raco pkg catalog-show --modules fish" =stdout> #rx"fish/food"
|
|
$ "raco pkg catalog-show fish" =stdout> #rx"water version 1.0"
|
|
|
|
(delete-file (build-path dir "pkg/fish"))
|
|
$ "raco pkg catalog-show fish" =exit> 1
|
|
|
|
(define (try-merge dest)
|
|
(shelly-begin
|
|
$ (~a "raco pkg config --set catalogs file://" (path->string dest))
|
|
|
|
(make-directory* (build-path dir2 "pkg"))
|
|
(define (add-whale! cksum)
|
|
(call-with-output-file*
|
|
(build-path dir2 "pkg" "whale")
|
|
#:exists 'truncate
|
|
(lambda (o)
|
|
(write (hash 'name "whale"
|
|
'checksum cksum
|
|
'source "http://localhost:9999/whale.plt")
|
|
o))))
|
|
(add-whale! "345")
|
|
$ (~a "raco pkg catalog-show --catalog file://" (path->string dir2) " whale") =stdout> #rx"Checksum: 345"
|
|
$ "raco pkg catalog-show whale" =exit> 1
|
|
|
|
$ (~a "raco pkg catalog-copy --merge " (path->string dir2) " " (path->string dest))
|
|
$ "raco pkg catalog-show whale" =stdout> #rx"Checksum: 345"
|
|
|
|
(add-whale! "567")
|
|
$ (~a "raco pkg catalog-copy --merge " (path->string dir2) " " (path->string dest))
|
|
$ "raco pkg catalog-show whale" =stdout> #rx"Checksum: 345"
|
|
$ (~a "raco pkg catalog-copy --merge --override " (path->string dir2) " " (path->string dest))
|
|
$ "raco pkg catalog-show whale" =stdout> #rx"Checksum: 567"))
|
|
|
|
(try-merge dir)
|
|
(try-merge db)
|
|
|
|
$ "raco pkg config --set catalogs http://localhost:9990"
|
|
|
|
(delete-directory/files d)))
|