Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
liblongpath-rsync
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
liblongpath
liblongpath-rsync
Commits
0b73ca12
Commit
0b73ca12
authored
Jan 23, 2000
by
Andrew Tridgell
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added --max-delete option
parent
03e2d0e3
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
26 additions
and
5 deletions
+26
-5
options.c
options.c
+17
-4
receiver.c
receiver.c
+4
-1
rsync.yo
rsync.yo
+5
-0
No files found.
options.c
View file @
0b73ca12
...
@@ -64,6 +64,7 @@ int block_size=BLOCK_SIZE;
...
@@ -64,6 +64,7 @@ int block_size=BLOCK_SIZE;
int
size_only
=
0
;
int
size_only
=
0
;
int
delete_after
=
0
;
int
delete_after
=
0
;
int
only_existing
=
0
;
int
only_existing
=
0
;
int
max_delete
=
0
;
char
*
backup_suffix
=
BACKUP_SUFFIX
;
char
*
backup_suffix
=
BACKUP_SUFFIX
;
char
*
tmpdir
=
NULL
;
char
*
tmpdir
=
NULL
;
...
@@ -130,6 +131,7 @@ void usage(int F)
...
@@ -130,6 +131,7 @@ void usage(int F)
rprintf
(
F
,
" --delete delete files that don't exist on the sending side
\n
"
);
rprintf
(
F
,
" --delete delete files that don't exist on the sending side
\n
"
);
rprintf
(
F
,
" --delete-excluded also delete excluded files on the receiving side
\n
"
);
rprintf
(
F
,
" --delete-excluded also delete excluded files on the receiving side
\n
"
);
rprintf
(
F
,
" --delete-after delete after transferring, not before
\n
"
);
rprintf
(
F
,
" --delete-after delete after transferring, not before
\n
"
);
rprintf
(
F
,
" --max-delete=NUM don't delete more than NUM files
\n
"
);
rprintf
(
F
,
" --partial keep partially transferred files
\n
"
);
rprintf
(
F
,
" --partial keep partially transferred files
\n
"
);
rprintf
(
F
,
" --force force deletion of directories even if not empty
\n
"
);
rprintf
(
F
,
" --force force deletion of directories even if not empty
\n
"
);
rprintf
(
F
,
" --numeric-ids don't map uid/gid values by user/group name
\n
"
);
rprintf
(
F
,
" --numeric-ids don't map uid/gid values by user/group name
\n
"
);
...
@@ -167,7 +169,7 @@ enum {OPT_VERSION, OPT_SUFFIX, OPT_SENDER, OPT_SERVER, OPT_EXCLUDE,
...
@@ -167,7 +169,7 @@ enum {OPT_VERSION, OPT_SUFFIX, OPT_SENDER, OPT_SERVER, OPT_EXCLUDE,
OPT_INCLUDE
,
OPT_INCLUDE_FROM
,
OPT_STATS
,
OPT_PARTIAL
,
OPT_PROGRESS
,
OPT_INCLUDE
,
OPT_INCLUDE_FROM
,
OPT_STATS
,
OPT_PARTIAL
,
OPT_PROGRESS
,
OPT_COPY_UNSAFE_LINKS
,
OPT_SAFE_LINKS
,
OPT_COMPARE_DEST
,
OPT_COPY_UNSAFE_LINKS
,
OPT_SAFE_LINKS
,
OPT_COMPARE_DEST
,
OPT_LOG_FORMAT
,
OPT_PASSWORD_FILE
,
OPT_SIZE_ONLY
,
OPT_ADDRESS
,
OPT_LOG_FORMAT
,
OPT_PASSWORD_FILE
,
OPT_SIZE_ONLY
,
OPT_ADDRESS
,
OPT_DELETE_AFTER
,
OPT_EXISTING
};
OPT_DELETE_AFTER
,
OPT_EXISTING
,
OPT_MAX_DELETE
};
static
char
*
short_options
=
"oblLWHpguDCtcahvqrRIxnSe:B:T:zP"
;
static
char
*
short_options
=
"oblLWHpguDCtcahvqrRIxnSe:B:T:zP"
;
...
@@ -228,6 +230,7 @@ static struct option long_options[] = {
...
@@ -228,6 +230,7 @@ static struct option long_options[] = {
{
"port"
,
1
,
0
,
OPT_PORT
},
{
"port"
,
1
,
0
,
OPT_PORT
},
{
"log-format"
,
1
,
0
,
OPT_LOG_FORMAT
},
{
"log-format"
,
1
,
0
,
OPT_LOG_FORMAT
},
{
"address"
,
1
,
0
,
OPT_ADDRESS
},
{
"address"
,
1
,
0
,
OPT_ADDRESS
},
{
"max-delete"
,
1
,
0
,
OPT_MAX_DELETE
},
{
0
,
0
,
0
,
0
}};
{
0
,
0
,
0
,
0
}};
...
@@ -488,6 +491,10 @@ int parse_arguments(int argc, char *argv[], int frommain)
...
@@ -488,6 +491,10 @@ int parse_arguments(int argc, char *argv[], int frommain)
block_size
=
atoi
(
optarg
);
block_size
=
atoi
(
optarg
);
break
;
break
;
case
OPT_MAX_DELETE
:
max_delete
=
atoi
(
optarg
);
break
;
case
OPT_TIMEOUT
:
case
OPT_TIMEOUT
:
io_timeout
=
atoi
(
optarg
);
io_timeout
=
atoi
(
optarg
);
break
;
break
;
...
@@ -561,6 +568,7 @@ void server_options(char **args,int *argc)
...
@@ -561,6 +568,7 @@ void server_options(char **args,int *argc)
static
char
argstr
[
50
];
static
char
argstr
[
50
];
static
char
bsize
[
30
];
static
char
bsize
[
30
];
static
char
iotime
[
30
];
static
char
iotime
[
30
];
static
char
mdelete
[
30
];
int
i
,
x
;
int
i
,
x
;
args
[
ac
++
]
=
"--server"
;
args
[
ac
++
]
=
"--server"
;
...
@@ -618,12 +626,17 @@ void server_options(char **args,int *argc)
...
@@ -618,12 +626,17 @@ void server_options(char **args,int *argc)
if
(
x
!=
1
)
args
[
ac
++
]
=
argstr
;
if
(
x
!=
1
)
args
[
ac
++
]
=
argstr
;
if
(
block_size
!=
BLOCK_SIZE
)
{
if
(
block_size
!=
BLOCK_SIZE
)
{
s
printf
(
bsize
,
"-B%d"
,
block_size
);
s
lprintf
(
bsize
,
sizeof
(
bsize
)
,
"-B%d"
,
block_size
);
args
[
ac
++
]
=
bsize
;
args
[
ac
++
]
=
bsize
;
}
}
if
(
max_delete
&&
am_sender
)
{
slprintf
(
mdelete
,
sizeof
(
mdelete
),
"--max-delete=%d"
,
max_delete
);
args
[
ac
++
]
=
mdelete
;
}
if
(
io_timeout
)
{
if
(
io_timeout
)
{
s
printf
(
iotime
,
"--timeout=%d"
,
io_timeout
);
s
lprintf
(
iotime
,
sizeof
(
iotime
)
,
"--timeout=%d"
,
io_timeout
);
args
[
ac
++
]
=
iotime
;
args
[
ac
++
]
=
iotime
;
}
}
...
@@ -659,7 +672,7 @@ void server_options(char **args,int *argc)
...
@@ -659,7 +672,7 @@ void server_options(char **args,int *argc)
if
(
numeric_ids
)
if
(
numeric_ids
)
args
[
ac
++
]
=
"--numeric-ids"
;
args
[
ac
++
]
=
"--numeric-ids"
;
if
(
only_existing
)
if
(
only_existing
&&
am_sender
)
args
[
ac
++
]
=
"--existing"
;
args
[
ac
++
]
=
"--existing"
;
if
(
tmpdir
)
{
if
(
tmpdir
)
{
...
...
receiver.c
View file @
0b73ca12
...
@@ -43,7 +43,6 @@ static struct delete_list {
...
@@ -43,7 +43,6 @@ static struct delete_list {
}
*
delete_list
;
}
*
delete_list
;
static
int
dlist_len
,
dlist_alloc_len
;
static
int
dlist_len
,
dlist_alloc_len
;
/* yuck! This function wouldn't have been necessary if I had the sorting
/* yuck! This function wouldn't have been necessary if I had the sorting
algorithm right. Unfortunately fixing the sorting algorithm would introduce
algorithm right. Unfortunately fixing the sorting algorithm would introduce
a backward incompatibility as file list indexes are sent over the link.
a backward incompatibility as file list indexes are sent over the link.
...
@@ -110,6 +109,8 @@ static void delete_files(struct file_list *flist)
...
@@ -110,6 +109,8 @@ static void delete_files(struct file_list *flist)
int
i
,
j
;
int
i
,
j
;
char
*
name
;
char
*
name
;
extern
int
module_id
;
extern
int
module_id
;
extern
int
max_delete
;
static
int
deletion_count
;
if
(
cvs_exclude
)
if
(
cvs_exclude
)
add_cvs_excludes
();
add_cvs_excludes
();
...
@@ -137,6 +138,7 @@ static void delete_files(struct file_list *flist)
...
@@ -137,6 +138,7 @@ static void delete_files(struct file_list *flist)
rprintf
(
FINFO
,
"deleting in %s
\n
"
,
name
);
rprintf
(
FINFO
,
"deleting in %s
\n
"
,
name
);
for
(
i
=
local_file_list
->
count
-
1
;
i
>=
0
;
i
--
)
{
for
(
i
=
local_file_list
->
count
-
1
;
i
>=
0
;
i
--
)
{
if
(
max_delete
&&
deletion_count
>
max_delete
)
break
;
if
(
!
local_file_list
->
files
[
i
]
->
basename
)
continue
;
if
(
!
local_file_list
->
files
[
i
]
->
basename
)
continue
;
if
(
remote_version
<
19
&&
if
(
remote_version
<
19
&&
S_ISDIR
(
local_file_list
->
files
[
i
]
->
mode
))
S_ISDIR
(
local_file_list
->
files
[
i
]
->
mode
))
...
@@ -148,6 +150,7 @@ static void delete_files(struct file_list *flist)
...
@@ -148,6 +150,7 @@ static void delete_files(struct file_list *flist)
(
strcmp
(
f
+
k
,
backup_suffix
)
!=
0
)))
{
(
strcmp
(
f
+
k
,
backup_suffix
)
!=
0
)))
{
(
void
)
make_backup
(
f
);
(
void
)
make_backup
(
f
);
}
else
{
}
else
{
deletion_count
++
;
delete_one
(
local_file_list
->
files
[
i
]);
delete_one
(
local_file_list
->
files
[
i
]);
}
}
}
}
...
...
rsync.yo
View file @
0b73ca12
...
@@ -247,6 +247,7 @@ verb(
...
@@ -247,6 +247,7 @@ verb(
--delete delete files that don't exist on the sending side
--delete delete files that don't exist on the sending side
--delete-excluded also delete excluded files on the receiving side
--delete-excluded also delete excluded files on the receiving side
--delete-after delete after transferring, not before
--delete-after delete after transferring, not before
--max-delete=NUM don't delete more than NUM files
--partial keep partially transferred files
--partial keep partially transferred files
--force force deletion of directories even if not empty
--force force deletion of directories even if not empty
--numeric-ids don't map uid/gid values by user/group name
--numeric-ids don't map uid/gid values by user/group name
...
@@ -427,6 +428,10 @@ contents of only one filesystem.
...
@@ -427,6 +428,10 @@ contents of only one filesystem.
dit(bf(--existing)) This tells rsync not to create any new files -
dit(bf(--existing)) This tells rsync not to create any new files -
only update files that already exist on the destination.
only update files that already exist on the destination.
dit(bf(--max-delete=NUM)) This tells rsync not to delete more than NUM
files or directories. This is useful when mirroring very large trees
to prevent disasters.
dit(bf(--delete)) This tells rsync to delete any files on the receiving
dit(bf(--delete)) This tells rsync to delete any files on the receiving
side that aren't on the sending side. Files that are excluded from
side that aren't on the sending side. Files that are excluded from
transfer are excluded from being deleted unless you use --delete-excluded.
transfer are excluded from being deleted unless you use --delete-excluded.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment