[Checkins] SVN: Products.CMFCore/trunk/Products/CMFCore/ - store debug mode behavior in 'use_dir_mtime' property instead of hardcoding 'win32' in several places

Yvo Schubbe y.2011 at wcm-solutions.de
Mon Feb 7 04:31:56 EST 2011


Log message for revision 120174:
  - store debug mode behavior in 'use_dir_mtime' property instead of hardcoding 'win32' in several places
  - adjusted tests

Changed:
  U   Products.CMFCore/trunk/Products/CMFCore/DirectoryView.py
  U   Products.CMFCore/trunk/Products/CMFCore/tests/base/testcase.py
  U   Products.CMFCore/trunk/Products/CMFCore/tests/test_DirectoryView.py
  U   Products.CMFCore/trunk/Products/CMFCore/tests/test_FSSecurity.py

-=-
Modified: Products.CMFCore/trunk/Products/CMFCore/DirectoryView.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/DirectoryView.py	2011-02-07 09:30:44 UTC (rev 120173)
+++ Products.CMFCore/trunk/Products/CMFCore/DirectoryView.py	2011-02-07 09:31:56 UTC (rev 120174)
@@ -104,6 +104,7 @@
 
 class DirectoryInformation:
     data = None
+    use_dir_mtime = True
     _v_last_read = 0
     _v_last_filelist = [] # Only used on Win32
 
@@ -112,6 +113,7 @@
         self._reg_key = reg_key
         self.ignore = base_ignore + tuple(ignore)
         if platform == 'win32':
+            self.use_dir_mtime = False
             self._walker = _walker(self.ignore)
         subdirs = []
         for entry in _filtered_listdir(self._filepath, ignore=self.ignore):
@@ -160,7 +162,7 @@
         filelist = []
         try:
             mtime = os.stat(self._filepath).st_mtime
-            if platform == 'win32':
+            if not self.use_dir_mtime:
                 # some Windows directories don't change mtime
                 # when a file is added to or deleted from them :-(
                 # So keep a list of files as well, and see if that

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/base/testcase.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/base/testcase.py	2011-02-07 09:30:44 UTC (rev 120173)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/base/testcase.py	2011-02-07 09:31:56 UTC (rev 120174)
@@ -166,11 +166,12 @@
     # Base class for FSDV test, creates a fake skin
     # copy that can be edited.
 
-    def _writeFile(self, filename, stuff):
+    def _writeFile(self, filename, stuff, use_dir_mtime=False):
         # write some stuff to a file on disk
         # make sure the file's modification time has changed
         # also make sure the skin folder mod time has changed
-        dir_mtime = stat(self.skin_path_name).st_mtime
+        if use_dir_mtime:
+            dir_mtime = stat(self.skin_path_name).st_mtime
         thePath = join(self.skin_path_name, filename)
         try:
             mtime1 = stat(thePath).st_mtime
@@ -182,21 +183,19 @@
             f.write(stuff)
             f.close()
             mtime2 = stat(thePath).st_mtime
-        self._addedOrRemoved(dir_mtime)
+        if use_dir_mtime:
+            self._addedOrRemoved(dir_mtime)
 
-    def _deleteFile(self, filename):
-        dir_mtime = stat(self.skin_path_name).st_mtime
+    def _deleteFile(self, filename, use_dir_mtime=False):
+        if use_dir_mtime:
+            dir_mtime = stat(self.skin_path_name).st_mtime
         remove(join(self.skin_path_name, filename))
-        self._addedOrRemoved(dir_mtime)
+        if use_dir_mtime:
+            self._addedOrRemoved(dir_mtime)
 
     def _addedOrRemoved(self, old_mtime):
         # Called after adding/removing a file from self.skin_path_name.
 
-        if sys.platform == 'win32':
-            # Windows doesn't reliably update directory mod times, so
-            # DirectoryView has an expensive workaround.  The
-            # workaround does not rely on directory mod times.
-            return
         limit = time.time() + 60  # If it takes 60 seconds, give up.
         new_mtime = stat(self.skin_path_name).st_mtime
         while new_mtime == old_mtime:

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_DirectoryView.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_DirectoryView.py	2011-02-07 09:30:44 UTC (rev 120173)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_DirectoryView.py	2011-02-07 09:31:56 UTC (rev 120174)
@@ -233,6 +233,8 @@
 class DebugModeTests(WritableFSDVTest):
 
     def setUp( self ):
