256 final boolean dest_is_vfat) {
257 Assert.assertTrue( source.
exists() );
258 Assert.assertTrue( source.
is_dir() );
260 final boolean dest_is_parent;
261 final String dest_root;
264 if( dest_stats.
exists() ) {
267 Assert.assertTrue( dest_stats.
is_dir() );
269 dest_is_parent =
false;
272 dest_is_parent =
true;
277 dest_is_parent =
false;
281 PrintUtil.
fprintf_td(System.err,
"%s: source %s, dest[arg %s, is_parent %b, dest_root %s], copts %s, dest_is_vfat %b\n",
282 title, source, dest, dest_is_parent, dest_root, copts, dest_is_vfat);
290 Assert.assertTrue(
true == dest_stats.
exists() );
291 Assert.assertTrue(
true == dest_stats.
ok() );
292 Assert.assertTrue(
true == dest_stats.
is_dir() );
305 Assert.assertTrue(
true ==
FileUtil.
visit(source, topts, pv_orig) );
306 Assert.assertTrue(
true ==
FileUtil.
visit(dest_stats, topts, pv_copy) );
310 PrintUtil.
fprintf_td(System.err,
"%s: destination visitor stats\n%s\n", title, stats_copy);
319 Assert.assertTrue( 9 - source_added_dead_links == stats.
files_sym_link );
320 Assert.assertTrue( 3 == stats.
dirs_real );
323 if( ( !opt_follow_links && !opt_drop_dest_links ) ||
328 Assert.assertTrue( 7 == stats_copy.
total_real );
334 Assert.assertTrue( 4 == stats_copy.
files_real );
336 Assert.assertTrue( 3 == stats_copy.
dirs_real );
338 }
else if( opt_drop_dest_links ) {
340 Assert.assertTrue( 7 == stats_copy.
total_real );
346 Assert.assertTrue( 4 == stats_copy.
files_real );
348 Assert.assertTrue( 3 == stats_copy.
dirs_real );
350 }
else if( opt_follow_links ) {
352 Assert.assertTrue( 20 == stats_copy.
total_real );
358 Assert.assertTrue( 16 == stats_copy.
files_real );
360 Assert.assertTrue( 4 == stats_copy.
dirs_real );
370 final source_visitor_params svp =
new source_visitor_params(title, source.
path(), dest_stats, dest_is_vfat, opt_drop_dest_links);
374 final dest_visitor_params dvp =
new dest_visitor_params(svp.title, svp.source_folder_path, svp.dest.path(),
FileUtil.
basename(element_stats1.
path() ), element_stats1, svp.dest_is_vfat);
378 final String path2 = element_stats2.
path();
380 final String source_folder_basename =
FileUtil.
basename( dvp.source_folder_path );
381 if( basename2.equals( dvp.source_basename ) ||
382 ( source_folder_basename.equals( dvp.source_basename ) && dvp.dest_folder_path.equals( path2 ) )
385 boolean attr_equal, bit_equal;
386 if(
"README_slink08_relext.txt".equals(basename2) || 0 == basename2.indexOf(
"dead_link") ) {
389 attr_equal = element_stats2.
is_link() &&
394 if( !dvp.dest_is_vfat ) {
397 element_stats2.
mode().
equals( dvp.stats.mode() ) &&
399 element_stats2.
mtime().equals( dvp.stats.mtime() ) &&
400 element_stats2.
uid() == dvp.stats.uid() &&
401 element_stats2.
gid() == dvp.stats.gid() &&
402 element_stats2.
size() == dvp.stats.size();
406 final long td_ms = 5000;
411 Math.abs( element_stats2.
mtime().toEpochMilli() - dvp.stats.mtime().toEpochMilli() ) <= td_ms &&
412 element_stats2.
uid() == dvp.stats.uid() &&
414 element_stats2.
size() == dvp.stats.size();
416 if( dvp.stats.is_file() ) {
422 dvp.match = attr_equal && bit_equal;
423 PrintUtil.
fprintf_td(System.err,
"%s.check: '%s', match [attr %b, bit %b -> %b]\n\t source %s\n\t dest__ %s\n\n",
424 dvp.title, basename2, attr_equal, bit_equal, dvp.match,
434 final boolean ignore = element_stats1.
is_link() && svp.opt_drop_dest_links;
436 svp.title, ignore ?
"Ignored" :
"Error", dvp.source_basename, element_stats1);
447 Assert.assertTrue(
true ==
FileUtil.
visit(source, topts, pv1) );