[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE
From:       David Faure <faure () kde ! org>
Date:       2008-07-07 23:20:36
Message-ID: 1215472836.003058.6870.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 829270 by dfaure:

Fix mimetype determination with pattern like *.pkg.tar.gz
Analysis and patch by Pino, unit test by me.


 M  +6 -2      kdebase/apps/konqueror/settings/filetypes/tests/filetypestest.cpp  
 M  +4 -2      kdelibs/kdecore/services/kmimetypefactory.cpp  


--- trunk/KDE/kdebase/apps/konqueror/settings/filetypes/tests/filetypestest.cpp \
#829269:829270 @@ -248,7 +248,7 @@
 
         MimeTypeData data(mimeTypeName, true);
         data.setComment("Fake MimeType");
-        QStringList patterns = QStringList() << "*.fake";
+        QStringList patterns = QStringList() << "*.pkg.tar.gz";
         data.setPatterns(patterns);
         QVERIFY(data.isDirty());
         QVERIFY(data.sync());
@@ -257,7 +257,11 @@
         KMimeType::Ptr mime = KMimeType::mimeType(mimeTypeName);
         QVERIFY(mime);
         QCOMPARE(mime->comment(), QString("Fake MimeType"));
-        QCOMPARE(mime->patterns(), patterns);
+        QCOMPARE(mime->patterns(), patterns); // must sort them if more than one
+
+        // Testcase for the shaman.xml bug
+        QCOMPARE(KMimeType::findByPath("/whatever/foo.pkg.tar.gz")->name(), \
QString("fake/unit-test-fake-mimetype")); +
         m_mimeTypeCreatedSuccessfully = true;
     }
 
--- trunk/KDE/kdelibs/kdecore/services/kmimetypefactory.cpp #829269:829270
@@ -193,7 +193,7 @@
     if (pattern[0] == '*'  && pattern.indexOf('[') == -1)
     {
         if ( len + 1 < pattern_len ) return false;
-    
+
         const QChar *c1 = pattern.unicode() + pattern_len - 1;
         const QChar *c2 = filename.unicode() + len - 1;
         int cnt = 1;
@@ -217,7 +217,7 @@
     }
 
     // Names without any wildcards like "README"
-    if (pattern.indexOf('[') == -1 && pattern.indexOf('*') == -1 && \
pattern.indexOf('?'))  +    if (pattern.indexOf('[') == -1 && pattern.indexOf('*') == \
-1 && pattern.indexOf('?'))  return (pattern == filename);
 
     // Other patterns, like "[Mm]akefile": use slow but correct method
@@ -284,6 +284,8 @@
             } else if (pattern.length() > matchingPatternLength) {
                 // longer: clear any previous match (like *.bz2, when pattern is \
*.tar.bz2)  matchingMimeTypes.clear();
+                // remember the new "longer" length
+                matchingPatternLength = pattern.length();
             }
             KMimeType *newMimeType = createEntry( *it_offset );
             assert (newMimeType && newMimeType->isType( KST_KMimeType ));


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic