Wed, 13 Jul 2016 14:29:50 +0200
changed max-retry meaning and filter configuration in sync.xml
prior to this change, max-retry was the number of trials. Now it is exactly the number of retries.
include and exclude filters are now surrounded by an filter element in sync.xml
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1 | /* |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
3 | * |
185
cd42cccee550
updated copyright notice
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
147
diff
changeset
|
4 | * Copyright 2016 Olaf Wintermann. All rights reserved. |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
5 | * |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
6 | * Redistribution and use in source and binary forms, with or without |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
7 | * modification, are permitted provided that the following conditions are met: |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
8 | * |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
9 | * 1. Redistributions of source code must retain the above copyright |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
10 | * notice, this list of conditions and the following disclaimer. |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
11 | * |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
12 | * 2. Redistributions in binary form must reproduce the above copyright |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
13 | * notice, this list of conditions and the following disclaimer in the |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
14 | * documentation and/or other materials provided with the distribution. |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
15 | * |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
17 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
20 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
25 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
26 | * POSSIBILITY OF SUCH DAMAGE. |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
27 | */ |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
28 | |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
29 | #include <stdio.h> |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
30 | #include <stdlib.h> |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
31 | #include <string.h> |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
32 | #include <errno.h> |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
33 | #include <unistd.h> |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
34 | #include <time.h> |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
35 | #include <libxml/xmlerror.h> |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
36 | #include <sys/types.h> |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
37 | #include <ucx/string.h> |
52
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
38 | #include <ucx/utils.h> |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
39 | #include <dirent.h> |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
40 | |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
41 | #include <libidav/webdav.h> |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
42 | #include <libidav/utils.h> |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
43 | |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
44 | #include "config.h" |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
45 | #include "scfg.h" |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
46 | #include "sopt.h" |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
47 | #include "db.h" |
191
0e45b04236a7
more specific error messages in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
190
diff
changeset
|
48 | #include "error.h" |
200
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
49 | #include "assistant.h" |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
50 | |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
51 | #include "sync.h" |
53
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
52 | #include "ucx/properties.h" |
233
d8042cede66c
improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
228
diff
changeset
|
53 | #include "libidav/session.h" |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
54 | |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
55 | static DavContext *ctx; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
56 | |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
57 | static void xmlerrorfnc(void * c, const char * msg, ... ) { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
58 | // nothing |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
59 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
60 | |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
61 | int main(int argc, char **argv) { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
62 | if(argc < 2) { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
63 | fprintf(stderr, "Missing command\n"); |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
64 | print_usage(argv[0]); |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
65 | return -1; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
66 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
67 | |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
68 | char *cmd = argv[1]; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
69 | CmdArgs *args = cmd_parse_args(argc - 2, argv + 2); |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
70 | if(!args) { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
71 | print_usage(argv[0]); |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
72 | return -1; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
73 | } |
217
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
74 | int ret = EXIT_FAILURE; |
54 | 75 | |
217
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
76 | int loadcfg = 1; |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
77 | if(!strcasecmp(cmd, "version") || !strcasecmp(cmd, "-version") || !strcasecmp(cmd, "--version")) { |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
78 | fprintf(stderr, "dav-sync %s\n", DAV_VERSION); |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
79 | loadcfg = 0; |
235
0468df02e18f
fixed dav get with -u option
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
233
diff
changeset
|
80 | cmd_args_free(args); |
0468df02e18f
fixed dav get with -u option
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
233
diff
changeset
|
81 | return -1; |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
82 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
83 | |
217
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
84 | if(loadcfg) { |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
85 | xmlGenericErrorFunc fnc = xmlerrorfnc; |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
86 | initGenericErrorDefaultFunc(&fnc); |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
87 | ctx = dav_context_new(); |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
88 | load_config(ctx); |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
89 | |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
90 | // copy proxy config |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
91 | memcpy(ctx->http_proxy, get_http_proxy(), sizeof(Proxy)); |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
92 | memcpy(ctx->https_proxy, get_https_proxy(), sizeof(Proxy)); |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
93 | |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
94 | if(load_sync_config()) { |
222
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
95 | cmd_args_free(args); |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
96 | dav_context_destroy(ctx); |
217
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
97 | return EXIT_FAILURE; |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
98 | } |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
99 | } |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
100 | |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
101 | if(!strcmp(cmd, "pull")) { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
102 | ret = cmd_pull(args); |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
103 | } else if(!strcmp(cmd, "push")) { |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
104 | ret = cmd_push(args); |
217
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
105 | } else if(!strcmp(cmd, "resolve-conflicts")) { |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
106 | ret = cmd_resolve_conflicts(args); |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
107 | } else if(!strcmp(cmd, "delete-conflicts")) { |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
108 | ret = cmd_delete_conflicts(args); |
204
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
109 | } else if(!strcmp(cmd, "trash-info")) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
110 | ret = cmd_trash_info(args); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
111 | } else if(!strcmp(cmd, "empty-trash")) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
112 | ret = cmd_empty_trash(args); |
200
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
113 | } else if(!strcmp(cmd, "add-directory")) { |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
114 | ret = cmd_add_directory(args); |
198
44054c452de1
added list-repositories and list-directories commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
192
diff
changeset
|
115 | } else if(!strcmp(cmd, "list-directories")) { |
44054c452de1
added list-repositories and list-directories commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
192
diff
changeset
|
116 | ret = list_syncdirs(); |
225
a297c2e28fa1
improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
224
diff
changeset
|
117 | } else { |
a297c2e28fa1
improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
224
diff
changeset
|
118 | print_usage(argv[0]); |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
119 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
120 | |
224
4b55f05f4e00
added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
121 | // cleanup |
222
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
122 | cmd_args_free(args); |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
123 | dav_context_destroy(ctx); |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
124 | |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
125 | free_config(); |
224
4b55f05f4e00
added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
126 | free_sync_config(); |
4b55f05f4e00
added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
127 | |
4b55f05f4e00
added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
128 | curl_global_cleanup(); |
4b55f05f4e00
added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
129 | xmlCleanupParser(); |
58
1708cba82ca3
added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
130 | |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
131 | return ret; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
132 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
133 | |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
134 | void print_usage(char *cmd) { |
53
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
135 | fprintf(stderr, "Usage: %s command [options] arguments...\n\n", cmd); |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
136 | |
53
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
137 | fprintf(stderr, "Commands:\n"); |
221
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
138 | fprintf(stderr, " pull [-cld] <directory>\n"); |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
139 | fprintf(stderr, " push [-cld] <directory>\n"); |
219
9792cfe63b80
added resolve-conflicts and delete-conflicts to help text and fixed crash with unknown cmd options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
218
diff
changeset
|
140 | fprintf(stderr, " resolve-conflicts <directory>\n"); |
9792cfe63b80
added resolve-conflicts and delete-conflicts to help text and fixed crash with unknown cmd options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
218
diff
changeset
|
141 | fprintf(stderr, " delete-conflicts <directory>\n"); |
204
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
142 | fprintf(stderr, " trash-info <directory>\n"); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
143 | fprintf(stderr, " empty-trash <directory>\n\n"); |
53
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
144 | |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
145 | fprintf(stderr, "Options:\n"); |
204
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
146 | fprintf(stderr, " -c Disable conflict detection\n"); |
221
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
147 | fprintf(stderr, " -l Lock the repository before access\n"); |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
148 | fprintf(stderr, " -d Don't lock the repository\n"); |
191
0e45b04236a7
more specific error messages in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
190
diff
changeset
|
149 | //fprintf(stderr, " -r Read changes from stdin\n\n"); |
204
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
150 | fprintf(stderr, " -v verbose output (all commands)\n\n"); |
198
44054c452de1
added list-repositories and list-directories commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
192
diff
changeset
|
151 | |
44054c452de1
added list-repositories and list-directories commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
192
diff
changeset
|
152 | fprintf(stderr, "Config commands:\n"); |
200
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
153 | fprintf(stderr, " add-directory\n"); |
198
44054c452de1
added list-repositories and list-directories commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
192
diff
changeset
|
154 | fprintf(stderr, " list-directories\n\n"); |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
155 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
156 | |
58
1708cba82ca3
added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
157 | static int res_matches_filter(SyncDirectory *dir, char *res_path) { |
65
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
158 | // trash filter |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
159 | if (dir->trash) { |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
160 | sstr_t rpath = sstr(util_concat_path(dir->path, res_path)); |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
161 | if (sstrprefix(rpath, sstr(dir->trash))) { |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
162 | free(rpath.ptr); |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
163 | return 1; |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
164 | } |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
165 | free(rpath.ptr); |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
166 | } |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
167 | |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
168 | // include/exclude filter |
58
1708cba82ca3
added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
169 | UCX_FOREACH(inc, dir->include) { |
1708cba82ca3
added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
170 | regex_t* pattern = (regex_t*) inc->data; |
61
e9b102d5a6f6
fixed include/exclude filter for dav-sync
Mike Becker <universe@uap-core.de>
parents:
58
diff
changeset
|
171 | if (regexec(pattern, res_path, 0, NULL, 0) == 0) { |
e9b102d5a6f6
fixed include/exclude filter for dav-sync
Mike Becker <universe@uap-core.de>
parents:
58
diff
changeset
|
172 | UCX_FOREACH(exc, dir->exclude) { |
e9b102d5a6f6
fixed include/exclude filter for dav-sync
Mike Becker <universe@uap-core.de>
parents:
58
diff
changeset
|
173 | regex_t* pattern = (regex_t*) exc->data; |
e9b102d5a6f6
fixed include/exclude filter for dav-sync
Mike Becker <universe@uap-core.de>
parents:
58
diff
changeset
|
174 | if (regexec(pattern, res_path, 0, NULL, 0) == 0) { |
e9b102d5a6f6
fixed include/exclude filter for dav-sync
Mike Becker <universe@uap-core.de>
parents:
58
diff
changeset
|
175 | return 1; |
e9b102d5a6f6
fixed include/exclude filter for dav-sync
Mike Becker <universe@uap-core.de>
parents:
58
diff
changeset
|
176 | } |
e9b102d5a6f6
fixed include/exclude filter for dav-sync
Mike Becker <universe@uap-core.de>
parents:
58
diff
changeset
|
177 | } |
e9b102d5a6f6
fixed include/exclude filter for dav-sync
Mike Becker <universe@uap-core.de>
parents:
58
diff
changeset
|
178 | return 0; |
58
1708cba82ca3
added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
179 | } |
1708cba82ca3
added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
180 | } |
61
e9b102d5a6f6
fixed include/exclude filter for dav-sync
Mike Becker <universe@uap-core.de>
parents:
58
diff
changeset
|
181 | return 1; |
58
1708cba82ca3
added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
182 | } |
1708cba82ca3
added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
183 | |
73
41e88442ad4e
ssl version is now configurable
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
72
diff
changeset
|
184 | static DavSession* create_session(DavContext *ctx, Repository *repo, char *url) { |
41e88442ad4e
ssl version is now configurable
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
72
diff
changeset
|
185 | DavSession *sn = dav_session_new_auth( |
41e88442ad4e
ssl version is now configurable
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
72
diff
changeset
|
186 | ctx, |
41e88442ad4e
ssl version is now configurable
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
72
diff
changeset
|
187 | url, |
41e88442ad4e
ssl version is now configurable
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
72
diff
changeset
|
188 | repo->user, |
41e88442ad4e
ssl version is now configurable
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
72
diff
changeset
|
189 | repo->password); |
41e88442ad4e
ssl version is now configurable
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
72
diff
changeset
|
190 | sn->flags = get_repository_flags(repo); |
41e88442ad4e
ssl version is now configurable
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
72
diff
changeset
|
191 | sn->key = dav_context_get_key(ctx, repo->default_key); |
199
f448fc8c9191
enabled cert verification
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
198
diff
changeset
|
192 | curl_easy_setopt(sn->handle, CURLOPT_HTTPAUTH, repo->authmethods); |
f448fc8c9191
enabled cert verification
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
198
diff
changeset
|
193 | curl_easy_setopt(sn->handle, CURLOPT_SSLVERSION, repo->ssl_version); |
f448fc8c9191
enabled cert verification
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
198
diff
changeset
|
194 | if(repo->cert) { |
f448fc8c9191
enabled cert verification
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
198
diff
changeset
|
195 | curl_easy_setopt(sn->handle, CURLOPT_CAPATH, repo->cert); |
f448fc8c9191
enabled cert verification
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
198
diff
changeset
|
196 | } |
f448fc8c9191
enabled cert verification
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
198
diff
changeset
|
197 | if(!repo->verification) { |
f448fc8c9191
enabled cert verification
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
198
diff
changeset
|
198 | curl_easy_setopt(sn->handle, CURLOPT_SSL_VERIFYPEER, 0); |
f448fc8c9191
enabled cert verification
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
198
diff
changeset
|
199 | curl_easy_setopt(sn->handle, CURLOPT_SSL_VERIFYHOST, 0); |
f448fc8c9191
enabled cert verification
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
198
diff
changeset
|
200 | } |
73
41e88442ad4e
ssl version is now configurable
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
72
diff
changeset
|
201 | return sn; |
41e88442ad4e
ssl version is now configurable
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
72
diff
changeset
|
202 | } |
41e88442ad4e
ssl version is now configurable
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
72
diff
changeset
|
203 | |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
204 | int cmd_pull(CmdArgs *a) { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
205 | if(a->argc != 1) { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
206 | fprintf(stderr, "Too %s arguments\n", a->argc < 1 ? "few" : "many"); |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
207 | return -1; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
208 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
209 | |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
210 | SyncDirectory *dir = scfg_get_dir(a->argv[0]); |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
211 | if(!dir) { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
212 | fprintf(stderr, "Unknown sync dir: %s\n", a->argv[0]); |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
213 | return -1; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
214 | } |
233
d8042cede66c
improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
228
diff
changeset
|
215 | if(scfg_check_dir(dir)) { |
d8042cede66c
improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
228
diff
changeset
|
216 | return -1; |
d8042cede66c
improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
228
diff
changeset
|
217 | } |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
218 | |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
219 | Repository *repo = get_repository(sstr(dir->repository)); |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
220 | if(!repo) { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
221 | fprintf(stderr, "Unkown repository %s\n", dir->name); |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
222 | return -1; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
223 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
224 | |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
225 | SyncDatabase *db = load_db(dir->database); |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
226 | if(!db) { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
227 | fprintf(stderr, "Cannot load database file: %s\n", dir->database); |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
228 | return -1; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
229 | } |
218
5f1f7602cf77
automatically remove deleted conflict files from the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
217
diff
changeset
|
230 | remove_deleted_conflicts(dir, db); |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
231 | |
56
99f7816fcf01
added collection config for sync directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
55
diff
changeset
|
232 | char *new_url = NULL; |
99f7816fcf01
added collection config for sync directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
55
diff
changeset
|
233 | if(dir->collection) { |
99f7816fcf01
added collection config for sync directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
55
diff
changeset
|
234 | new_url = util_concat_path(repo->url, dir->collection); |
99f7816fcf01
added collection config for sync directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
55
diff
changeset
|
235 | } |
73
41e88442ad4e
ssl version is now configurable
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
72
diff
changeset
|
236 | DavSession *sn = create_session(ctx, repo, new_url ? new_url : repo->url); |
222
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
237 | ucx_mempool_reg_destr(sn->mp, db, (ucx_destructor)destroy_db); |
56
99f7816fcf01
added collection config for sync directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
55
diff
changeset
|
238 | if(new_url) { |
99f7816fcf01
added collection config for sync directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
55
diff
changeset
|
239 | free(new_url); |
99f7816fcf01
added collection config for sync directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
55
diff
changeset
|
240 | } |
68
f6d3db6113d3
added verbose option + encryption flag fixes
Mike Becker <universe@uap-core.de>
parents:
66
diff
changeset
|
241 | if (cmd_getoption(a, "verbose")) { |
f6d3db6113d3
added verbose option + encryption flag fixes
Mike Becker <universe@uap-core.de>
parents:
66
diff
changeset
|
242 | curl_easy_setopt(sn->handle, CURLOPT_VERBOSE, 1L); |
f6d3db6113d3
added verbose option + encryption flag fixes
Mike Becker <universe@uap-core.de>
parents:
66
diff
changeset
|
243 | curl_easy_setopt(sn->handle, CURLOPT_STDERR, stderr); |
f6d3db6113d3
added verbose option + encryption flag fixes
Mike Becker <universe@uap-core.de>
parents:
66
diff
changeset
|
244 | } |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
245 | |
221
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
246 | // lock repository |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
247 | DavBool locked = FALSE; |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
248 | DavResource *root = dav_resource_new(sn, "/"); |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
249 | root->iscollection = TRUE; |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
250 | if((dir->lockpush || cmd_getoption(a, "lock")) && !cmd_getoption(a, "nolock")) { |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
251 | if(dav_lock(root)) { |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
252 | print_resource_error(sn, "/"); |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
253 | dav_session_destroy(sn); |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
254 | fprintf(stderr, "Abort\n"); |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
255 | return -1; |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
256 | } |
233
d8042cede66c
improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
228
diff
changeset
|
257 | DavLock *lock = dav_get_lock(sn, "/"); |
d8042cede66c
improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
228
diff
changeset
|
258 | if(lock) { |
d8042cede66c
improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
228
diff
changeset
|
259 | printf("Lock-Token: %s\n", lock->token); |
d8042cede66c
improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
228
diff
changeset
|
260 | } |
221
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
261 | locked = TRUE; |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
262 | } |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
263 | |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
264 | int ret = 0; |
144
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
265 | DavResource *ls = dav_query(sn, "select D:getetag,idav:status from / with depth = infinity"); |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
266 | if(!ls) { |
191
0e45b04236a7
more specific error messages in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
190
diff
changeset
|
267 | print_resource_error(sn, "/"); |
221
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
268 | if(locked) { |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
269 | if(dav_unlock(root)) { |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
270 | print_resource_error(sn, "/"); |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
271 | } |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
272 | } |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
273 | |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
274 | fprintf(stderr, "Abort\n"); |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
275 | |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
276 | dav_session_destroy(sn); |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
277 | // TODO: free |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
278 | return -1; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
279 | } |
224
4b55f05f4e00
added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
280 | if(!ls->iscollection) { |
4b55f05f4e00
added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
281 | fprintf(stderr, "%s is not a collection.\nAbort.\n", ls->path); |
221
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
282 | if(locked) { |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
283 | if(dav_unlock(root)) { |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
284 | print_resource_error(sn, "/"); |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
285 | } |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
286 | } |
224
4b55f05f4e00
added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
287 | // TODO: free |
4b55f05f4e00
added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
288 | dav_session_destroy(sn); |
4b55f05f4e00
added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
289 | return -1; |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
290 | } |
50
9c486ea25161
dav-sync detects remote removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
291 | |
224
4b55f05f4e00
added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
292 | int sync_success = 0; |
4b55f05f4e00
added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
293 | int sync_delete = 0; |
4b55f05f4e00
added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
294 | int sync_error = 0; |
4b55f05f4e00
added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
295 | |
50
9c486ea25161
dav-sync detects remote removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
296 | UcxMap *svrres = ucx_map_new(db->resources->count); |
9c486ea25161
dav-sync detects remote removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
297 | |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
298 | UcxList *stack = ucx_list_prepend(NULL, ls->children); |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
299 | while(stack) { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
300 | DavResource *res = stack->data; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
301 | stack = ucx_list_remove(stack, stack); |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
302 | |
58
1708cba82ca3
added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
303 | while(res) { |
1708cba82ca3
added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
304 | if (res_matches_filter(dir, res->path)) { |
1708cba82ca3
added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
305 | res = res->next; |
1708cba82ca3
added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
306 | continue; |
1708cba82ca3
added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
307 | } |
1708cba82ca3
added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
308 | |
144
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
309 | char *status = dav_get_property(res, "idav:status"); |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
310 | if(status && !strcmp(status, "broken")) { |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
311 | res = res->next; |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
312 | continue; |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
313 | } |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
314 | |
50
9c486ea25161
dav-sync detects remote removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
315 | // download the resource |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
316 | if(sync_get_resource(a, dir, res, db, &sync_success)) { |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
317 | fprintf(stderr, "sync_get_resource failed for resource: %s\n", res->path); |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
318 | sync_error++; |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
319 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
320 | |
64
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
321 | // add every resource from the server to svrres |
215
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
322 | // then db-resources contains only resources which are not on the |
64
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
323 | // server |
50
9c486ea25161
dav-sync detects remote removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
324 | LocalResource *local = ucx_map_cstr_get(db->resources, res->path); |
9c486ea25161
dav-sync detects remote removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
325 | ucx_map_cstr_put(svrres, res->path, local); |
9c486ea25161
dav-sync detects remote removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
326 | ucx_map_cstr_remove(db->resources, res->path); |
9c486ea25161
dav-sync detects remote removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
327 | |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
328 | if(res->children) { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
329 | stack = ucx_list_prepend(stack, res->children); |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
330 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
331 | res = res->next; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
332 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
333 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
334 | |
64
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
335 | // delete every remotely removed resource |
50
9c486ea25161
dav-sync detects remote removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
336 | UcxMapIterator i = ucx_map_iterator(db->resources); |
9c486ea25161
dav-sync detects remote removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
337 | LocalResource *local; |
190
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
338 | UcxList *rmdirs = NULL; |
50
9c486ea25161
dav-sync detects remote removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
339 | UCX_MAP_FOREACH(key, local, i) { |
58
1708cba82ca3
added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
340 | if (res_matches_filter(dir, local->path)) { |
1708cba82ca3
added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
341 | continue; |
1708cba82ca3
added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
342 | } |
64
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
343 | // sync_remove_resource does all necessary tests |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
344 | int ret = sync_remove_local_resource(dir, local); |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
345 | if(ret == -1) { |
190
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
346 | rmdirs = ucx_list_append(rmdirs, local); |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
347 | } else if(ret == 0) { |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
348 | sync_delete++; |
190
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
349 | } |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
350 | } |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
351 | UCX_FOREACH(elm, rmdirs) { |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
352 | LocalResource *local_dir = elm->data; |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
353 | sync_remove_local_directory(dir, local_dir); |
50
9c486ea25161
dav-sync detects remote removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
354 | } |
224
4b55f05f4e00
added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
355 | ucx_map_free_content(db->resources, (ucx_destructor)local_resource_free); |
50
9c486ea25161
dav-sync detects remote removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
356 | ucx_map_free(db->resources); |
9c486ea25161
dav-sync detects remote removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
357 | db->resources = svrres; |
9c486ea25161
dav-sync detects remote removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
358 | |
221
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
359 | // unlock repository |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
360 | if(locked) { |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
361 | if(dav_unlock(root)) { |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
362 | print_resource_error(sn, "/"); |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
363 | ret = -1; |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
364 | } |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
365 | } |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
366 | |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
367 | // store db |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
368 | if(store_db(db, dir->database)) { |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
369 | fprintf(stderr, "Cannot store sync db\n"); |
223
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
370 | ret = -2; |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
371 | } |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
372 | |
224
4b55f05f4e00
added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
373 | // cleanup |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
374 | dav_session_destroy(sn); |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
375 | |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
376 | // Report |
223
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
377 | if(ret != -2) { |
221
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
378 | char *str_success = sync_success == 1 ? "file" : "files"; |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
379 | char *str_delete = sync_delete == 1 ? "file" : "files"; |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
380 | char *str_error = sync_error == 1 ? "error" : "errors"; |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
381 | printf("Result: %d %s pulled, %d %s deleted, %d %s\n", |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
382 | sync_success, str_success, |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
383 | sync_delete,str_delete, |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
384 | sync_error, str_error); |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
385 | } |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
386 | |
221
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
387 | return ret; |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
388 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
389 | |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
390 | int sync_get_resource( |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
391 | CmdArgs *a, |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
392 | SyncDirectory *dir, |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
393 | DavResource *res, |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
394 | SyncDatabase *db, |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
395 | int *counter) |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
396 | { |
64
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
397 | int cdt = cmd_getoption(a, "conflict") ? 0 : 1; // conflict detection |
51
e94bf8530d56
dav-sync deletes removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
50
diff
changeset
|
398 | |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
399 | LocalResource *local = ucx_map_cstr_get(db->resources, res->path); |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
400 | char *local_path = util_concat_path(dir->path, res->path); |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
401 | |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
402 | char *etag = dav_get_property(res, "D:getetag"); |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
403 | struct stat s; |
190
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
404 | if(local && !res->iscollection) { |
65
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
405 | int exists = 1; |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
406 | if(stat(local_path, &s)) { |
64
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
407 | // Ignore the fact, that the file is locally removed. If the |
145
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
408 | // server has an updated version, we read the file or the |
64
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
409 | // next push will delete it on the server. |
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
410 | if(errno != ENOENT) { |
52
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
411 | fprintf(stderr, "Cannot stat file: %s\n", local_path); |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
412 | free(local_path); |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
413 | return -1; |
65
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
414 | } else { |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
415 | exists = 0; |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
416 | } |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
417 | } |
52
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
418 | |
48
08d5544c92fb
fixed etag handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
419 | if(local->etag) { |
08d5544c92fb
fixed etag handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
420 | sstr_t e = sstr(etag); |
08d5544c92fb
fixed etag handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
421 | if(sstrprefix(e, S("W/"))) { |
08d5544c92fb
fixed etag handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
422 | e = sstrsubs(e, 2); |
08d5544c92fb
fixed etag handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
423 | } |
08d5544c92fb
fixed etag handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
424 | if(!strcmp(e.ptr, local->etag)) { |
08d5544c92fb
fixed etag handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
425 | // resource is already up-to-date on the client |
222
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
426 | free(local_path); |
48
08d5544c92fb
fixed etag handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
427 | return 0; |
08d5544c92fb
fixed etag handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
428 | } |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
429 | } |
52
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
430 | |
65
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
431 | if(cdt && exists && s.st_mtime != local->last_modified) { |
52
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
432 | // file modified on the server and on the client |
216
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
433 | rename_conflict_file(dir, db, local->path); |
52
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
434 | } |
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
435 | } else { |
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
436 | if(stat(local_path, &s)) { |
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
437 | if(errno != ENOENT) { |
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
438 | fprintf(stderr, "Cannot stat file: %s\n", local_path); |
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
439 | } |
64
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
440 | } else if(S_ISDIR(s.st_mode)) { |
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
441 | //fprintf(stderr, "Error: file %s is a directory\n", local_path); |
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
442 | } else if(cdt) { |
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
443 | // rename file on conflict |
216
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
444 | rename_conflict_file(dir, db, res->path); |
52
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
445 | } |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
446 | } |
52
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
447 | |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
448 | int ret = 0; |
145
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
449 | char *tmp_path = create_tmp_download_path(local_path); |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
450 | if(res->iscollection) { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
451 | mode_t mode = S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
452 | if(util_mkdir(local_path, mode) && errno != EEXIST) { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
453 | ret = -1; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
454 | } |
190
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
455 | |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
456 | if(ret == 0) { |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
457 | if(!local) { |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
458 | // new local resource |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
459 | local = calloc(1, sizeof(LocalResource)); |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
460 | local->path = util_concat_path(res->path, "/"); |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
461 | local->last_modified = s.st_mtime; |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
462 | ucx_map_cstr_put(db->resources, local->path, local); |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
463 | } |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
464 | } |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
465 | } else { |
145
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
466 | if(!tmp_path) { |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
467 | fprintf(stderr, "Cannot create tmp path for %s\n", local_path); |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
468 | free(local_path); |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
469 | return -1; |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
470 | } |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
471 | FILE *out = fopen(tmp_path, "wb"); |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
472 | if(!out) { |
52
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
473 | fprintf(stderr, "Cannot open output file: %s\n", local_path); |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
474 | free(local_path); |
145
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
475 | free(tmp_path); |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
476 | return -1; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
477 | } |
52
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
478 | printf("get: %s\n", res->path); |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
479 | if(dav_get_content(res, out, (dav_write_func)fwrite)) { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
480 | ret = -1; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
481 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
482 | fclose(out); |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
483 | |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
484 | if(ret == 0) { |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
485 | (*counter)++; |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
486 | |
145
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
487 | if(dir->trash && dir->backuppull) { |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
488 | move_to_trash(dir, local_path); |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
489 | } |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
490 | if(rename(tmp_path, local_path)) { |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
491 | fprintf( |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
492 | stderr, |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
493 | "Cannot rename file %s to %s\n", |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
494 | tmp_path, |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
495 | local_path); |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
496 | perror(""); |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
497 | free(tmp_path); |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
498 | free(local_path); |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
499 | return -1; |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
500 | } |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
501 | |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
502 | if(stat(local_path, &s)) { |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
503 | fprintf(stderr, "Cannot stat file: %s\n", local_path); |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
504 | perror(""); |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
505 | } |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
506 | |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
507 | if(!local) { |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
508 | // new local resource |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
509 | local = calloc(1, sizeof(LocalResource)); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
510 | local->path = strdup(res->path); |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
511 | ucx_map_cstr_put(db->resources, local->path, local); |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
512 | } |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
513 | |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
514 | if(local->etag) { |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
515 | free(local->etag); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
516 | } |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
517 | // set metadata from stat |
222
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
518 | local->etag = strdup(etag); |
54 | 519 | local->last_modified = s.st_mtime; |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
520 | local->size = s.st_size; |
145
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
521 | } else { |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
522 | if(unlink(tmp_path)) { |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
523 | fprintf(stderr, "Cannot remove tmp file: %s\n", tmp_path); |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
524 | } |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
525 | } |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
526 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
527 | |
145
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
528 | free(tmp_path); |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
529 | free(local_path); |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
530 | return ret; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
531 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
532 | |
190
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
533 | int sync_remove_local_resource(SyncDirectory *dir, LocalResource *res) { |
50
9c486ea25161
dav-sync detects remote removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
534 | char *local_path = util_concat_path(dir->path, res->path); |
9c486ea25161
dav-sync detects remote removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
535 | struct stat s; |
9c486ea25161
dav-sync detects remote removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
536 | if(stat(local_path, &s)) { |
9c486ea25161
dav-sync detects remote removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
537 | free(local_path); |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
538 | return -2; |
190
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
539 | } |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
540 | |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
541 | if(S_ISDIR(s.st_mode)) { |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
542 | free(local_path); |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
543 | return -1; |
50
9c486ea25161
dav-sync detects remote removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
544 | } |
9c486ea25161
dav-sync detects remote removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
545 | |
54 | 546 | if(s.st_mtime != res->last_modified) { |
50
9c486ea25161
dav-sync detects remote removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
547 | free(local_path); |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
548 | return -2; |
50
9c486ea25161
dav-sync detects remote removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
549 | } |
9c486ea25161
dav-sync detects remote removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
550 | |
9c486ea25161
dav-sync detects remote removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
551 | printf("delete: %s\n", res->path); |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
552 | int ret = 0; |
65
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
553 | if(dir->trash) { |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
554 | move_to_trash(dir, local_path); |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
555 | } else if(unlink(local_path)) { |
50
9c486ea25161
dav-sync detects remote removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
556 | fprintf(stderr, "Cannot remove file %s\n", local_path); |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
557 | ret = -2; |
50
9c486ea25161
dav-sync detects remote removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
558 | } |
9c486ea25161
dav-sync detects remote removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
559 | free(local_path); |
190
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
560 | |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
561 | return ret; |
190
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
562 | } |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
563 | |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
564 | void sync_remove_local_directory(SyncDirectory *dir, LocalResource *res) { |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
565 | char *local_path = util_concat_path(dir->path, res->path); |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
566 | |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
567 | printf("delete: %s\n", res->path); |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
568 | if(rmdir(local_path)) { |
224
4b55f05f4e00
added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
569 | fprintf(stderr, "rmdir: %s : ", local_path); |
4b55f05f4e00
added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
570 | perror(NULL); |
190
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
571 | } |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
572 | |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
573 | free(local_path); |
50
9c486ea25161
dav-sync detects remote removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
574 | } |
9c486ea25161
dav-sync detects remote removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
49
diff
changeset
|
575 | |
216
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
576 | void rename_conflict_file(SyncDirectory *dir, SyncDatabase *db, char *path) { |
52
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
577 | char *local_path = util_concat_path(dir->path, path); |
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
578 | char *parent = util_parent_path(local_path); |
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
579 | |
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
580 | int rev = 0; |
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
581 | struct stat s; |
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
582 | int loop = 1; |
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
583 | do { |
216
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
584 | char *res_parent = util_parent_path(path); |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
585 | char *res_name = util_resource_name(path); |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
586 | |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
587 | sstr_t new_path = ucx_sprintf( |
52
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
588 | "%sorig.%d.%s", |
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
589 | parent, |
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
590 | rev, |
216
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
591 | res_name); |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
592 | sstr_t new_res_path = ucx_sprintf( |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
593 | "%sorig.%d.%s", |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
594 | res_parent, |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
595 | rev, |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
596 | res_name); |
52
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
597 | |
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
598 | |
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
599 | if(stat(new_path.ptr, &s)) { |
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
600 | if(errno == ENOENT) { |
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
601 | loop = 0; |
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
602 | printf("conflict: %s\n", local_path); |
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
603 | if(rename(local_path, new_path.ptr)) { |
65
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
604 | //printf("errno: %d\n", errno); |
52
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
605 | fprintf( |
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
606 | stderr, |
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
607 | "Cannot rename file %s to %s\n", |
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
608 | local_path, |
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
609 | new_path.ptr); |
216
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
610 | } else { |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
611 | LocalResource *conflict = calloc(1, sizeof(LocalResource)); |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
612 | conflict->path = strdup(new_res_path.ptr); |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
613 | ucx_map_cstr_put(db->conflict, new_res_path.ptr, conflict); |
52
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
614 | } |
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
615 | } |
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
616 | } |
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
617 | rev++; |
216
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
618 | free(res_parent); |
52
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
619 | free(new_path.ptr); |
216
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
620 | free(new_res_path.ptr); |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
621 | |
52
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
622 | } while(loop); |
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
623 | free(parent); |
216
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
624 | free(local_path); |
52
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
625 | } |
91517b874a86
added conflict detection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
51
diff
changeset
|
626 | |
145
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
627 | char* create_tmp_download_path(char *path) { |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
628 | char *new_path = NULL; |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
629 | char *parent = util_parent_path(path); |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
630 | for (int i=0;;i++) { |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
631 | sstr_t np = ucx_asprintf( |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
632 | ucx_default_allocator(), |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
633 | "%sdownload%d-%s", |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
634 | parent, |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
635 | i, |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
636 | util_resource_name(path)); |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
637 | |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
638 | struct stat s; |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
639 | if(stat(np.ptr, &s)) { |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
640 | if(errno == ENOENT) { |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
641 | new_path = np.ptr; |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
642 | } |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
643 | break; |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
644 | } |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
645 | free(np.ptr); |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
646 | }; |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
647 | |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
648 | free(parent); |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
649 | return new_path; |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
650 | } |
82475dc12dd4
improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
651 | |
65
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
652 | void move_to_trash(SyncDirectory *dir, char *path) { |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
653 | char *new_path = NULL; |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
654 | for (int i=0;;i++) { |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
655 | sstr_t np = ucx_asprintf( |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
656 | ucx_default_allocator(), |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
657 | "%s%d-%s", |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
658 | dir->trash, |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
659 | i, |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
660 | util_resource_name(path)); |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
661 | |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
662 | struct stat s; |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
663 | if(stat(np.ptr, &s)) { |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
664 | if(errno == ENOENT) { |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
665 | new_path = np.ptr; |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
666 | } |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
667 | break; |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
668 | } |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
669 | free(np.ptr); |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
670 | }; |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
671 | |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
672 | if(!new_path) { |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
673 | fprintf(stderr, "Cannot move file %s to trash.\n", path); |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
674 | return; |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
675 | } |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
676 | |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
677 | if(rename(path, new_path)) { |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
678 | //printf("errno: %d\n", errno); |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
679 | fprintf( |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
680 | stderr, |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
681 | "Cannot rename file %s to %s\n", |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
682 | path, |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
683 | new_path); |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
684 | } |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
685 | |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
686 | free(new_path); |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
687 | } |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
688 | |
216
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
689 | static int res_isconflict(SyncDatabase *db, LocalResource *res) { |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
690 | return ucx_map_cstr_get(db->conflict, res->path) ? 1 : 0; |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
691 | } |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
692 | |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
693 | int cmd_push(CmdArgs *a) { |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
694 | if(a->argc != 1) { |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
695 | fprintf(stderr, "Too %s arguments\n", a->argc < 1 ? "few" : "many"); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
696 | return -1; |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
697 | } |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
698 | |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
699 | SyncDirectory *dir = scfg_get_dir(a->argv[0]); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
700 | if(!dir) { |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
701 | fprintf(stderr, "Unknown sync dir: %s\n", a->argv[0]); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
702 | return -1; |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
703 | } |
233
d8042cede66c
improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
228
diff
changeset
|
704 | if(scfg_check_dir(dir)) { |
d8042cede66c
improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
228
diff
changeset
|
705 | return -1; |
d8042cede66c
improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
228
diff
changeset
|
706 | } |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
707 | |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
708 | Repository *repo = get_repository(sstr(dir->repository)); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
709 | if(!repo) { |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
710 | fprintf(stderr, "Unkown repository %s\n", dir->name); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
711 | return -1; |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
712 | } |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
713 | |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
714 | SyncDatabase *db = load_db(dir->database); |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
715 | if(!db) { |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
716 | fprintf(stderr, "Cannot load database file: %s\n", dir->database); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
717 | return -1; |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
718 | } |
218
5f1f7602cf77
automatically remove deleted conflict files from the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
217
diff
changeset
|
719 | remove_deleted_conflicts(dir, db); |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
720 | |
56
99f7816fcf01
added collection config for sync directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
55
diff
changeset
|
721 | char *new_url = NULL; |
99f7816fcf01
added collection config for sync directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
55
diff
changeset
|
722 | if(dir->collection) { |
99f7816fcf01
added collection config for sync directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
55
diff
changeset
|
723 | new_url = util_concat_path(repo->url, dir->collection); |
99f7816fcf01
added collection config for sync directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
55
diff
changeset
|
724 | } |
73
41e88442ad4e
ssl version is now configurable
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
72
diff
changeset
|
725 | DavSession *sn = create_session(ctx, repo, new_url ? new_url : repo->url); |
222
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
726 | ucx_mempool_reg_destr(sn->mp, db, (ucx_destructor)destroy_db); |
56
99f7816fcf01
added collection config for sync directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
55
diff
changeset
|
727 | if(new_url) { |
99f7816fcf01
added collection config for sync directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
55
diff
changeset
|
728 | free(new_url); |
99f7816fcf01
added collection config for sync directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
55
diff
changeset
|
729 | } |
68
f6d3db6113d3
added verbose option + encryption flag fixes
Mike Becker <universe@uap-core.de>
parents:
66
diff
changeset
|
730 | if (cmd_getoption(a, "verbose")) { |
f6d3db6113d3
added verbose option + encryption flag fixes
Mike Becker <universe@uap-core.de>
parents:
66
diff
changeset
|
731 | curl_easy_setopt(sn->handle, CURLOPT_VERBOSE, 1L); |
f6d3db6113d3
added verbose option + encryption flag fixes
Mike Becker <universe@uap-core.de>
parents:
66
diff
changeset
|
732 | curl_easy_setopt(sn->handle, CURLOPT_STDERR, stderr); |
f6d3db6113d3
added verbose option + encryption flag fixes
Mike Becker <universe@uap-core.de>
parents:
66
diff
changeset
|
733 | } |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
734 | |
221
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
735 | DavResource *root = dav_query(sn, "select - from / with depth = 0"); |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
736 | if(!root) { |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
737 | print_resource_error(sn, "/"); |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
738 | dav_session_destroy(sn); |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
739 | fprintf(stderr, "Abort\n"); |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
740 | return -1; |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
741 | } |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
742 | |
220
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
743 | int cdt = cmd_getoption(a, "conflict") ? 0 : 1; // conflict detection |
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
744 | |
221
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
745 | // lock repository |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
746 | DavBool locked = FALSE; |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
747 | if((dir->lockpush || cmd_getoption(a, "lock")) && !cmd_getoption(a, "nolock")) { |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
748 | if(dav_lock(root)) { |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
749 | print_resource_error(sn, "/"); |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
750 | dav_session_destroy(sn); |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
751 | fprintf(stderr, "Abort\n"); |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
752 | return -1; |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
753 | } |
233
d8042cede66c
improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
228
diff
changeset
|
754 | DavLock *lock = dav_get_lock(sn, "/"); |
d8042cede66c
improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
228
diff
changeset
|
755 | if(lock) { |
d8042cede66c
improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
228
diff
changeset
|
756 | printf("Lock-Token: %s\n", lock->token); |
d8042cede66c
improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
228
diff
changeset
|
757 | } |
221
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
758 | locked = TRUE; |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
759 | } |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
760 | |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
761 | int sync_success = 0; |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
762 | int sync_delete = 0; |
216
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
763 | int sync_skipped = 0; |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
764 | int sync_error = 0; |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
765 | |
51
e94bf8530d56
dav-sync deletes removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
50
diff
changeset
|
766 | // upload all changed files |
219
9792cfe63b80
added resolve-conflicts and delete-conflicts to help text and fixed crash with unknown cmd options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
218
diff
changeset
|
767 | //UcxList *resources = cmd_getoption(a, "read") ? |
9792cfe63b80
added resolve-conflicts and delete-conflicts to help text and fixed crash with unknown cmd options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
218
diff
changeset
|
768 | // read_changes(dir, db) : local_scan(dir, db); |
9792cfe63b80
added resolve-conflicts and delete-conflicts to help text and fixed crash with unknown cmd options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
218
diff
changeset
|
769 | UcxList *resources = local_scan(dir, db); |
53
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
770 | |
64
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
771 | UcxMap *lclres = ucx_map_new(db->resources->count); |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
772 | int ret = 0; |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
773 | UCX_FOREACH(elm, resources) { |
57 | 774 | LocalResource *local_res = elm->data; |
58
1708cba82ca3
added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
775 | if (!res_matches_filter(dir, local_res->path+1)) { |
216
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
776 | if(res_isconflict(db, local_res)) { |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
777 | printf("skip: %s\n", local_res->path); |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
778 | sync_skipped++; |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
779 | continue; |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
780 | } |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
781 | |
64
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
782 | // upload every changed file |
223
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
783 | int error = 0; |
64
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
784 | if (local_resource_is_changed(dir, db, local_res)) { |
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
785 | DavResource *res = dav_resource_new(sn, local_res->path); |
191
0e45b04236a7
more specific error messages in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
190
diff
changeset
|
786 | if(!res) { |
0e45b04236a7
more specific error messages in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
190
diff
changeset
|
787 | print_resource_error(sn, local_res->path); |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
788 | ret = -1; |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
789 | sync_error++; |
191
0e45b04236a7
more specific error messages in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
190
diff
changeset
|
790 | } |
190
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
791 | |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
792 | if(local_res->isdirectory) { |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
793 | printf("mkcol: %s\n", local_res->path); |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
794 | if(sync_mkdir(dir, res, local_res) && sn->error != DAV_METHOD_NOT_ALLOWED) { |
191
0e45b04236a7
more specific error messages in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
190
diff
changeset
|
795 | print_resource_error(sn, res->path); |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
796 | ret = -1; |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
797 | sync_error++; |
227
bf485439222a
fixed locking in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
225
diff
changeset
|
798 | error = 1; |
190
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
799 | } |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
800 | } else { |
220
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
801 | if(cdt && remote_resource_is_changed(sn, dir, db, local_res)) { |
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
802 | printf("conflict: %s\n", local_res->path); |
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
803 | sync_skipped++; |
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
804 | continue; |
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
805 | } |
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
806 | |
190
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
807 | printf("put: %s\n", local_res->path); |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
808 | if(sync_put_resource(dir, res, local_res, &sync_success)) { |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
809 | sync_error++; |
191
0e45b04236a7
more specific error messages in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
190
diff
changeset
|
810 | print_resource_error(sn, res->path); |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
811 | ret = -1; |
223
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
812 | error = 1; |
190
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
813 | } |
64
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
814 | } |
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
815 | dav_resource_free(res); |
58
1708cba82ca3
added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents:
57
diff
changeset
|
816 | } |
64
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
817 | |
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
818 | // remove every locally available resource from db->resource |
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
819 | // the remaining elements are all deleted files |
223
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
820 | elm->data = NULL; |
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
821 | if(!error) { |
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
822 | ucx_map_cstr_put(lclres, local_res->path, local_res); |
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
823 | } |
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
824 | |
222
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
825 | LocalResource *lr = ucx_map_cstr_remove(db->resources, local_res->path); |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
826 | if(lr) { |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
827 | local_resource_free(lr); |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
828 | } |
57 | 829 | } |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
830 | } |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
831 | |
51
e94bf8530d56
dav-sync deletes removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
50
diff
changeset
|
832 | // delete all removed files |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
833 | if(ret == 0) { |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
834 | UcxMapIterator i = ucx_map_iterator(db->resources); |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
835 | LocalResource *local; |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
836 | UCX_MAP_FOREACH(key, local, i) { |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
837 | if (!res_matches_filter(dir, local->path+1)) { |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
838 | if(sync_delete_remote_resource(sn, local, &sync_delete)) { |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
839 | ucx_map_cstr_put(lclres, local->path, local); |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
840 | if(sn->error != DAV_NOT_FOUND) { |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
841 | print_resource_error(sn, local->path); |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
842 | sync_error++; |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
843 | break; |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
844 | } |
191
0e45b04236a7
more specific error messages in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
190
diff
changeset
|
845 | } |
66 | 846 | } |
51
e94bf8530d56
dav-sync deletes removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
50
diff
changeset
|
847 | } |
e94bf8530d56
dav-sync deletes removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
50
diff
changeset
|
848 | } |
223
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
849 | ucx_map_free_content(db->resources, (ucx_destructor)local_resource_free); |
64
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
850 | ucx_map_free(db->resources); |
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
851 | db->resources = lclres; |
51
e94bf8530d56
dav-sync deletes removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
50
diff
changeset
|
852 | |
221
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
853 | // unlock repository |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
854 | if(locked) { |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
855 | if(dav_unlock(root)) { |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
856 | print_resource_error(sn, "/"); |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
857 | ret = -1; |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
858 | } |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
859 | } |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
860 | |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
861 | // store db |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
862 | if(store_db(db, dir->database)) { |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
863 | fprintf(stderr, "Cannot store sync db\n"); |
223
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
864 | ret = -2; |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
865 | } |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
866 | |
221
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
867 | // cleanup |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
868 | dav_session_destroy(sn); |
223
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
869 | while(resources) { |
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
870 | UcxList *next = resources->next; |
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
871 | if(resources->data) { |
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
872 | local_resource_free(resources->data); |
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
873 | } |
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
874 | free(resources); |
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
875 | resources = next; |
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
876 | } |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
877 | |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
878 | // Report |
223
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
879 | if(ret != -2) { |
221
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
880 | char *str_success = sync_success == 1 ? "file" : "files"; |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
881 | char *str_delete = sync_delete == 1 ? "file" : "files"; |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
882 | char *str_skipped = sync_delete == 1 ? "file" : "files"; |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
883 | char *str_error = sync_error == 1 ? "error" : "errors"; |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
884 | printf("Result: %d %s pushed, %d %s deleted, %d %s skipped, %d %s\n", |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
885 | sync_success, str_success, |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
886 | sync_delete,str_delete, |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
887 | sync_skipped,str_skipped, |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
888 | sync_error, str_error); |
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
889 | } |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
890 | |
221
e22c29b7ee2f
using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
220
diff
changeset
|
891 | return ret; |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
892 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
893 | |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
48
diff
changeset
|
894 | UcxList* local_scan(SyncDirectory *dir, SyncDatabase *db) { |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
895 | UcxList *resources = NULL; |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
896 | |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
897 | char *path = strdup("/"); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
898 | UcxList *stack = ucx_list_prepend(NULL, path); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
899 | while(stack) { |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
900 | // get a directory path from the stack and read all entries |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
901 | // if an entry is a directory, put it on the stack |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
902 | |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
903 | char *p = stack->data; |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
904 | stack = ucx_list_remove(stack, stack); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
905 | char *local_path = util_concat_path(dir->path, p); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
906 | DIR *local_dir = opendir(local_path); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
907 | |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
908 | if(!local_dir) { |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
909 | fprintf(stderr, "Cannot open directory %s\n", local_path); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
910 | } else { |
55
4cb389452a44
replaced readdir_r with readdir
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
54
diff
changeset
|
911 | struct dirent *ent; |
4cb389452a44
replaced readdir_r with readdir
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
54
diff
changeset
|
912 | while((ent = readdir(local_dir)) != NULL) { |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
913 | if(!strcmp(ent->d_name, ".") || !strcmp(ent->d_name, "..")) { |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
914 | continue; |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
915 | } |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
916 | |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
917 | char *new_path = util_concat_path(p, ent->d_name); |
53
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
918 | int isdir; |
64
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
919 | LocalResource *res = local_resource_new(dir, db, new_path, &isdir); |
53
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
920 | if(isdir) { |
190
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
921 | resources = ucx_list_append(resources, res); |
53
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
922 | stack = ucx_list_prepend(stack, new_path); |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
923 | } else if(res) { |
57 | 924 | resources = ucx_list_append(resources, res); |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
925 | free(new_path); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
926 | } else { |
53
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
927 | free(new_path); |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
928 | } |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
929 | } |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
930 | closedir(local_dir); |
55
4cb389452a44
replaced readdir_r with readdir
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
54
diff
changeset
|
931 | |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
932 | } |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
933 | free(local_path); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
934 | free(p); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
935 | } |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
936 | |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
937 | return resources; |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
938 | } |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
939 | |
53
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
940 | UcxList* read_changes(SyncDirectory *dir, SyncDatabase *db) { |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
941 | UcxProperties *parser = ucx_properties_new(); |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
942 | parser->delimiter = ':'; |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
943 | |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
944 | UcxList *resources = NULL; |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
945 | sstr_t name; |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
946 | sstr_t value; |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
947 | |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
948 | char buf[STDIN_BUF_SIZE]; |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
949 | size_t r; |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
950 | while(!feof(stdin)) { |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
951 | r = fread(buf, 1, STDIN_BUF_SIZE, stdin); |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
952 | ucx_properties_fill(parser, buf, r); |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
953 | while(ucx_properties_next(parser, &name, &value)) { |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
954 | if(value.length == 0) { |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
955 | fprintf(stderr, "Wrong input\n"); |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
956 | continue; |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
957 | } |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
958 | if(value.ptr[0] == '"' |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
959 | && value.length > 2 |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
960 | && value.ptr[value.length - 1] == '"') |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
961 | { |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
962 | value.ptr[value.length - 1] = '\0'; |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
963 | value.ptr++; |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
964 | value.length -= 2; |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
965 | } |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
966 | value = sstrdup(value); |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
967 | |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
968 | if(!sstrcmp(name, S("put"))) { |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
969 | int isdir; |
64
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
970 | LocalResource *res = local_resource_new(dir, db, value.ptr, &isdir); |
53
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
971 | if(res) { |
57 | 972 | resources = ucx_list_append(resources, res); |
53
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
973 | } |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
974 | } else if(!sstrcmp(name, S("remove"))) { |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
975 | LocalResource *res = calloc(1, sizeof(LocalResource)); |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
976 | res->path = sstrdup(value).ptr; |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
977 | if(res) { |
216
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
978 | //ucx_map_sstr_put(db->remove, value, res); |
53
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
979 | ucx_map_sstr_remove(db->resources, value); |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
980 | } |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
981 | |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
982 | } |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
983 | |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
984 | free(value.ptr); |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
985 | } |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
986 | } |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
987 | ucx_properties_free(parser); |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
988 | |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
989 | return resources; |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
990 | } |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
991 | |
64
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
992 | LocalResource* local_resource_new(SyncDirectory *dir, SyncDatabase *db, char *path, int *isdir) { |
53
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
993 | char *file_path = util_concat_path(dir->path, path); |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
994 | struct stat s; |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
995 | if(stat(file_path, &s)) { |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
996 | fprintf(stderr, "Cannot stat file %s\n", file_path); |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
997 | free(file_path); |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
998 | return NULL; |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
999 | } |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
1000 | free(file_path); |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
1001 | |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
1002 | if(!S_ISDIR(s.st_mode)) { |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
1003 | *isdir = 0; |
64
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
1004 | LocalResource *res = calloc(1, sizeof(LocalResource)); |
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
1005 | res->path = strdup(path); |
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
1006 | res->etag = NULL; |
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
1007 | res->last_modified = s.st_mtime; |
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
1008 | res->size = s.st_size; |
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
1009 | return res; |
53
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
1010 | } else { |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
1011 | *isdir = 1; |
190
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1012 | LocalResource *res = calloc(1, sizeof(LocalResource)); |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1013 | res->path = util_concat_path(path, "/"); |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1014 | res->last_modified = s.st_mtime; |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1015 | res->isdirectory = 1; |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1016 | return res; |
53
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
1017 | } |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
1018 | } |
ddc4efc9b0f8
added usage info and some options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
52
diff
changeset
|
1019 | |
64
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
1020 | int local_resource_is_changed(SyncDirectory *dir, SyncDatabase *db, LocalResource *res) { |
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
1021 | LocalResource *db_res = ucx_map_cstr_get(db->resources, res->path); |
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
1022 | if(db_res) { |
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
1023 | if(db_res->etag) { |
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
1024 | res->etag = strdup(db_res->etag); |
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
1025 | } |
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
1026 | |
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
1027 | if(db_res->last_modified == res->last_modified && db_res->size == res->size) { |
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
1028 | return 0; |
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
1029 | } |
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
1030 | } |
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
1031 | return 1; |
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
1032 | } |
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
1033 | |
220
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
1034 | int remote_resource_is_changed( |
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
1035 | DavSession *sn, |
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
1036 | SyncDirectory *dir, |
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
1037 | SyncDatabase *db, |
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
1038 | LocalResource *res) |
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
1039 | { |
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
1040 | DavResource *remote = dav_get(sn, res->path, "D:getetag"); |
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
1041 | int ret = 0; |
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
1042 | if(remote) { |
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
1043 | char *etag = dav_get_property(remote, "D:getetag"); |
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
1044 | if(etag && res->etag) { |
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
1045 | sstr_t e = sstr(etag); |
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
1046 | if(sstrprefix(e, S("W/"))) { |
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
1047 | e = sstrsubs(e, 2); |
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
1048 | } |
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
1049 | if(strcmp(e.ptr, res->etag)) { |
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
1050 | ret = 1; |
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
1051 | } |
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
1052 | } |
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
1053 | dav_resource_free(remote); |
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
1054 | } |
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
1055 | return ret; |
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
1056 | } |
f1b3873a6525
added conflict detection to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
219
diff
changeset
|
1057 | |
64
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
1058 | |
144
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1059 | int sync_set_status(DavResource *res, char *status) { |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1060 | DavResource *resource = dav_resource_new(res->session, res->path); |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1061 | dav_set_property(resource, "idav:status", status); |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1062 | int ret = dav_store(resource); |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1063 | dav_resource_free(resource); |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1064 | return ret; |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1065 | } |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1066 | |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1067 | int sync_remove_status(DavResource *res) { |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1068 | DavResource *resource = dav_resource_new(res->session, res->path); |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1069 | dav_remove_property(resource, "idav:status"); |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1070 | int ret = dav_store(resource); |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1071 | dav_resource_free(resource); |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1072 | return ret; |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1073 | } |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1074 | |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
1075 | int sync_put_resource( |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
1076 | SyncDirectory *dir, |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
1077 | DavResource *res, |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
1078 | LocalResource *local, |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
1079 | int *counter) |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
1080 | { |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
1081 | char *local_path = util_concat_path(dir->path, res->path); |
144
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1082 | |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1083 | struct stat s; |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1084 | if(stat(local_path, &s)) { |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1085 | fprintf(stderr, "cannot stat file: %s\n", local_path); |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1086 | perror(""); |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1087 | free(local_path); |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1088 | return -1; |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1089 | } |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1090 | |
72
aac29f2e8030
dav now opens files in binary mode
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
68
diff
changeset
|
1091 | FILE *in = fopen(local_path, "rb"); |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
1092 | if(!in) { |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
1093 | fprintf(stderr, "Cannot open file %s\n", local_path); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
1094 | free(local_path); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
1095 | return -1; |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
1096 | } |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
1097 | |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
1098 | dav_set_content(res, in, (dav_read_func)fread); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
1099 | |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
1100 | int ret = -1; |
144
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1101 | int created = 0; |
244
47791bdf1725
changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
243
diff
changeset
|
1102 | for(int i=0;i<=dir->max_retry;i++) { |
144
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1103 | if(!created && dav_create(res)) { |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1104 | continue; |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
1105 | } |
144
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1106 | created = 1; |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
1107 | if(dav_store(res)) { |
144
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1108 | continue; |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
1109 | } |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
1110 | ret = 0; |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
1111 | break; |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
1112 | } |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
1113 | |
144
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1114 | |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1115 | |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
1116 | if(ret == 0) { |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
1117 | (*counter)++; |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
1118 | |
144
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1119 | // check contentlength and get new etag |
227
bf485439222a
fixed locking in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
225
diff
changeset
|
1120 | DavResource *up_res = dav_get(res->session, res->path, "D:getetag,idav:status"); |
48
08d5544c92fb
fixed etag handling
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
1121 | |
144
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1122 | if(up_res) { |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1123 | // the new content length must be equal or greater than the file size |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1124 | if(up_res->contentlength < s.st_size) { |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1125 | fprintf(stderr, "Incomplete Upload: %s", local_path); |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1126 | ret = -1; |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1127 | // try to set the resource status to 'broken' |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1128 | sync_set_status(res, "broken"); |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1129 | } else { |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1130 | // everything seems fine, we can update the local resource |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1131 | char *etag = dav_get_property(up_res, "D:getetag"); |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1132 | if(etag) { |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1133 | if(strlen(etag) > 2 && etag[0] == 'W' && etag[1] == '/') { |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1134 | etag = etag + 2; |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1135 | } |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1136 | } |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1137 | |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1138 | if(local->etag) { |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1139 | free(local->etag); |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1140 | } |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1141 | |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1142 | if(etag) { |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1143 | local->etag = strdup(etag); |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1144 | } else { |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1145 | local->etag = NULL; |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1146 | } |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1147 | |
227
bf485439222a
fixed locking in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
225
diff
changeset
|
1148 | if(dav_get_property(up_res, "idav:status")) { |
bf485439222a
fixed locking in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
225
diff
changeset
|
1149 | sync_remove_status(up_res); |
bf485439222a
fixed locking in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
225
diff
changeset
|
1150 | } |
bf485439222a
fixed locking in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
225
diff
changeset
|
1151 | |
bf485439222a
fixed locking in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
225
diff
changeset
|
1152 | dav_resource_free(up_res); |
144
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1153 | } |
64
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
1154 | } |
144
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1155 | } else { |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1156 | ret = -1; |
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1157 | sync_set_status(res, "broken"); |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
1158 | } |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
1159 | |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
1160 | fclose(in); |
144
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
1161 | free(local_path); |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
1162 | |
64
112dbf7ba8b0
changed sync behavior
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
61
diff
changeset
|
1163 | return ret; |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
1164 | } |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
1165 | |
190
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1166 | int sync_mkdir(SyncDirectory *dir, DavResource *res, LocalResource *local) { |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1167 | res->iscollection = 1; |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1168 | int ret = -1; |
244
47791bdf1725
changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
243
diff
changeset
|
1169 | for(int i=0;i<=dir->max_retry;i++) { |
190
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1170 | if(dav_create(res)) { |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1171 | continue; |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1172 | } |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1173 | ret = 0; |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1174 | break; |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1175 | } |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1176 | return ret; |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1177 | } |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1178 | |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
1179 | int sync_delete_remote_resource( |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
1180 | DavSession *sn, |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
1181 | LocalResource *local_res, |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
1182 | int *counter) |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
1183 | { |
65
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
1184 | DavResource *res = dav_get(sn, local_res->path, "D:getetag"); |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
1185 | if(!res) { |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
1186 | return sn->error == DAV_NOT_FOUND ? 0 : 1; |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
1187 | } |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
1188 | |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
1189 | int ret = 0; |
190
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1190 | if(res->iscollection) { |
65
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
1191 | printf("delete: %s\n", res->path); |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
1192 | if(dav_delete(res)) { |
190
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1193 | ret = 1; |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1194 | fprintf(stderr, "Cannot delete resource %s\n", res->path); |
65
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
1195 | } |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
1196 | } else { |
190
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1197 | char *etag = dav_get_property(res, "D:getetag"); |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1198 | if(etag) { |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1199 | if(strlen(etag) > 2 && etag[0] == 'W' && etag[1] == '/') { |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1200 | etag = etag + 2; |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1201 | } |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1202 | } |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1203 | |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1204 | if(etag && !strcmp(etag, local_res->etag)) { |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1205 | // local resource metadata == remote resource metadata |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1206 | // resource can be deleted |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1207 | printf("delete: %s\n", res->path); |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1208 | if(dav_delete(res)) { |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1209 | if(sn->error != DAV_NOT_FOUND) { |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1210 | fprintf(stderr, "Cannot delete resource %s\n", res->path); |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
1211 | ret = 1; |
190
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1212 | } |
192
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
1213 | } else { |
d10194a51304
dav-sync prints a small report after successful sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
191
diff
changeset
|
1214 | (*counter)++; |
190
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1215 | } |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1216 | } |
65
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
1217 | } |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
1218 | |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
1219 | // cleanup |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
1220 | dav_resource_free(res); |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
1221 | |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
1222 | return ret; |
d4077e8175f3
added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
64
diff
changeset
|
1223 | } |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
1224 | |
217
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1225 | |
218
5f1f7602cf77
automatically remove deleted conflict files from the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
217
diff
changeset
|
1226 | void remove_deleted_conflicts(SyncDirectory *dir, SyncDatabase *db) { |
5f1f7602cf77
automatically remove deleted conflict files from the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
217
diff
changeset
|
1227 | char **dc = calloc(sizeof(void*), db->conflict->count); |
5f1f7602cf77
automatically remove deleted conflict files from the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
217
diff
changeset
|
1228 | int numdc = 0; |
5f1f7602cf77
automatically remove deleted conflict files from the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
217
diff
changeset
|
1229 | |
5f1f7602cf77
automatically remove deleted conflict files from the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
217
diff
changeset
|
1230 | UcxMapIterator i = ucx_map_iterator(db->conflict); |
5f1f7602cf77
automatically remove deleted conflict files from the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
217
diff
changeset
|
1231 | LocalResource *res; |
5f1f7602cf77
automatically remove deleted conflict files from the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
217
diff
changeset
|
1232 | UCX_MAP_FOREACH(key, res, i) { |
5f1f7602cf77
automatically remove deleted conflict files from the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
217
diff
changeset
|
1233 | char *path = util_concat_path(dir->path, res->path); |
5f1f7602cf77
automatically remove deleted conflict files from the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
217
diff
changeset
|
1234 | struct stat s; |
5f1f7602cf77
automatically remove deleted conflict files from the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
217
diff
changeset
|
1235 | if(stat(path, &s)) { |
5f1f7602cf77
automatically remove deleted conflict files from the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
217
diff
changeset
|
1236 | if(errno == ENOENT) { |
5f1f7602cf77
automatically remove deleted conflict files from the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
217
diff
changeset
|
1237 | dc[numdc] = res->path; |
5f1f7602cf77
automatically remove deleted conflict files from the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
217
diff
changeset
|
1238 | numdc++; |
5f1f7602cf77
automatically remove deleted conflict files from the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
217
diff
changeset
|
1239 | } else { |
5f1f7602cf77
automatically remove deleted conflict files from the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
217
diff
changeset
|
1240 | fprintf(stderr, "Cannot stat file: %s\n", path); |
5f1f7602cf77
automatically remove deleted conflict files from the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
217
diff
changeset
|
1241 | perror(""); |
5f1f7602cf77
automatically remove deleted conflict files from the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
217
diff
changeset
|
1242 | } |
5f1f7602cf77
automatically remove deleted conflict files from the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
217
diff
changeset
|
1243 | } |
5f1f7602cf77
automatically remove deleted conflict files from the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
217
diff
changeset
|
1244 | free(path); |
5f1f7602cf77
automatically remove deleted conflict files from the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
217
diff
changeset
|
1245 | } |
5f1f7602cf77
automatically remove deleted conflict files from the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
217
diff
changeset
|
1246 | |
5f1f7602cf77
automatically remove deleted conflict files from the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
217
diff
changeset
|
1247 | for(int i=0;i<numdc;i++) { |
5f1f7602cf77
automatically remove deleted conflict files from the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
217
diff
changeset
|
1248 | ucx_map_cstr_remove(db->conflict, dc[i]); |
5f1f7602cf77
automatically remove deleted conflict files from the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
217
diff
changeset
|
1249 | } |
222
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
1250 | |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
1251 | free(dc); |
218
5f1f7602cf77
automatically remove deleted conflict files from the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
217
diff
changeset
|
1252 | } |
5f1f7602cf77
automatically remove deleted conflict files from the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
217
diff
changeset
|
1253 | |
217
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1254 | int cmd_resolve_conflicts(CmdArgs *a) { |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1255 | if(a->argc != 1) { |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1256 | fprintf(stderr, "Too %s arguments\n", a->argc < 1 ? "few" : "many"); |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1257 | return -1; |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1258 | } |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1259 | |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1260 | SyncDirectory *dir = scfg_get_dir(a->argv[0]); |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1261 | if(!dir) { |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1262 | fprintf(stderr, "Unknown sync dir: %s\n", a->argv[0]); |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1263 | return -1; |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1264 | } |
233
d8042cede66c
improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
228
diff
changeset
|
1265 | if(scfg_check_dir(dir)) { |
d8042cede66c
improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
228
diff
changeset
|
1266 | return -1; |
d8042cede66c
improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
228
diff
changeset
|
1267 | } |
217
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1268 | |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1269 | SyncDatabase *db = load_db(dir->database); |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1270 | if(!db) { |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1271 | fprintf(stderr, "Cannot load database file: %s\n", dir->database); |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1272 | return -1; |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1273 | } |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1274 | |
222
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
1275 | int ret = 0; |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
1276 | |
217
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1277 | // remove conflicts |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1278 | int num_conflict = db->conflict->count; |
224
4b55f05f4e00
added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
1279 | ucx_map_free_content(db->conflict, (ucx_destructor)local_resource_free); |
217
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1280 | ucx_map_clear(db->conflict); |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1281 | |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1282 | // store db |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1283 | if(store_db(db, dir->database)) { |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1284 | fprintf(stderr, "Cannot store sync db\n"); |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1285 | fprintf(stderr, "Abort\n"); |
224
4b55f05f4e00
added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
1286 | ret = -2; |
217
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1287 | } |
224
4b55f05f4e00
added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
1288 | |
4b55f05f4e00
added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
1289 | // cleanup |
222
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
1290 | destroy_db(db); |
217
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1291 | |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1292 | // Report |
224
4b55f05f4e00
added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
1293 | if(ret != -2) { |
222
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
1294 | char *str_conflict = num_conflict == 1 ? "conflict" : "conflicts"; |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
1295 | printf("Result: %d %s resolved\n", num_conflict, str_conflict); |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
1296 | } |
217
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1297 | |
222
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
1298 | return ret; |
217
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1299 | } |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1300 | |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1301 | int cmd_delete_conflicts(CmdArgs *a) { |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1302 | if(a->argc != 1) { |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1303 | fprintf(stderr, "Too %s arguments\n", a->argc < 1 ? "few" : "many"); |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1304 | return -1; |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1305 | } |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1306 | |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1307 | SyncDirectory *dir = scfg_get_dir(a->argv[0]); |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1308 | if(!dir) { |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1309 | fprintf(stderr, "Unknown sync dir: %s\n", a->argv[0]); |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1310 | return -1; |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1311 | } |
233
d8042cede66c
improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
228
diff
changeset
|
1312 | if(scfg_check_dir(dir)) { |
d8042cede66c
improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
228
diff
changeset
|
1313 | return -1; |
d8042cede66c
improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
228
diff
changeset
|
1314 | } |
217
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1315 | |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1316 | SyncDatabase *db = load_db(dir->database); |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1317 | if(!db) { |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1318 | fprintf(stderr, "Cannot load database file: %s\n", dir->database); |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1319 | return -1; |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1320 | } |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1321 | |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1322 | int num_del = 0; |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1323 | int num_err = 0; |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1324 | |
222
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
1325 | int ret = 0; |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
1326 | |
217
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1327 | // delete all conflict files |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1328 | UcxMapIterator i = ucx_map_iterator(db->conflict); |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1329 | LocalResource *res; |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1330 | UCX_MAP_FOREACH(key, res, i) { |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1331 | printf("delete: %s\n", res->path); |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1332 | char *path = util_concat_path(dir->path, res->path); |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1333 | if(unlink(path)) { |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1334 | if(errno != ENOENT) { |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1335 | perror("unlink"); |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1336 | num_err++; |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1337 | } |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1338 | } else { |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1339 | num_del++; |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1340 | } |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1341 | free(path); |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1342 | } |
224
4b55f05f4e00
added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
1343 | ucx_map_free_content(db->conflict, (ucx_destructor)local_resource_free); |
217
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1344 | ucx_map_clear(db->conflict); |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1345 | |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1346 | // store db |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1347 | if(store_db(db, dir->database)) { |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1348 | fprintf(stderr, "Cannot store sync db\n"); |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1349 | fprintf(stderr, "Abort\n"); |
222
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
1350 | ret = -1; |
217
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1351 | } |
224
4b55f05f4e00
added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
1352 | |
4b55f05f4e00
added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
1353 | // cleanup |
222
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
1354 | destroy_db(db); |
217
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1355 | |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1356 | // Report |
222
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
1357 | if(ret == 0) { |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
1358 | char *str_delete = num_del == 1 ? "file" : "files"; |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
1359 | char *str_error = num_err == 1 ? "error" : "errors"; |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
1360 | printf("Result: %d conflict %s deleted, %d %s\n", |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
1361 | num_del, str_delete, |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
1362 | num_err, str_error); |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
1363 | } |
217
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1364 | |
222
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
221
diff
changeset
|
1365 | return ret; |
217
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1366 | } |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1367 | |
12bad63cf5a8
added resolve-conflicts and delete-conflicts commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
1368 | |
204
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1369 | // TODO: remove code dup (main.c ls_size_str) |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1370 | static char* size_str(uint64_t size) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1371 | char *str = malloc(16); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1372 | |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1373 | if(size < 0x400) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1374 | snprintf(str, 16, "%" PRIu64 " bytes", size); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1375 | } else if(size < 0x100000) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1376 | float s = (float)size/0x400; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1377 | int diff = (s*100 - (int)s*100); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1378 | if(diff > 90) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1379 | diff = 0; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1380 | s += 0.10f; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1381 | } |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1382 | if(size < 0x2800 && diff != 0) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1383 | // size < 10 KiB |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1384 | snprintf(str, 16, "%.1f KiB", s); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1385 | } else { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1386 | snprintf(str, 16, "%.0f KiB", s); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1387 | } |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1388 | } else if(size < 0x40000000) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1389 | float s = (float)size/0x100000; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1390 | int diff = (s*100 - (int)s*100); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1391 | if(diff > 90) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1392 | diff = 0; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1393 | s += 0.10f; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1394 | } |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1395 | if(size < 0xa00000 && diff != 0) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1396 | // size < 10 MiB |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1397 | snprintf(str, 16, "%.1f MiB", s); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1398 | } else { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1399 | size /= 0x100000; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1400 | snprintf(str, 16, "%.0f MiB", s); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1401 | } |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1402 | } else if(size < 0x1000000000ULL) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1403 | float s = (float)size/0x40000000; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1404 | int diff = (s*100 - (int)s*100); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1405 | if(diff > 90) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1406 | diff = 0; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1407 | s += 0.10f; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1408 | } |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1409 | if(size < 0x280000000 && diff != 0) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1410 | // size < 10 GiB |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1411 | snprintf(str, 16, "%.1f GiB", s); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1412 | } else { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1413 | size /= 0x40000000; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1414 | snprintf(str, 16, "%.0f GiB", s); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1415 | } |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1416 | } else { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1417 | size /= 1024; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1418 | float s = (float)size/0x40000000; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1419 | int diff = (s*100 - (int)s*100); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1420 | if(diff > 90) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1421 | diff = 0; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1422 | s += 0.10f; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1423 | } |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1424 | if(size < 0x280000000 && diff != 0) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1425 | // size < 10 TiB |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1426 | snprintf(str, 16, "%.1f TiB", s); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1427 | } else { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1428 | size /= 0x40000000; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1429 | snprintf(str, 16, "%.0f TiB", s); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1430 | } |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1431 | } |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1432 | return str; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1433 | } |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1434 | |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1435 | int cmd_trash_info(CmdArgs *a) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1436 | if(a->argc != 1) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1437 | fprintf(stderr, "Too %s arguments\n", a->argc < 1 ? "few" : "many"); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1438 | return -1; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1439 | } |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1440 | |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1441 | SyncDirectory *syncdir = scfg_get_dir(a->argv[0]); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1442 | if(!syncdir) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1443 | fprintf(stderr, "Unknown sync dir: %s\n", a->argv[0]); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1444 | return -1; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1445 | } |
233
d8042cede66c
improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
228
diff
changeset
|
1446 | if(scfg_check_dir(syncdir)) { |
d8042cede66c
improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
228
diff
changeset
|
1447 | return -1; |
d8042cede66c
improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
228
diff
changeset
|
1448 | } |
204
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1449 | |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1450 | if(!syncdir->trash) { |
205
bf756f6c3581
fixed some warnings and wrong usage of curl_easy_getinfo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
204
diff
changeset
|
1451 | printf("trash not configured for %s\n", syncdir->name); |
204
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1452 | return 0; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1453 | } |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1454 | |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1455 | DIR *dir = opendir(syncdir->trash); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1456 | if(!dir) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1457 | fprintf(stderr, "cannot open trash directory: %s\n", syncdir->trash); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1458 | perror("opendir"); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1459 | return -1; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1460 | } |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1461 | |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1462 | uint64_t trashsize = 0; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1463 | int count = 0; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1464 | struct dirent *ent; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1465 | while((ent = readdir(dir)) != NULL) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1466 | if(!strcmp(ent->d_name, ".") || !strcmp(ent->d_name, "..")) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1467 | continue; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1468 | } |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1469 | |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1470 | char *path = util_concat_path(syncdir->trash, ent->d_name); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1471 | |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1472 | struct stat s; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1473 | if(stat(path, &s)) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1474 | perror("stat"); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1475 | } else { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1476 | trashsize += s.st_size; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1477 | } |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1478 | count++; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1479 | |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1480 | free(path); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1481 | } |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1482 | closedir(dir); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1483 | |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1484 | printf("path: %s\n", syncdir->trash); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1485 | printf("%d %s\n", count, count == 1 ? "file" : "files"); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1486 | char *sizestr = size_str(trashsize); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1487 | printf("%s\n", sizestr); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1488 | free(sizestr); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1489 | |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1490 | return 0; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1491 | } |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1492 | |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1493 | |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1494 | int cmd_empty_trash(CmdArgs *a) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1495 | if(a->argc != 1) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1496 | fprintf(stderr, "Too %s arguments\n", a->argc < 1 ? "few" : "many"); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1497 | return -1; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1498 | } |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1499 | |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1500 | SyncDirectory *syncdir = scfg_get_dir(a->argv[0]); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1501 | if(!syncdir) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1502 | fprintf(stderr, "Unknown sync dir: %s\n", a->argv[0]); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1503 | return -1; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1504 | } |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1505 | |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1506 | if(!syncdir->trash) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1507 | fprintf(stderr, "trash not configured for %s\n", syncdir->name); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1508 | return -1; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1509 | } |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1510 | |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1511 | DIR *dir = opendir(syncdir->trash); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1512 | if(!dir) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1513 | fprintf(stderr, "cannot open trash directory: %s\n", syncdir->trash); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1514 | perror("opendir"); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1515 | return -1; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1516 | } |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1517 | |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1518 | struct dirent *ent; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1519 | while((ent = readdir(dir)) != NULL) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1520 | if(!strcmp(ent->d_name, ".") || !strcmp(ent->d_name, "..")) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1521 | continue; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1522 | } |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1523 | |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1524 | char *path = util_concat_path(syncdir->trash, ent->d_name); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1525 | printf("delete: %s\n", path); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1526 | |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1527 | struct stat s; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1528 | if(stat(path, &s)) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1529 | perror("stat"); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1530 | free(path); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1531 | continue; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1532 | } |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1533 | if(S_ISDIR(s.st_mode)) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1534 | if(rmdir(path)) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1535 | perror("unlink"); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1536 | } |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1537 | } else { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1538 | if(unlink(path)) { |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1539 | perror("unlink"); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1540 | } |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1541 | } |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1542 | |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1543 | free(path); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1544 | } |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1545 | closedir(dir); |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1546 | |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1547 | return 0; |
4f0207044837
added trash-info and empty-trash commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
200
diff
changeset
|
1548 | } |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
1549 | |
200
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1550 | int cmd_add_directory(CmdArgs *args) { |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1551 | printf("Each sync directory must have an unique name.\n"); |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1552 | char *name = assistant_getcfg("name"); |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1553 | if(!name) { |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1554 | fprintf(stderr, "Abort\n"); |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1555 | return -1; |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1556 | } |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1557 | if(scfg_get_dir(name)) { |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1558 | fprintf(stderr, "Directory %s already exists.\nAbort\n", name); |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1559 | return -1; |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1560 | } |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1561 | |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1562 | printf("Enter local directory path.\n"); |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1563 | char *path = assistant_getcfg("path"); |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1564 | if(!path) { |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1565 | fprintf(stderr, "Abort\n"); |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1566 | return -1; |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1567 | } |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1568 | |
215
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1569 | printf("Specify webdav repository.\n"); |
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1570 | UcxList *repos = get_repositories(); |
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1571 | int i = 0; |
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1572 | UCX_FOREACH(elm, repos) { |
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1573 | Repository *r = elm->data; |
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1574 | printf("%d) %s\n", i, r->name); |
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1575 | i++; |
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1576 | } |
200
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1577 | char *repository = assistant_getcfg("repository"); |
215
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1578 | char *reponame = NULL; |
200
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1579 | if(!repository) { |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1580 | fprintf(stderr, "Abort\n"); |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1581 | return -1; |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1582 | } |
215
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1583 | int64_t reponum = 0; |
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1584 | if(util_strtoint(repository, &reponum)) { |
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1585 | if(reponum < 0) { |
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1586 | fprintf(stderr, "Wrong input.\nAbort\n"); |
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1587 | return -1; |
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1588 | } |
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1589 | UcxList *elm = ucx_list_get(repos, reponum); |
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1590 | if(elm) { |
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1591 | Repository *r = elm->data; |
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1592 | reponame = r->name; |
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1593 | } else { |
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1594 | fprintf(stderr, "Wrong input.\nAbort\n"); |
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1595 | return -1; |
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1596 | } |
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1597 | } else { |
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1598 | if(get_repository(sstr(repository))) { |
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1599 | reponame = repository; |
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1600 | } else { |
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1601 | fprintf(stderr, "Repository %s doesn't exist.\nAbort\n", repository); |
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1602 | return -1; |
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1603 | } |
200
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1604 | } |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1605 | |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1606 | printf("Enter collection relative to the repository base url.\n"); |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1607 | char *collection = assistant_getdefcfg("collection", "/"); |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1608 | |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1609 | char *db = generate_db_name(name); |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1610 | |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1611 | SyncDirectory dir; |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1612 | memset(&dir, 0, sizeof(SyncDirectory)); |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1613 | dir.name = name; |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1614 | dir.path = path; |
215
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
214
diff
changeset
|
1615 | dir.repository = reponame; |
200
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1616 | dir.collection = collection; |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1617 | dir.trash = ".trash"; |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1618 | dir.database = db; |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1619 | |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1620 | int ret = 0; |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1621 | if(add_directory(&dir)) { |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1622 | fprintf(stderr, "Cannot write sync.xml\n"); |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1623 | ret = -1; |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1624 | } else { |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1625 | printf("\nAdded directory: %s (%s)\n", name, path); |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1626 | } |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1627 | |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1628 | free(name); |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1629 | free(path); |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1630 | free(repository); |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1631 | free(collection); |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1632 | free(db); |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1633 | |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1634 | return ret; |
cc474cf2c2f5
added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
199
diff
changeset
|
1635 | } |