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; |
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 |