dav/sync.c

changeset 218
5f1f7602cf77
parent 217
12bad63cf5a8
child 219
9792cfe63b80
equal deleted inserted replaced
217:12bad63cf5a8 218:5f1f7602cf77
205 SyncDatabase *db = load_db(dir->database); 205 SyncDatabase *db = load_db(dir->database);
206 if(!db) { 206 if(!db) {
207 fprintf(stderr, "Cannot load database file: %s\n", dir->database); 207 fprintf(stderr, "Cannot load database file: %s\n", dir->database);
208 return -1; 208 return -1;
209 } 209 }
210 remove_deleted_conflicts(dir, db);
210 211
211 char *new_url = NULL; 212 char *new_url = NULL;
212 if(dir->collection) { 213 if(dir->collection) {
213 new_url = util_concat_path(repo->url, dir->collection); 214 new_url = util_concat_path(repo->url, dir->collection);
214 } 215 }
647 SyncDatabase *db = load_db(dir->database); 648 SyncDatabase *db = load_db(dir->database);
648 if(!db) { 649 if(!db) {
649 fprintf(stderr, "Cannot load database file: %s\n", dir->database); 650 fprintf(stderr, "Cannot load database file: %s\n", dir->database);
650 return -1; 651 return -1;
651 } 652 }
653 remove_deleted_conflicts(dir, db);
652 654
653 char *new_url = NULL; 655 char *new_url = NULL;
654 if(dir->collection) { 656 if(dir->collection) {
655 new_url = util_concat_path(repo->url, dir->collection); 657 new_url = util_concat_path(repo->url, dir->collection);
656 } 658 }
1073 1075
1074 return ret; 1076 return ret;
1075 } 1077 }
1076 1078
1077 1079
1080 void remove_deleted_conflicts(SyncDirectory *dir, SyncDatabase *db) {
1081 char **dc = calloc(sizeof(void*), db->conflict->count);
1082 int numdc = 0;
1083
1084 UcxMapIterator i = ucx_map_iterator(db->conflict);
1085 LocalResource *res;
1086 UCX_MAP_FOREACH(key, res, i) {
1087 char *path = util_concat_path(dir->path, res->path);
1088 struct stat s;
1089 if(stat(path, &s)) {
1090 if(errno == ENOENT) {
1091 dc[numdc] = res->path;
1092 numdc++;
1093 } else {
1094 fprintf(stderr, "Cannot stat file: %s\n", path);
1095 perror("");
1096 }
1097 }
1098 free(path);
1099 }
1100
1101 for(int i=0;i<numdc;i++) {
1102 ucx_map_cstr_remove(db->conflict, dc[i]);
1103 }
1104 }
1105
1078 int cmd_resolve_conflicts(CmdArgs *a) { 1106 int cmd_resolve_conflicts(CmdArgs *a) {
1079 if(a->argc != 1) { 1107 if(a->argc != 1) {
1080 fprintf(stderr, "Too %s arguments\n", a->argc < 1 ? "few" : "many"); 1108 fprintf(stderr, "Too %s arguments\n", a->argc < 1 ? "few" : "many");
1081 return -1; 1109 return -1;
1082 } 1110 }

mercurial