mirror of
https://github.com/RsyncProject/rsync.git
synced 2026-10-20 12:54:15 -04:00
- For every file that we send off to the receiver, mark it with
FLAG_SENT. - Added successful_send(), which is called when MSG_SUCCESS was received from the receiver/generator side. This function validates the message, and removes the indicated file/symlink (assuming that remove_sent_files was actually set).
This commit is contained in:
1 parent
3e870a6444
commit
95306d9d50
1 file changed
+31
@@ -29,6 +29,7 @@ extern int daemon_log_format_has_i;
|
||||
extern int csum_length;
|
||||
extern int io_error;
|
||||
extern int protocol_version;
|
||||
extern int remove_sent_files;
|
||||
extern int updating_basis_file;
|
||||
extern int make_backups;
|
||||
extern int do_progress;
|
||||
@@ -98,7 +99,32 @@ static struct sum_struct *receive_sums(int f)
|
||||
return s;
|
||||
}
|
||||
|
||||
static struct file_list *the_flist;
|
||||
|
||||
void successful_send(int i)
|
||||
{
|
||||
char fname[MAXPATHLEN];
|
||||
struct file_struct *file;
|
||||
unsigned int offset;
|
||||
|
||||
if (!the_flist || i < 0 || i >= the_flist->count)
|
||||
return;
|
||||
|
||||
file = the_flist->files[i];
|
||||
/* The generator might tell us about symlinks we didn't send. */
|
||||
if (!(file->flags & FLAG_SENT) && !S_ISLNK(file->mode))
|
||||
return;
|
||||
if (file->dir.root) {
|
||||
offset = stringjoin(fname, sizeof fname,
|
||||
file->dir.root, "/", NULL);
|
||||
} else
|
||||
offset = 0;
|
||||
f_name_to(file, fname + offset);
|
||||
if (remove_sent_files && do_unlink(fname) == 0 && verbose > 1) {
|
||||
rprintf(FINFO, "sender removed %s\n",
|
||||
safe_fname(fname + offset));
|
||||
}
|
||||
}
|
||||
|
||||
void send_files(struct file_list *flist, int f_out, int f_in)
|
||||
{
|
||||
@@ -119,6 +145,8 @@ void send_files(struct file_list *flist, int f_out, int f_in)
|
||||
if (verbose > 2)
|
||||
rprintf(FINFO, "send_files starting\n");
|
||||
|
||||
the_flist = flist;
|
||||
|
||||
while (1) {
|
||||
unsigned int offset;
|
||||
|
||||
@@ -285,6 +313,9 @@ void send_files(struct file_list *flist, int f_out, int f_in)
|
||||
rprintf(FINFO, "sender finished %s\n",
|
||||
safe_fname(fname));
|
||||
}
|
||||
|
||||
/* Flag that we actually sent this entry. */
|
||||
file->flags |= FLAG_SENT;
|
||||
}
|
||||
make_backups = save_make_backups;
|
||||
|
||||
|
||||
Reference in new issue
Block a user