From 4f22d32c681d0bb62f5ec83c863bd6689be39e44 Mon Sep 17 00:00:00 2001 From: Etienne Millon Date: Fri, 10 Aug 2018 08:52:39 +0000 Subject: [PATCH] Fix error when copy_files source does not exist Closes #1099 Signed-off-by: Etienne Millon --- CHANGES.md | 3 +++ src/file_tree.mli | 3 +++ src/simple_rules.ml | 6 ++++++ test/blackbox-tests/dune.inc | 10 ++++++++++ .../github1099/file-with-same-name/demo.ml | 1 + .../github1099/file-with-same-name/dune | 3 +++ .../github1099/file-with-same-name/dune-project | 1 + .../github1099/file-with-same-name/no_dir | 0 .../test-cases/github1099/no-dir/demo.ml | 1 + .../test-cases/github1099/no-dir/dune | 3 +++ .../test-cases/github1099/no-dir/dune-project | 1 + test/blackbox-tests/test-cases/github1099/run.t | 15 +++++++++++++++ 12 files changed, 47 insertions(+) create mode 100644 test/blackbox-tests/test-cases/github1099/file-with-same-name/demo.ml create mode 100644 test/blackbox-tests/test-cases/github1099/file-with-same-name/dune create mode 100644 test/blackbox-tests/test-cases/github1099/file-with-same-name/dune-project create mode 100644 test/blackbox-tests/test-cases/github1099/file-with-same-name/no_dir create mode 100644 test/blackbox-tests/test-cases/github1099/no-dir/demo.ml create mode 100644 test/blackbox-tests/test-cases/github1099/no-dir/dune create mode 100644 test/blackbox-tests/test-cases/github1099/no-dir/dune-project create mode 100644 test/blackbox-tests/test-cases/github1099/run.t diff --git a/CHANGES.md b/CHANGES.md index df2f1f70..b31b9cd9 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -4,6 +4,9 @@ next - Ignore stderr output when trying to find out the number of jobs available (#1118, fix #1116, @diml) +- Fix error message when the source directory of `copy_files` does not exist. + (#1120, fix #1099, @emillon) + 1.1.1 (08/08/2018) ------------------ diff --git a/src/file_tree.mli b/src/file_tree.mli index f48975db..022e9059 100644 --- a/src/file_tree.mli +++ b/src/file_tree.mli @@ -88,6 +88,9 @@ val files_of : t -> Path.t -> Path.Set.t (** [true] iff the path is either a directory or a file *) val exists : t -> Path.t -> bool +(** [true] iff the path is a directory *) +val dir_exists : t -> Path.t -> bool + (** [true] iff the path is a file *) val file_exists : t -> Path.t -> string -> bool diff --git a/src/simple_rules.ml b/src/simple_rules.ml index 86cadaca..7eda802f 100644 --- a/src/simple_rules.ml +++ b/src/simple_rules.ml @@ -51,6 +51,12 @@ let copy_files sctx ~dir ~scope ~src_dir (def: Copy_files.t) = | Error (_pos, msg) -> Loc.fail (String_with_vars.loc def.glob) "invalid glob: %s" msg in + let file_tree = Super_context.file_tree sctx in + if not (File_tree.dir_exists file_tree src_in_src) then + Loc.fail + loc + "cannot find directory: %a" + Path.pp src_in_src; (* add rules *) let src_in_build = Path.append (SC.context sctx).build_dir src_in_src in let files = SC.eval_glob sctx ~dir:src_in_build re in diff --git a/test/blackbox-tests/dune.inc b/test/blackbox-tests/dune.inc index 7107ec18..72c1ad05 100644 --- a/test/blackbox-tests/dune.inc +++ b/test/blackbox-tests/dune.inc @@ -231,6 +231,14 @@ test-cases/github1019 (progn (run %{exe:cram.exe} -test run.t) (diff? run.t run.t.corrected))))) +(alias + (name github1099) + (deps (package dune) (source_tree test-cases/github1099)) + (action + (chdir + test-cases/github1099 + (progn (run %{exe:cram.exe} -test run.t) (diff? run.t run.t.corrected))))) + (alias (name github20) (deps (package dune) (source_tree test-cases/github20)) @@ -803,6 +811,7 @@ (alias force-test) (alias gen-opam-install-file) (alias github1019) + (alias github1099) (alias github20) (alias github24) (alias github25) @@ -898,6 +907,7 @@ (alias findlib-error) (alias force-test) (alias github1019) + (alias github1099) (alias github20) (alias github24) (alias github25) diff --git a/test/blackbox-tests/test-cases/github1099/file-with-same-name/demo.ml b/test/blackbox-tests/test-cases/github1099/file-with-same-name/demo.ml new file mode 100644 index 00000000..306831a0 --- /dev/null +++ b/test/blackbox-tests/test-cases/github1099/file-with-same-name/demo.ml @@ -0,0 +1 @@ +let () = () diff --git a/test/blackbox-tests/test-cases/github1099/file-with-same-name/dune b/test/blackbox-tests/test-cases/github1099/file-with-same-name/dune new file mode 100644 index 00000000..22c126f5 --- /dev/null +++ b/test/blackbox-tests/test-cases/github1099/file-with-same-name/dune @@ -0,0 +1,3 @@ +(copy_files# "no_dir/*") + +(executable (name demo)) diff --git a/test/blackbox-tests/test-cases/github1099/file-with-same-name/dune-project b/test/blackbox-tests/test-cases/github1099/file-with-same-name/dune-project new file mode 100644 index 00000000..7655de07 --- /dev/null +++ b/test/blackbox-tests/test-cases/github1099/file-with-same-name/dune-project @@ -0,0 +1 @@ +(lang dune 1.1) diff --git a/test/blackbox-tests/test-cases/github1099/file-with-same-name/no_dir b/test/blackbox-tests/test-cases/github1099/file-with-same-name/no_dir new file mode 100644 index 00000000..e69de29b diff --git a/test/blackbox-tests/test-cases/github1099/no-dir/demo.ml b/test/blackbox-tests/test-cases/github1099/no-dir/demo.ml new file mode 100644 index 00000000..306831a0 --- /dev/null +++ b/test/blackbox-tests/test-cases/github1099/no-dir/demo.ml @@ -0,0 +1 @@ +let () = () diff --git a/test/blackbox-tests/test-cases/github1099/no-dir/dune b/test/blackbox-tests/test-cases/github1099/no-dir/dune new file mode 100644 index 00000000..22c126f5 --- /dev/null +++ b/test/blackbox-tests/test-cases/github1099/no-dir/dune @@ -0,0 +1,3 @@ +(copy_files# "no_dir/*") + +(executable (name demo)) diff --git a/test/blackbox-tests/test-cases/github1099/no-dir/dune-project b/test/blackbox-tests/test-cases/github1099/no-dir/dune-project new file mode 100644 index 00000000..7655de07 --- /dev/null +++ b/test/blackbox-tests/test-cases/github1099/no-dir/dune-project @@ -0,0 +1 @@ +(lang dune 1.1) diff --git a/test/blackbox-tests/test-cases/github1099/run.t b/test/blackbox-tests/test-cases/github1099/run.t new file mode 100644 index 00000000..5593cf1e --- /dev/null +++ b/test/blackbox-tests/test-cases/github1099/run.t @@ -0,0 +1,15 @@ +If the source directory does not exist, an error message is printed: + + $ dune build --root no-dir demo.exe + Entering directory 'no-dir' + File "dune", line 1, characters 13-23: + Error: cannot find directory: no_dir + [1] + +This works also is a file exists with the same name: + + $ dune build --root file-with-same-name demo.exe + Entering directory 'file-with-same-name' + File "dune", line 1, characters 13-23: + Error: cannot find directory: no_dir + [1]