[mdoc-update] Filename comparison should be OrdinalIgnoreCase.
commit084803d789f6d69e198d9c82264a92bad1b6d77b
authorJonathan Pryor <jonpryor@vt.edu>
Tue, 22 Nov 2011 15:58:49 +0000 (22 10:58 -0500)
committerJonathan Pryor <jonpryor@vt.edu>
Tue, 22 Nov 2011 17:25:58 +0000 (22 12:25 -0500)
tree026ee6000de108bf903485dc63d49630532e040d
parentf3fd92db8d6f8f3a2e403522472de355c3f7f1d3
[mdoc-update] Filename comparison should be OrdinalIgnoreCase.

Consider the intermix of a case-sensitive language (C#) and a
case-insensitive filesystem (OSX, Windows):

namespace A {
public class Foo {}
}
namespace a {
public class Bar {}
}

On a case-sensitive filesystem, this will generate the structure:

en/A/Foo.xml
en/a/Bar.xml

On a case-insensitive filesystem, we instead get:

en/A/Foo.xml
en/A/Bar.xml

The problem with this is that CleanupFiles() uses filenames to index
into the `goodfiles` HashSet<string>`, and the filenames will contain
e.g. "en/A/Bar.xml" for a.Bar, which won't exist in the HashSet, so it
thus thinks the type doesn't exist and removes the file.

This is obviously bad, but the fix is trivial: `goodfiles` should use
an OrdinalIgnoreCase string comparison, as this is what the filesystem
will be using on OS X and Windows.
mcs/tools/mdoc/Mono.Documentation/monodocer.cs