# # # patch "ChangeLog" # from [afbfbc85661520b6b22d180f74da2e477c9fb37a] # to [76b87bded2668c398a2b7b880a8dce10ee2ac269] # # patch "file_io.cc" # from [719b28300650ccd464ec25254a4999f979fa593f] # to [d4ab56f0cbf81339fc6e4fcd6561595890ac5785] # # patch "file_io.hh" # from [edc9dd29a54f9352dcaec319098f0c3ebd2a978e] # to [bda404d4d6e8580d03611242c2c68052d47127a7] # # patch "tests/addition_of_files_and_directories/__driver__.lua" # from [91100a9f3896ff4baa703586ebba94ff2654f115] # to [e29d6372557546b569771cc3191cbbc4a78400a1] # # patch "tests/ls_unknown_in_subdir/__driver__.lua" # from [2e2e2cd17c2ff3b8aec9167e588ede917e239203] # to [5cd9babeb303142237509b22ccda60947b6ffe5c] # # patch "tests/ls_unknown_of_unknown_subdir/__driver__.lua" # from [370a5ef9abba265eda98d3e2c04fe11f74c7f449] # to [435822c98106eedf895a70cb7ed98763cb99fe3c] # # patch "tests/things_in_.mtn-ignore_get_ignored/__driver__.lua" # from [9062aa1fbd033cfc7de95fc5248b7ca50b01bf4e] # to [6433c277db21af7de8eadb630fa4f82e333c47a8] # # patch "work.cc" # from [0db4f196f31d8c2262a68b0985a1487f48cba55a] # to [9e29d157086dbf701a91e1e803918665908200be] # ============================================================ --- ChangeLog afbfbc85661520b6b22d180f74da2e477c9fb37a +++ ChangeLog 76b87bded2668c398a2b7b880a8dce10ee2ac269 @@ -1,3 +1,18 @@ +2007-02-05 Derek Scherger + + * file_io.{cc,hh} (walk_tree_recursive, tree_walker::visit_dir, + walk_tree): return a boolean from visit_dir and use this to + control walks into directories + * work.cc (file_itemizer::visit_dir, addition_builder::visit_dir, + walk_tree, walk_tree_recursive): update to use the boolean from + visit_dir and change so that ls unknown doesn't walk into unknown + directories + * tests/addition_of_files_and_directories/__driver__.lua: + * tests/ls_unknown_in_subdir/__driver__.lua: + * tests/ls_unknown_of_unknown_subdir/__driver__.lua: + * tests/things_in_.mtn-ignore_get_ignored/__driver__.lua: + update tests to exclude things in unknown dirs + 2007-02-04 Ralf S. Engelschall (via Richard Levitte ) ============================================================ --- file_io.cc 719b28300650ccd464ec25254a4999f979fa593f +++ file_io.cc d4ab56f0cbf81339fc6e4fcd6561595890ac5785 @@ -512,14 +512,15 @@ walk_tree_recursive(fs::path const & abs file_path p; if (!try_file_pathize(rel_entry, p)) continue; - walker.visit_dir(p); - walk_tree_recursive(entry, rel_entry, walker); + if (walker.visit_dir(p)) + walk_tree_recursive(entry, rel_entry, walker); } } -void +bool tree_walker::visit_dir(file_path const & path) { + return true; } @@ -543,10 +544,10 @@ walk_tree(file_path const & path, walker.visit_file(path); break; case path::directory: - walker.visit_dir(path); - walk_tree_recursive(system_path(path).as_external(), - path.as_external(), - walker); + if (walker.visit_dir(path)) + walk_tree_recursive(system_path(path).as_external(), + path.as_external(), + walker); break; } } ============================================================ --- file_io.hh edc9dd29a54f9352dcaec319098f0c3ebd2a978e +++ file_io.hh bda404d4d6e8580d03611242c2c68052d47127a7 @@ -94,7 +94,7 @@ public: { public: // returns true if the directory should be descended into - virtual void visit_dir(file_path const & path); + virtual bool visit_dir(file_path const & path); virtual void visit_file(file_path const & path) = 0; virtual ~tree_walker(); }; ============================================================ --- tests/addition_of_files_and_directories/__driver__.lua 91100a9f3896ff4baa703586ebba94ff2654f115 +++ tests/addition_of_files_and_directories/__driver__.lua e29d6372557546b569771cc3191cbbc4a78400a1 @@ -63,7 +63,7 @@ check(qgrep('adding dir2', "stderr")) check(qgrep('adding dir/file5', "stderr")) --check(not qgrep('adding dir/file6.ignore', "stderr")) check(qgrep('adding dir2', "stderr")) -check(qgrep('adding dir2/file7', "stderr")) +check(not qgrep('adding dir2/file7', "stderr")) check(not qgrep('skipping dir2/file7', "stderr")) check(not qgrep('adding test_hooks.lua', "stderr")) ============================================================ --- tests/ls_unknown_in_subdir/__driver__.lua 2e2e2cd17c2ff3b8aec9167e588ede917e239203 +++ tests/ls_unknown_in_subdir/__driver__.lua 5cd9babeb303142237509b22ccda60947b6ffe5c @@ -7,8 +7,8 @@ check(grep('foo$', "stdout"), 0, false, check(mtn("ls", "unknown", "foo"), 0, true, false) check(grep('foo$', "stdout"), 0, false, false) -check(grep('foo/a$', "stdout"), 0, false, false) -check(grep('foo/b$', "stdout"), 0, false, false) +check(grep('foo/a$', "stdout"), 1, false, false) +check(grep('foo/b$', "stdout"), 1, false, false) xfail(indir("foo", mtn("ls", "unknown")), 0, true, false) check(grep('foo$', "stdout"), 0, false, false) ============================================================ --- tests/ls_unknown_of_unknown_subdir/__driver__.lua 370a5ef9abba265eda98d3e2c04fe11f74c7f449 +++ tests/ls_unknown_of_unknown_subdir/__driver__.lua 435822c98106eedf895a70cb7ed98763cb99fe3c @@ -6,6 +6,6 @@ check(grep('foo$', "stdout"), 0, false, check(mtn("ls", "unknown", "foo"), 0, true, false) check(grep('foo$', "stdout"), 0, false, false) -check(grep('foo/a$', "stdout"), 0, false, false) -check(grep('foo/b$', "stdout"), 0, false, false) +check(grep('foo/a$', "stdout"), 1, false, false) +check(grep('foo/b$', "stdout"), 1, false, false) ============================================================ --- tests/things_in_.mtn-ignore_get_ignored/__driver__.lua 9062aa1fbd033cfc7de95fc5248b7ca50b01bf4e +++ tests/things_in_.mtn-ignore_get_ignored/__driver__.lua 6433c277db21af7de8eadb630fa4f82e333c47a8 @@ -24,7 +24,7 @@ check(qgrep("bar", "ignored")) check(not qgrep("foo", "ignored")) check(qgrep("bar", "ignored")) -check(qgrep("xyzzy", "ignored")) +check(not qgrep("xyzzy", "ignored")) check(qgrep("WARNING", "ignorederr")) check(grep("-qv", "WARNING|ignoring", "ignorederr"), 1) ============================================================ --- work.cc 0db4f196f31d8c2262a68b0985a1487f48cba55a +++ work.cc 9e29d157086dbf701a91e1e803918665908200be @@ -444,14 +444,18 @@ struct file_itemizer : public tree_walke path_set & k, path_set & u, path_set & i, path_restriction const & r) : db(db), lua(lua), known(k), unknown(u), ignored(i), mask(r) {} - virtual void visit_dir(file_path const & path); + virtual bool visit_dir(file_path const & path); virtual void visit_file(file_path const & path); }; -void +bool file_itemizer::visit_dir(file_path const & path) { this->visit_file(path); + + split_path sp; + path.split(sp); + return known.find(sp) != known.end(); } void @@ -484,7 +488,7 @@ public: bool i = true) : db(db), lua(lua), ros(r), er(e), respect_ignore(i) {} - virtual void visit_dir(file_path const & path); + virtual bool visit_dir(file_path const & path); virtual void visit_file(file_path const & path); void add_node_for(split_path const & sp); }; @@ -525,10 +529,11 @@ addition_builder::add_node_for(split_pat } -void +bool addition_builder::visit_dir(file_path const & path) { this->visit_file(path); + return true; } void