QDoc: Check if index file was already inserted in list.
authorCasper van Donderen <casper.vandonderen@nokia.com>
Tue, 12 Jun 2012 15:22:20 +0000 (17:22 +0200)
committerQt by Nokia <qt-info@nokia.com>
Thu, 14 Jun 2012 01:03:38 +0000 (03:03 +0200)
Previously it was possible to insert exactly the same index file in the
map twice by specifying an -indexdir which is the same as -installdir.
Probably you can also have two indexes with the same name that happen to
have the same creation time, but changes of that happening are slim to
none.

Change-Id: I6be5fb9d04839026830b9948887b282489b379c0
Reviewed-by: Simon Hausmann <simon.hausmann@nokia.com>
src/tools/qdoc/main.cpp

index 9dd5384..ec6a072 100644 (file)
@@ -94,6 +94,11 @@ static const struct {
     { 0, 0 }
 };
 
+bool creationTimeBefore(const QFileInfo &fi1, const QFileInfo &fi2)
+{
+    return fi1.lastModified() < fi2.lastModified();
+}
+
 static bool highlighting = false;
 static bool showInternal = false;
 static bool obsoleteLinks = false;
@@ -280,30 +285,32 @@ static void processQdocconfFile(const QString &fileName)
             }
             for (int i = 0; i < dependModules.size(); i++) {
                 QString indexToAdd;
-                QMultiMap<uint, QFileInfo> foundIndices;
+                QList<QFileInfo> foundIndices;
                 for (int j = 0; j < indexDirs.size(); j++) {
                     QString fileToLookFor = indexDirs[j] + QLatin1Char('/') + dependModules[i] +
                             QLatin1Char('/') + dependModules[i] + QLatin1String(".index");
                     if (QFile::exists(fileToLookFor)) {
                         QFileInfo tempFileInfo(fileToLookFor);
-                        foundIndices.insert(tempFileInfo.lastModified().toTime_t(), tempFileInfo);
+                        if (!foundIndices.contains(tempFileInfo))
+                            foundIndices.append(tempFileInfo);
                     }
                 }
+                qSort(foundIndices.begin(), foundIndices.end(), creationTimeBefore);
                 if (foundIndices.size() > 1) {
                     /*
                         QDoc should always use the last entry in the multimap when there are
                         multiple index files for a module, since the last modified file has the
                         highest UNIX timestamp.
                     */
-                    qDebug() << "Multiple indices found for dependency:" << dependModules[i];
-                    qDebug() << "Using" << foundIndices.value(
-                                    foundIndices.keys()[foundIndices.size() - 1]).absoluteFilePath()
+                    qDebug() << "Multiple indices found for dependency:" << dependModules[i] << "\nFound:";
+                    for (int k = 0; k < foundIndices.size(); k++)
+                        qDebug() << foundIndices[k].absoluteFilePath();
+                    qDebug() << "Using" << foundIndices[foundIndices.size() - 1].absoluteFilePath()
                             << "as index for" << dependModules[i];
-                    indexToAdd = foundIndices.value(
-                                      foundIndices.keys()[foundIndices.size() - 1]).absoluteFilePath();
+                    indexToAdd = foundIndices[foundIndices.size() - 1].absoluteFilePath();
                 }
                 else if (foundIndices.size() == 1) {
-                    indexToAdd = foundIndices.value(foundIndices.keys()[0]).absoluteFilePath();
+                    indexToAdd = foundIndices[0].absoluteFilePath();
                 }
                 else {
                     qDebug() << "No indices for" << dependModules[i] <<