From 0242b4c405f39eec84c2dc8620f07e400be1e064 Mon Sep 17 00:00:00 2001
From: Jim Fulton <jim@zope.com>
Date: Mon, 27 Oct 2008 22:34:04 +0000
Subject: [PATCH] fixed some windows test failures

---
 src/ZODB/blob.py                 |  5 ++---
 src/ZODB/scripts/migrateblobs.py |  7 +++++++
 src/ZODB/tests/blob_layout.txt   | 22 +++++++++++++---------
 src/ZODB/tests/testblob.py       |  5 +++--
 4 files changed, 25 insertions(+), 14 deletions(-)

diff --git a/src/ZODB/blob.py b/src/ZODB/blob.py
index f51e7b24..8d0e1fb6 100644
--- a/src/ZODB/blob.py
+++ b/src/ZODB/blob.py
@@ -329,9 +329,8 @@ class FilesystemHelper:
                 os.path.join(self.base_dir, LAYOUT_MARKER), 'wb')
             layout_marker.write(self.layout_name)
         else:
-            layout_marker = open(
-                os.path.join(self.base_dir, LAYOUT_MARKER), 'rb')
-            layout = layout_marker.read().strip()
+            layout = open(os.path.join(self.base_dir, LAYOUT_MARKER), 'rb'
+                          ).read().strip()
             if layout != self.layout_name:
                 raise ValueError(
                     "Directory layout `%s` selected for blob directory %s, but "
diff --git a/src/ZODB/scripts/migrateblobs.py b/src/ZODB/scripts/migrateblobs.py
index 19eafdda..2c9afb15 100644
--- a/src/ZODB/scripts/migrateblobs.py
+++ b/src/ZODB/scripts/migrateblobs.py
@@ -17,6 +17,7 @@
 import logging
 import optparse
 import os
+import shutil
 
 from ZODB.blob import FilesystemHelper, rename_or_copy_blob
 from ZODB.utils import cp, oid_repr
@@ -28,6 +29,12 @@ def link_or_copy(f1, f2):
     except OSError:
         shutil.copy(f1, f2)
 
+# Check if we actually have link
+try:
+    os.link
+except AttributeError:
+    link_or_copy = shutil.copy
+    
 
 def migrate(source, dest, layout):
     source_fsh = FilesystemHelper(source)
diff --git a/src/ZODB/tests/blob_layout.txt b/src/ZODB/tests/blob_layout.txt
index cc5d6488..6051897f 100644
--- a/src/ZODB/tests/blob_layout.txt
+++ b/src/ZODB/tests/blob_layout.txt
@@ -29,9 +29,12 @@ entries per directory level:
 >>> bushy.oid_to_path('\x00\x00\x00\x00\x00\x00\x00\x01')
 '0x00/0x00/0x00/0x00/0x00/0x00/0x00/0x01'
 
->>> bushy.path_to_oid('0x01/0x00/0x00/0x00/0x00/0x00/0x00/0x00')
+>>> import os
+>>> bushy.path_to_oid(os.path.join(
+...     '0x01', '0x00', '0x00', '0x00', '0x00', '0x00', '0x00', '0x00'))
 '\x01\x00\x00\x00\x00\x00\x00\x00'
->>> bushy.path_to_oid('0xff/0x00/0x00/0x00/0x00/0x00/0x00/0x00')
+>>> bushy.path_to_oid(os.path.join(
+...     '0xff', '0x00', '0x00', '0x00', '0x00', '0x00', '0x00', '0x00'))
 '\xff\x00\x00\x00\x00\x00\x00\x00'
 
 Paths that do not represent an OID will cause a ValueError:
@@ -142,8 +145,8 @@ directory that has a different marker than the chosen strategy:
 'lawn'
 >>> fsh.create() # doctest: +ELLIPSIS
 Traceback (most recent call last):
-ValueError: Directory layout `lawn` selected for blob directory /.../blobs/, but marker found for layout `bushy`
->>> shutil.rmtree(blobs)
+ValueError: Directory layout `lawn` selected for blob directory .../blobs/, but marker found for layout `bushy`
+>>> rmtree(blobs)
 
 This function interacts with the automatic detection in the way, that an
 unmarked directory will be marked the first time when it is auto-guessed and
@@ -163,10 +166,11 @@ the marker will be used in the future:
 'lawn'
 >>> blob_storage = BlobStorage(blobs, base_storage, layout='bushy') # doctest: +ELLIPSIS
 Traceback (most recent call last):
-ValueError: Directory layout `bushy` selected for blob directory /.../blobs/, but marker found for layout `lawn`
+ValueError: Directory layout `bushy` selected for blob directory .../blobs/, but marker found for layout `lawn`
 
 
->>> shutil.rmtree(d)
+>>> base_storage.close()
+>>> rmtree(d)
 
 
 Migrating between directory layouts
@@ -206,7 +210,7 @@ that shall be used for the new directory:
 
 >>> bushy = os.path.join(d, 'bushy')
 >>> migrate(old, bushy, 'bushy')  # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
-Migrating blob data from `/.../old` (lawn) to `/.../bushy` (bushy)
+Migrating blob data from `.../old` (lawn) to `.../bushy` (bushy)
     OID: 0x0a - 2 files
     OID: 0x1b7a - 2 files
     OID: 0x1b7f - 2 files
@@ -248,7 +252,7 @@ We can also migrate the bushy layout back to the lawn layout:
 
 >>> lawn = os.path.join(d, 'lawn')
 >>> migrate(bushy, lawn, 'lawn')
-Migrating blob data from `/.../bushy` (bushy) to `/.../lawn` (lawn)
+Migrating blob data from `.../bushy` (bushy) to `.../lawn` (lawn)
    OID: 0x0a - 2 files
    OID: 0x1b7a - 2 files
    OID: 0x1b7f - 2 files
@@ -278,4 +282,4 @@ bushy/0x00/0x00/0x00/0x00/0x00/0x00/0x00/0x0a/foo4 --> lawn/0x0a/foo4
 bushy/0x00/0x00/0x00/0x00/0x00/0x00/0x1b/0x7a/foo5 --> lawn/0x1b7a/foo5
 bushy/0x00/0x00/0x00/0x00/0x00/0x00/0x1b/0x7a/foo6 --> lawn/0x1b7a/foo6
 
->>> shutil.rmtree(d)
+>>> rmtree(d)
diff --git a/src/ZODB/tests/testblob.py b/src/ZODB/tests/testblob.py
index 22cf61cc..e63e8941 100644
--- a/src/ZODB/tests/testblob.py
+++ b/src/ZODB/tests/testblob.py
@@ -656,10 +656,11 @@ def test_suite():
     suite.addTest(doctest.DocFileSuite(
         "blob_layout.txt",
         optionflags=doctest.ELLIPSIS|doctest.NORMALIZE_WHITESPACE,
-        setUp=zope.testing.setupstack.setUpDirectory,
+        setUp=setUp,
         tearDown=zope.testing.setupstack.tearDown,
         checker = zope.testing.renormalizing.RENormalizing([
-            (re.compile(r'[%(sep)s]' % dict(sep=os.path.sep)), '/'),
+            (re.compile(r'\%(sep)s\%(sep)s' % dict(sep=os.path.sep)), '/'),
+            (re.compile(r'\%(sep)s' % dict(sep=os.path.sep)), '/'),
             (re.compile(r'\S+/((old|bushy|lawn)/\S+/foo[23456]?)'), r'\1'),
             ]),
         ))
-- 
GitLab