From 30af4dfb3335c9771ff66124ead68e31f3d320f2 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Tue, 19 Nov 2013 16:23:27 -0700 Subject: [PATCH] raco pkg remove: fix dependency check in `--auto` mode --- .../tests/pkg/test-pkgs/pkg-cycle1/info.rkt | 3 +++ .../tests/pkg/test-pkgs/pkg-cycle1/main.rkt | 3 +++ .../tests/pkg/test-pkgs/pkg-cycle2/info.rkt | 3 +++ .../tests/pkg/test-pkgs/pkg-cycle2/main.rkt | 3 +++ .../racket-test/tests/pkg/tests-remove.rkt | 20 +++++++++++++++++-- racket/collects/pkg/lib.rkt | 4 +++- 6 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 pkgs/racket-pkgs/racket-test/tests/pkg/test-pkgs/pkg-cycle1/info.rkt create mode 100644 pkgs/racket-pkgs/racket-test/tests/pkg/test-pkgs/pkg-cycle1/main.rkt create mode 100644 pkgs/racket-pkgs/racket-test/tests/pkg/test-pkgs/pkg-cycle2/info.rkt create mode 100644 pkgs/racket-pkgs/racket-test/tests/pkg/test-pkgs/pkg-cycle2/main.rkt diff --git a/pkgs/racket-pkgs/racket-test/tests/pkg/test-pkgs/pkg-cycle1/info.rkt b/pkgs/racket-pkgs/racket-test/tests/pkg/test-pkgs/pkg-cycle1/info.rkt new file mode 100644 index 0000000000..7c445c4090 --- /dev/null +++ b/pkgs/racket-pkgs/racket-test/tests/pkg/test-pkgs/pkg-cycle1/info.rkt @@ -0,0 +1,3 @@ +#lang info + +(define deps '("test-pkgs/pkg-cycle2")) diff --git a/pkgs/racket-pkgs/racket-test/tests/pkg/test-pkgs/pkg-cycle1/main.rkt b/pkgs/racket-pkgs/racket-test/tests/pkg/test-pkgs/pkg-cycle1/main.rkt new file mode 100644 index 0000000000..de3f293984 --- /dev/null +++ b/pkgs/racket-pkgs/racket-test/tests/pkg/test-pkgs/pkg-cycle1/main.rkt @@ -0,0 +1,3 @@ +#lang racket/base + +'cycle-1 diff --git a/pkgs/racket-pkgs/racket-test/tests/pkg/test-pkgs/pkg-cycle2/info.rkt b/pkgs/racket-pkgs/racket-test/tests/pkg/test-pkgs/pkg-cycle2/info.rkt new file mode 100644 index 0000000000..abc2422a55 --- /dev/null +++ b/pkgs/racket-pkgs/racket-test/tests/pkg/test-pkgs/pkg-cycle2/info.rkt @@ -0,0 +1,3 @@ +#lang info + +(define deps '("test-pkgs/pkg-cycle1")) diff --git a/pkgs/racket-pkgs/racket-test/tests/pkg/test-pkgs/pkg-cycle2/main.rkt b/pkgs/racket-pkgs/racket-test/tests/pkg/test-pkgs/pkg-cycle2/main.rkt new file mode 100644 index 0000000000..ad374626ef --- /dev/null +++ b/pkgs/racket-pkgs/racket-test/tests/pkg/test-pkgs/pkg-cycle2/main.rkt @@ -0,0 +1,3 @@ +#lang racket/base + +'cycle-2 diff --git a/pkgs/racket-pkgs/racket-test/tests/pkg/tests-remove.rkt b/pkgs/racket-pkgs/racket-test/tests/pkg/tests-remove.rkt index fc46ef04bf..fa1eccf012 100644 --- a/pkgs/racket-pkgs/racket-test/tests/pkg/tests-remove.rkt +++ b/pkgs/racket-pkgs/racket-test/tests/pkg/tests-remove.rkt @@ -61,7 +61,7 @@ $ "raco pkg remove pkg-test1 pkg-test2" $ "racket -e '(require pkg-test1)'" =exit> 1 $ "racket -e '(require pkg-test2)'" =exit> 1)) - (with-fake-root + (with-fake-root (shelly-case "autoremove" $ "raco pkg config --set catalogs http://localhost:9990" @@ -78,7 +78,23 @@ $ "raco pkg remove --auto" $ "raco pkg show -u -a" =stdout> " [none]\n" $ "racket -e '(require pkg-test1)'" =exit> 1 - $ "racket -e '(require pkg-test2)'" =exit> 1)) + $ "racket -e '(require pkg-test2)'" =exit> 1) + (shelly-case + "single-step autoremove" + $ "raco pkg install --deps search-auto test-pkgs/pkg-test2.zip" =exit> 0 + $ "raco pkg remove --auto pkg-test2" + $ "raco pkg show -u -a" =stdout> " [none]\n" + $ "racket -e '(require pkg-test1)'" =exit> 1 + $ "racket -e '(require pkg-test2)'" =exit> 1) + (shelly-case + "single-step autoremove with cycles" + $ "raco pkg install --deps search-auto --copy test-pkgs/pkg-cycle1" =exit> 0 + $ "racket -e '(require pkg-cycle1)'" =exit> 0 + $ "racket -e '(require pkg-cycle2)'" =exit> 0 + $ "raco pkg remove --auto pkg-cycle1" + $ "raco pkg show -u -a" =stdout> " [none]\n" + $ "racket -e '(require pkg-cycle1)'" =exit> 1 + $ "racket -e '(require pkg-cycle2)'" =exit> 1)) (with-fake-root (shelly-case "different scope error" diff --git a/racket/collects/pkg/lib.rkt b/racket/collects/pkg/lib.rkt index b09bd6c964..854daf2d34 100644 --- a/racket/collects/pkg/lib.rkt +++ b/racket/collects/pkg/lib.rkt @@ -850,7 +850,9 @@ (define pkgs-set (list->set in-pkgs)) (define remaining-pkg-db-set (set-subtract all-pkgs-set - pkgs-set)) + (if auto? + (list->set remove-pkgs) + pkgs-set))) (define deps-to-be-removed (set-intersect pkgs-set