Fix new .sconsign file write-logic portability to Windows NT.
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Thu, 14 Feb 2002 07:23:47 +0000 (07:23 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Thu, 14 Feb 2002 07:23:47 +0000 (07:23 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@259 fdb21ef1-2011-0410-befe-b5e4ea1792b1

SConstruct
src/engine/SCons/Sig/__init__.py
test/sconsign.py

index b47bca66d6a263128e8b414a8cf5bb2a68c41655..b8dd4be69377bd0593009d06cf23dbf3d9b84353 100644 (file)
@@ -599,7 +599,7 @@ if change:
             "rm -rf %s" % b_psv,
             "cp -rp %s %s" % (b_ps, b_psv),
             "find %s -name .consign -exec rm {} \\;" % b_psv,
-            "tar zcf $TARGET -C build %s" % psv,
+            "tar czh -f $TARGET -C build %s" % psv,
         ]
         env.Command(os.path.join('build',
                                  'dist',
index a85019aa91bc3b2eae62e771332a24fecc7b2518..cedeb94766ec6e1b39686626ff85411f5ac17a7b 100644 (file)
@@ -137,12 +137,19 @@ class SConsignFile:
             keys.sort()
             for name in keys:
                 file.write("%s: %s\n" % (name, self.entries[name]))
-            file.close
+            file.close()
             if fname != self.sconsign:
+                try:
+                    mode = os.stat(self.sconsign)[0]
+                    os.chmod(self.sconsign, 0666)
+                    os.unlink(self.sconsign)
+                except:
+                    pass
                 try:
                     os.rename(fname, self.sconsign)
                 except:
                     open(self.sconsign, 'wb').write(open(fname, 'rb').read())
+                    os.chmod(self.sconsign, mode)
             try:
                 os.unlink(temp)
             except:
index ac6bf2fee86bb7f18dcdae28c671c14963a92963..396c3994c6c32bba976ba29ea2cfd267db96fe9d 100644 (file)
@@ -59,10 +59,7 @@ sub2__sconsign = test.workpath('sub2', '.sconsign')
 test.write(sub1__sconsign, "")
 test.write(sub2__sconsign, "")
 
-# For *NIX systems, make .sconsign not writable.
-# For Win32 systems, open it to lock it.
 os.chmod(sub1__sconsign, 0444)
-f = open(sub1__sconsign, 'r')
 
 test.run(arguments = '.')
 
@@ -70,6 +67,5 @@ test.fail_test(test.read(sub1__sconsign) == "")
 test.fail_test(test.read(sub2__sconsign) == "")
 
 os.chmod(sub1__sconsign, 0666)
-f.close()
 
 test.pass_test()