Backup deleted files when using --delete and --backup. Based on a

suggested patch from Kanai Makoto (kanai@hallab.co.jp).
This commit is contained in:
David Dykstra committed 1998-11-24 19:01:24 +00:00
1 parent cd64343a7a
commit 53dd3135f1
2 files changed
+33 -14

No files matched your search

+11 -2
View File
@@ -33,6 +33,8 @@ extern int cvs_exclude;
extern int io_error;
extern char *tmpdir;
extern char *compare_dest;
extern int make_backups;
extern char *backup_suffix;
static struct delete_list {
@@ -139,8 +141,15 @@ static void delete_files(struct file_list *flist)
S_ISDIR(local_file_list->files[i]->mode))
add_delete_entry(local_file_list->files[i]);
if (-1 == flist_find(flist,local_file_list->files[i])) {
delete_one(local_file_list->files[i]);
}
char *f = f_name(local_file_list->files[i]);
int k = strlen(f) - strlen(backup_suffix);
if (make_backups && ((k <= 0) ||
(strcmp(f+k,backup_suffix) != 0))) {
(void) make_backup(f);
} else {
delete_one(local_file_list->files[i]);
}
}
}
flist_free(local_file_list);
free(name);
+22 -12
View File
@@ -191,23 +191,33 @@ void sig_int(void)
exit_cleanup(RERR_SIGNAL);
}
int make_backup(char *fname)
{
char fnamebak[MAXPATHLEN];
if (strlen(fname) + strlen(backup_suffix) > (MAXPATHLEN-1)) {
rprintf(FERROR,"backup filename too long\n");
return 0;
}
slprintf(fnamebak,sizeof(fnamebak)-1,"%s%s",fname,backup_suffix);
if (do_rename(fname,fnamebak) != 0) {
if (errno != ENOENT) {
rprintf(FERROR,"rename %s %s : s\n",fname,fnamebak,strerror(errno));
return 0;
}
} else if (verbose > 1) {
rprintf(FINFO,"backed up %s to %s\n",fname,fnamebak);
}
return 1;
}
/* finish off a file transfer, renaming the file and setting the permissions
and ownership */
void finish_transfer(char *fname, char *fnametmp, struct file_struct *file)
{
if (make_backups) {
char fnamebak[MAXPATHLEN];
if (strlen(fname) + strlen(backup_suffix) > (MAXPATHLEN-1)) {
rprintf(FERROR,"backup filename too long\n");
return;
}
slprintf(fnamebak,sizeof(fnamebak),"%s%s",fname,backup_suffix);
if (do_rename(fname,fnamebak) != 0 && errno != ENOENT) {
rprintf(FERROR,"rename %s %s : %s\n",fname,fnamebak,strerror(errno));
return;
}
}
if (make_backups && !make_backup(fname))
return;
/* move tmp file over real file */
if (do_rename(fnametmp,fname) != 0) {