mirror of
https://github.com/nextcloud/desktop.git
synced 2024-11-27 17:37:36 +03:00
Add excluded files to the tree with IGNORE instruction
This commit is contained in:
parent
d88a5e1b11
commit
7b22972630
1 changed files with 31 additions and 21 deletions
|
@ -87,6 +87,7 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
|
||||||
const char *path = NULL;
|
const char *path = NULL;
|
||||||
csync_file_stat_t *st = NULL;
|
csync_file_stat_t *st = NULL;
|
||||||
csync_file_stat_t *tmp = NULL;
|
csync_file_stat_t *tmp = NULL;
|
||||||
|
int excluded;
|
||||||
|
|
||||||
if ((file == NULL) || (fs == NULL)) {
|
if ((file == NULL) || (fs == NULL)) {
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
|
@ -115,6 +116,24 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
|
||||||
|
|
||||||
len = strlen(path);
|
len = strlen(path);
|
||||||
|
|
||||||
|
/* Check if file is excluded */
|
||||||
|
excluded = csync_excluded(ctx, path);
|
||||||
|
if (excluded) {
|
||||||
|
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "%s excluded (%d)", path, excluded);
|
||||||
|
if (excluded == 2) {
|
||||||
|
switch (ctx->current) {
|
||||||
|
case LOCAL_REPLICA:
|
||||||
|
ctx->local.ignored_cleanup = c_list_append(ctx->local.ignored_cleanup, c_strdup(path));
|
||||||
|
break;
|
||||||
|
case REMOTE_REPLICA:
|
||||||
|
ctx->remote.ignored_cleanup = c_list_append(ctx->remote.ignored_cleanup, c_strdup(path));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
h = _hash_of_file(ctx, file );
|
h = _hash_of_file(ctx, file );
|
||||||
if( h == 0 ) {
|
if( h == 0 ) {
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -163,6 +182,10 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
|
||||||
st->instruction = CSYNC_INSTRUCTION_NONE;
|
st->instruction = CSYNC_INSTRUCTION_NONE;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
if (excluded > 0) {
|
||||||
|
st->instruction = CSYNC_INSTRUCTION_IGNORE;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
/* Update detection: Check if a database entry exists.
|
/* Update detection: Check if a database entry exists.
|
||||||
* If not, the file is either new or has been renamed. To see if it is
|
* If not, the file is either new or has been renamed. To see if it is
|
||||||
|
@ -436,7 +459,6 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn,
|
||||||
while ((dirent = csync_vio_readdir(ctx, dh))) {
|
while ((dirent = csync_vio_readdir(ctx, dh))) {
|
||||||
const char *path = NULL;
|
const char *path = NULL;
|
||||||
int flag;
|
int flag;
|
||||||
int excluded;
|
|
||||||
|
|
||||||
d_name = dirent->name;
|
d_name = dirent->name;
|
||||||
if (d_name == NULL) {
|
if (d_name == NULL) {
|
||||||
|
@ -459,7 +481,7 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn,
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create relative path for checking the exclude list */
|
/* Create relative path */
|
||||||
switch (ctx->current) {
|
switch (ctx->current) {
|
||||||
case LOCAL_REPLICA:
|
case LOCAL_REPLICA:
|
||||||
path = filename + strlen(ctx->local.uri) + 1;
|
path = filename + strlen(ctx->local.uri) + 1;
|
||||||
|
@ -471,22 +493,8 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check if file is excluded */
|
/* skip ".csync_journal.db" and ".csync_journal.db.ctmp" */
|
||||||
excluded = csync_excluded(ctx, path);
|
if (c_streq(path, ".csync_journal.db") || c_streq(path, ".csync_journal.db.ctmp")) {
|
||||||
if (excluded) {
|
|
||||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "%s excluded (%d)", path, excluded);
|
|
||||||
if (excluded == 2) {
|
|
||||||
switch (ctx->current) {
|
|
||||||
case LOCAL_REPLICA:
|
|
||||||
ctx->local.ignored_cleanup = c_list_append(ctx->local.ignored_cleanup, c_strdup(path));
|
|
||||||
break;
|
|
||||||
case REMOTE_REPLICA:
|
|
||||||
ctx->remote.ignored_cleanup = c_list_append(ctx->remote.ignored_cleanup, c_strdup(path));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
csync_vio_file_stat_destroy(dirent);
|
csync_vio_file_stat_destroy(dirent);
|
||||||
dirent = NULL;
|
dirent = NULL;
|
||||||
SAFE_FREE(filename);
|
SAFE_FREE(filename);
|
||||||
|
@ -548,13 +556,15 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn,
|
||||||
/* Call walker function for each file */
|
/* Call walker function for each file */
|
||||||
rc = fn(ctx, filename, fs, flag);
|
rc = fn(ctx, filename, fs, flag);
|
||||||
|
|
||||||
if (ctx->current_fs && previous_fs && ctx->current_fs->child_modified)
|
if (ctx->current_fs && previous_fs && ctx->current_fs->child_modified) {
|
||||||
previous_fs->child_modified = ctx->current_fs->child_modified;
|
previous_fs->child_modified = ctx->current_fs->child_modified;
|
||||||
|
}
|
||||||
|
|
||||||
if( ! do_read_from_db )
|
if( ! do_read_from_db ) {
|
||||||
csync_vio_file_stat_destroy(fs);
|
csync_vio_file_stat_destroy(fs);
|
||||||
else
|
} else {
|
||||||
SAFE_FREE(fs->md5);
|
SAFE_FREE(fs->md5);
|
||||||
|
}
|
||||||
|
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
csync_vio_closedir(ctx, dh);
|
csync_vio_closedir(ctx, dh);
|
||||||
|
|
Loading…
Reference in a new issue