Merge feat/p4-metadata-capture: atimes/crtimes/open-noatime/omit-dir-times/omit-link-times

# Conflicts:
#	src/shared/config.c
#	tests/integration/test_features.py
This commit is contained in:
2026-09-08 21:00:07 +02:00
21 changed files with 765 additions and 27 deletions
+10 -4
View File
@@ -348,6 +348,8 @@ DirectoryScanner* directory_scanner_create_with_options(const char* root_directo
scanner->current_dir = NULL;
scanner->current_path = NULL;
scanner->use_metadata = options->use_metadata;
scanner->preserve_atimes = options->preserve_atimes;
scanner->preserve_crtimes = options->preserve_crtimes;
scanner->chunk_size = options->chunk_size > 0 ? options->chunk_size : DESIRED_CHUNK_SIZE;
scanner->exclude_patterns = options->exclude_patterns;
scanner->exclude_count = options->exclude_count;
@@ -593,7 +595,8 @@ static File* dirs_root_dir_file(DirectoryScanner* scanner) {
}
file->is_dir = true;
if (scanner->use_metadata) {
file->metadata = file_metadata_create(&st);
file->metadata = file_metadata_create(scanner->root_path, &st, scanner->preserve_atimes,
scanner->preserve_crtimes);
if (!file->metadata) {
file_destroy(file);
scanner->failed = true;
@@ -670,7 +673,8 @@ static File* dirs_file_for_entry(DirectoryScanner* scanner, const char* entry) {
}
}
if (scanner->use_metadata) {
file->metadata = file_metadata_create(&effective);
file->metadata = file_metadata_create(file->path, &effective, scanner->preserve_atimes,
scanner->preserve_crtimes);
if (!file->metadata) {
file_destroy(file);
scanner->failed = true;
@@ -924,7 +928,8 @@ Chunk* directory_scanner_next(DirectoryScanner* scanner) {
if (scanner->hardlinks && S_ISREG(stats.st_mode))
scanner_assign_hardlink(scanner, scanner->hardlinks, file, &stats);
if (scanner->use_metadata)
file->metadata = file_metadata_create(&stats);
file->metadata = file_metadata_create(file->path, &stats, scanner->preserve_atimes,
scanner->preserve_crtimes);
if (scanner->use_metadata && !file->metadata) {
free(rel_copy);
file_destroy(file);
@@ -1257,7 +1262,8 @@ static void scan_root_entry(const ScannerOptions* options, const FilterNode* roo
}
}
if (options->use_metadata)
file->metadata = file_metadata_create(&st);
file->metadata =
file_metadata_create(file->path, &st, options->preserve_atimes, options->preserve_crtimes);
if (options->use_metadata && !file->metadata) {
free(rel);
file_destroy(file);