X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=metadata.cc;h=c27278bccb14ce539064eb0d72de766e039de611;hb=d38558b79c81f446698c272a85f1a2782667bce3;hp=a3323a13f4040b9fd3eb5221a66e9a89a578aad8;hpb=ca9a4006c4ffc86a24d653d1b1b68bec4a6fbfdf;p=cumulus.git diff --git a/metadata.cc b/metadata.cc index a3323a1..c27278b 100644 --- a/metadata.cc +++ b/metadata.cc @@ -198,12 +198,13 @@ bool MetadataWriter::find(const string& path) } /* Does a file appear to be unchanged from the previous time it was backed up, - * based on stat information? - * - * TODO: Notice files that were modified as they were being backed up the last - * time. */ + * based on stat information? */ bool MetadataWriter::is_unchanged(const struct stat *stat_buf) { + if (old_metadata.find("volatile") != old_metadata.end() + && parse_int(old_metadata["volatile"]) != 0) + return false; + if (old_metadata.find("ctime") == old_metadata.end()) return false; if (stat_buf->st_ctime != parse_int(old_metadata["ctime"])) @@ -268,6 +269,11 @@ void MetadataWriter::metadata_flush() ObjectReference indirect; for (list::iterator i = items.begin(); i != items.end(); ++i) { + // If indirectly referencing any other metadata logs, be sure those + // segments are properly referenced. + if (i->reused) + add_segment(i->ref.get_segment()); + // Write out an indirect reference to any previous objects which could // be reused if (!i->reused || !indirect.merge(i->ref)) {