dav/sync.c

changeset 563
3dffe58a573f
parent 561
5e6df4f502d3
child 564
fb482734e429
equal deleted inserted replaced
562:78a25071ed88 563:3dffe58a573f
161 stop_sighandler(&mutex, tid); 161 stop_sighandler(&mutex, tid);
162 } else if(!strcmp(cmd, "restore")) { 162 } else if(!strcmp(cmd, "restore")) {
163 tid = start_sighandler(&mutex); 163 tid = start_sighandler(&mutex);
164 ret = cmd_restore(args); 164 ret = cmd_restore(args);
165 stop_sighandler(&mutex, tid); 165 stop_sighandler(&mutex, tid);
166 } else if(!strcmp(cmd, "list-conflicts")) {
167 ret = cmd_list_conflicts(args);
166 } else if(!strcmp(cmd, "resolve-conflicts")) { 168 } else if(!strcmp(cmd, "resolve-conflicts")) {
167 ret = cmd_resolve_conflicts(args); 169 ret = cmd_resolve_conflicts(args);
168 } else if(!strcmp(cmd, "delete-conflicts")) { 170 } else if(!strcmp(cmd, "delete-conflicts")) {
169 ret = cmd_delete_conflicts(args); 171 ret = cmd_delete_conflicts(args);
170 } else if(!strcmp(cmd, "list-versions")) { 172 } else if(!strcmp(cmd, "list-versions")) {
215 fprintf(stderr, " pull [-cldr] [-t <tags>] <directory>\n"); 217 fprintf(stderr, " pull [-cldr] [-t <tags>] <directory>\n");
216 fprintf(stderr, " push [-cldrSRM] [-t <tags>] <directory>\n"); 218 fprintf(stderr, " push [-cldrSRM] [-t <tags>] <directory>\n");
217 fprintf(stderr, " archive [-cldSRM] [-t <tags>] <directory>\n"); 219 fprintf(stderr, " archive [-cldSRM] [-t <tags>] <directory>\n");
218 fprintf(stderr, 220 fprintf(stderr,
219 " restore [-ldRM] [-V <version>] [-s <directory>] [file...]\n"); 221 " restore [-ldRM] [-V <version>] [-s <directory>] [file...]\n");
222 fprintf(stderr, " list-conflicts <directory>\n");
220 fprintf(stderr, " resolve-conflicts <directory>\n"); 223 fprintf(stderr, " resolve-conflicts <directory>\n");
221 fprintf(stderr, " delete-conflicts <directory>\n"); 224 fprintf(stderr, " delete-conflicts <directory>\n");
222 fprintf(stderr, " trash-info <directory>\n"); 225 fprintf(stderr, " trash-info <directory>\n");
223 fprintf(stderr, " empty-trash <directory>\n"); 226 fprintf(stderr, " empty-trash <directory>\n");
224 fprintf(stderr, " add-tag [-s <syncdir>] <file> <tag>\n"); 227 fprintf(stderr, " add-tag [-s <syncdir>] <file> <tag>\n");
3839 } 3842 }
3840 3843
3841 return ret; 3844 return ret;
3842 } 3845 }
3843 3846
3847 int cmd_list_conflicts(CmdArgs *a) {
3848 if(a->argc != 1) {
3849 fprintf(stderr, "Too %s arguments\n", a->argc < 1 ? "few" : "many");
3850 return -1;
3851 }
3852
3853 SyncDirectory *dir = scfg_get_dir(a->argv[0]);
3854 if(!dir) {
3855 fprintf(stderr, "Unknown sync dir: %s\n", a->argv[0]);
3856 return -1;
3857 }
3858 if(scfg_check_dir(dir)) {
3859 return -1;
3860 }
3861
3862 SyncDatabase *db = load_db(dir->database);
3863 if(!db) {
3864 fprintf(stderr, "Cannot load database file: %s\n", dir->database);
3865 return -1;
3866 }
3867
3868 remove_deleted_conflicts(dir, db);
3869
3870 // get all conflict sources
3871 UcxMapIterator i = ucx_map_iterator(db->conflict);
3872 LocalResource *res;
3873 UcxList* conflict_sources = NULL;
3874 UCX_MAP_FOREACH(key, res, i) {
3875 conflict_sources = ucx_list_append(conflict_sources, res->conflict_source);
3876 }
3877
3878 // print unique conflict sources
3879 conflict_sources = ucx_list_sort(conflict_sources, ucx_cmp_str, NULL);
3880 UCX_FOREACH(elem, conflict_sources) {
3881 char* path = elem->data;
3882 if(cmd_getoption(a, "verbose")) {
3883 int confl_count = 1;
3884 while(elem->next && !strcmp(elem->next->data, path)) {
3885 elem = elem->next;
3886 ++confl_count;
3887 }
3888 printf("%s (%d)\n", path, confl_count);
3889 } else {
3890 printf("%s\n", path);
3891 while(elem->next && !strcmp(elem->next->data, path)) {
3892 elem = elem->next;
3893 }
3894 }
3895 }
3896
3897 // cleanup
3898 destroy_db(db);
3899
3900 return 0;
3901 }
3902
3844 3903
3845 // TODO: remove code dup (main.c ls_size_str) 3904 // TODO: remove code dup (main.c ls_size_str)
3846 static char* size_str(uint64_t size) { 3905 static char* size_str(uint64_t size) {
3847 char *str = malloc(16); 3906 char *str = malloc(16);
3848 3907

mercurial