SF bug #453515: filecmp.dircmp case sensitivity bug

This commit is contained in:
Raymond Hettinger 2003-09-02 05:42:02 +00:00
parent 09c7b6075c
commit eeca37e0b5
2 changed files with 12 additions and 8 deletions

View file

@ -12,7 +12,7 @@
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 @@ def phase0(self): # Compare everything except common subdirectories
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 = []

View file

@ -49,7 +49,11 @@ def setUp(self):
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 @@ def test_cmpfiles(self):
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'])