Skip to content

Commit 5dae3c8

Browse files
authored
Merge pull request #6540 from hannesm/switch-create-dry-run
[2.5] When doing opam sw create ... --dry-run, avoid creating of the directories
2 parents 66f0d72 + ad42ada commit 5dae3c8

File tree

5 files changed

+93
-32
lines changed

5 files changed

+93
-32
lines changed

master_changes.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ users)
3131
## UI
3232

3333
## Switch
34+
* [BUG] Stop `opam switch create --dry-run` from creating a directory: no longer create build dir and save switch-state cache. [#6540 @hannesm - fix #5918]
35+
* No longer clean build directory [#6540 @hannesm]
3436

3537
## Config
3638

@@ -112,6 +114,7 @@ users)
112114
## Reftests
113115
### Tests
114116
* Add test cases to `update.test` for version-equivalent renames [#6774 @arozovyk fix #6754]
117+
* Add a test case for `opam switch create --dry-run` [#6540 @kit-ty-kate]
115118

116119
### Engine
117120

src/client/opamSolution.ml

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -648,7 +648,8 @@ let parallel_apply t
648648
try true, OpamPackage.Map.find nv inplace
649649
with Not_found ->
650650
let dir = OpamPath.Switch.build t.switch_global.root t.switch nv in
651-
if not OpamClientConfig.(!r.reuse_build_dir) then
651+
if not OpamClientConfig.(!r.reuse_build_dir) &&
652+
not OpamStateConfig.(!r.dryrun) then
652653
OpamFilename.rmdir dir;
653654
false, dir
654655
in
@@ -659,10 +660,11 @@ let parallel_apply t
659660
OpamStateConfig.(!r.dev_setup) && found
660661
in
661662
let source_dir = source_dir nv in
662-
(if OpamFilename.exists_dir source_dir
663-
then (if not is_inplace then
664-
OpamFilename.copy_dir ~src:source_dir ~dst:build_dir)
665-
else OpamFilename.mkdir build_dir;
663+
(if not OpamStateConfig.(!r.dryrun) then
664+
if OpamFilename.exists_dir source_dir
665+
then (if not is_inplace then
666+
OpamFilename.copy_dir ~src:source_dir ~dst:build_dir)
667+
else OpamFilename.mkdir build_dir;
666668
OpamAction.prepare_package_source t nv build_dir @@+ function
667669
| Some exn -> store_time (); Done (`Exception exn)
668670
| None ->
@@ -823,31 +825,32 @@ let parallel_apply t
823825
(* 2/ Display errors and finalize *)
824826

825827
let save_installed_cache failed =
826-
OpamSwitchState.Installed_cache.save
827-
(OpamPath.Switch.installed_opams_cache t.switch_global.root t.switch)
828-
(OpamPackage.Set.fold (fun nv opams ->
829-
(* NOTE: We need to know whether an action was successful
830-
or not to know which version of the opam file to store
831-
in the case: the previous one if it failed, or the new
832-
one if it succeeded. *)
833-
let pkg_failed =
834-
List.exists (function
835-
| `Fetch ps -> List.for_all (OpamPackage.equal nv) ps
836-
| `Build p | `Change (_, _, p) | `Install p
837-
| `Reinstall p | `Remove p -> OpamPackage.equal nv p)
838-
failed
839-
in
840-
let add_to_opams opam =
841-
let opam = OpamFile.OPAM.with_metadata_dir None opam in
842-
OpamPackage.Map.add nv opam opams
843-
in
844-
if pkg_failed then
845-
match OpamPackage.Map.find_opt nv t.installed_opams with
846-
| None -> opams
847-
| Some opam -> add_to_opams opam
848-
else
849-
add_to_opams (OpamSwitchState.opam t nv))
850-
t.installed OpamPackage.Map.empty);
828+
if not OpamStateConfig.(!r.dryrun) then
829+
OpamSwitchState.Installed_cache.save
830+
(OpamPath.Switch.installed_opams_cache t.switch_global.root t.switch)
831+
(OpamPackage.Set.fold (fun nv opams ->
832+
(* NOTE: We need to know whether an action was successful
833+
or not to know which version of the opam file to store
834+
in the case: the previous one if it failed, or the new
835+
one if it succeeded. *)
836+
let pkg_failed =
837+
List.exists (function
838+
| `Fetch ps -> List.for_all (OpamPackage.equal nv) ps
839+
| `Build p | `Change (_, _, p) | `Install p
840+
| `Reinstall p | `Remove p -> OpamPackage.equal nv p)
841+
failed
842+
in
843+
let add_to_opams opam =
844+
let opam = OpamFile.OPAM.with_metadata_dir None opam in
845+
OpamPackage.Map.add nv opam opams
846+
in
847+
if pkg_failed then
848+
match OpamPackage.Map.find_opt nv t.installed_opams with
849+
| None -> opams
850+
| Some opam -> add_to_opams opam
851+
else
852+
add_to_opams (OpamSwitchState.opam t nv))
853+
t.installed OpamPackage.Map.empty);
851854
in
852855
begin match action_results with
853856
| `Exception _ | `Error Aborted -> ()

tests/reftests/dot-install.test

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ ACTION prepare_package_source: dot.~dev at ${BASEDIR}/O
128128
ACTION Removing dot.~dev
129129
-> removed dot.~dev
130130
Installing dot.~dev.
131-
TRACK after install: 0 elements, 0 added, scanned in 0.000s
131+
TRACK after install: 3 elements, 0 added, scanned in 0.000s
132132
-> installed dot.~dev
133133
ACTION Cleaning up artefacts of dot.~dev
134134
Done.
@@ -196,7 +196,7 @@ The following actions will be simulated:
196196
ACTION download_package: dot.~dev
197197
ACTION prepare_package_source: dot.~dev at ${BASEDIR}/OPAM/inst/.opam-switch/build/dot.~dev
198198
Installing dot.~dev.
199-
TRACK after install: 0 elements, 0 added, scanned in 0.000s
199+
TRACK after install: 1 elements, 0 added, scanned in 0.000s
200200
-> installed dot.~dev
201201
Done.
202202
### ocaml cat.ml inst dot

tests/reftests/dry-run.test

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
N0REP0
2+
### <pkg:comp.1>
3+
opam-version: "2.0"
4+
flags: compiler
5+
### ::: opam switch create --dry-run local
6+
### opam switch create --dry-run --empty ./local
7+
### test -d ./local
8+
# Return code 1 #
9+
### opam switch create --dry-run ./local comp
10+
11+
<><> Installing new switch packages <><><><><><><><><><><><><><><><><><><><><><>
12+
Switch invariant: ["comp"]
13+
14+
<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
15+
Installing comp.1.
16+
-> installed comp.1
17+
Done.
18+
### test -d ./local
19+
# Return code 1 #
20+
### ::: opam switch create --dry-run global
21+
### opam switch create --dry-run --empty global
22+
### test -d OPAM/global
23+
# Return code 1 #
24+
### opam switch create --dry-run global comp
25+
26+
<><> Installing new switch packages <><><><><><><><><><><><><><><><><><><><><><>
27+
Switch invariant: ["comp"]
28+
29+
<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
30+
Installing comp.1.
31+
-> installed comp.1
32+
Done.
33+
### test -d OPAM/global
34+
# Return code 1 #

tests/reftests/dune.inc

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -566,6 +566,27 @@
566566
%{targets}
567567
(run ./run.exe %{exe:../../src/client/opamMain.exe.exe} %{dep:download.test} %{read-lines:testing-env}))))
568568

569+
(rule
570+
(alias reftest-dry-run)
571+
(enabled_if (and (or (<> %{env:TESTALL=1} 0) (= %{env:TESTN0REP0=0} 1))))
572+
(action
573+
(diff dry-run.test dry-run.out)))
574+
575+
(alias
576+
(name reftest)
577+
(enabled_if (and (or (<> %{env:TESTALL=1} 0) (= %{env:TESTN0REP0=0} 1))))
578+
(deps (alias reftest-dry-run)))
579+
580+
(rule
581+
(targets dry-run.out)
582+
(deps root-N0REP0)
583+
(enabled_if (and (or (<> %{env:TESTALL=1} 0) (= %{env:TESTN0REP0=0} 1))))
584+
(package opam)
585+
(action
586+
(with-stdout-to
587+
%{targets}
588+
(run ./run.exe %{exe:../../src/client/opamMain.exe.exe} %{dep:dry-run.test} %{read-lines:testing-env}))))
589+
569590
(rule
570591
(alias reftest-effectively-equal)
571592
(enabled_if (and (or (<> %{env:TESTALL=1} 0) (= %{env:TESTN0REP0=0} 1))))

0 commit comments

Comments
 (0)