dav/sync.c

changeset 561
5e6df4f502d3
parent 560
a816e805e5db
child 563
3dffe58a573f
equal deleted inserted replaced
560:a816e805e5db 561:5e6df4f502d3
578 DavBool remove_file = cmd_getoption(a, "remove") ? 1 : 0; 578 DavBool remove_file = cmd_getoption(a, "remove") ? 1 : 0;
579 579
580 int sync_success = 0; 580 int sync_success = 0;
581 int sync_delete = 0; 581 int sync_delete = 0;
582 int sync_error = 0; 582 int sync_error = 0;
583 int sync_conflict = 0;
583 584
584 UcxList *res_modified = NULL; 585 UcxList *res_modified = NULL;
585 UcxList *res_new = NULL; 586 UcxList *res_new = NULL;
586 UcxList *res_conflict = NULL; 587 UcxList *res_conflict = NULL;
587 UcxList *res_mkdir = NULL; 588 UcxList *res_mkdir = NULL;
699 } 700 }
700 701
701 // we need a map for all conflicts for fast lookups 702 // we need a map for all conflicts for fast lookups
702 UcxMap *conflicts = ucx_map_new(ucx_list_size(res_conflict)+16); 703 UcxMap *conflicts = ucx_map_new(ucx_list_size(res_conflict)+16);
703 UCX_FOREACH(elm, res_conflict) { 704 UCX_FOREACH(elm, res_conflict) {
705 ++sync_conflict;
704 DavResource *res = elm->data; 706 DavResource *res = elm->data;
705 ucx_map_cstr_put(conflicts, res->path, res); 707 ucx_map_cstr_put(conflicts, res->path, res);
706 } 708 }
707 709
708 // download all new, modified and conflict files 710 // download all new, modified and conflict files
812 // Report 814 // Report
813 if(ret != -2) { 815 if(ret != -2) {
814 char *str_success = sync_success == 1 ? "file" : "files"; 816 char *str_success = sync_success == 1 ? "file" : "files";
815 char *str_delete = sync_delete == 1 ? "file" : "files"; 817 char *str_delete = sync_delete == 1 ? "file" : "files";
816 char *str_error = sync_error == 1 ? "error" : "errors"; 818 char *str_error = sync_error == 1 ? "error" : "errors";
817 printf("Result: %d %s pulled, %d %s deleted, %d %s\n", 819 char *str_conflict = sync_conflict == 1 ? "conflict" : "conflicts";
820 printf("Result: %d %s pulled, %d %s deleted, %d %s, %d %s\n",
818 sync_success, str_success, 821 sync_success, str_success,
819 sync_delete,str_delete, 822 sync_delete,str_delete,
823 sync_conflict, str_conflict,
820 sync_error, str_error); 824 sync_error, str_error);
821 } 825 }
822 826
823 return ret; 827 return ret;
824 } 828 }
1514 db_hashes = create_hash_index(db); 1518 db_hashes = create_hash_index(db);
1515 } 1519 }
1516 1520
1517 int sync_success = 0; 1521 int sync_success = 0;
1518 int sync_delete = 0; 1522 int sync_delete = 0;
1519 int sync_skipped = 0; 1523 int sync_conflict = 0;
1520 int sync_error = 0; 1524 int sync_error = 0;
1521 1525
1522 UcxList *ls_new = NULL; 1526 UcxList *ls_new = NULL;
1523 UcxList *ls_modified = NULL; 1527 UcxList *ls_modified = NULL;
1524 UcxList *ls_conflict = NULL; 1528 UcxList *ls_conflict = NULL;
1564 } 1568 }
1565 } 1569 }
1566 continue; 1570 continue;
1567 } 1571 }
1568 1572
1573 // skip conflict backups silently
1569 if(res_isconflict(db, local_res)) { 1574 if(res_isconflict(db, local_res)) {
1570 ls_conflict = ucx_list_append(ls_conflict, local_res); 1575 ls_conflict = ucx_list_append(ls_conflict, local_res);
1571 continue; 1576 continue;
1572 } 1577 }
1573 1578
1726 nullfree(local_res->etag); 1731 nullfree(local_res->etag);
1727 local_res->etag = NULL; 1732 local_res->etag = NULL;
1728 nullfree(local_res->hash); 1733 nullfree(local_res->hash);
1729 local_res->hash = NULL; 1734 local_res->hash = NULL;
1730 local_res->skipped = TRUE; 1735 local_res->skipped = TRUE;
1731 sync_skipped++; 1736 ++sync_conflict;
1732 } else { 1737 } else {
1733 printf("put: %s\n", local_res->path); 1738 printf("put: %s\n", local_res->path);
1734 if(sync_put_resource(dir, res, local_res, &sync_success)) { 1739 if(sync_put_resource(dir, res, local_res, &sync_success)) {
1735 sync_error++; 1740 sync_error++;
1736 print_resource_error(sn, res->path); 1741 print_resource_error(sn, res->path);
1762 nullfree(local->etag); 1767 nullfree(local->etag);
1763 local->etag = NULL; 1768 local->etag = NULL;
1764 nullfree(local->hash); 1769 nullfree(local->hash);
1765 local->hash = NULL; 1770 local->hash = NULL;
1766 local->skipped = TRUE; 1771 local->skipped = TRUE;
1767 sync_skipped++; 1772 ++sync_conflict;
1768 } else { 1773 } else {
1769 DavResource *origin_res = dav_resource_new(sn, local->origin->path); 1774 DavResource *origin_res = dav_resource_new(sn, local->origin->path);
1770 int origin_changed = remote_resource_is_changed( 1775 int origin_changed = remote_resource_is_changed(
1771 sn, 1776 sn,
1772 dir, 1777 dir,
1874 1879
1875 // Report 1880 // Report
1876 if(ret != -2) { 1881 if(ret != -2) {
1877 char *str_success = sync_success == 1 ? "file" : "files"; 1882 char *str_success = sync_success == 1 ? "file" : "files";
1878 char *str_delete = sync_delete == 1 ? "file" : "files"; 1883 char *str_delete = sync_delete == 1 ? "file" : "files";
1879 char *str_skipped = sync_delete == 1 ? "file" : "files"; 1884 char *str_conflict = sync_conflict == 1 ? "conflict" : "conflicts";
1880 char *str_error = sync_error == 1 ? "error" : "errors"; 1885 char *str_error = sync_error == 1 ? "error" : "errors";
1881 1886
1882 printf("Result: %d %s pushed, ", sync_success, str_success); 1887 printf("Result: %d %s pushed, ", sync_success, str_success);
1883 if(!archive) { 1888 if(!archive) {
1884 printf("%d %s deleted, ", sync_delete, str_delete); 1889 printf("%d %s deleted, ", sync_delete, str_delete);
1885 } 1890 }
1886 printf("%d %s skipped, %d %s\n", 1891 printf("%d %s, %d %s\n",
1887 sync_skipped, str_skipped, sync_error, str_error); 1892 sync_conflict, str_conflict, sync_error, str_error);
1888 } 1893 }
1889 1894
1890 return ret; 1895 return ret;
1891 } 1896 }
1892 1897

mercurial