57 xmlDoc *doc = doc = xmlNewDoc(BAD_CAST "1.0"); |
57 xmlDoc *doc = doc = xmlNewDoc(BAD_CAST "1.0"); |
58 xmlNode *root = xmlNewNode(NULL, BAD_CAST "directory"); |
58 xmlNode *root = xmlNewNode(NULL, BAD_CAST "directory"); |
59 xmlDocSetRootElement(doc, root); |
59 xmlDocSetRootElement(doc, root); |
60 if(xmlSaveFormatFileEnc(db_file, doc, "UTF-8", 1) != -1) { |
60 if(xmlSaveFormatFileEnc(db_file, doc, "UTF-8", 1) != -1) { |
61 db->resources = ucx_map_new(2048); |
61 db->resources = ucx_map_new(2048); |
62 db->remove = ucx_map_new(8); |
62 //db->remove = ucx_map_new(8); |
63 } else { |
63 } else { |
64 free(db); |
64 free(db); |
65 db = NULL; |
65 db = NULL; |
66 } |
66 } |
67 xmlFreeDoc(doc); |
67 xmlFreeDoc(doc); |
69 return db; |
69 return db; |
70 } |
70 } |
71 free(db_file); |
71 free(db_file); |
72 |
72 |
73 db->resources = ucx_map_new(2048); |
73 db->resources = ucx_map_new(2048); |
74 db->remove = ucx_map_new(16); |
74 //db->remove = ucx_map_new(16); |
|
75 db->conflict = ucx_map_new(16); |
75 int error = 0; |
76 int error = 0; |
76 while(xmlTextReaderRead(reader)) { |
77 while(xmlTextReaderRead(reader)) { |
77 int type = xmlTextReaderNodeType(reader); |
78 int type = xmlTextReaderNodeType(reader); |
78 const xmlChar *name = xmlTextReaderConstName(reader); |
79 const xmlChar *name = xmlTextReaderConstName(reader); |
79 |
80 |
84 ucx_map_cstr_put(db->resources, res->path, res); |
85 ucx_map_cstr_put(db->resources, res->path, res); |
85 } else { |
86 } else { |
86 error = 1; |
87 error = 1; |
87 break; |
88 break; |
88 } |
89 } |
89 } else if(xstreq(name, "remove")) { |
90 } else if(xstreq(name, "conflict")) { |
90 LocalResource *res = process_remove(reader); |
91 LocalResource *res = process_conflict(reader); |
91 if(res) { |
92 if(res) { |
92 ucx_map_cstr_put(db->remove, res->path, res); |
93 ucx_map_cstr_put(db->conflict, res->path, res); |
93 } else { |
94 } else { |
94 error = 1; |
95 error = 1; |
95 break; |
96 break; |
96 } |
97 } |
97 } |
98 } |
187 } |
188 } |
188 } else if(type == XML_READER_TYPE_TEXT && path) { |
189 } else if(type == XML_READER_TYPE_TEXT && path) { |
189 const xmlChar *value = xmlTextReaderConstValue(reader); |
190 const xmlChar *value = xmlTextReaderConstValue(reader); |
190 res->path = strdup((char*)value); |
191 res->path = strdup((char*)value); |
191 } else if(XML_READER_TYPE_END_ELEMENT) { |
192 } else if(XML_READER_TYPE_END_ELEMENT) { |
192 if(xstreq(name, "remove")) { |
193 if(xstreq(name, "conflict")) { |
193 break; |
194 break; |
194 } else { |
195 } else { |
195 path = 0; |
196 path = 0; |
196 } |
197 } |
197 } |
198 } |
281 // </resource> |
282 // </resource> |
282 xmlTextWriterEndElement(writer); |
283 xmlTextWriterEndElement(writer); |
283 } |
284 } |
284 |
285 |
285 // write all remove entries |
286 // write all remove entries |
|
287 /* |
286 i = ucx_map_iterator(db->remove); |
288 i = ucx_map_iterator(db->remove); |
287 UCX_MAP_FOREACH(key, res, i) { |
289 UCX_MAP_FOREACH(key, res, i) { |
288 // <remove> |
290 // <remove> |
289 xmlTextWriterStartElement(writer, BAD_CAST "remove"); |
291 xmlTextWriterStartElement(writer, BAD_CAST "remove"); |
290 |
292 |
292 writer, |
294 writer, |
293 BAD_CAST "path", |
295 BAD_CAST "path", |
294 BAD_CAST res->path); |
296 BAD_CAST res->path); |
295 |
297 |
296 // </remove> |
298 // </remove> |
|
299 xmlTextWriterEndElement(writer); |
|
300 } |
|
301 */ |
|
302 |
|
303 // write all conflict entries |
|
304 i = ucx_map_iterator(db->conflict); |
|
305 UCX_MAP_FOREACH(key, res, i) { |
|
306 // <conflict> |
|
307 xmlTextWriterStartElement(writer, BAD_CAST "conflict"); |
|
308 |
|
309 xmlTextWriterWriteElement( |
|
310 writer, |
|
311 BAD_CAST "path", |
|
312 BAD_CAST res->path); |
|
313 |
|
314 // </conflict> |
297 xmlTextWriterEndElement(writer); |
315 xmlTextWriterEndElement(writer); |
298 } |
316 } |
299 |
317 |
300 // end |
318 // end |
301 xmlTextWriterEndElement(writer); |
319 xmlTextWriterEndElement(writer); |