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 |