From: Dobrica Pavlinusic Date: Thu, 2 Aug 2012 14:06:33 +0000 (+0200) Subject: extract x_sync handling and introduce persistant x_meta X-Git-Url: http://git.rot13.org/?a=commitdiff_plain;ds=sidebyside;h=f53f651ae8e758f32f96865f502f55c44f206d88;p=ILL-Zotero-RT extract x_sync handling and introduce persistant x_meta --- diff --git a/CouchDB.pm b/CouchDB.pm index c2c9cda..016a7d8 100644 --- a/CouchDB.pm +++ b/CouchDB.pm @@ -86,6 +86,18 @@ sub post { $self->request(POST => $url, $json); } +sub x_sync { + my ($json,$old) = @_; + $json->{$_} = $old->{$_} foreach keys %{ $old->{x_meta} }; # special persistent x_meta fields + my $json_md5 = md5_hex encode_json $json; + $json->{x_sync}->{json_md5} = $json_md5; + my $o = $old->{x_sync}->{json_md5}; + my $n = $json->{x_sync}->{json_md5}; + warn "## x_sync $o ", $o eq $n ? '==' : '!=', " $n\n"; + return $json; +} + + sub modify { my ($self, $url, $json) = @_; @@ -104,11 +116,9 @@ sub modify { $json->{_rev} = $old->{_rev}; } - my $json_md5 = md5_hex encode_json $json; - $json->{x_sync}->{json_md5} = $json_md5; + $json = x_sync($json, $old); - warn "# json_md5 $json_md5 == $old->{x_sync}->{json_md5}\n"; - if ( $json_md5 ne $old->{x_sync}->{json_md5} ) { + if ( $json->{x_sync}->{json_md5} ne $old->{x_sync}->{json_md5} ) { warn "# modify $url"; $ret = $self->put( $url => $json ); } else { @@ -118,6 +128,9 @@ sub modify { } } else { $json = $json->({}) if ref $json eq 'CODE'; + + $json = x_sync($json); + warn "# insert $url ", dump($json); $ret = $self->put( $url => $json ); }