[cedar-backup-svn] SF.net SVN: cedar-backup: [908] cedar-backup2/trunk
Brought to you by:
pronovic
|
From: <pro...@us...> - 2008-04-13 21:44:22
|
Revision: 908
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=908&view=rev
Author: pronovic
Date: 2008-04-13 14:44:16 -0700 (Sun, 13 Apr 2008)
Log Message:
-----------
Implemented dereference option on addDirContents
Modified Paths:
--------------
cedar-backup2/trunk/CedarBackup2/filesystem.py
cedar-backup2/trunk/Changelog
cedar-backup2/trunk/test/filesystemtests.py
Modified: cedar-backup2/trunk/CedarBackup2/filesystem.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/filesystem.py 2008-04-13 20:16:45 UTC (rev 907)
+++ cedar-backup2/trunk/CedarBackup2/filesystem.py 2008-04-13 21:44:16 UTC (rev 908)
@@ -60,6 +60,7 @@
from CedarBackup2.knapsack import firstFit, bestFit, worstFit, alternateFit
from CedarBackup2.util import AbsolutePathList, ObjectTypeList, UnorderedList, RegexList
from CedarBackup2.util import removeKeys, displayBytes, calculateFileAge, encodePath
+from CedarBackup2.util import dereferenceLink
########################################################################
@@ -358,7 +359,7 @@
logger.debug("Added directory to list: [%s]" % path)
return 1
- def addDirContents(self, path, recursive=True, addSelf=True, linkDepth=0):
+ def addDirContents(self, path, recursive=True, addSelf=True, linkDepth=0, dereference=False):
"""
Adds the contents of a directory to the list.
@@ -368,22 +369,26 @@
place. If you only want the directory and its immediate contents to be
added, then pass in C{recursive=False}.
+ If the passed-in directory happens to be a soft link, it will be
+ recursed. However, by default, other directory links within the
+ passed-in directory are not recursed. The C{linkDepth} parameter
+ controls this behavior. This value is the maximum depth of the tree at
+ which directory links should be followed. So, a depth of 0 does not
+ follow any directory links, a depth of 1 follows only directory links
+ within the passed-in directory, a depth of 2 follows the directory links
+ at the next level down, etc.
+
+ The C{dereference} flag also controls link-related behavior. If the
+ C{linkDepth} is greater than zero and C{deference} is true, then any file
+ or directory link will be deferenced before being added to the list. So,
+ the list will contain the path of file or directory that the link points
+ at, rather than the path of the link itself.
+
@note: If a directory's absolute path matches an exclude pattern or path,
or if the directory contains the configured ignore file, then the
directory and all of its contents will be recursively excluded from the
list.
- @note: If the passed-in directory happens to be a soft link, it will be
- recursed. However, the linkDepth parameter controls whether any soft
- links I{within} the directory will be recursed. The link depth is
- maximum depth of the tree at which soft links should be followed. So, a
- depth of 0 does not follow any soft links, a depth of 1 follows only
- links within the passed-in directory, a depth of 2 follows the links at
- the next level down, etc.
-
- @note: Any invalid soft links (i.e. soft links that point to
- non-existent items) will be silently ignored.
-
@note: The L{excludeDirs} flag only controls whether any given directory
path itself is added to the list once it has been discovered. It does
I{not} modify any behavior related to directory recursion.
@@ -400,6 +405,9 @@
@param linkDepth: Maximum depth of the tree at which soft links should be followed
@type linkDepth: Integer value, where zero means not to follow any soft links
+ @param dereference: Whether soft links should be dereferenced
+ @type dereference: Boolean value
+
@return: Number of items recursively added to the list
@raise ValueError: If path is not a directory or does not exist.
@@ -407,9 +415,9 @@
"""
path = encodePath(path)
path = normalizeDir(path)
- return self._addDirContentsInternal(path, addSelf, recursive, linkDepth)
+ return self._addDirContentsInternal(path, addSelf, recursive, linkDepth, dereference)
- def _addDirContentsInternal(self, path, includePath=True, recursive=True, linkDepth=0):
+ def _addDirContentsInternal(self, path, includePath=True, recursive=True, linkDepth=0, dereference=False):
"""
Internal implementation of C{addDirContents}.
@@ -421,27 +429,34 @@
interface, C{addDirContents} ends up being wholly implemented in terms
of this method.
- The linkDepth parameter controls whether soft links are followed when we
- are adding the contents recursively. Any recursive calls reduce the
- value by one. If the value zero or less, then soft links will just be
- added as directories, but will not be followed. This means that links
- are followed to a I{constant depth} starting from the top-most directory.
+ The C{linkDepth} parameter controls whether directory links are followed
+ when we are adding the contents recursively. Any recursive calls reduce
+ the value by one. If the value zero or less, then directory links will
+ just be added as directories, but will not be followed. This means that
+ links are followed to a I{constant depth} starting from the top-most
+ directory.
- There is one difference between soft links and directories: soft links
- that are added recursively are not placed into the list explicitly. This
- is because if we do add the links recursively, the resulting tar file
- gets a little confused (it has a link and a directory with the same
- name).
+ There is one difference between directory links and directories:
+ directory links that are added recursively (and are not deferenced) are
+ not placed into the list explicitly. This is because if we do add the
+ links recursively, the resulting tar file gets a little confused: it has
+ a link and a directory with the same name, which some tar implementations
+ cannot successfully extract.
@param path: Directory path whose contents should be added to the list.
@param includePath: Indicates whether to include the path as well as contents.
@param recursive: Indicates whether directory contents should be added recursively.
@param linkDepth: Depth of soft links that should be followed
+ @param dereference: Whether soft links should be dereferenced when C{linkDepth > 0}
@return: Number of items recursively added to the list
@raise ValueError: If path is not a directory or does not exist.
"""
+ if linkDepth < 1:
+ dereference = False # never dereference if we're not following links
+ if dereference:
+ path = dereferenceLink(path, absolute=True)
added = 0
if not os.path.exists(path) or not os.path.isdir(path):
logger.debug("Path [%s] is not a directory or does not exist on disk." % path)
@@ -464,19 +479,21 @@
added += self.addDir(path) # could actually be excluded by addDir, yet
for entry in os.listdir(path):
entrypath = os.path.join(path, entry)
+ if dereference:
+ entrypath = dereferenceLink(entrypath)
if os.path.isfile(entrypath):
added += self.addFile(entrypath)
elif os.path.isdir(entrypath):
if os.path.islink(entrypath):
if recursive and linkDepth > 0:
newDepth = linkDepth - 1;
- added += self._addDirContentsInternal(entrypath, includePath=False, linkDepth=newDepth)
+ added += self._addDirContentsInternal(entrypath, includePath=False, linkDepth=newDepth, dereference=dereference)
else:
added += self.addDir(entrypath)
else:
if recursive:
newDepth = linkDepth - 1;
- added += self._addDirContentsInternal(entrypath, linkDepth=newDepth)
+ added += self._addDirContentsInternal(entrypath, linkDepth=newDepth, dereference=dereference)
else:
added += self.addDir(entrypath)
return added
@@ -1221,7 +1238,7 @@
# Add methods
##############
- def addDirContents(self, path, recursive=True, addSelf=True, linkDepth=0):
+ def addDirContents(self, path, recursive=True, addSelf=True, linkDepth=0, dereference=False):
"""
Adds the contents of a directory to the list.
@@ -1231,22 +1248,26 @@
place. If you only want the directory and its contents to be added, then
pass in C{recursive=False}.
+ If the passed-in directory happens to be a soft link, it will be
+ recursed. However, by default, other directory links within the
+ passed-in directory are not recursed. The C{linkDepth} parameter
+ controls this behavior. This value is the maximum depth of the tree at
+ which directory links should be followed. So, a depth of 0 does not
+ follow any directory links, a depth of 1 follows only directory links
+ within the passed-in directory, a depth of 2 follows the directory links
+ at the next level down, etc.
+
+ The C{dereference} flag also controls link-related behavior. If the
+ C{linkDepth} is greater than zero and C{deference} is true, then any file
+ or directory link will be deferenced before being added to the list. So,
+ the list will contain the path of file or directory that the link points
+ at, rather than the path of the link itself.
+
@note: If a directory's absolute path matches an exclude pattern or path,
or if the directory contains the configured ignore file, then the
directory and all of its contents will be recursively excluded from the
list.
- @note: If the passed-in directory happens to be a soft link, it will be
- recursed. However, the linkDepth parameter controls whether any soft
- links I{within} the directory will be recursed. The link depth is
- maximum depth of the tree at which soft links should be followed. So, a
- depth of 0 does not follow any soft links, a depth of 1 follows only
- links within the passed-in directory, a depth of 2 follows the links at
- the next level down, etc.
-
- @note: Any invalid soft links (i.e. soft links that point to
- non-existent items) will be silently ignored.
-
@note: The L{excludeDirs} flag only controls whether any given soft link
path itself is added to the list once it has been discovered. It does
I{not} modify any behavior related to directory recursion.
@@ -1266,6 +1287,9 @@
@param linkDepth: Depth of soft links that should be followed
@type linkDepth: Integer value, where zero means not to follow any soft links
+ @param dereference: Whether soft links should be dereferenced
+ @type dereference: Boolean value
+
@return: Number of items recursively added to the list
@raise ValueError: If path is not a directory or does not exist.
@@ -1273,7 +1297,7 @@
"""
path = encodePath(path)
path = normalizeDir(path)
- return super(PurgeItemList, self)._addDirContentsInternal(path, False, recursive, linkDepth)
+ return super(PurgeItemList, self)._addDirContentsInternal(path, False, recursive, linkDepth, dereference)
##################
Modified: cedar-backup2/trunk/Changelog
===================================================================
--- cedar-backup2/trunk/Changelog 2008-04-13 20:16:45 UTC (rev 907)
+++ cedar-backup2/trunk/Changelog 2008-04-13 21:44:16 UTC (rev 908)
@@ -8,6 +8,7 @@
- Can't add links directly, they're implicitly added later by tar
- Changed FilesystemList to use includePath=false for recursive links
* Added util.dereferenceLink()
+ * Implemented dereference option on addDirContents()
Version 2.17.0 20 Mar 2008
Modified: cedar-backup2/trunk/test/filesystemtests.py
===================================================================
--- cedar-backup2/trunk/test/filesystemtests.py 2008-04-13 20:16:45 UTC (rev 907)
+++ cedar-backup2/trunk/test/filesystemtests.py 2008-04-13 21:44:16 UTC (rev 908)
@@ -131,7 +131,7 @@
DATA_DIRS = [ "./data", "./test/data" ]
RESOURCES = [ "tree1.tar.gz", "tree2.tar.gz", "tree3.tar.gz", "tree4.tar.gz", "tree5.tar.gz",
"tree6.tar.gz", "tree7.tar.gz", "tree8.tar.gz", "tree9.tar.gz", "tree10.tar.gz",
- "tree11.tar.gz", "tree12.tar.gz", "tree13.tar.gz", ]
+ "tree11.tar.gz", "tree12.tar.gz", "tree13.tar.gz", "tree22.tar.gz", ]
INVALID_FILE = "bogus" # This file name should never exist
NOMATCH_PATH = "/something" # This path should never match something we put in a file list
@@ -5431,7 +5431,263 @@
self.failUnless(self.buildPath([ "tree6", "file002", ]) in fsList)
self.failUnless(self.buildPath([ "tree6", "link001", ]) in fsList)
+ def testAddDirContents_093(self):
+ """
+ Attempt to add a directory with linkDepth=0, dereference=False.
+ """
+ self.extractTar("tree22")
+ path = self.buildPath(["tree22", "dir003", ])
+ fsList = FilesystemList()
+ count = fsList.addDirContents(path, linkDepth=0, dereference=False)
+ if not platformSupportsLinks():
+ pass
+ else:
+ self.failUnlessEqual(12, count)
+ self.failUnlessEqual(12, len(fsList))
+ self.failUnless(self.buildPath(["tree22", "dir003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file002", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link002", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link004", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link002", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", ]) in fsList)
+ def testAddDirContents_094(self):
+ """
+ Attempt to add a directory with linkDepth=1, dereference=False.
+ """
+ self.extractTar("tree22")
+ path = self.buildPath(["tree22", "dir003", ])
+ fsList = FilesystemList()
+ count = fsList.addDirContents(path, linkDepth=1, dereference=False)
+ if not platformSupportsLinks():
+ pass
+ else:
+ self.failUnlessEqual(16, count)
+ self.failUnlessEqual(16, len(fsList))
+ self.failUnless(self.buildPath(["tree22", "dir003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file002", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link002", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link004", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link002", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "file001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "file002", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "file003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "link001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "link002", ]) in fsList)
+
+ def testAddDirContents_095(self):
+ """
+ Attempt to add a directory with linkDepth=2, dereference=False.
+ """
+ self.extractTar("tree22")
+ path = self.buildPath(["tree22", "dir003", ])
+ fsList = FilesystemList()
+ count = fsList.addDirContents(path, linkDepth=2, dereference=False)
+ if not platformSupportsLinks():
+ pass
+ else:
+ self.failUnlessEqual(20, count)
+ self.failUnlessEqual(20, len(fsList))
+ self.failUnless(self.buildPath(["tree22", "dir003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file002", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link002", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link004", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link003", "file001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link003", "file002", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link003", "file003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link001",]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link002",]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "file001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "file002", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "file003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "link001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "link002", "file001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "link002", "link001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "link002", "link002", ]) in fsList)
+
+ def testAddDirContents_096(self):
+ """
+ Attempt to add a directory with linkDepth=3, dereference=False.
+ """
+ self.extractTar("tree22")
+ path = self.buildPath(["tree22", "dir003", ])
+ fsList = FilesystemList()
+ count = fsList.addDirContents(path, linkDepth=3, dereference=False)
+ if not platformSupportsLinks():
+ pass
+ else:
+ self.failUnlessEqual(20, count)
+ self.failUnlessEqual(20, len(fsList))
+ self.failUnless(self.buildPath(["tree22", "dir003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file002", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link002", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link004", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link003", "file001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link003", "file002", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link003", "file003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link001",]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link002",]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "file001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "file002", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "file003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "link001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "link002", "file001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "link002", "link001", "file001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "link002", "link002", ]) in fsList)
+
+ def testAddDirContents_097(self):
+ """
+ Attempt to add a directory with linkDepth=0, dereference=True.
+ """
+ self.extractTar("tree22")
+ path = self.buildPath(["tree22", "dir003", ])
+ fsList = FilesystemList()
+ count = fsList.addDirContents(path, linkDepth=0, dereference=True)
+ if not platformSupportsLinks():
+ pass
+ else:
+ self.failUnlessEqual(12, count)
+ self.failUnlessEqual(12, len(fsList))
+ self.failUnless(self.buildPath(["tree22", "dir003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file002", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link002", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link004", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link002", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", ]) in fsList)
+
+ def testAddDirContents_098(self):
+ """
+ Attempt to add a directory with linkDepth=1, dereference=True.
+ """
+ self.extractTar("tree22")
+ path = self.buildPath(["tree22", "dir003", ])
+ fsList = FilesystemList()
+ count = fsList.addDirContents(path, linkDepth=1, dereference=True)
+ if not platformSupportsLinks():
+ pass
+ else:
+ self.failUnlessEqual(17, count)
+ self.failUnlessEqual(17, len(fsList))
+ self.failUnless(self.buildPath(["tree22", "dir003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file002", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link002", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link004", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir001", "file002", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir001", "file003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir005" ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir005", "file001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir005", "file002", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir005", "file003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir005", "link001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir005", "link002", ]) in fsList)
+
+ def testAddDirContents_099(self):
+ """
+ Attempt to add a directory with linkDepth=2, dereference=True.
+ """
+ self.extractTar("tree22")
+ path = self.buildPath(["tree22", "dir003", ])
+ fsList = FilesystemList()
+ count = fsList.addDirContents(path, linkDepth=2, dereference=True)
+ if not platformSupportsLinks():
+ pass
+ else:
+ self.failUnlessEqual(23, count)
+ self.failUnlessEqual(23, len(fsList))
+ self.failUnless(self.buildPath(["tree22", "dir003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file002", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir002", "file004", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir002", "file005", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir001", "file001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir004", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir004", "file001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir004", "file002", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir004", "file003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir001", "file002",]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir001", "file003",]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir005", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir005", "file001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir005", "file002", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir005", "file003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir002", "file009", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir006", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir006", "file001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir006", "link001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir006", "link002", ]) in fsList)
+
+ def testAddDirContents_100(self):
+ """
+ Attempt to add a directory with linkDepth=3, dereference=True.
+ """
+ self.extractTar("tree22")
+ path = self.buildPath(["tree22", "dir003", ])
+ fsList = FilesystemList()
+ count = fsList.addDirContents(path, linkDepth=3, dereference=True)
+ if not platformSupportsLinks():
+ pass
+ else:
+ self.failUnlessEqual(24, count)
+ self.failUnlessEqual(24, len(fsList))
+ self.failUnless(self.buildPath(["tree22", "dir003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file002", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir002", "file004", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir002", "file005", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir001", "file001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir004", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir004", "file001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir004", "file002", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir004", "file003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir001", "file002",]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir001", "file003",]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir005", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir005", "file001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir005", "file002", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir005", "file003", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir002", "file009", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir006", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir006", "file001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir007", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir007", "file001", ]) in fsList)
+ self.failUnless(self.buildPath(["tree22", "dir008", "file001", ]) in fsList)
+
+
#####################
# Test removeFiles()
#####################
@@ -22505,7 +22761,255 @@
self.failUnless(self.buildPath([ "tree6", "file002", ]) in purgeList)
self.failUnless(self.buildPath([ "tree6", "link001", ]) in purgeList)
+ def testAddDirContents_092(self):
+ """
+ Attempt to add a directory with linkDepth=0, dereference=False.
+ """
+ self.extractTar("tree22")
+ path = self.buildPath(["tree22", "dir003", ])
+ purgeList = PurgeItemList()
+ count = purgeList.addDirContents(path, linkDepth=0, dereference=False)
+ if not platformSupportsLinks():
+ pass
+ else:
+ self.failUnlessEqual(11, count)
+ self.failUnlessEqual(11, len(purgeList))
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file002", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file003", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link002", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link003", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link004", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link002", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", ]) in purgeList)
+ def testAddDirContents_093(self):
+ """
+ Attempt to add a directory with linkDepth=1, dereference=False.
+ """
+ self.extractTar("tree22")
+ path = self.buildPath(["tree22", "dir003", ])
+ purgeList = PurgeItemList()
+ count = purgeList.addDirContents(path, linkDepth=1, dereference=False)
+ if not platformSupportsLinks():
+ pass
+ else:
+ self.failUnlessEqual(15, count)
+ self.failUnlessEqual(15, len(purgeList))
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file002", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file003", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link002", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link003", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link004", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link002", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "file001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "file002", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "file003", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "link001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "link002", ]) in purgeList)
+
+ def testAddDirContents_094(self):
+ """
+ Attempt to add a directory with linkDepth=2, dereference=False.
+ """
+ self.extractTar("tree22")
+ path = self.buildPath(["tree22", "dir003", ])
+ purgeList = PurgeItemList()
+ count = purgeList.addDirContents(path, linkDepth=2, dereference=False)
+ if not platformSupportsLinks():
+ pass
+ else:
+ self.failUnlessEqual(19, count)
+ self.failUnlessEqual(19, len(purgeList))
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file002", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file003", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link002", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link004", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link003", "file001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link003", "file002", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link003", "file003", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link001",]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link002",]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "file001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "file002", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "file003", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "link001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "link002", "file001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "link002", "link001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "link002", "link002", ]) in purgeList)
+
+ def testAddDirContents_095(self):
+ """
+ Attempt to add a directory with linkDepth=3, dereference=False.
+ """
+ self.extractTar("tree22")
+ path = self.buildPath(["tree22", "dir003", ])
+ purgeList = PurgeItemList()
+ count = purgeList.addDirContents(path, linkDepth=3, dereference=False)
+ if not platformSupportsLinks():
+ pass
+ else:
+ self.failUnlessEqual(19, count)
+ self.failUnlessEqual(19, len(purgeList))
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file002", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file003", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link002", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link004", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link003", "file001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link003", "file002", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link003", "file003", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link001",]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link002",]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "file001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "file002", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "file003", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "link001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "link002", "file001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "link002", "link001", "file001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", "link002", "link002", ]) in purgeList)
+
+ def testAddDirContents_096(self):
+ """
+ Attempt to add a directory with linkDepth=0, dereference=True.
+ """
+ self.extractTar("tree22")
+ path = self.buildPath(["tree22", "dir003", ])
+ purgeList = PurgeItemList()
+ count = purgeList.addDirContents(path, linkDepth=0, dereference=True)
+ if not platformSupportsLinks():
+ pass
+ else:
+ self.failUnlessEqual(11, count)
+ self.failUnlessEqual(11, len(purgeList))
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file002", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file003", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link002", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link003", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link004", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link002", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "link003", ]) in purgeList)
+
+ def testAddDirContents_097(self):
+ """
+ Attempt to add a directory with linkDepth=1, dereference=True.
+ """
+ self.extractTar("tree22")
+ path = self.buildPath(["tree22", "dir003", ])
+ purgeList = PurgeItemList()
+ count = purgeList.addDirContents(path, linkDepth=1, dereference=True)
+ if not platformSupportsLinks():
+ pass
+ else:
+ self.failUnlessEqual(16, count)
+ self.failUnlessEqual(16, len(purgeList))
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file002", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file003", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link002", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link003", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "link004", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir001", "file002", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir001", "file003", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir005" ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir005", "file001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir005", "file002", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir005", "file003", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir005", "link001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir005", "link002", ]) in purgeList)
+
+ def testAddDirContents_098(self):
+ """
+ Attempt to add a directory with linkDepth=2, dereference=True.
+ """
+ self.extractTar("tree22")
+ path = self.buildPath(["tree22", "dir003", ])
+ purgeList = PurgeItemList()
+ count = purgeList.addDirContents(path, linkDepth=2, dereference=True)
+ if not platformSupportsLinks():
+ pass
+ else:
+ self.failUnlessEqual(22, count)
+ self.failUnlessEqual(22, len(purgeList))
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file002", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file003", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir002", "file004", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir002", "file005", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir001", "file001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir004", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir004", "file001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir004", "file002", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir004", "file003", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir001", "file002",]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir001", "file003",]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir005", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir005", "file001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir005", "file002", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir005", "file003", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir002", "file009", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir006", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir006", "file001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir006", "link001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir006", "link002", ]) in purgeList)
+
+ def testAddDirContents_099(self):
+ """
+ Attempt to add a directory with linkDepth=3, dereference=True.
+ """
+ self.extractTar("tree22")
+ path = self.buildPath(["tree22", "dir003", ])
+ purgeList = PurgeItemList()
+ count = purgeList.addDirContents(path, linkDepth=3, dereference=True)
+ if not platformSupportsLinks():
+ pass
+ else:
+ self.failUnlessEqual(23, count)
+ self.failUnlessEqual(23, len(purgeList))
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file002", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir003", "dir001", "file003", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir002", "file004", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir002", "file005", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir001", "file001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir004", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir004", "file001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir004", "file002", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir004", "file003", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir001", "file002",]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir001", "file003",]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir005", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir005", "file001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir005", "file002", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir005", "file003", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir002", "file009", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir006", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir006", "file001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir007", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir007", "file001", ]) in purgeList)
+ self.failUnless(self.buildPath(["tree22", "dir008", "file001", ]) in purgeList)
+
+
####################
# Test removeAged()
####################
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|