forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/2.6'
Conflicts: src/libs/utils/fileutils.cpp src/plugins/remotelinux/deployablefilesperprofile.cpp src/plugins/remotelinux/genericdirectuploadservice.cpp src/tools/qtcreatorcrashhandler/main.cpp Change-Id: I830287691e7085fe9c94597e23ec7be64eb8be42
This commit is contained in:
@@ -161,6 +161,33 @@ static inline int askMsgSendFailed()
|
||||
QMessageBox::Retry);
|
||||
}
|
||||
|
||||
// taken from utils/fileutils.cpp. We can not use utils here since that depends app_version.h.
|
||||
static bool copyRecursively(const QString &srcFilePath,
|
||||
const QString &tgtFilePath)
|
||||
{
|
||||
QFileInfo srcFileInfo(srcFilePath);
|
||||
if (srcFileInfo.isDir()) {
|
||||
QDir targetDir(tgtFilePath);
|
||||
targetDir.cdUp();
|
||||
if (!targetDir.mkdir(QFileInfo(tgtFilePath).fileName()))
|
||||
return false;
|
||||
QDir sourceDir(srcFilePath);
|
||||
QStringList fileNames = sourceDir.entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot | QDir::Hidden | QDir::System);
|
||||
foreach (const QString &fileName, fileNames) {
|
||||
const QString newSrcFilePath
|
||||
= srcFilePath + QLatin1Char('/') + fileName;
|
||||
const QString newTgtFilePath
|
||||
= tgtFilePath + QLatin1Char('/') + fileName;
|
||||
if (!copyRecursively(newSrcFilePath, newTgtFilePath))
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
if (!QFile::copy(srcFilePath, tgtFilePath))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline QStringList getPluginPaths()
|
||||
{
|
||||
QStringList rc;
|
||||
@@ -183,9 +210,9 @@ static inline QStringList getPluginPaths()
|
||||
#endif
|
||||
// 3) <localappdata>/plugins/<ideversion>
|
||||
// where <localappdata> is e.g.
|
||||
// <drive>:\Users\<username>\AppData\Local\Nokia\qtcreator on Windows Vista and later
|
||||
// $XDG_DATA_HOME or ~/.local/share/data/Nokia/qtcreator on Linux
|
||||
// ~/Library/Application Support/Nokia/Qt Creator on Mac
|
||||
// <drive>:\Users\<username>\AppData\Local\QtProject\qtcreator on Windows Vista and later
|
||||
// $XDG_DATA_HOME or ~/.local/share/data/QtProject/qtcreator on Linux
|
||||
// ~/Library/Application Support/QtProject/Qt Creator on Mac
|
||||
pluginPath = QDesktopServices::storageLocation(QDesktopServices::DataLocation);
|
||||
pluginPath += QLatin1Char('/')
|
||||
+ QLatin1String(Core::Constants::IDE_SETTINGSVARIANT_STR)
|
||||
@@ -201,6 +228,55 @@ static inline QStringList getPluginPaths()
|
||||
return rc;
|
||||
}
|
||||
|
||||
static QSettings *createUserSettings()
|
||||
{
|
||||
return new QSettings(QSettings::IniFormat, QSettings::UserScope,
|
||||
QLatin1String(Core::Constants::IDE_SETTINGSVARIANT_STR),
|
||||
QLatin1String("QtCreator"));
|
||||
}
|
||||
|
||||
static inline QSettings *userSettings()
|
||||
{
|
||||
QSettings *settings = createUserSettings();
|
||||
const QString fromVariant = QLatin1String(Core::Constants::IDE_COPY_SETTINGS_FROM_VARIANT_STR);
|
||||
if (fromVariant.isEmpty())
|
||||
return settings;
|
||||
|
||||
// Copy old settings to new ones:
|
||||
QFileInfo pathFi = QFileInfo(settings->fileName());
|
||||
if (pathFi.exists()) // already copied.
|
||||
return settings;
|
||||
|
||||
QDir destDir = pathFi.absolutePath();
|
||||
if (!destDir.exists())
|
||||
destDir.mkpath(pathFi.absolutePath());
|
||||
|
||||
QDir srcDir = destDir;
|
||||
srcDir.cdUp();
|
||||
if (!srcDir.cd(fromVariant))
|
||||
return settings;
|
||||
|
||||
if (srcDir == destDir) // Nothing to copy and no settings yet
|
||||
return settings;
|
||||
|
||||
QStringList entries = srcDir.entryList();
|
||||
foreach (const QString &file, entries) {
|
||||
const QString lowerFile = file.toLower();
|
||||
if (lowerFile.startsWith(QLatin1String("profiles.xml"))
|
||||
|| lowerFile.startsWith(QLatin1String("toolchains.xml"))
|
||||
|| lowerFile.startsWith(QLatin1String("qtversion.xml"))
|
||||
|| lowerFile.startsWith(QLatin1String("devices.xml"))
|
||||
|| lowerFile.startsWith(QLatin1String("qtcreator.")))
|
||||
QFile::copy(srcDir.absoluteFilePath(file), destDir.absoluteFilePath(file));
|
||||
if (file == QLatin1String("qtcreator"))
|
||||
copyRecursively(srcDir.absoluteFilePath(file), destDir.absoluteFilePath(file));
|
||||
}
|
||||
|
||||
// Make sure to use the copied settings:
|
||||
delete settings;
|
||||
return createUserSettings();
|
||||
}
|
||||
|
||||
#ifdef Q_OS_MAC
|
||||
# define SHARE_PATH "/../Resources"
|
||||
#else
|
||||
@@ -258,9 +334,8 @@ int main(int argc, char **argv)
|
||||
QCoreApplication::applicationDirPath() + QLatin1String(SHARE_PATH));
|
||||
QSettings::setDefaultFormat(QSettings::IniFormat);
|
||||
// plugin manager takes control of this settings object
|
||||
QSettings *settings = new QSettings(QSettings::IniFormat, QSettings::UserScope,
|
||||
QLatin1String(Core::Constants::IDE_SETTINGSVARIANT_STR),
|
||||
QLatin1String("QtCreator"));
|
||||
QSettings *settings = userSettings();
|
||||
|
||||
QSettings *globalSettings = new QSettings(QSettings::IniFormat, QSettings::SystemScope,
|
||||
QLatin1String(Core::Constants::IDE_SETTINGSVARIANT_STR),
|
||||
QLatin1String("QtCreator"));
|
||||
|
||||
Reference in New Issue
Block a user