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 } |