@@ -26,76 +26,74 @@ namespace fs = std::filesystem;
2626using namespace fs ;
2727
2828#if defined(_WIN32)
29- static void set_last_write_time_in_iteration (const fs::path& dir)
30- {
31- // Windows can postpone updating last write time for file especially for
32- // directory because last write time of directory depends of its childs.
33- // See
34- // https://learn.microsoft.com/en-us/windows/win32/sysinfo/file-times
35- // To force updating file entries calls "last_write_time" with own value.
36- const recursive_directory_iterator endIt{};
37-
38- std::error_code ec;
39- recursive_directory_iterator it (dir, ec);
29+ static void set_last_write_time_in_iteration (const fs::path& dir) {
30+ // Windows can postpone updating last write time for file especially for
31+ // directory because last write time of directory depends of its childs.
32+ // See
33+ // https://learn.microsoft.com/en-us/windows/win32/sysinfo/file-times
34+ // To force updating file entries calls "last_write_time" with own value.
35+ const recursive_directory_iterator endIt{};
36+
37+ std::error_code ec;
38+ recursive_directory_iterator it (dir, ec);
39+ assert (!ec);
40+
41+ file_time_type now_time = file_time_type::clock::now ();
42+ for (; it != endIt; ++it) {
43+ const path entry = *it;
44+ last_write_time (entry, now_time, ec);
4045 assert (!ec);
46+ }
4147
42- file_time_type now_time = file_time_type::clock::now ();
43- for ( ; it != endIt; ++it) {
44- const path entry = *it;
45- last_write_time (entry, now_time, ec);
46- assert (!ec);
47- }
48-
49- assert (it == endIt);
48+ assert (it == endIt);
5049}
51- #endif
52-
53- static void test_cache_and_refresh_in_iteration ()
54- {
55- static_test_env static_env;
56- const path testDir = static_env.Dir ;
57- #if defined(_WIN32)
58- set_last_write_time_in_iteration (testDir);
59- #endif
60- const std::set<path> dir_contents (static_env.RecDirIterationList .begin (),
61- static_env.RecDirIterationList .end ());
62- const recursive_directory_iterator endIt{};
63-
64- std::error_code ec;
65- recursive_directory_iterator it (testDir, ec);
66- assert (!ec);
50+ #endif
6751
68- std::set<path> unseen_entries = dir_contents;
69- while (!unseen_entries.empty ()) {
70- assert (it != endIt);
71- const directory_entry& entry = *it;
72-
73- assert (unseen_entries.erase (entry.path ()) == 1 );
74-
75- file_status symlink_status = entry.symlink_status ();
76- file_status status = entry.status ();
77- std::uintmax_t file_size = entry.is_regular_file () ? entry.file_size () : 0 ;
78- file_time_type last_write_time = entry.last_write_time ();
79-
80- directory_entry mutable_entry = *it;
81- mutable_entry.refresh ();
82- file_status upd_symlink_status = mutable_entry.symlink_status ();
83- file_status upd_status = mutable_entry.status ();
84- std::uintmax_t upd_file_size = mutable_entry.is_regular_file () ? mutable_entry.file_size () : 0 ;
85- file_time_type upd_last_write_time = mutable_entry.last_write_time ();
86- assert (upd_symlink_status == symlink_status);
87- assert (upd_status == status);
88- assert (upd_file_size == file_size);
89- assert (upd_last_write_time == last_write_time);
90-
91- recursive_directory_iterator& it_ref = it.increment (ec);
92- assert (!ec);
93- assert (&it_ref == &it);
94- }
52+ static void test_cache_and_refresh_in_iteration () {
53+ static_test_env static_env;
54+ const path testDir = static_env.Dir ;
55+ #if defined(_WIN32)
56+ set_last_write_time_in_iteration (testDir);
57+ #endif
58+ const std::set<path> dir_contents (static_env.RecDirIterationList .begin (), static_env.RecDirIterationList .end ());
59+ const recursive_directory_iterator endIt{};
60+
61+ std::error_code ec;
62+ recursive_directory_iterator it (testDir, ec);
63+ assert (!ec);
64+
65+ std::set<path> unseen_entries = dir_contents;
66+ while (!unseen_entries.empty ()) {
67+ assert (it != endIt);
68+ const directory_entry& entry = *it;
69+
70+ assert (unseen_entries.erase (entry.path ()) == 1 );
71+
72+ file_status symlink_status = entry.symlink_status ();
73+ file_status status = entry.status ();
74+ std::uintmax_t file_size = entry.is_regular_file () ? entry.file_size () : 0 ;
75+ file_time_type last_write_time = entry.last_write_time ();
76+
77+ directory_entry mutable_entry = *it;
78+ mutable_entry.refresh ();
79+ file_status upd_symlink_status = mutable_entry.symlink_status ();
80+ file_status upd_status = mutable_entry.status ();
81+ std::uintmax_t upd_file_size = mutable_entry.is_regular_file () ? mutable_entry.file_size () : 0 ;
82+ file_time_type upd_last_write_time = mutable_entry.last_write_time ();
83+ assert (upd_symlink_status.type () == symlink_status.type () &&
84+ upd_symlink_status.permissions () == symlink_status.permissions ());
85+ assert (upd_status.type () == status.type () && upd_status.permissions () == status.permissions ());
86+ assert (upd_file_size == file_size);
87+ assert (upd_last_write_time == last_write_time);
88+
89+ recursive_directory_iterator& it_ref = it.increment (ec);
90+ assert (!ec);
91+ assert (&it_ref == &it);
92+ }
9593}
9694
9795int main (int , char **) {
98- test_cache_and_refresh_in_iteration ();
96+ test_cache_and_refresh_in_iteration ();
9997
100- return 0 ;
98+ return 0 ;
10199}
0 commit comments