dav/sync.c

changeset 539
8deb52292c99
parent 536
877f7c4a203b
child 541
e59a989d890d
equal deleted inserted replaced
538:a7402e35ad87 539:8deb52292c99
882 break; 882 break;
883 } 883 }
884 } 884 }
885 885
886 // check if extended attributes have changed 886 // check if extended attributes have changed
887 if(dir->metadata & FINFO_XATTR == FINFO_XATTR) { 887 if((dir->metadata & FINFO_XATTR) == FINFO_XATTR) {
888 DavXmlNode *xattr = dav_get_property_ns(res, DAV_NS, "xattributes"); 888 DavXmlNode *xattr = dav_get_property_ns(res, DAV_NS, "xattributes");
889 char *xattr_hash = get_xattr_hash(xattr); 889 char *xattr_hash = get_xattr_hash(xattr);
890 if(nullstrcmp(xattr_hash, local->xattr_hash)) { 890 if(nullstrcmp(xattr_hash, local->xattr_hash)) {
891 ret = REMOTE_CHANGE_METADATA; 891 ret = REMOTE_CHANGE_METADATA;
892 break; 892 break;
893 } 893 }
894 } 894 }
895 895
896 // check if finfo has changed 896 // check if finfo has changed
897 DavXmlNode *finfo = dav_get_property_ns(res, DAV_NS, "finfo"); 897 DavXmlNode *finfo = dav_get_property_ns(res, DAV_NS, "finfo");
898 if(dir->metadata & FINFO_MODE == FINFO_MODE) { 898 if((dir->metadata & FINFO_MODE) == FINFO_MODE) {
899 FileInfo f; 899 FileInfo f;
900 finfo_get_values(finfo, &f); 900 finfo_get_values(finfo, &f);
901 if(f.mode_set && f.mode != local->mode) { 901 if(f.mode_set && f.mode != local->mode) {
902 ret = REMOTE_CHANGE_METADATA; 902 ret = REMOTE_CHANGE_METADATA;
903 break; 903 break;
1979 res->tags_updated = 1; // tags removed 1979 res->tags_updated = 1; // tags removed
1980 } 1980 }
1981 res->metadata_updated = res->tags_updated; 1981 res->metadata_updated = res->tags_updated;
1982 } 1982 }
1983 1983
1984 if(dir->metadata & FINFO_MODE == FINFO_MODE) { 1984 if((dir->metadata & FINFO_MODE) == FINFO_MODE) {
1985 if(db_res->mode != res->mode) { 1985 if(db_res->mode != res->mode) {
1986 res->finfo_updated = 1; 1986 res->finfo_updated = 1;
1987 res->metadata_updated = 1; 1987 res->metadata_updated = 1;
1988 } 1988 }
1989 } 1989 }
1990 if(dir->metadata & FINFO_OWNER == FINFO_OWNER) { 1990 if((dir->metadata & FINFO_OWNER) == FINFO_OWNER) {
1991 if(db_res->uid != res->uid || db_res->gid != res->gid) { 1991 if(db_res->uid != res->uid || db_res->gid != res->gid) {
1992 res->finfo_updated = 1; 1992 res->finfo_updated = 1;
1993 res->metadata_updated = 1; 1993 res->metadata_updated = 1;
1994 } 1994 }
1995 } 1995 }
1996 1996
1997 if(dir->metadata & FINFO_XATTR == FINFO_XATTR) { 1997 if((dir->metadata & FINFO_XATTR) == FINFO_XATTR) {
1998 char *path = util_concat_path(dir->path, db_res->path); 1998 char *path = util_concat_path(dir->path, db_res->path);
1999 XAttributes *xattr = file_get_attributes(path); 1999 XAttributes *xattr = file_get_attributes(path);
2000 // test if xattr are added, removed or changed 2000 // test if xattr are added, removed or changed
2001 if((db_res->xattr_hash && !xattr) || 2001 if((db_res->xattr_hash && !xattr) ||
2002 (!db_res->xattr_hash && xattr) || 2002 (!db_res->xattr_hash && xattr) ||
2239 2239
2240 DavXmlNode *fileinfo = dav_get_property_ns(res, DAV_NS, "finfo"); 2240 DavXmlNode *fileinfo = dav_get_property_ns(res, DAV_NS, "finfo");
2241 if(fileinfo) { 2241 if(fileinfo) {
2242 FileInfo f; 2242 FileInfo f;
2243 finfo_get_values(fileinfo, &f); 2243 finfo_get_values(fileinfo, &f);
2244 if(dir->metadata & FINFO_DATE == FINFO_DATE && f.date_set) { 2244 if((dir->metadata & FINFO_DATE) == FINFO_DATE && f.date_set) {
2245 // set mtime 2245 // set mtime
2246 struct utimbuf t; 2246 struct utimbuf t;
2247 t.actime = f.last_modified; 2247 t.actime = f.last_modified;
2248 t.modtime = f.last_modified; 2248 t.modtime = f.last_modified;
2249 if(utime(path, &t)) { 2249 if(utime(path, &t)) {
2250 fprintf(stderr, "utime failed for file: %s : %s\n", path, strerror(errno)); 2250 fprintf(stderr, "utime failed for file: %s : %s\n", path, strerror(errno));
2251 ret = 1; 2251 ret = 1;
2252 } 2252 }
2253 } 2253 }
2254 if(dir->metadata & FINFO_MODE == FINFO_MODE && f.mode_set) { 2254 if((dir->metadata & FINFO_MODE) == FINFO_MODE && f.mode_set) {
2255 // set mode 2255 // set mode
2256 if(chmod(path, f.mode)) { 2256 if(chmod(path, f.mode)) {
2257 fprintf(stderr, "chmod failed for file: %s : %s\n", path, strerror(errno)); 2257 fprintf(stderr, "chmod failed for file: %s : %s\n", path, strerror(errno));
2258 ret = 1; 2258 ret = 1;
2259 } 2259 }
3935 } 3935 }
3936 3936
3937 void sync_print_get_file_err(const char *path, int err) { 3937 void sync_print_get_file_err(const char *path, int err) {
3938 switch(err) { 3938 switch(err) {
3939 case 1: fprintf(stderr, "File %s: not found\n", path); break; 3939 case 1: fprintf(stderr, "File %s: not found\n", path); break;
3940 case 2: fprintf(stderr, "File %s: permission denied\n"); break; 3940 case 2: fprintf(stderr, "File %s: permission denied\n", path); break;
3941 case 3: fprintf(stderr, "File %s: stat failed: %s\n", path, strerror(errno)); break; 3941 case 3: fprintf(stderr, "File %s: stat failed: %s\n", path, strerror(errno)); break;
3942 case 4: fprintf(stderr, "File %s is not in any syncdir\n", path); break; 3942 case 4: fprintf(stderr, "File %s is not in any syncdir\n", path); break;
3943 case 5: fprintf(stderr, "File %s is in multiple syncdirs\n", path); break; 3943 case 5: fprintf(stderr, "File %s is in multiple syncdirs\n", path); break;
3944 case 6: fprintf(stderr, "Syncdir not found\n"); break; 3944 case 6: fprintf(stderr, "Syncdir not found\n"); break;
3945 } 3945 }

mercurial