def write_special(self, diff_rorp, new): """Write diff_rorp (which holds special file) to new""" eh = robust.get_error_handler("SpecialFileError") if robust.check_common_error(eh, rpath.copy, (diff_rorp, new)) == 0: new.setdata() if new.lstat(): new.delete() new.touch()
def __init__(self, basis_root_rp, CCPP): """Set basis_root_rp, the base of the tree to be incremented""" self.basis_root_rp = basis_root_rp assert basis_root_rp.conn is Globals.local_connection self.statfileobj = (statistics.get_active_statfileobj() or statistics.StatFileObj()) self.dir_replacement, self.dir_update = None, None self.CCPP = CCPP self.error_handler = robust.get_error_handler("UpdateError")
def get_diffs(cls, dest_sigiter): """Return diffs of any files with signature in dest_sigiter""" source_rps = cls._source_select error_handler = robust.get_error_handler("ListError") def attach_snapshot(diff_rorp, src_rp): """Attach file of snapshot to diff_rorp, w/ error checking""" fileobj = robust.check_common_error(error_handler, rpath.RPath.open, (src_rp, "rb")) if fileobj: diff_rorp.setfile(hash.FileWrapper(fileobj)) else: diff_rorp.zero() diff_rorp.set_attached_filetype('snapshot') def attach_diff(diff_rorp, src_rp, dest_sig): """Attach file of diff to diff_rorp, w/ error checking""" fileobj = robust.check_common_error(error_handler, Rdiff.get_delta_sigrp_hash, (dest_sig, src_rp)) if fileobj: diff_rorp.setfile(fileobj) diff_rorp.set_attached_filetype('diff') else: diff_rorp.zero() diff_rorp.set_attached_filetype('snapshot') for dest_sig in dest_sigiter: if dest_sig is iterfile.MiscIterFlushRepeat: yield iterfile.MiscIterFlush # Flush buffer when get_sigs does continue src_rp = (source_rps.get(dest_sig.index) or rpath.RORPath(dest_sig.index)) diff_rorp = src_rp.getRORPath() if dest_sig.isflaglinked(): diff_rorp.flaglinked(dest_sig.get_link_flag()) elif src_rp.isreg(): reset_perms = False if (Globals.process_uid != 0 and not src_rp.readable() and src_rp.isowner()): reset_perms = True src_rp.chmod(0400 | src_rp.getperms()) if dest_sig.isreg(): attach_diff(diff_rorp, src_rp, dest_sig) else: attach_snapshot(diff_rorp, src_rp) if reset_perms: src_rp.chmod(src_rp.getperms() & ~0400) else: dest_sig.close_if_necessary() diff_rorp.set_attached_filetype('snapshot') yield diff_rorp
def makesnapshot(mirror, incpref): """Copy mirror to incfile, since new is quite different""" compress = iscompressed(mirror) if compress and mirror.isreg(): snapshotrp = get_inc(incpref, "snapshot.gz") else: snapshotrp = get_inc(incpref, "snapshot") if mirror.isspecial(): # check for errors when creating special increments eh = robust.get_error_handler("SpecialFileError") if robust.check_common_error(eh, rpath.copy_with_attribs, (mirror, snapshotrp, compress)) == 0: snapshotrp.setdata() if snapshotrp.lstat(): snapshotrp.delete() snapshotrp.touch() else: rpath.copy_with_attribs(mirror, snapshotrp, compress) return snapshotrp
def get_diffs(cls, dest_sigiter): """Return diffs of any files with signature in dest_sigiter""" source_rps = cls._source_select error_handler = robust.get_error_handler("ListError") def attach_snapshot(diff_rorp, src_rp): """Attach file of snapshot to diff_rorp, w/ error checking""" fileobj = robust.check_common_error( error_handler, rpath.RPath.open, (src_rp, "rb")) if fileobj: diff_rorp.setfile(hash.FileWrapper(fileobj)) else: diff_rorp.zero() diff_rorp.set_attached_filetype('snapshot') def attach_diff(diff_rorp, src_rp, dest_sig): """Attach file of diff to diff_rorp, w/ error checking""" fileobj = robust.check_common_error( error_handler, Rdiff.get_delta_sigrp_hash, (dest_sig, src_rp)) if fileobj: diff_rorp.setfile(fileobj) diff_rorp.set_attached_filetype('diff') else: diff_rorp.zero() diff_rorp.set_attached_filetype('snapshot') for dest_sig in dest_sigiter: if dest_sig is iterfile.MiscIterFlushRepeat: yield iterfile.MiscIterFlush # Flush buffer when get_sigs does continue src_rp = (source_rps.get(dest_sig.index) or rpath.RORPath(dest_sig.index)) diff_rorp = src_rp.getRORPath() if dest_sig.isflaglinked(): diff_rorp.flaglinked(dest_sig.get_link_flag()) elif src_rp.isreg(): reset_perms = False if (Globals.process_uid != 0 and not src_rp.readable() and src_rp.isowner()): reset_perms = True src_rp.chmod(0400 | src_rp.getperms()) if dest_sig.isreg(): attach_diff(diff_rorp, src_rp, dest_sig) else: attach_snapshot(diff_rorp, src_rp) if reset_perms: src_rp.chmod(src_rp.getperms() & ~0400) else: dest_sig.close_if_necessary() diff_rorp.set_attached_filetype('snapshot') yield diff_rorp