SF bug #453515: filecmp.dircmp case sensitivity bug
This commit is contained in:
parent
09c7b6075c
commit
eeca37e0b5
|
@ -12,7 +12,7 @@ Functions:
|
|||
import os
|
||||
import stat
|
||||
import warnings
|
||||
from itertools import ifilter, ifilterfalse
|
||||
from itertools import ifilter, ifilterfalse, imap, izip
|
||||
|
||||
__all__ = ["cmp","dircmp","cmpfiles"]
|
||||
|
||||
|
@ -135,11 +135,11 @@ class dircmp:
|
|||
self.right_list.sort()
|
||||
|
||||
def phase1(self): # Compute common names
|
||||
b = dict.fromkeys(self.right_list)
|
||||
common = dict.fromkeys(ifilter(b.has_key, self.left_list))
|
||||
self.left_only = list(ifilterfalse(common.has_key, self.left_list))
|
||||
self.right_only = list(ifilterfalse(common.has_key, self.right_list))
|
||||
self.common = common.keys()
|
||||
a = dict(izip(imap(os.path.normcase, self.left_list), self.left_list))
|
||||
b = dict(izip(imap(os.path.normcase, self.right_list), self.right_list))
|
||||
self.common = map(a.__getitem__, ifilter(b.has_key, a))
|
||||
self.left_only = map(a.__getitem__, ifilterfalse(b.has_key, a))
|
||||
self.right_only = map(b.__getitem__, ifilterfalse(a.has_key, b))
|
||||
|
||||
def phase2(self): # Distinguish files, directories, funnies
|
||||
self.common_dirs = []
|
||||
|
|
|
@ -49,7 +49,11 @@ class DirCompareTestCase(unittest.TestCase):
|
|||
data = 'Contents of file go here.\n'
|
||||
for dir in [self.dir, self.dir_same, self.dir_diff]:
|
||||
os.mkdir(dir)
|
||||
output = open(os.path.join(dir, 'file'), 'w')
|
||||
if dir is self.dir_same:
|
||||
fn = 'FiLe' # Verify case-insensitive comparison
|
||||
else:
|
||||
fn = 'file'
|
||||
output = open(os.path.join(dir, fn), 'w')
|
||||
output.write(data)
|
||||
output.close()
|
||||
|
||||
|
@ -93,7 +97,7 @@ class DirCompareTestCase(unittest.TestCase):
|
|||
def test_dircmp(self):
|
||||
# Check attributes for comparison of two identical directories
|
||||
d = filecmp.dircmp(self.dir, self.dir_same)
|
||||
self.failUnless(d.left_list == d.right_list == ['file'])
|
||||
self.assertEqual([d.left_list, d.right_list],[['file'], ['FiLe']])
|
||||
self.failUnless(d.common == ['file'])
|
||||
self.failUnless(d.left_only == d.right_only == [])
|
||||
self.failUnless(d.same_files == ['file'])
|
||||
|
|
Loading…
Reference in New Issue