def testBuildingDict(self): """See if the partial inode dictionary is correct""" Globals.preserve_hardlinks = 1 reset_hardlink_dicts() for dsrp in selection.Select(self.hlinks_rp3).set_iter(): Hardlink.add_rorp(dsrp) self.assertEqual(len(list(Hardlink._inode_index.keys())), 3)
def testBuildingDict(self): """See if the partial inode dictionary is correct""" Globals.preserve_hardlinks = 1 reset_hardlink_dicts() for dsrp in selection.Select(self.hardlink_dir3).set_iter(): Hardlink.add_rorp(dsrp) assert len(Hardlink._inode_index.keys()) == 3, \ Hardlink._inode_index
def testCompletedDict(self): """See if the hardlink dictionaries are built correctly""" reset_hardlink_dicts() for dsrp in selection.Select(self.hlinks_rp1).set_iter(): Hardlink.add_rorp(dsrp) Hardlink.del_rorp(dsrp) self.assertEqual(Hardlink._inode_index, {}) reset_hardlink_dicts() for dsrp in selection.Select(self.hlinks_rp2).set_iter(): Hardlink.add_rorp(dsrp) Hardlink.del_rorp(dsrp) self.assertEqual(Hardlink._inode_index, {})
def _pre_process(self, source_rorp, dest_rorp): """Do initial processing on source_rorp and dest_rorp It will not be clear whether source_rorp and dest_rorp have errors at this point, so don't do anything which assumes they will be backed up correctly. """ if Globals.preserve_hardlinks and source_rorp: Hardlink.add_rorp(source_rorp, dest_rorp) if (dest_rorp and dest_rorp.isdir() and Globals.process_uid != 0 and dest_rorp.getperms() % 0o1000 < 0o700): self._unreadable_dir_init(source_rorp, dest_rorp)
def testCompletedDict(self): """See if the hardlink dictionaries are built correctly""" reset_hardlink_dicts() for dsrp in selection.Select(self.hardlink_dir1).set_iter(): Hardlink.add_rorp(dsrp) Hardlink.del_rorp(dsrp) assert Hardlink._inode_index == {}, Hardlink._inode_index reset_hardlink_dicts() for dsrp in selection.Select(self.hardlink_dir2).set_iter(): Hardlink.add_rorp(dsrp) Hardlink.del_rorp(dsrp) assert Hardlink._inode_index == {}, Hardlink._inode_index
def _hardlink_rorp_eq(src_rorp, dest_rorp): """Compare two files for hardlink equality, encompassing being hard-linked, having the same hashsum, and the same number of link counts.""" Hardlink.add_rorp(dest_rorp) Hardlink.add_rorp(src_rorp, dest_rorp) rorp_eq = Hardlink.rorp_eq(src_rorp, dest_rorp) if not src_rorp.isreg() or not dest_rorp.isreg() or src_rorp.getnumlinks() == dest_rorp.getnumlinks() == 1: if not rorp_eq: Log("Hardlink compare error with when no links exist", 3) Log("%s: %s" % (src_rorp.index, Hardlink._get_inode_key(src_rorp)), 3) Log("%s: %s" % (dest_rorp.index, Hardlink._get_inode_key(dest_rorp)), 3) return False elif src_rorp.getnumlinks() > 1 and not Hardlink.is_linked(src_rorp): if rorp_eq: Log("Hardlink compare error with first linked src_rorp and no dest_rorp sha1", 3) Log("%s: %s" % (src_rorp.index, Hardlink._get_inode_key(src_rorp)), 3) Log("%s: %s" % (dest_rorp.index, Hardlink._get_inode_key(dest_rorp)), 3) return False hash.compute_sha1(dest_rorp) rorp_eq = Hardlink.rorp_eq(src_rorp, dest_rorp) if src_rorp.getnumlinks() != dest_rorp.getnumlinks(): if rorp_eq: Log("Hardlink compare error with first linked src_rorp, with dest_rorp sha1, and with differing link counts", 3) Log("%s: %s" % (src_rorp.index, Hardlink._get_inode_key(src_rorp)), 3) Log("%s: %s" % (dest_rorp.index, Hardlink._get_inode_key(dest_rorp)), 3) return False elif not rorp_eq: Log("Hardlink compare error with first linked src_rorp, with dest_rorp sha1, and with equal link counts", 3) Log("%s: %s" % (src_rorp.index, Hardlink._get_inode_key(src_rorp)), 3) Log("%s: %s" % (dest_rorp.index, Hardlink._get_inode_key(dest_rorp)), 3) return False elif src_rorp.getnumlinks() != dest_rorp.getnumlinks(): if rorp_eq: Log("Hardlink compare error with non-first linked src_rorp and with differing link counts", 3) Log("%s: %s" % (src_rorp.index, Hardlink._get_inode_key(src_rorp)), 3) Log("%s: %s" % (dest_rorp.index, Hardlink._get_inode_key(dest_rorp)), 3) return False elif not rorp_eq: Log("Hardlink compare error with non-first linked src_rorp and with equal link counts", 3) Log("%s: %s" % (src_rorp.index, Hardlink._get_inode_key(src_rorp)), 3) Log("%s: %s" % (dest_rorp.index, Hardlink._get_inode_key(dest_rorp)), 3) return False Hardlink.del_rorp(src_rorp) Hardlink.del_rorp(dest_rorp) return True
def hardlink_rorp_eq(src_rorp, dest_rorp): Hardlink.add_rorp(dest_rorp) Hardlink.add_rorp(src_rorp, dest_rorp) rorp_eq = Hardlink.rorp_eq(src_rorp, dest_rorp) if not src_rorp.isreg() or not dest_rorp.isreg() or src_rorp.getnumlinks() == dest_rorp.getnumlinks() == 1: if not rorp_eq: Log("Hardlink compare error with when no links exist exist", 3) Log("%s: %s" % (src_rorp.index, Hardlink._get_inode_key(src_rorp)), 3) Log("%s: %s" % (dest_rorp.index, Hardlink._get_inode_key(dest_rorp)), 3) return 0 elif src_rorp.getnumlinks() > 1 and not Hardlink.is_linked(src_rorp): if rorp_eq: Log("Hardlink compare error with first linked src_rorp and no dest_rorp sha1", 3) Log("%s: %s" % (src_rorp.index, Hardlink._get_inode_key(src_rorp)), 3) Log("%s: %s" % (dest_rorp.index, Hardlink._get_inode_key(dest_rorp)), 3) return 0 hash.compute_sha1(dest_rorp) rorp_eq = Hardlink.rorp_eq(src_rorp, dest_rorp) if src_rorp.getnumlinks() != dest_rorp.getnumlinks(): if rorp_eq: Log("Hardlink compare error with first linked src_rorp, with dest_rorp sha1, and with differing link counts", 3) Log("%s: %s" % (src_rorp.index, Hardlink._get_inode_key(src_rorp)), 3) Log("%s: %s" % (dest_rorp.index, Hardlink._get_inode_key(dest_rorp)), 3) return 0 elif not rorp_eq: Log("Hardlink compare error with first linked src_rorp, with dest_rorp sha1, and with equal link counts", 3) Log("%s: %s" % (src_rorp.index, Hardlink._get_inode_key(src_rorp)), 3) Log("%s: %s" % (dest_rorp.index, Hardlink._get_inode_key(dest_rorp)), 3) return 0 elif src_rorp.getnumlinks() != dest_rorp.getnumlinks(): if rorp_eq: Log("Hardlink compare error with non-first linked src_rorp and with differing link counts", 3) Log("%s: %s" % (src_rorp.index, Hardlink._get_inode_key(src_rorp)), 3) Log("%s: %s" % (dest_rorp.index, Hardlink._get_inode_key(dest_rorp)), 3) return 0 elif not rorp_eq: Log("Hardlink compare error with non-first linked src_rorp and with equal link counts", 3) Log("%s: %s" % (src_rorp.index, Hardlink._get_inode_key(src_rorp)), 3) Log("%s: %s" % (dest_rorp.index, Hardlink._get_inode_key(dest_rorp)), 3) return 0 Hardlink.del_rorp(src_rorp) Hardlink.del_rorp(dest_rorp) return 1
def preprocess(src_rorp, dest_rorp): """Initially process src and dest_rorp""" if compare_hardlinks and src_rorp: Hardlink.add_rorp(src_rorp, dest_rorp)