RELEASE 0.13 - XXX
+ From Charles Crain:
+
+ - Fix a bug when BuildDir(duplicate=0) is used and SConscript
+ files are called from within other SConscript files.
+
+ - Support (older) versions of Perforce which don't set the Windows
+ registry.
+
RELEASE 0.12 - Thu, 27 Mar 2003 23:52:09 -0600
to match.
"""
self.__setTopLevelDir()
- if not dir is None:
- self._cwd = dir
- if change_os_dir:
- os.chdir(dir.abspath)
+ curr=self._cwd
+ try:
+ if not dir is None:
+ self._cwd = dir
+ if change_os_dir:
+ os.chdir(dir.abspath)
+ except:
+ self._cwd = curr
+ raise
def Entry(self, name, directory = None, create = 1, klass=None):
"""Lookup or create a generic Entry node with the specified name.
n = self.__doLookup(clazz, name, d)
if n.exists():
return n
+ if isinstance(n, Dir):
+ # If n is a Directory that has Repositories directly
+ # attached to it, then any of those is a valid Repository
+ # path. Return the first one that exists.
+ reps = filter(lambda x: x.exists(), n.getRepositories())
+ if len(reps):
+ return reps[0]
d = n.get_dir()
name = n.name
# Search repositories of all directories that this file is under.
test.unlink( "src/foo" )
test.unlink( "build/foo" )
+ # Test against a former bug. Make sure we can get a repository
+ # path for the build directory itself!
+ fs=SCons.Node.FS.FS(test.workpath('work'))
+ test.subdir('work')
+ fs.BuildDir('build/var3', 'src', duplicate=0)
+ d1 = fs.Dir('build/var3')
+ assert d1.rdir() == fs.Dir('src'), str(d1.rdir())
+
# verify the link creation attempts in file_link()
class LinkSimulator :
"""A class to intercept os.[sym]link() calls and track them."""
results = []
for fn in files:
stack.append(Frame(exports))
- old_dir = None
old_sys_path = sys.path
try:
if fn == "-":
else:
f = default_fs.File(str(fn))
_file_ = None
- old_dir = default_fs.getcwd()
# Change directory to the top of the source
# tree to make sure the os's cwd and the cwd of
# default_fs.chdir(), because we still need to
# interpret the stuff within the SConscript file
# relative to where we are logically.
+ default_fs.chdir(ldir, change_os_dir=0)
os.chdir(f.rfile().dir.abspath)
# Append the SConscript directory to the beginning
finally:
sys.path = old_sys_path
frame = stack.pop()
- default_fs.chdir(frame.prev_dir)
- if old_dir:
- try:
- default_fs.chdir(old_dir, change_os_dir=sconscript_chdir)
- except OSError:
- # There was no local directory, so chdir to the
- # Repository directory. Like above, we do this
- # directly.
- os.chdir(old_dir.rdir().abspath)
+ try:
+ default_fs.chdir(frame.prev_dir, change_os_dir=sconscript_chdir)
+ except OSError:
+ # There was no local directory, so chdir to the
+ # Repository directory. Like above, we do this
+ # directly.
+ default_fs.chdir(frame.prev_dir, change_os_dir=0)
+ os.chdir(frame.prev_dir.rdir().abspath)
results.append(frame.retval)
if SCons.Util.can_read_reg:
# If we can read the registry, add the path to Perforce to our environment.
- k=SCons.Util.RegOpenKeyEx(SCons.Util.hkey_mod.HKEY_LOCAL_MACHINE,
- 'Software\\Perforce\\environment')
- val, tok = SCons.Util.RegQueryValueEx(k, 'P4INSTROOT')
- addPathIfNotExists(environ, 'PATH', val)
+ try:
+ k=SCons.Util.RegOpenKeyEx(SCons.Util.hkey_mod.HKEY_LOCAL_MACHINE,
+ 'Software\\Perforce\\environment')
+ val, tok = SCons.Util.RegQueryValueEx(k, 'P4INSTROOT')
+ addPathIfNotExists(environ, 'PATH', val)
+ except SCons.Util.RegError:
+ # Can't detect where Perforce is, hope the user has it set in the
+ # PATH.
+ pass
def exists(env):
return env.Detect('p4')