[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdelibs/kdecore
From: David Faure <faure () kde ! org>
Date: 2010-11-10 14:32:54
Message-ID: 20101110143254.2F407AC89E () svn ! kde ! org
[Download RAW message or body]
SVN commit 1195170 by dfaure:
Make it possible to change the save location for a resource, using a new relative path.
(Was looking for this in order to make kconfigtest not delete my kdebugrc).
Led to an interesting discussion with coolo and his old memories of the code :)
M +16 -8 kernel/kstandarddirs.cpp
M +11 -0 tests/kstandarddirstest.cpp
M +1 -0 tests/kstandarddirstest.h
--- trunk/KDE/kdelibs/kdecore/kernel/kstandarddirs.cpp #1195169:1195170
@@ -96,8 +96,9 @@
QStringList m_prefixes;
// Directory dictionaries
- QMap<QByteArray, QStringList> m_absolutes;
- QMap<QByteArray, QStringList> m_relatives;
+ QMap<QByteArray, QStringList> m_absolutes; // For each resource type, the list of absolute paths, \
from most local (most priority) to most global + QMap<QByteArray, QStringList> m_relatives; // Same \
with relative paths + // The search path is "all relative paths" < "all absolute paths", from most \
priority to least priority.
// Caches (protected by mutex in const methods, cf ctor docu)
QMap<QByteArray, QStringList> m_dircache;
@@ -413,7 +414,9 @@
rels.prepend(copy);
else
rels.append(copy);
- d->m_dircache.remove(type); // clean the cache
+ // clean the caches
+ d->m_dircache.remove(type);
+ d->m_savelocations.remove(type);
return true;
}
return false;
@@ -436,7 +439,9 @@
paths.prepend(copy);
else
paths.append(copy);
- d->m_dircache.remove(type); // clean the cache
+ // clean the caches
+ d->m_dircache.remove(type);
+ d->m_savelocations.remove(type);
return true;
}
return false;
@@ -1481,7 +1486,7 @@
}
if (!dirs.isEmpty())
{
- path = dirs.last();
+ path = dirs.first();
if (path.startsWith(QLatin1Char('%'))) {
// grab the "data" from "%data/apps"
@@ -1505,8 +1510,9 @@
dirs = d->m_absolutes.value(type);
if (dirs.isEmpty()) {
qFatal("KStandardDirs: The resource type %s is not registered", type);
+ } else {
+ path = realPath(dirs.first());
}
- path = realPath(dirs.last());
}
d->m_savelocations.insert(type, path.endsWith(QLatin1Char('/')) ? path : path + \
QLatin1Char('/')); @@ -2030,8 +2036,10 @@
if (!cg.readEntry(key, true))
{
d->m_restrictionsActive = true;
- d->m_restrictions.insert(key.toLatin1(), true);
- d->m_dircache.remove(key.toLatin1());
+ const QByteArray cKey = key.toLatin1();
+ d->m_restrictions.insert(cKey, true);
+ d->m_dircache.remove(cKey);
+ d->m_savelocations.remove(cKey);
}
}
}
--- trunk/KDE/kdelibs/kdecore/tests/kstandarddirstest.cpp #1195169:1195170
@@ -66,6 +66,17 @@
QCOMPARE_PATHS( fooAppData, m_kdehome + "/share/apps/foo/" );
}
+void KStandarddirsTest::testChangeSaveLocation()
+{
+ KComponentData cData("changeSave");
+ QCOMPARE_PATHS(cData.dirs()->saveLocation("config"), m_kdehome + "/share/config/");
+ // Can we change the save location?
+ const QString newSaveLoc = m_kdehome + "/newconfigdir/";
+ //cData.dirs()->addResourceDir("config", newSaveLoc); // can't be done, absolute paths have less \
priority than relative paths + cData.dirs()->addResourceType("config", 0, "newconfigdir");
+ QCOMPARE_PATHS(cData.dirs()->saveLocation("config"), newSaveLoc);
+}
+
static bool isKdelibsInstalled()
{
// If there's only one dir, it's the local one (~/.kde-unit-test/share/apps/),
--- trunk/KDE/kdelibs/kdecore/tests/kstandarddirstest.h #1195169:1195170
@@ -29,6 +29,7 @@
void testLocateLocal();
void testSaveLocation();
void testAppData();
+ void testChangeSaveLocation();
void testFindResource();
void testFindAllResources();
void testFindAllResourcesNewDir();
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic