diff options
| author | Steven Knight <knight@baldmt.com> | 2002-09-09 03:31:10 (GMT) |
|---|---|---|
| committer | Steven Knight <knight@baldmt.com> | 2002-09-09 03:31:10 (GMT) |
| commit | b18c0d85f90d17412960c39a9c935af9796a8cea (patch) | |
| tree | 1dc031738458c71e519198d503a32d86a64eac2b /src/engine | |
| parent | 596f9fa6bed4777348f005fb98f8b67dda93b515 (diff) | |
| download | SCons-b18c0d85f90d17412960c39a9c935af9796a8cea.zip SCons-b18c0d85f90d17412960c39a9c935af9796a8cea.tar.gz SCons-b18c0d85f90d17412960c39a9c935af9796a8cea.tar.bz2 | |
Warn when -c can't remove a file.
Diffstat (limited to 'src/engine')
| -rw-r--r-- | src/engine/SCons/Node/FS.py | 7 | ||||
| -rw-r--r-- | src/engine/SCons/Node/FSTests.py | 29 | ||||
| -rw-r--r-- | src/engine/SCons/Node/__init__.py | 4 | ||||
| -rw-r--r-- | src/engine/SCons/Script/__init__.py | 26 |
4 files changed, 49 insertions, 17 deletions
diff --git a/src/engine/SCons/Node/FS.py b/src/engine/SCons/Node/FS.py index c4b220f..7174b99 100644 --- a/src/engine/SCons/Node/FS.py +++ b/src/engine/SCons/Node/FS.py @@ -781,6 +781,13 @@ class File(Entry): else: self.__createDir() + def remove(self): + """Remove this file.""" + if os.path.exists(self.path): + os.unlink(self.path) + return 1 + return None + def current(self, calc): bsig = calc.bsig(self) if not self.exists(): diff --git a/src/engine/SCons/Node/FSTests.py b/src/engine/SCons/Node/FSTests.py index f87abe7..adcccae 100644 --- a/src/engine/SCons/Node/FSTests.py +++ b/src/engine/SCons/Node/FSTests.py @@ -583,6 +583,35 @@ class FSTestCase(unittest.TestCase): # XXX test current() + d = fs.Dir('dir') + r = d.remove() + assert r is None, r + + f = fs.File('does_not_exist') + r = f.remove() + assert r == None, r + + test.write('exists', "exists\n") + f = fs.File('exists') + r = f.remove() + assert r, r + + test.write('can_not_remove', "can_not_remove\n") + test.writable(test.workpath('.'), 0) + fp = open(test.workpath('can_not_remove')) + + f = fs.File('can_not_remove') + exc_caught = 0 + try: + r = f.remove() + except OSError: + exc_caught = 1 + + fp.close() + + assert exc_caught, "Should have caught an OSError, r = " + str(r) + + class RepositoryTestCase(unittest.TestCase): def runTest(self): """Test FS (file system) Repository operations diff --git a/src/engine/SCons/Node/__init__.py b/src/engine/SCons/Node/__init__.py index d12edae..09ceea0 100644 --- a/src/engine/SCons/Node/__init__.py +++ b/src/engine/SCons/Node/__init__.py @@ -339,6 +339,10 @@ class Node: """Prepare for this Node to be created: no-op by default.""" pass + def remove(self): + """Remove this Node: no-op by default.""" + return None + def add_dependency(self, depend): """Adds dependencies. The depend argument must be a list.""" self._add_child(self.depends, depend) diff --git a/src/engine/SCons/Script/__init__.py b/src/engine/SCons/Script/__init__.py index cff3a21..365a0b1 100644 --- a/src/engine/SCons/Script/__init__.py +++ b/src/engine/SCons/Script/__init__.py @@ -130,26 +130,18 @@ class CleanTask(SCons.Taskmaster.Task): """An SCons clean task.""" def show(self): if self.targets[0].builder or self.targets[0].side_effect: - print "Removed " + self.targets[0].path + print "Removed " + str(self.targets[0]) def remove(self): if self.targets[0].builder or self.targets[0].side_effect: - try: - os.unlink(self.targets[0].path) - except OSError: - pass - else: - print "Removed " + self.targets[0].path - try: - for t in self.targets[1:]: - try: - os.unlink(t.path) - except OSError: - pass - else: - print "Removed " + t.path - except IndexError: - pass + for t in self.targets: + try: + removed = t.remove() + except OSError, e: + print "scons: Could not remove '%s':" % str(t), e.strerror + else: + if removed: + print "Removed " + str(t) execute = remove |
