88 ret = cmd_pull(args); |
89 ret = cmd_pull(args); |
89 } else if(!strcmp(cmd, "push")) { |
90 } else if(!strcmp(cmd, "push")) { |
90 ret = cmd_push(args); |
91 ret = cmd_push(args); |
91 } else if(!strcasecmp(cmd, "version") || !strcasecmp(cmd, "-version") || !strcasecmp(cmd, "--version")) { |
92 } else if(!strcasecmp(cmd, "version") || !strcasecmp(cmd, "-version") || !strcasecmp(cmd, "--version")) { |
92 #ifdef DEBUG |
93 #ifdef DEBUG |
93 fprintf(stderr, "dav-synv %s unstable\n", DAV_VERSION); |
94 fprintf(stderr, "dav-sync %s unstable\n", DAV_VERSION); |
94 #else |
95 #else |
95 fprintf(stderr, "dav-sync %s\n", DAV_VERSION); |
96 fprintf(stderr, "dav-sync %s\n", DAV_VERSION); |
96 #endif |
97 #endif |
97 } |
98 } |
98 |
99 |
104 void print_usage(char *cmd) { |
105 void print_usage(char *cmd) { |
105 fprintf(stderr, "Usage: %s command [options] arguments...\n\n", cmd); |
106 fprintf(stderr, "Usage: %s command [options] arguments...\n\n", cmd); |
106 |
107 |
107 fprintf(stderr, "Commands:\n"); |
108 fprintf(stderr, "Commands:\n"); |
108 fprintf(stderr, " pull [-c] <directory>\n"); |
109 fprintf(stderr, " pull [-c] <directory>\n"); |
109 fprintf(stderr, " push [-r] <directory>\n\n"); |
110 //fprintf(stderr, " push [-r] <directory>\n\n"); |
|
111 fprintf(stderr, " push <directory>\n\n"); |
110 |
112 |
111 fprintf(stderr, "Options:\n"); |
113 fprintf(stderr, "Options:\n"); |
112 fprintf(stderr, " -c Disable conflict detection\n"); |
114 fprintf(stderr, " -c Disable conflict detection\n\n"); |
113 fprintf(stderr, " -r Read changes from stdin\n\n"); |
115 //fprintf(stderr, " -r Read changes from stdin\n\n"); |
114 } |
116 } |
115 |
117 |
116 static int res_matches_filter(SyncDirectory *dir, char *res_path) { |
118 static int res_matches_filter(SyncDirectory *dir, char *res_path) { |
117 // trash filter |
119 // trash filter |
118 if (dir->trash) { |
120 if (dir->trash) { |
189 curl_easy_setopt(sn->handle, CURLOPT_STDERR, stderr); |
191 curl_easy_setopt(sn->handle, CURLOPT_STDERR, stderr); |
190 } |
192 } |
191 |
193 |
192 DavResource *ls = dav_query(sn, "select D:getetag,idav:status from / with depth = infinity"); |
194 DavResource *ls = dav_query(sn, "select D:getetag,idav:status from / with depth = infinity"); |
193 if(!ls) { |
195 if(!ls) { |
194 fprintf(stderr, "Error\n"); |
196 print_resource_error(sn, "/"); |
195 // TODO: free |
197 // TODO: free |
196 return -1; |
198 return -1; |
197 } |
199 } |
198 |
200 |
199 if(!ls->children) { |
201 if(!ls->children) { |
200 // TODO: free |
202 // TODO: free |
|
203 fprintf(stderr, "Repository is empty\n"); |
201 return 0; // empty repository |
204 return 0; // empty repository |
202 } |
205 } |
203 |
206 |
204 UcxMap *svrres = ucx_map_new(db->resources->count); |
207 UcxMap *svrres = ucx_map_new(db->resources->count); |
205 |
208 |
589 LocalResource *local_res = elm->data; |
592 LocalResource *local_res = elm->data; |
590 if (!res_matches_filter(dir, local_res->path+1)) { |
593 if (!res_matches_filter(dir, local_res->path+1)) { |
591 // upload every changed file |
594 // upload every changed file |
592 if (local_resource_is_changed(dir, db, local_res)) { |
595 if (local_resource_is_changed(dir, db, local_res)) { |
593 DavResource *res = dav_resource_new(sn, local_res->path); |
596 DavResource *res = dav_resource_new(sn, local_res->path); |
|
597 if(!res) { |
|
598 print_resource_error(sn, local_res->path); |
|
599 break; |
|
600 } |
594 |
601 |
595 if(local_res->isdirectory) { |
602 if(local_res->isdirectory) { |
596 printf("mkcol: %s\n", local_res->path); |
603 printf("mkcol: %s\n", local_res->path); |
597 if(sync_mkdir(dir, res, local_res)) { |
604 if(sync_mkdir(dir, res, local_res)) { |
598 // TODO: I don't know what to do now |
605 print_resource_error(sn, res->path); |
|
606 dav_resource_free(res); |
|
607 break; |
599 } |
608 } |
600 } else { |
609 } else { |
601 printf("put: %s\n", local_res->path); |
610 printf("put: %s\n", local_res->path); |
602 if(sync_put_resource(dir, res, local_res)) { |
611 if(sync_put_resource(dir, res, local_res)) { |
603 // TODO: I don't know what to do now |
612 print_resource_error(sn, res->path); |
|
613 dav_resource_free(res); |
|
614 break; |
604 } |
615 } |
605 } |
616 } |
606 dav_resource_free(res); |
617 dav_resource_free(res); |
607 } |
618 } |
608 |
619 |
619 LocalResource *local; |
630 LocalResource *local; |
620 UCX_MAP_FOREACH(key, local, i) { |
631 UCX_MAP_FOREACH(key, local, i) { |
621 if (!res_matches_filter(dir, local->path+1)) { |
632 if (!res_matches_filter(dir, local->path+1)) { |
622 if(sync_delete_remote_resource(sn, local)) { |
633 if(sync_delete_remote_resource(sn, local)) { |
623 ucx_map_cstr_put(lclres, local->path, local); |
634 ucx_map_cstr_put(lclres, local->path, local); |
|
635 if(sn->error != DAV_NOT_FOUND) { |
|
636 print_resource_error(sn, local->path); |
|
637 break; |
|
638 } |
624 } |
639 } |
625 } |
640 } |
626 } |
641 } |
627 ucx_map_free(db->resources); |
642 ucx_map_free(db->resources); |
628 db->resources = lclres; |
643 db->resources = lclres; |