def compute_new_fingerprint(self, uid, data): if 'no_fingerprint' in uid: return None f = Fingerprint() for pred_uid in self.actions.get_predecessors(uid): pred_fingerprint = self.new_fingerprints[pred_uid] if pred_fingerprint is not None: f.add('pred:%s' % pred_uid, pred_fingerprint.checksum()) if os.path.exists(source_fullpath(uid)): f.add_file(source_fullpath(uid)) return f
def compute_fingerprint(self, uid, data, is_prediction=False): if "fingerprint_after_job" in uid and is_prediction: return None if "no_fingerprint" in uid: return None f = Fingerprint() for pred_uid in self.actions.get_predecessors(uid): pred_fingerprint = self.new_fingerprints[pred_uid] if pred_fingerprint is not None: f.add("pred:%s" % pred_uid, pred_fingerprint.checksum()) if os.path.exists(source_fullpath(uid)): f.add_file(source_fullpath(uid)) return f
def test_fingerprint(): f1 = Fingerprint() f1.add("foo", "2") f2 = Fingerprint() f2.add("foo", "4") f12_diff = f2.compare_to(f1) assert f12_diff["new"] == set() assert f12_diff["updated"] == {"foo"} assert f12_diff["obsolete"] == set() f3 = Fingerprint() f3.add_file(__file__) f23_diff = f3.compare_to(f2) assert f23_diff["new"] == {"foo"} assert f23_diff["updated"] == set() assert f23_diff["obsolete"] == {os.path.abspath(__file__)} assert f1.checksum() != f2.checksum() != f3.checksum() assert Env().build.os.version in str(f3) f4 = Fingerprint() f4.add_file(__file__) assert f4 == f3 f5 = Fingerprint() with pytest.raises(E3Error) as err: f5.add("f4", f4) assert "f4 should be a string" in str(err.value) f6 = Fingerprint() f6.add("unicode", "6") assert len(f6.checksum()) == 64
def test_fingerprint(): f1 = Fingerprint() f1.add('foo', '2') f2 = Fingerprint() f2.add('foo', '4') f12_diff = f2.compare_to(f1) assert f12_diff['new'] == set([]) assert f12_diff['updated'] == {'foo'} assert f12_diff['obsolete'] == set([]) f3 = Fingerprint() f3.add_file(__file__) f23_diff = f3.compare_to(f2) assert f23_diff['new'] == {'foo'} assert f23_diff['updated'] == set([]) assert f23_diff['obsolete'] == {os.path.basename(__file__)} assert f1.checksum() != f2.checksum() != f3.checksum() assert Env().build.os.version in str(f3) f4 = Fingerprint() f4.add_file(__file__) assert f4 == f3 f5 = Fingerprint() with pytest.raises(E3Error) as err: f5.add('f4', f4) assert 'f4 should be a string' in str(err.value) f6 = Fingerprint() f6.add('unicode', u'6') assert len(f6.checksum()) == 64
def add_anod_files_to_fingerprint(anod_instance: Anod, fingerprint: Fingerprint) -> None: """Add the Anod's spec and yaml files to the given fingerprint. :param anod_instance: an Anod instance. :type anod_instance: Anod :param fingerprint: The fingerprint to update. :type fingerprint: e3.fingerprint.Fingerprint. """ anod_specs = [ c.name for c in anod_instance.__class__.__mro__ if c.__name__ != "Anod" and "Anod" in (sc.__name__ for sc in c.__mro__) ] for spec_name in anod_specs: fingerprint.add_file( os.path.join(anod_instance.spec_dir, spec_name + ".anod")) for yaml_name in anod_instance.data_files: fingerprint.add_file( os.path.join(anod_instance.spec_dir, yaml_name + ".yaml")) deps = getattr(anod_instance, "%s_deps" % anod_instance.kind, ()) for dep in deps: if isinstance(dep, anod_instance.BuildVar): fingerprint.add(dep.name, dep.value)