+        from Products.CMFCore.DirectoryView import _dirreg
+
         WritableFSDVTest.setUp(self)
         self.saved_cfg_debug_mode = getConfiguration().debug_mode
         getConfiguration().debug_mode = True
@@ -252,6 +254,10 @@
         # add a new folder
         mkdir(self.test3path)
 
+        info = _dirreg.getDirectoryInfo(self.ob.fake_skin._dirpath)
+        info.reload()
+        self.use_dir_mtime = info.use_dir_mtime
+
     def tearDown(self):
         getConfiguration().debug_mode = self.saved_cfg_debug_mode
         WritableFSDVTest.tearDown(self)
@@ -284,13 +290,15 @@
         self.failIf(hasattr(self.ob.fake_skin,'test2'))
 
         # add method back to the fake skin folder
-        self._writeFile(self.test2path, "return 'test2.2'")
+        self._writeFile(self.test2path, "return 'test2.2'",
+                        self.use_dir_mtime)
 
         # check
         self.assertEqual(self.ob.fake_skin.test2(),'test2.2')
 
         # edit method
-        self._writeFile(self.test2path, "return 'test2.3'")
+        self._writeFile(self.test2path, "return 'test2.3'",
+                        self.use_dir_mtime)
 
         # check
         self.assertEqual(self.ob.fake_skin.test2(),'test2.3')

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_FSSecurity.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_FSSecurity.py	2011-02-07 09:30:44 UTC (rev 120173)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_FSSecurity.py	2011-02-07 09:31:56 UTC (rev 120174)
@@ -118,8 +118,12 @@
 class DebugModeTests(WritableFSDVTest, MetadataChecker):
 
     def setUp(self):
+        from Products.CMFCore.DirectoryView import _dirreg
+
         WritableFSDVTest.setUp(self)
         self._registerDirectory(self)
+        info = _dirreg.getDirectoryInfo(self.ob.fake_skin._dirpath)
+        self.use_dir_mtime = info.use_dir_mtime
         self.saved_cfg_debug_mode = getConfiguration().debug_mode
         getConfiguration().debug_mode = True
 
@@ -133,7 +137,8 @@
         self._checkSettings(self.ob.fake_skin.test5, 'View', 1, [])
         # add
         self._writeFile('test5.py.metadata',
-                        '[security]\nView = 1:Manager')
+                        '[security]\nView = 1:Manager',
+                        self.use_dir_mtime)
         # test
         self._checkSettings(self.ob.fake_skin.test5, 'View', 1, ['Manager'])
 
@@ -143,7 +148,7 @@
         self._checkSettings(self.ob.fake_skin.test4,
                             'View', 1, ['Manager', 'Owner'])
         # delete
-        self._deleteFile('test4.py.metadata')
+        self._deleteFile('test4.py.metadata', self.use_dir_mtime)
         # test
         self._checkSettings(self.ob.fake_skin.test4, 'View', 1, [])
 
@@ -154,7 +159,8 @@
                             'View', 1, ['Manager', 'Owner'])
         # edit
         self._writeFile('test4.py.metadata',
-                        '[security]\nView = 1:Manager')
+                        '[security]\nView = 1:Manager',
+                        self.use_dir_mtime)
         # test
         self._checkSettings(self.ob.fake_skin.test4, 'View', 1, ['Manager'])
 
@@ -164,16 +170,18 @@
         self._checkSettings(self.ob.fake_skin.test4,
                             'View', 1, ['Manager', 'Owner'])
         # delete
-        self._deleteFile('test4.py.metadata')
+        self._deleteFile('test4.py.metadata', self.use_dir_mtime)
         self._checkSettings(self.ob.fake_skin.test4, 'View', 1, [])
         # add back
         self._writeFile('test4.py.metadata',
-                        '[security]\nView = 0:Manager,Anonymous')
+                        '[security]\nView = 0:Manager,Anonymous',
+                        self.use_dir_mtime)
         self._checkSettings(self.ob.fake_skin.test4,
                             'View', 0, ['Manager', 'Anonymous'])
         # edit
         self._writeFile('test4.py.metadata',
-                        '[security]\nView = 1:Manager')
+                        '[security]\nView = 1:Manager',
+                        self.use_dir_mtime)
         # test
         self._checkSettings(self.ob.fake_skin.test4, 'View', 1, ['Manager'])
 



More information about the checkins mailing list