dav/db.c

Sat, 22 Jun 2019 16:36:52 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sat, 22 Jun 2019 16:36:52 +0200
changeset 607
5dc7fe41e8f8
parent 572
1eac93fcef77
child 611
a7c48e0dca88
permissions
-rw-r--r--

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 }

mercurial