summaryrefslogtreecommitdiffstats
path: root/src/engine/SCons/Node
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2002-01-24 20:02:15 (GMT)
committerSteven Knight <knight@baldmt.com>2002-01-24 20:02:15 (GMT)
commitca75f94e83c37ca03de9740bb141e442c53db235 (patch)
tree1b44efda63b16667e62f1ad1b1ae6ade8e5a45b3 /src/engine/SCons/Node
parent26b3ef1e5b369fd5f31436ecef74ccfc3478d4f5 (diff)
downloadSCons-ca75f94e83c37ca03de9740bb141e442c53db235.zip
SCons-ca75f94e83c37ca03de9740bb141e442c53db235.tar.gz
SCons-ca75f94e83c37ca03de9740bb141e442c53db235.tar.bz2
Add the Precious() method.
Diffstat (limited to 'src/engine/SCons/Node')
-rw-r--r--src/engine/SCons/Node/FS.py5
-rw-r--r--src/engine/SCons/Node/FSTests.py6
-rw-r--r--src/engine/SCons/Node/NodeTests.py9
-rw-r--r--src/engine/SCons/Node/__init__.py11
4 files changed, 31 insertions, 0 deletions
diff --git a/src/engine/SCons/Node/FS.py b/src/engine/SCons/Node/FS.py
index 2ce1151..7c19b81 100644
--- a/src/engine/SCons/Node/FS.py
+++ b/src/engine/SCons/Node/FS.py
@@ -566,5 +566,10 @@ class File(Entry):
Entry.build(self)
self.exists_flag = self.exists()
+ def remove(self):
+ """Remove this file."""
+ if self.exists():
+ os.unlink(self.path)
+
default_fs = FS()
diff --git a/src/engine/SCons/Node/FSTests.py b/src/engine/SCons/Node/FSTests.py
index 12dfdbe..2b3ba37 100644
--- a/src/engine/SCons/Node/FSTests.py
+++ b/src/engine/SCons/Node/FSTests.py
@@ -438,6 +438,12 @@ class FSTestCase(unittest.TestCase):
nonexistent(fs.Dir, 'nonexistent')
nonexistent(fs.Dir, 'nonexistent/foo')
+ test.write("remove_me", "\n")
+ assert os.path.exists(test.workpath("remove_me"))
+ f1 = fs.File(test.workpath("remove_me"))
+ f1.remove()
+ assert not os.path.exists(test.workpath("remove_me"))
+
#XXX test current() for directories
#XXX test sconsign() for directories
diff --git a/src/engine/SCons/Node/NodeTests.py b/src/engine/SCons/Node/NodeTests.py
index aa9dccb..bcaf1a0 100644
--- a/src/engine/SCons/Node/NodeTests.py
+++ b/src/engine/SCons/Node/NodeTests.py
@@ -206,6 +206,15 @@ class NodeTestCase(unittest.TestCase):
node.set_csig('zzz')
assert node.get_csig() == 'zzz'
+ def test_set_precious(self):
+ """Test setting a Node's precious value
+ """
+ node = SCons.Node.Node()
+ node.set_precious()
+ assert node.precious
+ node.set_precious(7)
+ assert node.precious == 7
+
def test_add_dependency(self):
"""Test adding dependencies to a Node's list.
"""
diff --git a/src/engine/SCons/Node/__init__.py b/src/engine/SCons/Node/__init__.py
index 03705f7..02c14bb 100644
--- a/src/engine/SCons/Node/__init__.py
+++ b/src/engine/SCons/Node/__init__.py
@@ -70,11 +70,14 @@ class Node:
self.bsig = None
self.csig = None
self.use_signature = 1
+ self.precious = None
def build(self):
"""Actually build the node. Return the status from the build."""
if not self.builder:
return None
+ if not self.precious:
+ self.remove()
try:
stat = self.builder.execute(env = self.env.Dictionary(),
target = self, source = self.sources)
@@ -164,6 +167,14 @@ class Node:
"""Set the signature of the node's content."""
self.csig = csig
+ def set_precious(self, precious = 1):
+ """Set the Node's precious value."""
+ self.precious = precious
+
+ def remove(self):
+ """Remove this Node's external object: no-op by default."""
+ pass
+
def add_dependency(self, depend):
"""Adds dependencies. The depend argument must be a list."""
self._add_child(self.depends, depend)