summaryrefslogtreecommitdiffstats
path: root/src/engine/SCons/Sig
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2001-11-02 03:12:07 (GMT)
committerSteven Knight <knight@baldmt.com>2001-11-02 03:12:07 (GMT)
commit2f51f69cf055ec44e37eaac22b1992bd5218278f (patch)
tree60165bd248d020974a0be3f5477825876a682445 /src/engine/SCons/Sig
parent00c3ada748b164ecf909727fa81f521dde72fda9 (diff)
downloadSCons-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.py7
-rw-r--r--src/engine/SCons/Sig/MD5Tests.py9
-rw-r--r--src/engine/SCons/Sig/SigTests.py23
-rw-r--r--src/engine/SCons/Sig/__init__.py6
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)