Release v2.26.0 #284
@@ -353,7 +353,7 @@ static bool receiver_save_file(File* file, void* context_pointer) {
|
|||||||
metadata now and apply it at the end. -O/--omit-dir-times is honored by
|
metadata now and apply it at the end. -O/--omit-dir-times is honored by
|
||||||
dir_time_list_apply's caller (see receiver_send_success_frame). */
|
dir_time_list_apply's caller (see receiver_send_success_frame). */
|
||||||
if (result != FILE_SAVE_ERROR && file->is_dir && file->metadata &&
|
if (result != FILE_SAVE_ERROR && file->is_dir && file->metadata &&
|
||||||
context->config->use_metadata && !context->config->omit_dir_times &&
|
dir_times_should_capture(context->config) &&
|
||||||
!dir_time_list_add(&context->dir_times, file->path, file->metadata)) {
|
!dir_time_list_add(&context->dir_times, file->path, file->metadata)) {
|
||||||
file_destroy(file);
|
file_destroy(file);
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -2236,6 +2236,10 @@ File* file_receive(const Config* config, int file_descriptor) {
|
|||||||
|
|
||||||
/* ---- P7 Wave D: deferred directory times ---- */
|
/* ---- P7 Wave D: deferred directory times ---- */
|
||||||
|
|
||||||
|
bool dir_times_should_capture(const Config* config) {
|
||||||
|
return config->use_metadata && !config->omit_dir_times;
|
||||||
|
}
|
||||||
|
|
||||||
void dir_time_list_init(DirTimeList* list) {
|
void dir_time_list_init(DirTimeList* list) {
|
||||||
if (!list)
|
if (!list)
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -30,6 +30,12 @@ typedef struct {
|
|||||||
size_t capacity;
|
size_t capacity;
|
||||||
} DirTimeList;
|
} DirTimeList;
|
||||||
|
|
||||||
|
/* Capture gate shared by the sender-side and receiver-side sinks: directory
|
||||||
|
* metadata is accumulated only when --times/--metadata is in effect and
|
||||||
|
* -O/--omit-dir-times does not suppress it. Kept here, next to the accumulator
|
||||||
|
* it guards, so both call sites express the same condition. */
|
||||||
|
bool dir_times_should_capture(const Config* config);
|
||||||
|
|
||||||
void dir_time_list_init(DirTimeList* list);
|
void dir_time_list_init(DirTimeList* list);
|
||||||
void dir_time_list_free(DirTimeList* list);
|
void dir_time_list_free(DirTimeList* list);
|
||||||
/* Deep-copy one directory's path + metadata into the list. Returns false on
|
/* Deep-copy one directory's path + metadata into the list. Returns false on
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "data.h"
|
#include "data.h"
|
||||||
#include "file.h"
|
#include "file.h"
|
||||||
|
#include "file_receive.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "protocol.h"
|
#include "protocol.h"
|
||||||
#include "queue.h"
|
#include "queue.h"
|
||||||
@@ -331,7 +332,7 @@ int write_thread(void* pipeline_context) {
|
|||||||
write would clobber them); accumulate the metadata here and let the
|
write would clobber them); accumulate the metadata here and let the
|
||||||
caller apply it once every writer has drained. */
|
caller apply it once every writer has drained. */
|
||||||
if (result != FILE_SAVE_ERROR && file->is_dir && file->metadata &&
|
if (result != FILE_SAVE_ERROR && file->is_dir && file->metadata &&
|
||||||
context->config->use_metadata && !context->config->omit_dir_times &&
|
dir_times_should_capture(context->config) &&
|
||||||
!dir_time_list_add(&context->dir_times, file->path, file->metadata)) {
|
!dir_time_list_add(&context->dir_times, file->path, file->metadata)) {
|
||||||
file_destroy(file);
|
file_destroy(file);
|
||||||
pipeline_context_receiver_note_bytes_released(context, file_bytes);
|
pipeline_context_receiver_note_bytes_released(context, file_bytes);
|
||||||
|
|||||||
Reference in New Issue
Block a user