Sat, 22 Jun 2019 16:36:52 +0200
move some properties to new namespace
for properties encryption we need to decide which props must be encrypted and the plan is, to decide by namespace
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 | * |
364
3769ba002fd1
updates copyright date
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
300
diff
changeset
|
4 | * Copyright 2018 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> |
521
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
32 | #include <errno.h> |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
33 | |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
34 | #include "db.h" |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
35 | |
536
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
36 | #include <ucx/utils.h> |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
37 | |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
38 | #include <libidav/utils.h> |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
39 | |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
40 | #include <libxml/encoding.h> |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
41 | #include <libxml/xmlwriter.h> |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
42 | |
46
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 | #define xstreq(a,b) xmlStrEqual(BAD_CAST a, BAD_CAST b) |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
45 | |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
46 | #ifdef _WIN32 |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
47 | #define ENV_HOME getenv("USERPROFILE") |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
48 | #else |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
49 | #define ENV_HOME getenv("HOME") |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
50 | #endif /* _WIN32 */ |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
51 | |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
52 | SyncDatabase* load_db(char *name) { |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
53 | char *dav_dir = util_concat_path(ENV_HOME, ".dav"); |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
54 | char *db_file = util_concat_path(dav_dir, name); |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
55 | free(dav_dir); |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
56 | |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
57 | SyncDatabase *db = malloc(sizeof(SyncDatabase)); |
248
99574ca1c253
refactored load_db function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
243
diff
changeset
|
58 | db->resources = ucx_map_new(2048); |
99574ca1c253
refactored load_db function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
243
diff
changeset
|
59 | db->conflict = ucx_map_new(16); |
99574ca1c253
refactored load_db function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
243
diff
changeset
|
60 | |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
61 | xmlTextReaderPtr reader = xmlReaderForFile(db_file, NULL, 0); |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
62 | if(!reader) { |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
63 | xmlDoc *doc = doc = xmlNewDoc(BAD_CAST "1.0"); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
64 | xmlNode *root = xmlNewNode(NULL, BAD_CAST "directory"); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
65 | xmlDocSetRootElement(doc, root); |
251
7534cb97b9ab
adds first libidav tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
250
diff
changeset
|
66 | if(xmlSaveFormatFileEnc(db_file, doc, "UTF-8", 1) == -1) { |
248
99574ca1c253
refactored load_db function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
243
diff
changeset
|
67 | destroy_db(db); |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
68 | db = NULL; |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
69 | } |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
70 | xmlFreeDoc(doc); |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
71 | free(db_file); |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
72 | return db; |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
73 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
74 | free(db_file); |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
75 | |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
76 | int error = 0; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
77 | while(xmlTextReaderRead(reader)) { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
78 | int type = xmlTextReaderNodeType(reader); |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
79 | const xmlChar *name = xmlTextReaderConstName(reader); |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
80 | |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
81 | if(type == XML_READER_TYPE_ELEMENT) { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
82 | if(xstreq(name, "resource")) { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
83 | LocalResource *res = process_resource(reader); |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
84 | if(res) { |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
85 | ucx_map_cstr_put(db->resources, res->path, res); |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
86 | } else { |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
87 | error = 1; |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
88 | break; |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
89 | } |
216
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
90 | } else if(xstreq(name, "conflict")) { |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
91 | LocalResource *res = process_conflict(reader); |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
92 | if(res) { |
216
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
93 | ucx_map_cstr_put(db->conflict, res->path, res); |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
94 | } else { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
95 | error = 1; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
96 | break; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
97 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
98 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
99 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
100 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
101 | |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
102 | xmlFreeTextReader(reader); |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
103 | if(error) { |
248
99574ca1c253
refactored load_db function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
243
diff
changeset
|
104 | destroy_db(db); |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
105 | return NULL; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
106 | } else { |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
107 | return db; |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
108 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
109 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
110 | |
536
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
111 | void process_parts(xmlTextReaderPtr reader, LocalResource *res) { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
112 | UcxList *parts = NULL; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
113 | |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
114 | FilePart *current_part = NULL; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
115 | |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
116 | size_t count = 0; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
117 | int field = -1; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
118 | int err = 0; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
119 | while(xmlTextReaderRead(reader)) { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
120 | int type = xmlTextReaderNodeType(reader); |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
121 | const xmlChar *name = xmlTextReaderConstName(reader); |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
122 | int depth = xmlTextReaderDepth(reader); |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
123 | |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
124 | int part = TRUE; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
125 | if(type == XML_READER_TYPE_ELEMENT) { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
126 | if(depth == 3 && xstreq(name, "part")) { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
127 | current_part = calloc(1, sizeof(FilePart)); |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
128 | current_part->block = count; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
129 | parts = ucx_list_append(parts, current_part); |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
130 | count++; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
131 | } else if(depth == 4) { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
132 | if(xstreq(name, "hash")) { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
133 | field = 0; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
134 | } else if(xstreq(name, "etag")) { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
135 | field = 1; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
136 | } |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
137 | } |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
138 | } else if(type == XML_READER_TYPE_END_ELEMENT) { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
139 | if(depth == 2) { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
140 | // </parts> |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
141 | break; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
142 | } else if(depth == 3) { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
143 | if(current_part) { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
144 | if(!current_part->hash || !current_part->etag) { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
145 | err = 1; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
146 | } |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
147 | } |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
148 | // </part> |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
149 | current_part = NULL; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
150 | } |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
151 | field = -1; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
152 | } else if(type == XML_READER_TYPE_TEXT && depth == 5 && current_part) { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
153 | const char *text = (const char*)xmlTextReaderConstValue(reader); |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
154 | if(field == 0) { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
155 | current_part->hash = strdup(text); |
537
abfc943f09ed
some db.c fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
536
diff
changeset
|
156 | } else if(field == 1) { |
536
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
157 | current_part->etag = strdup(text); |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
158 | } |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
159 | } |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
160 | } |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
161 | |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
162 | if(err) { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
163 | ucx_list_free_content(parts, (ucx_destructor)filepart_free); |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
164 | ucx_list_free(parts); |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
165 | return; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
166 | } |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
167 | |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
168 | FilePart *file_parts = calloc(count, sizeof(FilePart)); |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
169 | size_t i = 0; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
170 | UCX_FOREACH(elm, parts) { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
171 | FilePart *p = elm->data; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
172 | file_parts[i] = *p; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
173 | free(p); |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
174 | i++; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
175 | } |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
176 | |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
177 | ucx_list_free(parts); |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
178 | |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
179 | res->parts = file_parts; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
180 | res->numparts = count; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
181 | } |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
182 | |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
183 | LocalResource* process_resource(xmlTextReaderPtr reader) { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
184 | LocalResource *res = calloc(1, sizeof(LocalResource)); |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
185 | |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
186 | int field = -1; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
187 | while(xmlTextReaderRead(reader)) { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
188 | int type = xmlTextReaderNodeType(reader); |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
189 | const xmlChar *name = xmlTextReaderConstName(reader); |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
190 | |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
191 | if(type == XML_READER_TYPE_ELEMENT) { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
192 | if(xstreq(name, "path")) { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
193 | field = 0; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
194 | } else if(xstreq(name, "etag")) { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
195 | field = 1; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
196 | } else if(xstreq(name, "lastmodified")) { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
197 | field = 2; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
198 | } else if(xstreq(name, "size")) { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
199 | field = 3; |
367
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
366
diff
changeset
|
200 | } else if(xstreq(name, "tags-hash")) { |
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
366
diff
changeset
|
201 | field = 4; |
521
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
202 | } else if(xstreq(name, "mode")) { |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
203 | field = 5; |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
204 | } else if(xstreq(name, "uid")) { |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
205 | field = 6; |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
206 | } else if(xstreq(name, "gid")) { |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
207 | field = 7; |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
208 | } else if(xstreq(name, "xattr-hash")) { |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
209 | field = 8; |
524
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
523
diff
changeset
|
210 | } else if(xstreq(name, "remote-tags-hash")) { |
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
523
diff
changeset
|
211 | field = 9; |
535
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
212 | } else if(xstreq(name, "blocksize")) { |
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
213 | field = 10; |
541
e59a989d890d
adds content hash for splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
537
diff
changeset
|
214 | } else if(xstreq(name, "hash")) { |
e59a989d890d
adds content hash for splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
537
diff
changeset
|
215 | field = 11; |
572
1eac93fcef77
add link target to sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
567
diff
changeset
|
216 | } else if(xstreq(name, "link")) { |
1eac93fcef77
add link target to sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
567
diff
changeset
|
217 | field = 12; |
257
49f3c58cc06c
fixes conflict detection in push command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
251
diff
changeset
|
218 | } else if(xstreq(name, "skipped")) { |
49f3c58cc06c
fixes conflict detection in push command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
251
diff
changeset
|
219 | res->skipped = TRUE; |
366
5228b912c925
adds technical foundation to just push tag updates
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
364
diff
changeset
|
220 | } else if(xstreq(name, "tags-updated")) { |
5228b912c925
adds technical foundation to just push tag updates
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
364
diff
changeset
|
221 | res->tags_updated = TRUE; |
536
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
222 | } else if(xstreq(name, "parts")) { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
223 | process_parts(reader, res); |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
224 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
225 | } else if(type == XML_READER_TYPE_TEXT) { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
226 | const xmlChar *value = xmlTextReaderConstValue(reader); |
144
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
227 | //int b = 0; |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
228 | switch(field) { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
229 | case 0: { |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
230 | res->path = strdup((char*)value); |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
231 | break; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
232 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
233 | case 1: { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
234 | res->etag = strdup((char*)value); |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
235 | break; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
236 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
237 | case 2: { |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
238 | //res->last_modified = util_parse_lastmodified((char*)value); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
239 | //res->last_modified = atoi((char*)value); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
240 | char *endptr = (char*)value; |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
241 | time_t t = strtoll((char*)value, &endptr, 10); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
242 | if(endptr == (char*)value) { |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
243 | fprintf( |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
244 | stderr, |
215
781aee172901
dav-sync add-directory shows list of repositories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
245 | "lastmodified does not contain a number: %s\n", value); |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
246 | } else { |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
247 | res->last_modified = t; |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
248 | } |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
249 | break; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
250 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
251 | case 3: { |
300
4e3769d4e782
bug fix: file size > 2gb not loaded correctly from database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
261
diff
changeset
|
252 | res->size = 0; |
4e3769d4e782
bug fix: file size > 2gb not loaded correctly from database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
261
diff
changeset
|
253 | int64_t filelen = 0; |
4e3769d4e782
bug fix: file size > 2gb not loaded correctly from database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
261
diff
changeset
|
254 | if(util_strtoint((char*)value, &filelen)) { |
4e3769d4e782
bug fix: file size > 2gb not loaded correctly from database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
261
diff
changeset
|
255 | if(filelen > 0) { |
4e3769d4e782
bug fix: file size > 2gb not loaded correctly from database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
261
diff
changeset
|
256 | res->size = (size_t)filelen; |
4e3769d4e782
bug fix: file size > 2gb not loaded correctly from database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
261
diff
changeset
|
257 | } |
4e3769d4e782
bug fix: file size > 2gb not loaded correctly from database
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
261
diff
changeset
|
258 | } |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
259 | break; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
260 | } |
367
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
366
diff
changeset
|
261 | case 4: { |
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
366
diff
changeset
|
262 | res->tags_hash = strdup((char*)value); |
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
366
diff
changeset
|
263 | break; |
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
366
diff
changeset
|
264 | } |
521
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
265 | case 5: { |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
266 | char *end; |
523
923a4528a2ae
adds support for pushing metadata updates
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
522
diff
changeset
|
267 | errno = 0; |
521
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
268 | long int mode = strtol((char*)value, &end, 8); |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
269 | if(errno == 0) { |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
270 | res->mode = (mode_t)mode; |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
271 | } |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
272 | break; |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
273 | } |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
274 | case 6: { |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
275 | uint64_t uid = 0; |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
276 | if(util_strtouint((char*)value, &uid)) { |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
277 | res->uid = (uid_t)uid; |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
278 | } |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
279 | break; |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
280 | } |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
281 | case 7: { |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
282 | uint64_t gid = 0; |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
283 | if(util_strtouint((char*)value, &gid)) { |
523
923a4528a2ae
adds support for pushing metadata updates
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
522
diff
changeset
|
284 | res->gid = (gid_t)gid; |
521
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
285 | } |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
286 | break; |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
287 | } |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
288 | case 8: { |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
289 | res->xattr_hash = strdup((char*)value); |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
290 | break; |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
291 | } |
524
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
523
diff
changeset
|
292 | case 9: { |
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
523
diff
changeset
|
293 | res->remote_tags_hash = strdup((char*)value); |
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
523
diff
changeset
|
294 | break; |
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
523
diff
changeset
|
295 | } |
535
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
296 | case 10: { |
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
297 | int64_t blsz = 0; |
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
298 | if(util_strtoint((char*)value, &blsz)) { |
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
299 | if(blsz < -1) { |
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
300 | blsz = -1; |
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
301 | } |
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
302 | if(blsz > 0 && blsz < 16) { |
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
303 | blsz = 0; |
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
304 | } |
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
305 | res->blocksize = blsz; |
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
306 | } |
541
e59a989d890d
adds content hash for splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
537
diff
changeset
|
307 | break; |
e59a989d890d
adds content hash for splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
537
diff
changeset
|
308 | } |
e59a989d890d
adds content hash for splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
537
diff
changeset
|
309 | case 11: { |
e59a989d890d
adds content hash for splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
537
diff
changeset
|
310 | res->hash = strdup((char*)value); |
e59a989d890d
adds content hash for splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
537
diff
changeset
|
311 | break; |
535
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
312 | } |
572
1eac93fcef77
add link target to sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
567
diff
changeset
|
313 | case 12: { |
1eac93fcef77
add link target to sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
567
diff
changeset
|
314 | res->link_target = strdup((char*)value); |
1eac93fcef77
add link target to sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
567
diff
changeset
|
315 | break; |
1eac93fcef77
add link target to sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
567
diff
changeset
|
316 | } |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
317 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
318 | } else if(XML_READER_TYPE_END_ELEMENT) { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
319 | if(xstreq(name, "resource")) { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
320 | break; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
321 | } else { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
322 | field = -1; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
323 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
324 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
325 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
326 | |
243
f5921d151c29
fixed SyncDatabase initialization
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
327 | if(!res->path) { |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
328 | // TODO: free res |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
329 | return NULL; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
330 | } else { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
331 | return res; |
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 | |
216
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
335 | LocalResource* process_conflict(xmlTextReaderPtr reader) { |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
336 | LocalResource *res = calloc(1, sizeof(LocalResource)); |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
337 | |
560
a816e805e5db
store origin of file conflicts
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
552
diff
changeset
|
338 | int field = 0; |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
339 | while(xmlTextReaderRead(reader)) { |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
340 | int type = xmlTextReaderNodeType(reader); |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
341 | const xmlChar *name = xmlTextReaderConstName(reader); |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
342 | |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
343 | if(type == XML_READER_TYPE_ELEMENT) { |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
344 | if(xstreq(name, "path")) { |
560
a816e805e5db
store origin of file conflicts
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
552
diff
changeset
|
345 | field = 1; |
a816e805e5db
store origin of file conflicts
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
552
diff
changeset
|
346 | } else if(xstreq(name, "source")) { |
a816e805e5db
store origin of file conflicts
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
552
diff
changeset
|
347 | field = 2; |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
348 | } |
560
a816e805e5db
store origin of file conflicts
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
552
diff
changeset
|
349 | } else if(type == XML_READER_TYPE_TEXT) { |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
350 | const xmlChar *value = xmlTextReaderConstValue(reader); |
560
a816e805e5db
store origin of file conflicts
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
552
diff
changeset
|
351 | switch(field) { |
a816e805e5db
store origin of file conflicts
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
552
diff
changeset
|
352 | case 1: { |
a816e805e5db
store origin of file conflicts
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
552
diff
changeset
|
353 | res->path = strdup((const char*)value); |
a816e805e5db
store origin of file conflicts
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
552
diff
changeset
|
354 | break; |
a816e805e5db
store origin of file conflicts
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
552
diff
changeset
|
355 | } |
a816e805e5db
store origin of file conflicts
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
552
diff
changeset
|
356 | case 2: { |
a816e805e5db
store origin of file conflicts
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
552
diff
changeset
|
357 | res->conflict_source = strdup((const char*)value); |
a816e805e5db
store origin of file conflicts
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
552
diff
changeset
|
358 | break; |
a816e805e5db
store origin of file conflicts
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
552
diff
changeset
|
359 | } |
a816e805e5db
store origin of file conflicts
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
552
diff
changeset
|
360 | } |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
361 | } else if(XML_READER_TYPE_END_ELEMENT) { |
216
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
362 | if(xstreq(name, "conflict")) { |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
363 | break; |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
364 | } else { |
560
a816e805e5db
store origin of file conflicts
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
552
diff
changeset
|
365 | field = 0; |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
366 | } |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
367 | } |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
368 | } |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
369 | |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
370 | if(!res->path) { |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
371 | // TODO: free res |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
372 | return NULL; |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
373 | } else { |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
374 | return res; |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
375 | } |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
376 | } |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
377 | |
521
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
378 | int store_db(SyncDatabase *db, char *name, uint32_t settings) { |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
379 | // open writer |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
380 | char *dav_dir = util_concat_path(ENV_HOME, ".dav"); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
381 | char *db_file = util_concat_path(dav_dir, name); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
382 | free(dav_dir); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
383 | xmlTextWriterPtr writer = xmlNewTextWriterFilename(db_file, 0); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
384 | if(!writer) { |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
385 | fprintf(stderr, "Cannot write db file: %s\n", db_file); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
386 | free(db_file); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
387 | return -1; |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
388 | } |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
389 | free(db_file); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
390 | |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
391 | // start document |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
392 | int r = 0; |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
393 | r = xmlTextWriterStartDocument(writer, NULL, "UTF-8", NULL); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
394 | if(r < 0) { |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
395 | xmlFreeTextWriter(writer); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
396 | return -1; |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
397 | } |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
398 | xmlTextWriterStartElement(writer, BAD_CAST "directory"); |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
399 | |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
400 | // write all resource entries |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
401 | UcxMapIterator i = ucx_map_iterator(db->resources); |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
402 | LocalResource *res; |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
403 | UCX_MAP_FOREACH(key, res, i) { |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
404 | // <resource> |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
405 | xmlTextWriterStartElement(writer, BAD_CAST "resource"); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
406 | |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
407 | r = xmlTextWriterWriteElement( |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
408 | writer, |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
409 | BAD_CAST "path", |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
410 | BAD_CAST res->path); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
411 | if(r < 0) { |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
412 | fprintf(stderr, "Cannot write path: %s\n", res->path); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
413 | xmlFreeTextWriter(writer); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
414 | return -1; |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
415 | } |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
416 | |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
417 | if(res->etag) { |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
418 | r = xmlTextWriterWriteElement( |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
419 | writer, |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
420 | BAD_CAST "etag", |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
421 | BAD_CAST res->etag); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
422 | if(r < 0) { |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
423 | fprintf(stderr, "Cannot write etag: %s\n", res->etag); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
424 | xmlFreeTextWriter(writer); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
425 | return -1; |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
426 | } |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
427 | } |
541
e59a989d890d
adds content hash for splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
537
diff
changeset
|
428 | |
e59a989d890d
adds content hash for splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
537
diff
changeset
|
429 | if(res->hash) { |
e59a989d890d
adds content hash for splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
537
diff
changeset
|
430 | r = xmlTextWriterWriteElement( |
e59a989d890d
adds content hash for splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
537
diff
changeset
|
431 | writer, |
e59a989d890d
adds content hash for splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
537
diff
changeset
|
432 | BAD_CAST "hash", |
e59a989d890d
adds content hash for splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
537
diff
changeset
|
433 | BAD_CAST res->hash); |
e59a989d890d
adds content hash for splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
537
diff
changeset
|
434 | if(r < 0) { |
e59a989d890d
adds content hash for splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
537
diff
changeset
|
435 | fprintf(stderr, "Cannot write hash: %s\n", res->hash); |
e59a989d890d
adds content hash for splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
537
diff
changeset
|
436 | xmlFreeTextWriter(writer); |
e59a989d890d
adds content hash for splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
537
diff
changeset
|
437 | return -1; |
e59a989d890d
adds content hash for splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
537
diff
changeset
|
438 | } |
e59a989d890d
adds content hash for splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
537
diff
changeset
|
439 | } |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
440 | |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
441 | r = xmlTextWriterWriteFormatElement( |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
442 | writer, |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
443 | BAD_CAST "lastmodified", |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
444 | "%" PRId64, |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
445 | (int64_t)res->last_modified); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
446 | if(r < 0) { |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
447 | fprintf(stderr, "Cannot write lastmodified\n"); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
448 | xmlFreeTextWriter(writer); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
449 | return -1; |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
450 | } |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
451 | |
535
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
452 | if(res->blocksize != 0) { |
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
453 | r = xmlTextWriterWriteFormatElement( |
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
454 | writer, |
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
455 | BAD_CAST "mode", |
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
456 | "%" PRId64, |
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
457 | res->blocksize); |
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
458 | if(r < 0) { |
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
459 | fprintf(stderr, "Cannot write blocksize\n"); |
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
460 | xmlFreeTextWriter(writer); |
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
461 | return -1; |
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
462 | } |
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
463 | } |
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
464 | |
537
abfc943f09ed
some db.c fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
536
diff
changeset
|
465 | if((settings & DB_STORE_MODE) == DB_STORE_MODE) { |
521
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
466 | r = xmlTextWriterWriteFormatElement( |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
467 | writer, |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
468 | BAD_CAST "mode", |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
469 | "%o", |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
470 | (int)res->mode); |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
471 | if(r < 0) { |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
472 | fprintf(stderr, "Cannot write mode\n"); |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
473 | xmlFreeTextWriter(writer); |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
474 | return -1; |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
475 | } |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
476 | } |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
477 | |
537
abfc943f09ed
some db.c fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
536
diff
changeset
|
478 | if((settings & DB_STORE_OWNER) == DB_STORE_OWNER) { |
521
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
479 | r = xmlTextWriterWriteFormatElement( |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
480 | writer, |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
481 | BAD_CAST "uid", |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
482 | "%u", |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
483 | (unsigned int)res->uid); |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
484 | if(r < 0) { |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
485 | fprintf(stderr, "Cannot write uid\n"); |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
486 | xmlFreeTextWriter(writer); |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
487 | return -1; |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
488 | } |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
489 | r = xmlTextWriterWriteFormatElement( |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
490 | writer, |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
491 | BAD_CAST "gid", |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
492 | "%u", |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
493 | (unsigned int)res->gid); |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
494 | if(r < 0) { |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
495 | fprintf(stderr, "Cannot write gid\n"); |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
496 | xmlFreeTextWriter(writer); |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
497 | return -1; |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
498 | } |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
499 | } |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
500 | |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
501 | r = xmlTextWriterWriteFormatElement( |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
502 | writer, |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
503 | BAD_CAST "size", |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
504 | "%" PRId64, |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
505 | (int64_t)res->size); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
506 | if(r < 0) { |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
507 | fprintf(stderr, "Cannot write size\n"); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
508 | xmlFreeTextWriter(writer); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
509 | return -1; |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
510 | } |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
511 | |
367
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
366
diff
changeset
|
512 | if(res->tags_hash) { |
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
366
diff
changeset
|
513 | r = xmlTextWriterWriteElement( |
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
366
diff
changeset
|
514 | writer, |
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
366
diff
changeset
|
515 | BAD_CAST "tags-hash", |
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
366
diff
changeset
|
516 | BAD_CAST res->tags_hash); |
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
366
diff
changeset
|
517 | if(r < 0) { |
524
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
523
diff
changeset
|
518 | fprintf(stderr, "Cannot write tags-hash: %s\n", res->tags_hash); |
367
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
366
diff
changeset
|
519 | xmlFreeTextWriter(writer); |
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
366
diff
changeset
|
520 | return -1; |
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
366
diff
changeset
|
521 | } |
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
366
diff
changeset
|
522 | } |
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
366
diff
changeset
|
523 | |
572
1eac93fcef77
add link target to sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
567
diff
changeset
|
524 | if(res->link_target) { |
1eac93fcef77
add link target to sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
567
diff
changeset
|
525 | r = xmlTextWriterWriteElement( |
1eac93fcef77
add link target to sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
567
diff
changeset
|
526 | writer, |
1eac93fcef77
add link target to sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
567
diff
changeset
|
527 | BAD_CAST "link", |
1eac93fcef77
add link target to sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
567
diff
changeset
|
528 | BAD_CAST res->link_target); |
1eac93fcef77
add link target to sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
567
diff
changeset
|
529 | if(r < 0) { |
1eac93fcef77
add link target to sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
567
diff
changeset
|
530 | fprintf(stderr, "Cannot write link: %s\n", res->link_target); |
1eac93fcef77
add link target to sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
567
diff
changeset
|
531 | xmlFreeTextWriter(writer); |
1eac93fcef77
add link target to sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
567
diff
changeset
|
532 | return -1; |
1eac93fcef77
add link target to sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
567
diff
changeset
|
533 | } |
1eac93fcef77
add link target to sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
567
diff
changeset
|
534 | } |
1eac93fcef77
add link target to sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
567
diff
changeset
|
535 | |
521
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
536 | if(res->xattr_hash) { |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
537 | r = xmlTextWriterWriteElement( |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
538 | writer, |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
539 | BAD_CAST "xattr-hash", |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
540 | BAD_CAST res->xattr_hash); |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
541 | if(r < 0) { |
524
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
523
diff
changeset
|
542 | fprintf(stderr, "Cannot write xattr-hash: %s\n", res->xattr_hash); |
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
523
diff
changeset
|
543 | xmlFreeTextWriter(writer); |
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
523
diff
changeset
|
544 | return -1; |
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
523
diff
changeset
|
545 | } |
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
523
diff
changeset
|
546 | } |
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
523
diff
changeset
|
547 | |
257
49f3c58cc06c
fixes conflict detection in push command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
251
diff
changeset
|
548 | if(res->skipped) { |
261
f60d742a62a0
fixes build with ancient openssl
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
259
diff
changeset
|
549 | r = xmlTextWriterStartElement(writer, BAD_CAST "skipped"); |
257
49f3c58cc06c
fixes conflict detection in push command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
251
diff
changeset
|
550 | r += xmlTextWriterEndElement(writer); |
49f3c58cc06c
fixes conflict detection in push command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
251
diff
changeset
|
551 | if(r < 0) { |
259
6c8d5f8a1d6f
fixes make install
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
257
diff
changeset
|
552 | fprintf(stderr, "Cannot write skipped\n"); |
257
49f3c58cc06c
fixes conflict detection in push command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
251
diff
changeset
|
553 | xmlFreeTextWriter(writer); |
49f3c58cc06c
fixes conflict detection in push command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
251
diff
changeset
|
554 | return -1; |
49f3c58cc06c
fixes conflict detection in push command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
251
diff
changeset
|
555 | } |
49f3c58cc06c
fixes conflict detection in push command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
251
diff
changeset
|
556 | } |
49f3c58cc06c
fixes conflict detection in push command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
251
diff
changeset
|
557 | |
366
5228b912c925
adds technical foundation to just push tag updates
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
364
diff
changeset
|
558 | if(res->tags_updated) { |
5228b912c925
adds technical foundation to just push tag updates
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
364
diff
changeset
|
559 | r = xmlTextWriterStartElement(writer, BAD_CAST "tags-updated"); |
5228b912c925
adds technical foundation to just push tag updates
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
364
diff
changeset
|
560 | r += xmlTextWriterEndElement(writer); |
5228b912c925
adds technical foundation to just push tag updates
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
364
diff
changeset
|
561 | if(r < 0) { |
5228b912c925
adds technical foundation to just push tag updates
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
364
diff
changeset
|
562 | fprintf(stderr, "Cannot write tags-updated\n"); |
5228b912c925
adds technical foundation to just push tag updates
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
364
diff
changeset
|
563 | xmlFreeTextWriter(writer); |
5228b912c925
adds technical foundation to just push tag updates
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
364
diff
changeset
|
564 | return -1; |
5228b912c925
adds technical foundation to just push tag updates
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
364
diff
changeset
|
565 | } |
5228b912c925
adds technical foundation to just push tag updates
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
364
diff
changeset
|
566 | } |
5228b912c925
adds technical foundation to just push tag updates
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
364
diff
changeset
|
567 | |
536
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
568 | if(res->numparts > 0) { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
569 | r = xmlTextWriterStartElement(writer, BAD_CAST "parts"); |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
570 | if(r < 0) { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
571 | xmlFreeTextWriter(writer); |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
572 | return -1; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
573 | } |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
574 | for(size_t i=0;i<res->numparts;i++) { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
575 | FilePart p = res->parts[i]; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
576 | r = xmlTextWriterStartElement(writer, BAD_CAST "part"); |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
577 | if(r < 0) { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
578 | xmlFreeTextWriter(writer); |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
579 | return -1; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
580 | } |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
581 | |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
582 | if(p.hash) { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
583 | r = xmlTextWriterWriteElement(writer, BAD_CAST "hash", BAD_CAST p.hash); |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
584 | if(r < 0) { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
585 | xmlFreeTextWriter(writer); |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
586 | return -1; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
587 | } |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
588 | } |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
589 | if(p.etag) { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
590 | r = xmlTextWriterWriteElement(writer, BAD_CAST "etag", BAD_CAST p.etag); |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
591 | if(r < 0) { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
592 | xmlFreeTextWriter(writer); |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
593 | return -1; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
594 | } |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
595 | } |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
596 | r = xmlTextWriterEndElement(writer); |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
597 | if(r < 0) { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
598 | xmlFreeTextWriter(writer); |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
599 | return -1; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
600 | } |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
601 | } |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
602 | r = xmlTextWriterEndElement(writer); |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
603 | if(r < 0) { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
604 | xmlFreeTextWriter(writer); |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
605 | return -1; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
606 | } |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
607 | } |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
608 | |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
609 | // </resource> |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
610 | xmlTextWriterEndElement(writer); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
611 | } |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
612 | |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
613 | // write all remove entries |
216
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
614 | /* |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
615 | i = ucx_map_iterator(db->remove); |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
616 | UCX_MAP_FOREACH(key, res, i) { |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
617 | // <remove> |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
618 | xmlTextWriterStartElement(writer, BAD_CAST "remove"); |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
619 | |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
620 | xmlTextWriterWriteElement( |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
621 | writer, |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
622 | BAD_CAST "path", |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
623 | BAD_CAST res->path); |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
624 | |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
625 | // </remove> |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
626 | xmlTextWriterEndElement(writer); |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
627 | } |
216
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
628 | */ |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
629 | |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
630 | // write all conflict entries |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
631 | i = ucx_map_iterator(db->conflict); |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
632 | UCX_MAP_FOREACH(key, res, i) { |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
633 | // <conflict> |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
634 | xmlTextWriterStartElement(writer, BAD_CAST "conflict"); |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
635 | |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
636 | xmlTextWriterWriteElement( |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
637 | writer, |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
638 | BAD_CAST "path", |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
639 | BAD_CAST res->path); |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
640 | |
560
a816e805e5db
store origin of file conflicts
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
552
diff
changeset
|
641 | if(res->conflict_source) { |
a816e805e5db
store origin of file conflicts
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
552
diff
changeset
|
642 | xmlTextWriterWriteElement( |
a816e805e5db
store origin of file conflicts
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
552
diff
changeset
|
643 | writer, |
a816e805e5db
store origin of file conflicts
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
552
diff
changeset
|
644 | BAD_CAST "source", |
a816e805e5db
store origin of file conflicts
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
552
diff
changeset
|
645 | BAD_CAST res->conflict_source); |
a816e805e5db
store origin of file conflicts
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
552
diff
changeset
|
646 | } |
a816e805e5db
store origin of file conflicts
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
552
diff
changeset
|
647 | |
216
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
648 | // </conflict> |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
649 | xmlTextWriterEndElement(writer); |
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
215
diff
changeset
|
650 | } |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
47
diff
changeset
|
651 | |
47
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
652 | // end |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
653 | xmlTextWriterEndElement(writer); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
654 | r = xmlTextWriterEndDocument(writer); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
655 | if(r < 0) { |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
656 | xmlFreeTextWriter(writer); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
657 | return -1; |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
658 | } |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
659 | xmlFreeTextWriter(writer); |
fbbbeed4ba8f
added push command for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
660 | return 0; |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
661 | } |
222
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
662 | |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
663 | void destroy_db(SyncDatabase *db) { |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
664 | ucx_map_free_content(db->resources, (ucx_destructor)local_resource_free); |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
665 | ucx_map_free_content(db->conflict, (ucx_destructor)local_resource_free); |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
666 | ucx_map_free(db->resources); |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
667 | ucx_map_free(db->conflict); |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
668 | free(db); |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
669 | } |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
670 | |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
671 | void local_resource_free(LocalResource *res) { |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
672 | if(!res) { |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
673 | return; |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
674 | } |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
675 | if(res->name) { |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
676 | free(res->name); |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
677 | } |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
678 | if(res->path) { |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
679 | free(res->path); |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
680 | } |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
681 | if(res->etag) { |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
682 | free(res->etag); |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
683 | } |
367
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
366
diff
changeset
|
684 | if(res->cached_tags) { |
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
366
diff
changeset
|
685 | ucx_buffer_free(res->cached_tags); |
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
366
diff
changeset
|
686 | } |
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
366
diff
changeset
|
687 | if(res->tags_hash) { |
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
366
diff
changeset
|
688 | free(res->tags_hash); |
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
366
diff
changeset
|
689 | } |
222
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
690 | free(res); |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
691 | } |
536
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
692 | |
567
b0ce8b27978b
implement copy/move for dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
560
diff
changeset
|
693 | static char* nullstrdup(const char *s) { |
552
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
694 | return s ? strdup(s) : NULL; |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
695 | } |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
696 | |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
697 | LocalResource* local_resource_copy(LocalResource *src, const char *new_path) { |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
698 | LocalResource *newres = calloc(1, sizeof(LocalResource)); |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
699 | newres->path = strdup(new_path); |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
700 | newres->etag = nullstrdup(src->etag); |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
701 | newres->hash = nullstrdup(src->hash); |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
702 | newres->last_modified = src->last_modified; |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
703 | newres->mode = src->mode; |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
704 | newres->uid = src->uid; |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
705 | newres->gid = src->gid; |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
706 | newres->size = src->size; |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
707 | newres->isdirectory = src->isdirectory; |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
708 | newres->skipped = src->skipped; |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
709 | |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
710 | if(src->xattr) { |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
711 | XAttributes *xattr = calloc(1, sizeof(XAttributes)); |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
712 | xattr->hash = nullstrdup(src->xattr->hash); |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
713 | xattr->nattr = src->xattr->nattr; |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
714 | xattr->names = calloc(xattr->nattr, sizeof(char*)); |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
715 | xattr->values = calloc(xattr->nattr, sizeof(sstr_t)); |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
716 | for(int i=0;i<xattr->nattr;i++) { |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
717 | xattr->names[i] = strdup(src->xattr->names[i]); |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
718 | xattr->values[i] = sstrdup(src->xattr->values[i]); |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
719 | } |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
720 | newres->xattr = xattr; |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
721 | } |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
722 | |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
723 | newres->tags_hash = nullstrdup(src->tags_hash); |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
724 | newres->xattr_hash = nullstrdup(src->xattr_hash); |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
725 | newres->remote_tags_hash = nullstrdup(src->remote_tags_hash); |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
726 | |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
727 | if(src->parts) { |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
728 | newres->numparts = src->numparts; |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
729 | newres->parts = calloc(src->numparts, sizeof(FilePart)); |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
730 | for(int i=0;i<newres->numparts;i++) { |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
731 | FilePart s = src->parts[i]; |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
732 | FilePart p; |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
733 | p.block = s.block; |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
734 | p.hash = nullstrdup(s.hash); |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
735 | p.etag = nullstrdup(s.etag); |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
736 | newres->parts[i] = p; |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
737 | } |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
738 | } |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
739 | |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
740 | newres->blocksize = src->blocksize; |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
741 | |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
742 | newres->tags_updated = src->tags_updated; |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
743 | newres->finfo_updated = src->finfo_updated; |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
744 | newres->xattr_updated = src->xattr_updated; |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
745 | newres->metadata_updated = src->metadata_updated; |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
746 | |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
747 | return newres; |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
748 | |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
749 | } |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
750 | |
536
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
751 | void filepart_free(FilePart *part) { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
752 | if(part->etag) { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
753 | free(part->etag); |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
754 | } |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
755 | if(part->hash) { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
756 | free(part->hash); |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
757 | } |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
758 | free(part); |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
759 | } |
550
8c700eae3eb8
add copy/move detection to push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
541
diff
changeset
|
760 | |
8c700eae3eb8
add copy/move detection to push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
541
diff
changeset
|
761 | UcxMap* create_hash_index(SyncDatabase *db) { |
8c700eae3eb8
add copy/move detection to push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
541
diff
changeset
|
762 | UcxMap *hmap = ucx_map_new(db->resources->count + 64); |
8c700eae3eb8
add copy/move detection to push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
541
diff
changeset
|
763 | |
8c700eae3eb8
add copy/move detection to push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
541
diff
changeset
|
764 | UcxMapIterator i = ucx_map_iterator(db->resources); |
8c700eae3eb8
add copy/move detection to push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
541
diff
changeset
|
765 | UcxKey key; |
8c700eae3eb8
add copy/move detection to push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
541
diff
changeset
|
766 | LocalResource *res; |
8c700eae3eb8
add copy/move detection to push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
541
diff
changeset
|
767 | UCX_MAP_FOREACH(key, res, i) { |
8c700eae3eb8
add copy/move detection to push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
541
diff
changeset
|
768 | if(res->hash) { |
8c700eae3eb8
add copy/move detection to push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
541
diff
changeset
|
769 | ucx_map_cstr_put(hmap, res->hash, res); |
8c700eae3eb8
add copy/move detection to push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
541
diff
changeset
|
770 | } |
8c700eae3eb8
add copy/move detection to push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
541
diff
changeset
|
771 | } |
8c700eae3eb8
add copy/move detection to push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
541
diff
changeset
|
772 | |
8c700eae3eb8
add copy/move detection to push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
541
diff
changeset
|
773 | return hmap; |
8c700eae3eb8
add copy/move detection to push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
541
diff
changeset
|
774 | } |