diff options
author | Steven Knight <knight@baldmt.com> | 2001-11-02 03:12:07 (GMT) |
---|---|---|
committer | Steven Knight <knight@baldmt.com> | 2001-11-02 03:12:07 (GMT) |
commit | 2f51f69cf055ec44e37eaac22b1992bd5218278f (patch) | |
tree | 60165bd248d020974a0be3f5477825876a682445 /src/engine/SCons/Sig | |
parent | 00c3ada748b164ecf909727fa81f521dde72fda9 (diff) | |
download | SCons-2f51f69cf055ec44e37eaac22b1992bd5218278f.zip SCons-2f51f69cf055ec44e37eaac22b1992bd5218278f.tar.gz SCons-2f51f69cf055ec44e37eaac22b1992bd5218278f.tar.bz2 |
Rebuild in response to a changed build command.
Diffstat (limited to 'src/engine/SCons/Sig')
-rw-r--r-- | src/engine/SCons/Sig/MD5.py | 7 | ||||
-rw-r--r-- | src/engine/SCons/Sig/MD5Tests.py | 9 | ||||
-rw-r--r-- | src/engine/SCons/Sig/SigTests.py | 23 | ||||
-rw-r--r-- | src/engine/SCons/Sig/__init__.py | 6 |
4 files changed, 39 insertions, 6 deletions
diff --git a/src/engine/SCons/Sig/MD5.py b/src/engine/SCons/Sig/MD5.py index e13669e..bd5643f 100644 --- a/src/engine/SCons/Sig/MD5.py +++ b/src/engine/SCons/Sig/MD5.py @@ -79,9 +79,10 @@ def signature(obj): """Generate a signature for an object """ try: - contents = obj.get_contents() - except AttributeError: - raise AttributeError, "unable to fetch contents of '%s'" % str(obj) + contents = str(obj.get_contents()) + except AttributeError, e: + raise AttributeError, \ + "unable to fetch contents of '%s': %s" % (str(obj), e) return hexdigest(md5.new(contents).digest()) def to_string(signature): diff --git a/src/engine/SCons/Sig/MD5Tests.py b/src/engine/SCons/Sig/MD5Tests.py index f9cf61f..2d42fc0 100644 --- a/src/engine/SCons/Sig/MD5Tests.py +++ b/src/engine/SCons/Sig/MD5Tests.py @@ -73,12 +73,17 @@ class MD5TestCase(unittest.TestCase): def test_signature(self): """Test generating a signature""" o1 = my_obj(value = '111') - assert '698d51a19d8a121ce581499d7b701668' == signature(o1) + s = signature(o1) + assert '698d51a19d8a121ce581499d7b701668' == s, s + + o2 = my_obj(value = 222) + s = signature(o2) + assert 'bcbe3365e6ac95ea2c0343a2395834dd' == s, s try: signature('string') except AttributeError, e: - assert str(e) == "unable to fetch contents of 'string'" + assert str(e) == "unable to fetch contents of 'string': 'string' object has no attribute 'get_contents'", e else: raise AttributeError, "unexpected get_contents() attribute" diff --git a/src/engine/SCons/Sig/SigTests.py b/src/engine/SCons/Sig/SigTests.py index 95789e8..0870c93 100644 --- a/src/engine/SCons/Sig/SigTests.py +++ b/src/engine/SCons/Sig/SigTests.py @@ -87,9 +87,23 @@ class DummyNode: def get_bsig(self): return self.bsig + def set_csig(self, csig): + self.csig = csig + + def get_csig(self): + return self.bsig + def get_prevsiginfo(self): return (self.oldtime, self.oldbsig, self.oldcsig) + def builder_sig_adapter(self): + class Adapter: + def get_contents(self): + return 111 + def get_timestamp(self): + return 222 + return Adapter() + def create_files(test): args = [(test.workpath('f1.c'), 'blah blah', 111, 0), #0 @@ -269,6 +283,13 @@ class CalcTestCase(unittest.TestCase): return 0, self.bsig, self.csig def get_timestamp(self): return 1 + def builder_sig_adapter(self): + class MyAdapter: + def get_csig(self): + return 333 + def get_timestamp(self): + return 444 + return MyAdapter() self.module = MySigModule() self.nodeclass = MyNode @@ -318,7 +339,7 @@ class CalcTestCase(unittest.TestCase): n4 = self.nodeclass('n4', None, None) n4.builder = 1 n4.kids = [n2, n3] - assert self.calc.get_signature(n4) == 57 + assert self.calc.get_signature(n4) == 390 n5 = NE('n5', 55, 56) assert self.calc.get_signature(n5) is None diff --git a/src/engine/SCons/Sig/__init__.py b/src/engine/SCons/Sig/__init__.py index 4095792..43e3b8a 100644 --- a/src/engine/SCons/Sig/__init__.py +++ b/src/engine/SCons/Sig/__init__.py @@ -150,9 +150,13 @@ class Calculator: already built and updated by someone else, if that's what's wanted. """ + if not node.use_signature: + return None #XXX If configured, use the content signatures from the #XXX .sconsign file if the timestamps match. sigs = map(lambda n,s=self: s.get_signature(n), node.children()) + if node.builder: + sigs.append(self.module.signature(node.builder_sig_adapter())) return self.module.collect(filter(lambda x: not x is None, sigs)) def csig(self, node): @@ -163,6 +167,8 @@ class Calculator: node - the node returns - the content signature """ + if not node.use_signature: + return None #XXX If configured, use the content signatures from the #XXX .sconsign file if the timestamps match. return self.module.signature(node) |