summaryrefslogtreecommitdiffstats
path: root/src/engine/SCons/Node/FS.py
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2005-10-08 17:25:47 (GMT)
committerSteven Knight <knight@baldmt.com>2005-10-08 17:25:47 (GMT)
commit7935d8f439453bb30c0db7b1dedcffda71521030 (patch)
tree1969a774c96063c2eb3a09d289a1965df7b4fc44 /src/engine/SCons/Node/FS.py
parente664e763f95c2e24f1f08f11e61828c68baf9854 (diff)
downloadSCons-7935d8f439453bb30c0db7b1dedcffda71521030.zip
SCons-7935d8f439453bb30c0db7b1dedcffda71521030.tar.gz
SCons-7935d8f439453bb30c0db7b1dedcffda71521030.tar.bz2
Remove old, same-named files from a build directory if the file in the source directory does not exist. (Patrick Mezard)
Diffstat (limited to 'src/engine/SCons/Node/FS.py')
-rw-r--r--src/engine/SCons/Node/FS.py18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/engine/SCons/Node/FS.py b/src/engine/SCons/Node/FS.py
index ffdc1eb..ceec696 100644
--- a/src/engine/SCons/Node/FS.py
+++ b/src/engine/SCons/Node/FS.py
@@ -1866,12 +1866,24 @@ class File(Base):
"__cacheable__"
# Duplicate from source path if we are set up to do this.
if self.duplicate and not self.is_derived() and not self.linked:
- src=self.srcnode()
+ src = self.srcnode()
if src is self:
return Base.exists(self)
+ # At this point, src is meant to be copied in a build directory.
src = src.rfile()
- if src.abspath != self.abspath and src.exists():
- self.do_duplicate(src)
+ if src.abspath != self.abspath:
+ if src.exists():
+ self.do_duplicate(src)
+ # Can't return 1 here because the duplication might
+ # not actually occur if the -n option is being used.
+ else:
+ # The source file does not exist. Make sure no old
+ # copy remains in the build directory.
+ if Base.exists(self) or self.islink():
+ self.fs.unlink(self.path)
+ # Return None explicitly because the Base.exists() call
+ # above will have cached its value if the file existed.
+ return None
return Base.exists(self)
#