Add more customizability: , , , .
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Sat, 20 Nov 2004 20:45:07 +0000 (20:45 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Sat, 20 Nov 2004 20:45:07 +0000 (20:45 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@1169 fdb21ef1-2011-0410-befe-b5e4ea1792b1

14 files changed:
doc/man/scons.1
etc/TestCmd.py
etc/TestCommon.py
src/CHANGES.txt
src/engine/SCons/Node/FS.py
src/engine/SCons/Tool/BitKeeper.py
src/engine/SCons/Tool/CVS.py
src/engine/SCons/Tool/RCS.py
src/engine/SCons/Tool/SCCS.py
src/engine/SCons/Tool/Subversion.py
test/BitKeeper.py [deleted file]
test/CVS.py [deleted file]
test/RCS.py [deleted file]
test/SCCS.py [deleted file]

index 08887fae97547471f85377dc0e81e782426a83fd..23e646b34175f18ddc7f9cf06b18689400879ecd 100644 (file)
@@ -4506,7 +4506,13 @@ The BitKeeper executable.
 
 .IP BITKEEPERCOM
 The command line for
-fetching source files using BitKEeper.
+fetching source files using BitKeeper.
+
+.IP BITKEEPERCOMSTR
+The string displayed when fetching
+a source file using BitKeeper.
+If this is not set, then $BITKEEPERCOM
+(the command line) is displayed.
 
 .IP BITKEEPERGET
 The command ($BITKEEPER) and subcommand
@@ -4781,6 +4787,12 @@ Options that are passed to the CVS checkout subcommand.
 The command line used to
 fetch source files from a CVS repository.
 
+.IP CVSCOMSTR
+The string displayed when fetching
+a source file from a CVS repository.
+If this is not set, then $CVSCOM
+(the command line) is displayed.
+
 .IP CVSFLAGS
 General options that are passed to CVS.
 By default, this is set to
@@ -6217,6 +6229,12 @@ used to fetch source files from RCS.
 The command line used to
 fetch (checkout) source files from RCS.
 
+.IP RCS_COCOMSTR
+The string displayed when fetching
+a source file from RCS.
+If this is not set, then $RCS_COCOM
+(the command line) is displayed.
+
 .IP RCS_COFLAGS
 Options that are passed to the $RCS_CO command.
 
@@ -6299,6 +6317,12 @@ The SCCS executable.
 The command line used to
 fetch source files from SCCS.
 
+.IP SCCSCOMSTR
+The string displayed when fetching
+a source file from a CVS repository.
+If this is not set, then $SCCSCOM
+(the command line) is displayed.
+
 .IP SCCSFLAGS
 General options that are passed to SCCS.
 
index b90e6536f5125f93304c4fff797366b1ebe8e1df..e12aa4c53a3d5ae08785402b6211c0497ba85d64 100644 (file)
@@ -158,7 +158,7 @@ version.
     TestCmd.where_is('foo', 'PATH1;PATH2', '.suffix3;.suffix4')
 """
 
-# Copyright 2000, 2001, 2002, 2003 Steven Knight
+# Copyright 2000, 2001, 2002, 2003, 2004 Steven Knight
 # This module is free software, and you may redistribute it and/or modify
 # it under the same terms as Python itself, so long as this copyright message
 # and disclaimer are retained in their original form.
@@ -175,8 +175,8 @@ version.
 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
 
 __author__ = "Steven Knight <knight at baldmt dot com>"
-__revision__ = "TestCmd.py 0.12.D001 2004/10/21 14:00:53 knight"
-__version__ = "0.12"
+__revision__ = "TestCmd.py 0.13.D002 2004/11/20 08:34:16 knight"
+__version__ = "0.13"
 
 import os
 import os.path
index 8ef9b3d060d8913122f842d36a3978eb0a188bd8..ae57f0cff2dac338c5520e92671ca2c93520638f 100644 (file)
@@ -32,12 +32,16 @@ TestCommon object; see the TestCmd documentation for details.
 Here is an overview of the methods and keyword arguments that are
 provided by the TestCommon class:
 
+    test.must_be_writable('file1', ['file2', ...])
+
     test.must_contain('file', 'required text\n')
 
     test.must_exist('file1', ['file2', ...])
 
     test.must_match('file', "expected contents\n")
 
+    test.must_not_be_writable('file1', ['file2', ...])
+
     test.must_not_exist('file1', ['file2', ...])
 
     test.run(options = "options to be prepended to arguments",
@@ -76,11 +80,12 @@ The TestCommon module also provides the following variables
 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
 
 __author__ = "Steven Knight <knight at baldmt dot com>"
-__revision__ = "TestCommon.py 0.12.D001 2004/10/21 14:00:53 knight"
-__version__ = "0.12"
+__revision__ = "TestCommon.py 0.13.D001 2004/11/20 08:30:40 knight"
+__version__ = "0.13"
 
 import os
 import os.path
+import stat
 import string
 import sys
 import types
@@ -145,6 +150,20 @@ def is_List(e):
     return type(e) is types.ListType \
         or isinstance(e, UserList.UserList)
 
+def is_writable(f):
+    mode = os.stat(f)[stat.ST_MODE]
+    return mode & stat.S_IWUSR
+
+def separate_files(flist):
+    existing = []
+    missing = []
+    for f in flist:
+        if os.path.exists(f):
+            existing.append(f)
+        else:
+            missing.append(f)
+    return existing, missing
+
 class TestFailed(Exception):
     def __init__(self, args=None):
         self.args = args
@@ -193,6 +212,22 @@ class TestCommon(TestCmd):
         apply(TestCmd.__init__, [self], kw)
         os.chdir(self.workdir)
 
+    def must_be_writable(self, *files):
+        """Ensures that the specified file(s) exist and are writable.
+        An individual file can be specified as a list of directory names,
+        in which case the pathname will be constructed by concatenating
+        them.  Exits FAILED if any of the files does not exist or is
+        not writable.
+        """
+        files = map(lambda x: is_List(x) and apply(os.path.join, x) or x, files)
+        existing, missing = separate_files(files)
+        unwritable = filter(lambda x, iw=is_writable: not iw(x), existing)
+        if missing:
+            print "Missing files: `%s'" % string.join(missing, "', `")
+        if unwritable:
+            print "Unwritable files: `%s'" % string.join(unwritable, "', `")
+        self.fail_test(missing + unwritable)
+
     def must_contain(self, file, required, mode = 'rb'):
         """Ensures that the specified file contains the required text.
         """
@@ -247,6 +282,23 @@ class TestCommon(TestCmd):
             print "Unexpected files exist: `%s'" % string.join(existing, "', `")
             self.fail_test(existing)
 
+
+    def must_not_be_writable(self, *files):
+        """Ensures that the specified file(s) exist and are not writable.
+        An individual file can be specified as a list of directory names,
+        in which case the pathname will be constructed by concatenating
+        them.  Exits FAILED if any of the files does not exist or is
+        writable.
+        """
+        files = map(lambda x: is_List(x) and apply(os.path.join, x) or x, files)
+        existing, missing = separate_files(files)
+        writable = filter(is_writable, existing)
+        if missing:
+            print "Missing files: `%s'" % string.join(missing, "', `")
+        if writable:
+            print "Writable files: `%s'" % string.join(writable, "', `")
+        self.fail_test(missing + writable)
+
     def run(self, options = None, arguments = None,
                   stdout = None, stderr = '', status = 0, **kw):
         """Runs the program under test, checking that the test succeeded.
index 80f4ed7d0da9448b763de41096c7c0edafbdc3ab..2159249a7ad7757319f03e2f0f56879bdd703fb6 100644 (file)
@@ -130,12 +130,13 @@ RELEASE 0.97 - XXX
   - Fix expansion of env.Command() overrides within target and
     source file names.
 
-  - Support easier customization of what's displayed by various
-    default actions by adding new construction variables:  $ARCOMSTR,
-    $ASCOMSTR, $ASPPCOMSTR, $CCCOMSTR, $CXXCOMSTR, $F77COMSTR,
-    $F90COMSTR, $F95COMSTR, $FORTRANCOMSTR, $LEXCOMSTR, $LINKCOMSTR,
-    $SHCCCOMSTR, $SHCXXCOMSTR, $SHF77COMSTR, $SHF90COMSTR, $SHF95COMSTR,
-    $SHFORTRANCOMSTR, $SHLINKCOMSTR and $YACCCOMSTR.
+  - Support easier customization of what's displayed by various default
+    actions by adding new construction variables:  $ARCOMSTR, $ASCOMSTR,
+    $ASPPCOMSTR, $BITKEEPERCOMSTR, $CCCOMSTR, $CVSCOMSTR, $CXXCOMSTR,
+    $F77COMSTR, $F90COMSTR, $F95COMSTR, $FORTRANCOMSTR, $LEXCOMSTR,
+    $LINKCOMSTR, $RCSCOMSTR, $SCCSCOMSTR, $SHCCCOMSTR, $SHCXXCOMSTR,
+    $SHF77COMSTR, $SHF90COMSTR, $SHF95COMSTR, $SHFORTRANCOMSTR,
+    $SHLINKCOMSTR and $YACCCOMSTR.
 
   From Wayne Lee:
 
index 541e42ab0156fcc0491a9155adfd880d9997a118..c5d10bc85fa2398bd1c17e2615ae4eeb42167a9d 100644 (file)
@@ -263,7 +263,8 @@ def get_DefaultSCCSBuilder():
         import SCons.Builder
         # "env" will get filled in by Executor.get_build_env()
         # calling SCons.Defaults.DefaultEnvironment() when necessary.
-        DefaultSCCSBuilder = SCons.Builder.Builder(action = '$SCCSCOM',
+        act = SCons.Action.Action('$SCCSCOM', '$SCCSCOMSTR')
+        DefaultSCCSBuilder = SCons.Builder.Builder(action = act,
                                                    env = None,
                                                    name = "DefaultSCCSBuilder")
     return DefaultSCCSBuilder
@@ -274,7 +275,8 @@ def get_DefaultRCSBuilder():
         import SCons.Builder
         # "env" will get filled in by Executor.get_build_env()
         # calling SCons.Defaults.DefaultEnvironment() when necessary.
-        DefaultRCSBuilder = SCons.Builder.Builder(action = '$RCS_COCOM',
+        act = SCons.Action.Action('$RCS_COCOM', '$RCS_COCOMSTR')
+        DefaultRCSBuilder = SCons.Builder.Builder(action = act,
                                                   env = None,
                                                   name = "DefaultRCSBuilder")
     return DefaultRCSBuilder
index c4c19404e2d62d87ac4276e721acca4327f9263f..2c2bfdda538f6a62987c28a0aa2db8b3cb81b449 100644 (file)
@@ -36,6 +36,7 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import os.path
 
+import SCons.Action
 import SCons.Builder
 import SCons.Util
 
@@ -45,7 +46,8 @@ def generate(env):
 
     def BitKeeperFactory(env=env):
         """ """
-        return SCons.Builder.Builder(action = "$BITKEEPERCOM", env = env)
+        act = SCons.Action.Action("$BITKEEPERCOM", "$BITKEEPERCOMSTR")
+        return SCons.Builder.Builder(action = act, env = env)
 
     #setattr(env, 'BitKeeper', BitKeeperFactory)
     env.BitKeeper = BitKeeperFactory
index 3822b3b2b1153c2e984adcc9a23281202ca210dc..bc186153c9707aa8426c7b90819112f8b33bf5f2 100644 (file)
@@ -33,6 +33,7 @@ selection method.
 
 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
+import SCons.Action
 import SCons.Builder
 import SCons.Util
 
@@ -48,7 +49,8 @@ def generate(env):
            # be across a network and must use POSIX slashes as separators.
            module = module + '/'
            env['CVSCOM']   = '$CVS $CVSFLAGS co $CVSCOFLAGS -d ${TARGET.dir} $CVSMODULE${TARGET.posix}'
-        return SCons.Builder.Builder(action = '$CVSCOM',
+        act = SCons.Action.Action('$CVSCOM', '$CVSCOMSTR')
+        return SCons.Builder.Builder(action = act,
                                      env = env,
                                      CVSREPOSITORY = repos,
                                      CVSMODULE = module)
index ce7ba3a8ff2c80e5dc6d947140587a912c5c3fd2..9cc20f5b34a4aec9ce0c7cbb76ed9784b9000b1f 100644 (file)
@@ -33,6 +33,7 @@ selection method.
 
 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
+import SCons.Action
 import SCons.Builder
 import SCons.Util
 
@@ -42,7 +43,8 @@ def generate(env):
 
     def RCSFactory(env=env):
         """ """
-        return SCons.Builder.Builder(action = '$RCS_COCOM', env = env)
+        act = SCons.Action.Action('$RCS_COCOM', '$RCS_COCOMSTR')
+        return SCons.Builder.Builder(action = act, env = env)
 
     #setattr(env, 'RCS', RCSFactory)
     env.RCS = RCSFactory
index d15b49f9d06e1d6f142472a336f3d9b8598778de..a9a595dfbe2330b33fc1cf4118c0461bb56a19d0 100644 (file)
@@ -33,6 +33,7 @@ selection method.
 
 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
+import SCons.Action
 import SCons.Builder
 import SCons.Util
 
@@ -42,7 +43,8 @@ def generate(env):
 
     def SCCSFactory(env=env):
         """ """
-        return SCons.Builder.Builder(action = '$SCCSCOM', env = env)
+        act = SCons.Action.Action('$SCCSCOM', '$SCCSCOMSTR')
+        return SCons.Builder.Builder(action = act, env = env)
 
     #setattr(env, 'SCCS', SCCSFactory)
     env.SCCS = SCCSFactory
index 23dbd97f8f71c3c487844a13a488b83309c54db1..4bb37f72802cb78dfc1ea0b8a3413653db6599c3 100644 (file)
@@ -35,6 +35,7 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import os.path
 
+import SCons.Action
 import SCons.Builder
 import SCons.Util
 
@@ -47,7 +48,8 @@ def generate(env):
         # fail if repos is not an absolute path name?
         if module != '':
             module = os.path.join(module, '')
-        return SCons.Builder.Builder(action = '$SVNCOM',
+        act = SCons.Action.Action('$SVNCOM', '$SVNCOMSTR')
+        return SCons.Builder.Builder(action = act,
                                      env = env,
                                      SVNREPOSITORY = repos,
                                      SVNMODULE = module)
diff --git a/test/BitKeeper.py b/test/BitKeeper.py
deleted file mode 100644 (file)
index 73cd47f..0000000
+++ /dev/null
@@ -1,352 +0,0 @@
-#!/usr/bin/env python
-#
-# __COPYRIGHT__
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
-"""
-Test fetching source files from BitKeeper.
-"""
-
-import os
-import stat
-
-import TestSCons
-
-test = TestSCons.TestSCons()
-
-bk = test.where_is('bk')
-if not bk:
-    print "Could not find BitKeeper, skipping test(s)."
-    test.pass_test(1)
-
-def is_writable(file):
-    mode = os.stat(file)[stat.ST_MODE]
-    return mode & stat.S_IWUSR
-
-try:
-    login = os.getlogin()
-except (AttributeError, OSError):
-    try:
-        login = os.environ['USER']
-    except KeyError:
-        login = 'USER'
-
-host = os.uname()[1]
-
-email = "%s@%s" % (login, host)
-
-test.subdir('BK', 'import', ['import', 'sub'])
-
-# Test using BitKeeper to fetch from SCCS/s.file files.
-sccs = test.where_is('sccs')
-if not sccs:
-    print "Could not find SCCS, skipping sub-test of BitKeeper using SCCS files."
-else:
-    test.subdir('work1',
-                ['work1', 'SCCS'],
-                ['work1', 'sub'],
-                ['work1', 'sub', 'SCCS'])
-    
-    for file in ['aaa.in', 'bbb.in', 'ccc.in']:
-        test.write(['work1', file], "work1/%s\n" % file)
-        args = "create %s" % file
-        test.run(chdir = 'work1', program = sccs, arguments = args, stderr = None)
-        test.unlink(['work1', file])
-        test.unlink(['work1', ','+file])
-    
-    test.write(['work1', 'sub', 'SConscript'], """\
-Import("env")
-env.Cat('ddd.out', 'ddd.in')
-env.Cat('eee.out', 'eee.in')
-env.Cat('fff.out', 'fff.in')
-env.Cat('all', ['ddd.out', 'eee.out', 'fff.out'])
-""")
-    args = "create SConscript"
-    test.run(chdir = 'work1/sub', program = sccs, arguments = args, stderr = None)
-    test.unlink(['work1', 'sub', 'SConscript'])
-    test.unlink(['work1', 'sub', ',SConscript'])
-    
-    for file in ['ddd.in', 'eee.in', 'fff.in']:
-        test.write(['work1', 'sub', file], "work1/sub/%s\n" % file)
-        args = "create %s" % file
-        test.run(chdir = 'work1/sub', program = sccs, arguments = args, stderr = None)
-        test.unlink(['work1', 'sub', file])
-        test.unlink(['work1', 'sub', ','+file])
-
-    test.write(['work1', 'SConstruct'], """
-def cat(env, source, target):
-    target = str(target[0])
-    source = map(str, source)
-    f = open(target, "wb")
-    for src in source:
-        f.write(open(src, "rb").read())
-    f.close()
-env = Environment(BUILDERS={'Cat':Builder(action=cat)},
-                  BITKEEPERGETFLAGS='-e')
-env.Cat('aaa.out', 'aaa.in')
-env.Cat('bbb.out', 'bbb.in')
-env.Cat('ccc.out', 'ccc.in')
-env.Cat('all', ['aaa.out', 'bbb.out', 'ccc.out'])
-env.SourceCode('.', env.BitKeeper())
-SConscript('sub/SConscript', "env")
-""")
-
-    test.write(['work1', 'bbb.in'], "checked-out work1/bbb.in\n")
-
-    test.write(['work1', 'sub', 'eee.in'], "checked-out work1/sub/eee.in\n")
-
-    test.run(chdir = 'work1',
-             arguments = '.',
-             stdout = test.wrap_stdout(read_str = """\
-bk get -e sub/SConscript
-""",
-                                       build_str = """\
-bk get -e aaa.in
-cat(["aaa.out"], ["aaa.in"])
-cat(["bbb.out"], ["bbb.in"])
-bk get -e ccc.in
-cat(["ccc.out"], ["ccc.in"])
-cat(["all"], ["aaa.out", "bbb.out", "ccc.out"])
-bk get -e sub/ddd.in
-cat(["sub/ddd.out"], ["sub/ddd.in"])
-cat(["sub/eee.out"], ["sub/eee.in"])
-bk get -e sub/fff.in
-cat(["sub/fff.out"], ["sub/fff.in"])
-cat(["sub/all"], ["sub/ddd.out", "sub/eee.out", "sub/fff.out"])
-"""),
-             stderr = """\
-sub/SConscript 1.1 -> 1.2: 5 lines
-aaa.in 1.1 -> 1.2: 1 lines
-ccc.in 1.1 -> 1.2: 1 lines
-sub/ddd.in 1.1 -> 1.2: 1 lines
-sub/fff.in 1.1 -> 1.2: 1 lines
-""")
-
-    test.must_match(['work1', 'all'], "work1/aaa.in\nchecked-out work1/bbb.in\nwork1/ccc.in\n")
-
-    test.fail_test(not is_writable(test.workpath('work1', 'sub', 'SConscript')))
-    test.fail_test(not is_writable(test.workpath('work1', 'aaa.in')))
-    test.fail_test(not is_writable(test.workpath('work1', 'ccc.in')))
-    test.fail_test(not is_writable(test.workpath('work1', 'sub', 'ddd.in')))
-    test.fail_test(not is_writable(test.workpath('work1', 'sub', 'fff.in')))
-
-# Test using BitKeeper to fetch from RCS/file,v files.
-rcs = test.where_is('rcs')
-ci = test.where_is('ci')
-if not rcs:
-    print "Could not find RCS,\nskipping sub-test of BitKeeper using RCS files."
-elif not ci:
-    print "Could not find the RCS ci command,\nskipping sub-test of BitKeeper using RCS files."
-else:
-    test.subdir('work2',
-                ['work2', 'RCS'],
-                ['work2', 'sub'],
-                ['work2', 'sub', 'RCS'])
-
-    for file in ['aaa.in', 'bbb.in', 'ccc.in']:
-        test.write(['work2', file], "work2/%s\n" % file)
-        args = "-f -t%s %s" % (file, file)
-        test.run(chdir = 'work2', program = ci, arguments = args, stderr = None)
-
-    test.write(['work2', 'sub', 'SConscript'], """\
-Import("env")
-env.Cat('ddd.out', 'ddd.in')
-env.Cat('eee.out', 'eee.in')
-env.Cat('fff.out', 'fff.in')
-env.Cat('all', ['ddd.out', 'eee.out', 'fff.out'])
-""")
-    args = "-f -tsub/SConscript sub/SConscript"
-    test.run(chdir = 'work2', program = ci, arguments = args, stderr = None)
-
-    for file in ['ddd.in', 'eee.in', 'fff.in']:
-        test.write(['work2', 'sub', file], "work2/sub/%s\n" % file)
-        args = "-f -tsub/%s sub/%s" % (file, file)
-        test.run(chdir = 'work2', program = ci, arguments = args, stderr = None)
-
-    test.no_result(os.path.exists(test.workpath('work2', 'aaa.in')))
-    test.no_result(os.path.exists(test.workpath('work2', 'bbb.in')))
-    test.no_result(os.path.exists(test.workpath('work2', 'ccc.in')))
-
-    test.no_result(os.path.exists(test.workpath('work2', 'sub', 'SConscript')))
-
-    test.no_result(os.path.exists(test.workpath('work2', 'sub', 'ddd.in')))
-    test.no_result(os.path.exists(test.workpath('work2', 'sub', 'eee.in')))
-    test.no_result(os.path.exists(test.workpath('work2', 'sub', 'fff.in')))
-
-    test.write(['work2', 'SConstruct'], """\
-def cat(env, source, target):
-    target = str(target[0])
-    source = map(str, source)
-    f = open(target, "wb")
-    for src in source:
-        f.write(open(src, "rb").read())
-    f.close()
-env = Environment(BUILDERS={'Cat':Builder(action=cat)},
-                  BITKEEPERGET='$BITKEEPER co',
-                  BITKEEPERGETFLAGS='-q')
-env.Cat('aaa.out', 'aaa.in')
-env.Cat('bbb.out', 'bbb.in')
-env.Cat('ccc.out', 'ccc.in')
-env.Cat('all', ['aaa.out', 'bbb.out', 'ccc.out'])
-env.SourceCode('.', env.BitKeeper())
-SConscript('sub/SConscript', "env")
-""")
-
-    test.write(['work2', 'bbb.in'], "checked-out work2/bbb.in\n")
-
-    test.write(['work2', 'sub', 'eee.in'], "checked-out work2/sub/eee.in\n")
-
-    test.run(chdir = 'work2',
-             arguments = '.',
-             stdout = test.wrap_stdout(read_str = """\
-bk co -q sub/SConscript
-""",
-                                       build_str = """\
-bk co -q aaa.in
-cat(["aaa.out"], ["aaa.in"])
-cat(["bbb.out"], ["bbb.in"])
-bk co -q ccc.in
-cat(["ccc.out"], ["ccc.in"])
-cat(["all"], ["aaa.out", "bbb.out", "ccc.out"])
-bk co -q sub/ddd.in
-cat(["sub/ddd.out"], ["sub/ddd.in"])
-cat(["sub/eee.out"], ["sub/eee.in"])
-bk co -q sub/fff.in
-cat(["sub/fff.out"], ["sub/fff.in"])
-cat(["sub/all"], ["sub/ddd.out", "sub/eee.out", "sub/fff.out"])
-"""))
-
-    test.must_match(['work2', 'all'], "work2/aaa.in\nchecked-out work2/bbb.in\nwork2/ccc.in\n")
-
-    test.must_match(['work2', 'sub', 'all'], "work2/sub/ddd.in\nchecked-out work2/sub/eee.in\nwork2/sub/fff.in\n")
-
-    test.fail_test(is_writable(test.workpath('work2', 'sub', 'SConscript')))
-    test.fail_test(is_writable(test.workpath('work2', 'aaa.in')))
-    test.fail_test(is_writable(test.workpath('work2', 'ccc.in')))
-    test.fail_test(is_writable(test.workpath('work2', 'sub', 'ddd.in')))
-    test.fail_test(is_writable(test.workpath('work2', 'sub', 'fff.in')))
-
-# Set up a "pure" BitKeeper hierarchy.
-# BitKeeper's licensing restrictions require a configuration file that
-# specifies you're not using it multi-user.  This seems to be the
-# minimal configuration that satisfies these requirements.
-test.write('bk.conf', """\
-description:test project 'foo'
-logging:none
-email:%s
-single_user:%s
-single_host:%s
-""" % (email, login, host))
-
-# Plus, we need to set the external environment variable that gets it to
-# shut up and not prompt us to accept the license.
-os.environ['BK_LICENSE'] = 'ACCEPTED'
-
-test.write(['import', 'aaa.in'], "import/aaa.in\n")
-test.write(['import', 'bbb.in'], "import/bbb.in\n")
-test.write(['import', 'ccc.in'], "import/ccc.in\n")
-
-test.write(['import', 'sub', 'SConscript'], """\
-Import("env")
-env.Cat('ddd.out', 'ddd.in')
-env.Cat('eee.out', 'eee.in')
-env.Cat('fff.out', 'fff.in')
-env.Cat('all', ['ddd.out', 'eee.out', 'fff.out'])
-""")
-
-test.write(['import', 'sub', 'ddd.in'], "import/sub/ddd.in\n")
-test.write(['import', 'sub', 'eee.in'], "import/sub/eee.in\n")
-test.write(['import', 'sub', 'fff.in'], "import/sub/fff.in\n")
-
-# Test transparent source file checkouts using BitKeeper, by overriding
-# the 'SCCS' construction variable in the default Environment.
-work3 = test.workpath('work3')
-
-test.run(program = bk,
-         arguments = 'setup -f -c bk.conf work3')
-
-test.run(chdir = 'import',
-         program = bk,
-         arguments = 'import -q -f -tplain . %s' % test.workpath('work3'))
-
-test.write(['work3', 'SConstruct'], """
-def cat(env, source, target):
-    target = str(target[0])
-    source = map(str, source)
-    f = open(target, "wb")
-    for src in source:
-        f.write(open(src, "rb").read())
-    f.close()
-DefaultEnvironment(tools=['SCCS'])['SCCS'] = r'%s'
-env = Environment(BUILDERS={'Cat':Builder(action=cat)})
-env.Cat('aaa.out', 'aaa.in')
-env.Cat('bbb.out', 'bbb.in')
-env.Cat('ccc.out', 'ccc.in')
-env.Cat('all', ['aaa.out', 'bbb.out', 'ccc.out'])
-SConscript('sub/SConscript', "env")
-""" % bk)
-
-test.write(['work3', 'bbb.in'], "work3/bbb.in\n")
-
-test.subdir(['work3', 'sub'])
-test.write(['work3', 'sub', 'eee.in'], "work3/sub/eee.in\n")
-
-test.run(chdir = 'work3',
-         arguments = '.',
-         stdout = test.wrap_stdout(read_str = """\
-%s get sub/SConscript
-""" % bk,
-                                   build_str = """\
-%s get aaa.in
-cat(["aaa.out"], ["aaa.in"])
-cat(["bbb.out"], ["bbb.in"])
-%s get ccc.in
-cat(["ccc.out"], ["ccc.in"])
-cat(["all"], ["aaa.out", "bbb.out", "ccc.out"])
-%s get sub/ddd.in
-cat(["sub/ddd.out"], ["sub/ddd.in"])
-cat(["sub/eee.out"], ["sub/eee.in"])
-%s get sub/fff.in
-cat(["sub/fff.out"], ["sub/fff.in"])
-cat(["sub/all"], ["sub/ddd.out", "sub/eee.out", "sub/fff.out"])
-""" % (bk, bk, bk, bk)),
-         stderr = """\
-sub/SConscript 1.1: 5 lines
-aaa.in 1.1: 1 lines
-ccc.in 1.1: 1 lines
-sub/ddd.in 1.1: 1 lines
-sub/fff.in 1.1: 1 lines
-""")
-
-test.must_match(['work3', 'all'], "import/aaa.in\nwork3/bbb.in\nimport/ccc.in\n")
-
-test.must_match(['work3', 'sub', 'all'], "import/sub/ddd.in\nwork3/sub/eee.in\nimport/sub/fff.in\n")
-
-test.fail_test(is_writable(test.workpath('work3', 'sub', 'SConscript')))
-test.fail_test(is_writable(test.workpath('work3', 'aaa.in')))
-test.fail_test(is_writable(test.workpath('work3', 'ccc.in')))
-test.fail_test(is_writable(test.workpath('work3', 'sub', 'ddd.in')))
-test.fail_test(is_writable(test.workpath('work3', 'sub', 'fff.in')))
-
-test.pass_test()
diff --git a/test/CVS.py b/test/CVS.py
deleted file mode 100644 (file)
index 59384c9..0000000
+++ /dev/null
@@ -1,304 +0,0 @@
-#!/usr/bin/env python
-#
-# __COPYRIGHT__
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
-"""
-Test fetching source files from CVS.
-"""
-
-import os
-import os.path
-import stat
-
-import TestSCons
-
-test = TestSCons.TestSCons()
-
-cvs = test.where_is('cvs')
-if not cvs:
-    print "Could not find CVS, skipping test(s)."
-    test.pass_test(1)
-
-def is_writable(file):
-    mode = os.stat(file)[stat.ST_MODE]
-    return mode & stat.S_IWUSR
-
-test.subdir('CVS', 'import', ['import', 'sub'], 'work1', 'work2')
-
-foo_aaa_in = os.path.join('foo', 'aaa.in')
-foo_bbb_in = os.path.join('foo', 'bbb.in')
-foo_ccc_in = os.path.join('foo', 'ccc.in')
-foo_sub_ddd_in = os.path.join('foo', 'sub', 'ddd.in')
-foo_sub_ddd_out = os.path.join('foo', 'sub', 'ddd.out')
-foo_sub_eee_in = os.path.join('foo', 'sub', 'eee.in')
-foo_sub_eee_out = os.path.join('foo', 'sub', 'eee.out')
-foo_sub_fff_in = os.path.join('foo', 'sub', 'fff.in')
-foo_sub_fff_out = os.path.join('foo', 'sub', 'fff.out')
-foo_sub_all = os.path.join('foo', 'sub', 'all')
-
-sub_SConscript = os.path.join('sub', 'SConscript')
-sub_ddd_in = os.path.join('sub', 'ddd.in')
-sub_ddd_out = os.path.join('sub', 'ddd.out')
-sub_eee_in = os.path.join('sub', 'eee.in')
-sub_eee_out = os.path.join('sub', 'eee.out')
-sub_fff_in = os.path.join('sub', 'fff.in')
-sub_fff_out = os.path.join('sub', 'fff.out')
-sub_all = os.path.join('sub', 'all')
-
-# Set up the CVS repository.
-cvsroot = test.workpath('CVS')
-
-os.environ['CVSROOT'] = cvsroot
-test.run(program = cvs, arguments = 'init')
-
-test.write(['import', 'aaa.in'], "import/aaa.in\n")
-test.write(['import', 'bbb.in'], "import/bbb.in\n")
-test.write(['import', 'ccc.in'], "import/ccc.in\n")
-
-test.write(['import', 'sub', 'SConscript'], """\
-Import("env")
-env.Cat('ddd.out', 'ddd.in')
-env.Cat('eee.out', 'eee.in')
-env.Cat('fff.out', 'fff.in')
-env.Cat('all', ['ddd.out', 'eee.out', 'fff.out'])
-""")
-
-test.write(['import', 'sub', 'ddd.in'], "import/sub/ddd.in\n")
-test.write(['import', 'sub', 'eee.in'], "import/sub/eee.in\n")
-test.write(['import', 'sub', 'fff.in'], "import/sub/fff.in\n")
-
-test.run(chdir = 'import',
-         program = cvs,
-         arguments = '-q import -m import foo v v-r')
-
-# Test the most straightforward CVS checkouts, using the module name.
-test.write(['work1', 'SConstruct'], """
-import os
-def cat(env, source, target):
-    target = str(target[0])
-    source = map(str, source)
-    f = open(target, "wb")
-    for src in source:
-        f.write(open(src, "rb").read())
-    f.close()
-env = Environment(ENV = { 'PATH' : os.environ['PATH'] },
-                  BUILDERS={'Cat':Builder(action=cat)})
-env.Prepend(CVSFLAGS='-Q')
-env.Cat('aaa.out', 'foo/aaa.in')
-env.Cat('bbb.out', 'foo/bbb.in')
-env.Cat('ccc.out', 'foo/ccc.in')
-env.Cat('all', ['aaa.out', 'bbb.out', 'ccc.out'])
-env.SourceCode('.', env.CVS(r'%(cvsroot)s'))
-SConscript('foo/sub/SConscript', "env")
-""" % locals())
-
-test.subdir(['work1', 'foo'])
-test.write(['work1', 'foo', 'bbb.in'], "work1/foo/bbb.in\n")
-
-test.subdir(['work1', 'foo', 'sub',])
-test.write(['work1', 'foo', 'sub', 'eee.in'], "work1/foo/sub/eee.in\n")
-
-test.run(chdir = 'work1',
-         arguments = '.',
-         stdout = test.wrap_stdout(read_str = """\
-cvs -Q -d %(cvsroot)s co foo/sub/SConscript
-""" % locals(),
-                                   build_str = """\
-cvs -Q -d %(cvsroot)s co foo/aaa.in
-cat(["aaa.out"], ["%(foo_aaa_in)s"])
-cat(["bbb.out"], ["%(foo_bbb_in)s"])
-cvs -Q -d %(cvsroot)s co foo/ccc.in
-cat(["ccc.out"], ["%(foo_ccc_in)s"])
-cat(["all"], ["aaa.out", "bbb.out", "ccc.out"])
-cvs -Q -d %(cvsroot)s co foo/sub/ddd.in
-cat(["%(foo_sub_ddd_out)s"], ["%(foo_sub_ddd_in)s"])
-cat(["%(foo_sub_eee_out)s"], ["%(foo_sub_eee_in)s"])
-cvs -Q -d %(cvsroot)s co foo/sub/fff.in
-cat(["%(foo_sub_fff_out)s"], ["%(foo_sub_fff_in)s"])
-cat(["%(foo_sub_all)s"], ["%(foo_sub_ddd_out)s", "%(foo_sub_eee_out)s", "%(foo_sub_fff_out)s"])
-""" % locals()))
-
-# Checking things back out of CVS apparently messes with the line
-# endings, so read the result files in non-binary mode.
-
-test.must_match(['work1', 'all'],
-                "import/aaa.in\nwork1/foo/bbb.in\nimport/ccc.in\n",
-                mode='r')
-
-test.must_match(['work1', 'foo', 'sub', 'all'],
-                "import/sub/ddd.in\nwork1/foo/sub/eee.in\nimport/sub/fff.in\n",
-                mode='r')
-
-test.fail_test(not is_writable(test.workpath('work1', 'foo', 'sub', 'SConscript')))
-test.fail_test(not is_writable(test.workpath('work1', 'foo', 'aaa.in')))
-test.fail_test(not is_writable(test.workpath('work1', 'foo', 'ccc.in')))
-test.fail_test(not is_writable(test.workpath('work1', 'foo', 'sub', 'ddd.in')))
-test.fail_test(not is_writable(test.workpath('work1', 'foo', 'sub', 'fff.in')))
-
-# Test CVS checkouts when the module name is specified.
-test.write(['work2', 'SConstruct'], """
-import os
-def cat(env, source, target):
-    target = str(target[0])
-    source = map(str, source)
-    f = open(target, "wb")
-    for src in source:
-        f.write(open(src, "rb").read())
-    f.close()
-env = Environment(ENV = { 'PATH' : os.environ['PATH'] },
-                  BUILDERS={'Cat':Builder(action=cat)})
-env.Prepend(CVSFLAGS='-q')
-env.Cat('aaa.out', 'aaa.in')
-env.Cat('bbb.out', 'bbb.in')
-env.Cat('ccc.out', 'ccc.in')
-env.Cat('all', ['aaa.out', 'bbb.out', 'ccc.out'])
-env.SourceCode('.', env.CVS(r'%(cvsroot)s', 'foo'))
-SConscript('sub/SConscript', "env")
-""" % locals())
-
-test.write(['work2', 'bbb.in'], "work2/bbb.in\n")
-
-test.subdir(['work2', 'sub'])
-test.write(['work2', 'sub', 'eee.in'], "work2/sub/eee.in\n")
-
-test.run(chdir = 'work2',
-         arguments = '.',
-         stdout = test.wrap_stdout(read_str = """\
-cvs -q -d %(cvsroot)s co -d sub foo/sub/SConscript
-U sub/SConscript
-""" % locals(),
-                                   build_str = """\
-cvs -q -d %(cvsroot)s co -d . foo/aaa.in
-U ./aaa.in
-cat(["aaa.out"], ["aaa.in"])
-cat(["bbb.out"], ["bbb.in"])
-cvs -q -d %(cvsroot)s co -d . foo/ccc.in
-U ./ccc.in
-cat(["ccc.out"], ["ccc.in"])
-cat(["all"], ["aaa.out", "bbb.out", "ccc.out"])
-cvs -q -d %(cvsroot)s co -d sub foo/sub/ddd.in
-U sub/ddd.in
-cat(["%(sub_ddd_out)s"], ["%(sub_ddd_in)s"])
-cat(["%(sub_eee_out)s"], ["%(sub_eee_in)s"])
-cvs -q -d %(cvsroot)s co -d sub foo/sub/fff.in
-U sub/fff.in
-cat(["%(sub_fff_out)s"], ["%(sub_fff_in)s"])
-cat(["%(sub_all)s"], ["%(sub_ddd_out)s", "%(sub_eee_out)s", "%(sub_fff_out)s"])
-""" % locals()))
-
-# Checking things back out of CVS apparently messes with the line
-# endings, so read the result files in non-binary mode.
-
-test.must_match(['work2', 'all'],
-                "import/aaa.in\nwork2/bbb.in\nimport/ccc.in\n",
-                mode='r')
-
-test.must_match(['work2', 'sub', 'all'],
-                "import/sub/ddd.in\nwork2/sub/eee.in\nimport/sub/fff.in\n",
-                mode='r')
-
-test.fail_test(not is_writable(test.workpath('work2', 'sub', 'SConscript')))
-test.fail_test(not is_writable(test.workpath('work2', 'aaa.in')))
-test.fail_test(not is_writable(test.workpath('work2', 'ccc.in')))
-test.fail_test(not is_writable(test.workpath('work2', 'sub', 'ddd.in')))
-test.fail_test(not is_writable(test.workpath('work2', 'sub', 'fff.in')))
-
-# Test checking out specific file name(s), and expanding
-# the repository name with a variable.
-test.subdir(['work3'])
-
-test.write(['work3', 'SConstruct'], """\
-import os
-def cat(env, source, target):
-    target = str(target[0])
-    source = map(str, source)
-    f = open(target, "wb")
-    for src in source:
-        f.write(open(src, "rb").read())
-    f.close()
-env = Environment(ENV = { 'PATH' : os.environ['PATH'] },
-                  BUILDERS={'Cat':Builder(action=cat)},
-                  CVSROOT=r'%s')
-env.Prepend(CVSFLAGS='-q')
-env.Cat('aaa.out', 'aaa.in')
-env.Cat('bbb.out', 'bbb.in')
-env.Cat('ccc.out', 'ccc.in')
-env.Cat('all', ['aaa.out', 'bbb.out', 'ccc.out'])
-cvs = env.CVS('$CVSROOT', 'foo')
-#env.SourceCode('.', cvs)
-env.SourceCode('aaa.in', cvs)
-env.SourceCode('bbb.in', cvs)
-env.SourceCode('ccc.in', cvs)
-""" % cvsroot)
-
-test.run(chdir = 'work3',
-         arguments = '.',
-         stdout = test.wrap_stdout(build_str = """\
-cvs -q -d %(cvsroot)s co -d . foo/aaa.in
-U ./aaa.in
-cat(["aaa.out"], ["aaa.in"])
-cvs -q -d %(cvsroot)s co -d . foo/bbb.in
-U ./bbb.in
-cat(["bbb.out"], ["bbb.in"])
-cvs -q -d %(cvsroot)s co -d . foo/ccc.in
-U ./ccc.in
-cat(["ccc.out"], ["ccc.in"])
-cat(["all"], ["aaa.out", "bbb.out", "ccc.out"])
-""" % locals()))
-
-test.must_match(['work3', 'aaa.out'],
-                "import/aaa.in\n",
-                mode='r')
-test.must_match(['work3', 'bbb.out'],
-                "import/bbb.in\n",
-                mode='r')
-test.must_match(['work3', 'ccc.out'],
-                "import/ccc.in\n",
-                mode='r')
-test.must_match(['work3', 'all'],
-                "import/aaa.in\nimport/bbb.in\nimport/ccc.in\n",
-                mode='r')
-
-# Test CVS checkouts from a remote server (Tigris.org).
-test.subdir(['work4'])
-
-test.write(['work4', 'SConstruct'], """\
-import os
-env = Environment(ENV = { 'PATH' : os.environ['PATH'] })
-# We used to use the SourceForge server, but SourceForge has restrictions
-# that make them deny access on occasion.  Leave the incantation here
-# in case we need to use it again some day.
-#cvs = env.CVS(':pserver:anonymous@cvs.sourceforge.net:/cvsroot/scons')
-cvs = env.CVS(':pserver:anoncvs@cvs.tigris.org:/cvs')
-env.SourceCode('.', cvs)
-env.Install('install', 'scons/SConstruct')
-""")
-
-test.run(chdir = 'work4', arguments = '.')
-
-test.must_exist(test.workpath('work4', 'install', 'SConstruct'))
-
-
-test.pass_test()
diff --git a/test/RCS.py b/test/RCS.py
deleted file mode 100644 (file)
index 50d353f..0000000
+++ /dev/null
@@ -1,325 +0,0 @@
-#!/usr/bin/env python
-#
-# __COPYRIGHT__
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
-"""
-Test fetching source files from RCS.
-"""
-
-import os.path
-import stat
-
-import TestSCons
-
-test = TestSCons.TestSCons()
-
-rcs = test.where_is('rcs')
-if not rcs:
-    print "Could not find RCS, skipping test(s)."
-    test.pass_test(1)
-
-ci = test.where_is('ci')
-if not ci:
-    print "Could not find `ci' command, skipping test(s)."
-    test.pass_test(1)
-
-def is_writable(file):
-    mode = os.stat(file)[stat.ST_MODE]
-    return mode & stat.S_IWUSR
-
-
-
-# Test explicit checkouts from local RCS files.
-test.subdir('work1', ['work1', 'sub'])
-
-sub_RCS = os.path.join('sub', 'RCS')
-sub_SConscript = os.path.join('sub', 'SConscript')
-sub_all = os.path.join('sub', 'all')
-sub_ddd_in = os.path.join('sub', 'ddd.in')
-sub_ddd_out = os.path.join('sub', 'ddd.out')
-sub_eee_in = os.path.join('sub', 'eee.in')
-sub_eee_out = os.path.join('sub', 'eee.out')
-sub_fff_in = os.path.join('sub', 'fff.in')
-sub_fff_out = os.path.join('sub', 'fff.out')
-
-for file in ['aaa.in', 'bbb.in', 'ccc.in']:
-    test.write(['work1', file], "work1/%s\n" % file)
-    args = "-f -t%s %s" % (file, file)
-    test.run(chdir = 'work1', program = ci, arguments = args, stderr = None)
-
-test.write(['work1', 'sub', 'SConscript'], """\
-Import("env")
-env.Cat('ddd.out', 'ddd.in')
-env.Cat('eee.out', 'eee.in')
-env.Cat('fff.out', 'fff.in')
-env.Cat('all', ['ddd.out', 'eee.out', 'fff.out'])
-""")
-args = "-f -tsub/SConscript sub/SConscript"
-test.run(chdir = 'work1', program = ci, arguments = args, stderr = None)
-
-for file in ['ddd.in', 'eee.in', 'fff.in']:
-    test.write(['work1', 'sub', file], "work1/sub/%s\n" % file)
-    args = "-f -tsub/%s sub/%s" % (file, file)
-    test.run(chdir = 'work1', program = ci, arguments = args, stderr = None)
-
-test.no_result(os.path.exists(test.workpath('work1', 'aaa.in')))
-test.no_result(os.path.exists(test.workpath('work1', 'bbb.in')))
-test.no_result(os.path.exists(test.workpath('work1', 'ccc.in')))
-
-test.no_result(os.path.exists(test.workpath('work1', 'sub', 'SConscript')))
-
-test.no_result(os.path.exists(test.workpath('work1', 'sub', 'ddd.in')))
-test.no_result(os.path.exists(test.workpath('work1', 'sub', 'eee.in')))
-test.no_result(os.path.exists(test.workpath('work1', 'sub', 'fff.in')))
-
-test.write(['work1', 'SConstruct'], """
-import os
-for key in ['LOGNAME', 'USERNAME', 'USER']:
-    logname = os.environ.get(key)
-    if logname: break
-ENV = {'PATH' : os.environ['PATH'],
-       'LOGNAME' : logname}
-def cat(env, source, target):
-    target = str(target[0])
-    source = map(str, source)
-    f = open(target, "wb")
-    for src in source:
-        f.write(open(src, "rb").read())
-    f.close()
-env = Environment(ENV=ENV,
-                  BUILDERS={'Cat':Builder(action=cat)},
-                  RCS_COFLAGS='-q')
-DefaultEnvironment()['ENV'] = ENV
-env.Cat('aaa.out', 'aaa.in')
-env.Cat('bbb.out', 'bbb.in')
-env.Cat('ccc.out', 'ccc.in')
-env.Cat('all', ['aaa.out', 'bbb.out', 'ccc.out'])
-env.SourceCode('.', env.RCS())
-SConscript('sub/SConscript', "env")
-""")
-
-test.write(['work1', 'bbb.in'], "checked-out work1/bbb.in\n")
-
-test.write(['work1', 'sub', 'eee.in'], "checked-out work1/sub/eee.in\n")
-
-test.run(chdir = 'work1',
-         arguments = '.',
-         stdout = test.wrap_stdout(read_str = """\
-co -q %(sub_SConscript)s
-""" % locals(),
-                                   build_str = """\
-co -q aaa.in
-cat(["aaa.out"], ["aaa.in"])
-cat(["bbb.out"], ["bbb.in"])
-co -q ccc.in
-cat(["ccc.out"], ["ccc.in"])
-cat(["all"], ["aaa.out", "bbb.out", "ccc.out"])
-co -q %(sub_ddd_in)s
-cat(["%(sub_ddd_out)s"], ["%(sub_ddd_in)s"])
-cat(["%(sub_eee_out)s"], ["%(sub_eee_in)s"])
-co -q %(sub_fff_in)s
-cat(["%(sub_fff_out)s"], ["%(sub_fff_in)s"])
-cat(["%(sub_all)s"], ["%(sub_ddd_out)s", "%(sub_eee_out)s", "%(sub_fff_out)s"])
-""" % locals()))
-
-# Checking things back out of RCS apparently messes with the line
-# endings, so read the result files in non-binary mode.
-
-test.must_match(['work1', 'all'],
-                "work1/aaa.in\nchecked-out work1/bbb.in\nwork1/ccc.in\n",
-                mode='r')
-
-test.must_match(['work1', 'sub', 'all'],
-                "work1/sub/ddd.in\nchecked-out work1/sub/eee.in\nwork1/sub/fff.in\n",
-                mode='r')
-
-test.fail_test(is_writable(test.workpath('work1', 'sub', 'SConscript')))
-test.fail_test(is_writable(test.workpath('work1', 'aaa.in')))
-test.fail_test(is_writable(test.workpath('work1', 'ccc.in')))
-test.fail_test(is_writable(test.workpath('work1', 'sub', 'ddd.in')))
-test.fail_test(is_writable(test.workpath('work1', 'sub', 'fff.in')))
-
-
-
-# Test transparent RCS checkouts from an RCS subdirectory.
-test.subdir('work2', ['work2', 'RCS'],
-            ['work2', 'sub'], ['work2', 'sub', 'RCS'])
-
-for file in ['aaa.in', 'bbb.in', 'ccc.in']:
-    test.write(['work2', file], "work2/%s\n" % file)
-    args = "-f -t%s %s" % (file, file)
-    test.run(chdir = 'work2', program = ci, arguments = args, stderr = None)
-
-for file in ['ddd.in', 'eee.in', 'fff.in']:
-    test.write(['work2', 'sub', file], "work2/sub/%s\n" % file)
-    args = "-f -tsub/%s sub/%s" % (file, file)
-    test.run(chdir = 'work2', program = ci, arguments = args, stderr = None)
-
-test.write(['work2', 'sub', 'SConscript'], """\
-Import("env")
-env.Cat('ddd.out', 'ddd.in')
-env.Cat('eee.out', 'eee.in')
-env.Cat('fff.out', 'fff.in')
-env.Cat('all', ['ddd.out', 'eee.out', 'fff.out'])
-""")
-args = "-f -tsub/SConscript sub/SConscript"
-test.run(chdir = 'work2', program = ci, arguments = args, stderr = None)
-
-test.no_result(os.path.exists(test.workpath('work2', 'aaa.in')))
-test.no_result(os.path.exists(test.workpath('work2', 'bbb.in')))
-test.no_result(os.path.exists(test.workpath('work2', 'ccc.in')))
-
-test.no_result(os.path.exists(test.workpath('work2', 'sub', 'SConscript')))
-
-test.no_result(os.path.exists(test.workpath('work2', 'sub', 'aaa.in')))
-test.no_result(os.path.exists(test.workpath('work2', 'sub', 'bbb.in')))
-test.no_result(os.path.exists(test.workpath('work2', 'sub', 'ccc.in')))
-
-test.write(['work2', 'SConstruct'], """
-import os
-for key in ['LOGNAME', 'USERNAME', 'USER']:
-    logname = os.environ.get(key)
-    if logname: break
-ENV = {'PATH' : os.environ['PATH'],
-       'LOGNAME' : logname}
-def cat(env, source, target):
-    target = str(target[0])
-    source = map(str, source)
-    f = open(target, "wb")
-    for src in source:
-        f.write(open(src, "rb").read())
-    f.close()
-DefaultEnvironment()['ENV'] = ENV
-DefaultEnvironment()['RCS_COFLAGS'] = '-l'
-env = Environment(ENV=ENV, BUILDERS={'Cat':Builder(action=cat)})
-env.Cat('aaa.out', 'aaa.in')
-env.Cat('bbb.out', 'bbb.in')
-env.Cat('ccc.out', 'ccc.in')
-env.Cat('all', ['aaa.out', 'bbb.out', 'ccc.out'])
-SConscript('sub/SConscript', "env")
-""")
-
-test.write(['work2', 'bbb.in'], "checked-out work2/bbb.in\n")
-
-test.write(['work2', 'sub', 'eee.in'], "checked-out work2/sub/eee.in\n")
-
-test.run(chdir = 'work2',
-         arguments = '.',
-         stdout = test.wrap_stdout(read_str = """\
-co -l %(sub_SConscript)s
-""" % locals(),
-                                   build_str = """\
-co -l aaa.in
-cat(["aaa.out"], ["aaa.in"])
-cat(["bbb.out"], ["bbb.in"])
-co -l ccc.in
-cat(["ccc.out"], ["ccc.in"])
-cat(["all"], ["aaa.out", "bbb.out", "ccc.out"])
-co -l %(sub_ddd_in)s
-cat(["%(sub_ddd_out)s"], ["%(sub_ddd_in)s"])
-cat(["%(sub_eee_out)s"], ["%(sub_eee_in)s"])
-co -l %(sub_fff_in)s
-cat(["%(sub_fff_out)s"], ["%(sub_fff_in)s"])
-cat(["%(sub_all)s"], ["%(sub_ddd_out)s", "%(sub_eee_out)s", "%(sub_fff_out)s"])
-""" % locals()),
-         stderr = """\
-%(sub_RCS)s/SConscript,v  -->  %(sub_SConscript)s
-revision 1.1 (locked)
-done
-RCS/aaa.in,v  -->  aaa.in
-revision 1.1 (locked)
-done
-RCS/ccc.in,v  -->  ccc.in
-revision 1.1 (locked)
-done
-%(sub_RCS)s/ddd.in,v  -->  %(sub_ddd_in)s
-revision 1.1 (locked)
-done
-%(sub_RCS)s/fff.in,v  -->  %(sub_fff_in)s
-revision 1.1 (locked)
-done
-""" % locals())
-
-# Checking things back out of RCS apparently messes with the line
-# endings, so read the result files in non-binary mode.
-
-test.must_match(['work2', 'all'],
-                "work2/aaa.in\nchecked-out work2/bbb.in\nwork2/ccc.in\n",
-                mode='r')
-
-test.must_match(['work2', 'sub', 'all'],
-                "work2/sub/ddd.in\nchecked-out work2/sub/eee.in\nwork2/sub/fff.in\n",
-                mode='r')
-
-test.fail_test(not is_writable(test.workpath('work2', 'sub', 'SConscript')))
-test.fail_test(not is_writable(test.workpath('work2', 'aaa.in')))
-test.fail_test(not is_writable(test.workpath('work2', 'ccc.in')))
-test.fail_test(not is_writable(test.workpath('work2', 'sub', 'ddd.in')))
-test.fail_test(not is_writable(test.workpath('work2', 'sub', 'fff.in')))
-
-
-
-# Test transparent RCS checkouts of implicit dependencies.
-test.subdir('work3', ['work3', 'RCS'])
-
-test.write(['work3', 'foo.c'], """\
-#include "foo.h"
-int
-main(int argc, char *argv[]) {
-    printf(STR);
-    printf("work3/foo.c\\n");
-}
-""")
-test.run(chdir = 'work3',
-         program = ci,
-         arguments = "-f -tfoo.c foo.c",
-         stderr = None)
-
-test.write(['work3', 'foo.h'], """\
-#define STR     "work3/foo.h\\n"
-""")
-test.run(chdir = 'work3',
-         program = ci,
-         arguments = "-f -tfoo.h foo.h",
-         stderr = None)
-
-test.write(['work3', 'SConstruct'], """
-env = Environment()
-env.Program('foo.c')
-""")
-
-test.run(chdir='work3', stderr="""\
-RCS/foo.c,v  -->  foo.c
-revision 1.1
-done
-RCS/foo.h,v  -->  foo.h
-revision 1.1
-done
-""")
-
-
-
-#
-test.pass_test()
diff --git a/test/SCCS.py b/test/SCCS.py
deleted file mode 100644 (file)
index 52ee0db..0000000
+++ /dev/null
@@ -1,265 +0,0 @@
-#!/usr/bin/env python
-#
-# __COPYRIGHT__
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
-"""
-Test fetching source files from SCCS.
-"""
-
-import os
-import stat
-
-import TestSCons
-
-test = TestSCons.TestSCons()
-
-sccs = test.where_is('sccs')
-if not sccs:
-    print "Could not find SCCS, skipping test(s)."
-    test.pass_test(1)
-
-def is_writable(file):
-    mode = os.stat(file)[stat.ST_MODE]
-    return mode & stat.S_IWUSR
-
-
-
-# Test explicit checkouts from local SCCS files.
-test.subdir('work1', ['work1', 'sub'])
-
-for file in ['aaa.in', 'bbb.in', 'ccc.in']:
-    test.write(['work1', file], "work1/%s\n" % file)
-    args = "create %s" % file
-    test.run(chdir = 'work1', program = sccs, arguments = args, stderr = None)
-    test.unlink(['work1', file])
-    test.unlink(['work1', ','+file])
-
-test.write(['work1', 'sub', 'SConscript'], """\
-Import("env")
-env.Cat('ddd.out', 'ddd.in')
-env.Cat('eee.out', 'eee.in')
-env.Cat('fff.out', 'fff.in')
-env.Cat('all', ['ddd.out', 'eee.out', 'fff.out'])
-""")
-args = "create SConscript"
-test.run(chdir = 'work1/sub', program = sccs, arguments = args, stderr = None)
-test.unlink(['work1', 'sub', 'SConscript'])
-test.unlink(['work1', 'sub', ',SConscript'])
-
-for file in ['ddd.in', 'eee.in', 'fff.in']:
-    test.write(['work1', 'sub', file], "work1/sub/%s\n" % file)
-    args = "create %s" % file
-    test.run(chdir = 'work1/sub', program = sccs, arguments = args, stderr = None)
-    test.unlink(['work1', 'sub', file])
-    test.unlink(['work1', 'sub', ','+file])
-
-test.write(['work1', 'SConstruct'], """
-def cat(env, source, target):
-    target = str(target[0])
-    source = map(str, source)
-    f = open(target, "wb")
-    for src in source:
-        f.write(open(src, "rb").read())
-    f.close()
-env = Environment(BUILDERS={'Cat':Builder(action=cat)},
-                  SCCSGETFLAGS='-e')
-env.Cat('aaa.out', 'aaa.in')
-env.Cat('bbb.out', 'bbb.in')
-env.Cat('ccc.out', 'ccc.in')
-env.Cat('all', ['aaa.out', 'bbb.out', 'ccc.out'])
-env.SourceCode('.', env.SCCS())
-SConscript('sub/SConscript', "env")
-""")
-
-test.write(['work1', 'bbb.in'], "checked-out work1/bbb.in\n")
-
-test.write(['work1', 'sub', 'eee.in'], "checked-out work1/sub/eee.in\n")
-
-test.run(chdir = 'work1',
-         arguments = '.',
-         stdout = test.wrap_stdout(read_str = """\
-sccs get -e sub/SConscript
-""",
-                                   build_str = """\
-sccs get -e aaa.in
-cat(["aaa.out"], ["aaa.in"])
-cat(["bbb.out"], ["bbb.in"])
-sccs get -e ccc.in
-cat(["ccc.out"], ["ccc.in"])
-cat(["all"], ["aaa.out", "bbb.out", "ccc.out"])
-sccs get -e sub/ddd.in
-cat(["sub/ddd.out"], ["sub/ddd.in"])
-cat(["sub/eee.out"], ["sub/eee.in"])
-sccs get -e sub/fff.in
-cat(["sub/fff.out"], ["sub/fff.in"])
-cat(["sub/all"], ["sub/ddd.out", "sub/eee.out", "sub/fff.out"])
-"""),
-         stderr = """\
-sub/SConscript 1.1 -> 1.2: 5 lines
-aaa.in 1.1 -> 1.2: 1 lines
-ccc.in 1.1 -> 1.2: 1 lines
-sub/ddd.in 1.1 -> 1.2: 1 lines
-sub/fff.in 1.1 -> 1.2: 1 lines
-""")
-
-test.must_match(['work1', 'all'], "work1/aaa.in\nchecked-out work1/bbb.in\nwork1/ccc.in\n")
-
-test.fail_test(not is_writable(test.workpath('work1', 'sub', 'SConscript')))
-test.fail_test(not is_writable(test.workpath('work1', 'aaa.in')))
-test.fail_test(not is_writable(test.workpath('work1', 'ccc.in')))
-test.fail_test(not is_writable(test.workpath('work1', 'sub', 'ddd.in')))
-test.fail_test(not is_writable(test.workpath('work1', 'sub', 'fff.in')))
-
-
-
-# Test transparent checkouts from SCCS files in an SCCS subdirectory.
-test.subdir('work2', ['work2', 'SCCS'],
-            ['work2', 'sub'], ['work2', 'sub', 'SCCS'])
-
-for file in ['aaa.in', 'bbb.in', 'ccc.in']:
-    test.write(['work2', file], "work2/%s\n" % file)
-    args = "create %s" % file
-    test.run(chdir = 'work2', program = sccs, arguments = args, stderr = None)
-    test.unlink(['work2', file])
-    test.unlink(['work2', ','+file])
-
-test.write(['work2', 'sub', 'SConscript'], """\
-Import("env")
-env.Cat('ddd.out', 'ddd.in')
-env.Cat('eee.out', 'eee.in')
-env.Cat('fff.out', 'fff.in')
-env.Cat('all', ['ddd.out', 'eee.out', 'fff.out'])
-""")
-args = "create SConscript"
-test.run(chdir = 'work2/sub', program = sccs, arguments = args, stderr = None)
-test.unlink(['work2', 'sub', 'SConscript'])
-test.unlink(['work2', 'sub', ',SConscript'])
-
-for file in ['ddd.in', 'eee.in', 'fff.in']:
-    test.write(['work2', 'sub', file], "work2/sub/%s\n" % file)
-    args = "create %s" % file
-    test.run(chdir = 'work2/sub', program = sccs, arguments = args, stderr = None)
-    test.unlink(['work2', 'sub', file])
-    test.unlink(['work2', 'sub', ','+file])
-
-test.write(['work2', 'SConstruct'], """
-def cat(env, source, target):
-    target = str(target[0])
-    source = map(str, source)
-    f = open(target, "wb")
-    for src in source:
-        f.write(open(src, "rb").read())
-    f.close()
-env = Environment(BUILDERS={'Cat':Builder(action=cat)})
-env.Cat('aaa.out', 'aaa.in')
-env.Cat('bbb.out', 'bbb.in')
-env.Cat('ccc.out', 'ccc.in')
-env.Cat('all', ['aaa.out', 'bbb.out', 'ccc.out'])
-SConscript('sub/SConscript', "env")
-""")
-
-test.write(['work2', 'bbb.in'], "checked-out work2/bbb.in\n")
-
-test.write(['work2', 'sub', 'eee.in'], "checked-out work2/sub/eee.in\n")
-
-test.run(chdir = 'work2',
-         arguments = '.',
-         stdout = test.wrap_stdout(read_str = """\
-sccs get sub/SConscript
-""",
-                                   build_str = """\
-sccs get aaa.in
-cat(["aaa.out"], ["aaa.in"])
-cat(["bbb.out"], ["bbb.in"])
-sccs get ccc.in
-cat(["ccc.out"], ["ccc.in"])
-cat(["all"], ["aaa.out", "bbb.out", "ccc.out"])
-sccs get sub/ddd.in
-cat(["sub/ddd.out"], ["sub/ddd.in"])
-cat(["sub/eee.out"], ["sub/eee.in"])
-sccs get sub/fff.in
-cat(["sub/fff.out"], ["sub/fff.in"])
-cat(["sub/all"], ["sub/ddd.out", "sub/eee.out", "sub/fff.out"])
-"""),
-         stderr = """\
-sub/SConscript 1.1: 5 lines
-aaa.in 1.1: 1 lines
-ccc.in 1.1: 1 lines
-sub/ddd.in 1.1: 1 lines
-sub/fff.in 1.1: 1 lines
-""")
-
-test.must_match(['work2', 'all'], "work2/aaa.in\nchecked-out work2/bbb.in\nwork2/ccc.in\n")
-
-test.fail_test(is_writable(test.workpath('work2', 'sub', 'SConscript')))
-test.fail_test(is_writable(test.workpath('work2', 'aaa.in')))
-test.fail_test(is_writable(test.workpath('work2', 'ccc.in')))
-test.fail_test(is_writable(test.workpath('work2', 'sub', 'ddd.in')))
-test.fail_test(is_writable(test.workpath('work2', 'sub', 'fff.in')))
-
-
-
-
-# Test transparent SCCS checkouts of implicit dependencies.
-test.subdir('work3', ['work3', 'SCCS'])
-
-test.write(['work3', 'foo.c'], """\
-#include "foo.h"
-int
-main(int argc, char *argv[]) {
-    printf(STR);
-    printf("work3/foo.c\\n");
-}
-""")
-test.run(chdir = 'work3',
-         program = sccs,
-         arguments = "create foo.c",
-         stderr = None)
-test.unlink(['work3', 'foo.c'])
-test.unlink(['work3', ',foo.c'])
-
-test.write(['work3', 'foo.h'], """\
-#define STR     "work3/foo.h\\n"
-""")
-test.run(chdir = 'work3',
-         program = sccs,
-         arguments = "create foo.h",
-         stderr = None)
-test.unlink(['work3', 'foo.h'])
-test.unlink(['work3', ',foo.h'])
-
-test.write(['work3', 'SConstruct'], """
-env = Environment()
-env.Program('foo.c')
-""")
-
-test.run(chdir='work3', stderr = """\
-foo.c 1.1: 6 lines
-foo.h 1.1: 1 lines
-""")
-
-
-
-test.pass_test()