forked from qt-creator/qt-creator
Git: Enable difference display in Log
Task-number: QTCREATORBUG-5726 Change-Id: Ide3f66de3bbccf86f4a044f8aa3f2fa0fe3d7c36 Reviewed-by: Tobias Hunger <tobias.hunger@nokia.com>
This commit is contained in:
committed by
Tobias Hunger
parent
e7a2327206
commit
7019a51f8f
@@ -96,18 +96,20 @@ public:
|
|||||||
Q_ASSERT(!directory.isEmpty());
|
Q_ASSERT(!directory.isEmpty());
|
||||||
Q_ASSERT(m_client);
|
Q_ASSERT(m_client);
|
||||||
|
|
||||||
mapSetting(addToggleButton(QLatin1String("--patience"), tr("Patience"),
|
m_patienceButton = addToggleButton(QLatin1String("--patience"), tr("Patience"),
|
||||||
tr("Use the patience algorithm for calculating the differences.")),
|
tr("Use the patience algorithm for calculating the differences."));
|
||||||
client->settings()->boolPointer(GitSettings::diffPatienceKey));
|
mapSetting(m_patienceButton, client->settings()->boolPointer(GitSettings::diffPatienceKey));
|
||||||
mapSetting(addToggleButton("--ignore-space-change", tr("Ignore Whitespace"),
|
m_ignoreWSButton = addToggleButton("--ignore-space-change", tr("Ignore Whitespace"),
|
||||||
tr("Ignore whitespace only changes.")),
|
tr("Ignore whitespace only changes."));
|
||||||
m_client->settings()->boolPointer(GitSettings::ignoreSpaceChangesInDiffKey));
|
mapSetting(m_ignoreWSButton, m_client->settings()->boolPointer(GitSettings::ignoreSpaceChangesInDiffKey));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QString m_workingDirectory;
|
QString m_workingDirectory;
|
||||||
GitClient *m_client;
|
GitClient *m_client;
|
||||||
QStringList m_args;
|
QStringList m_args;
|
||||||
|
QToolButton *m_patienceButton;
|
||||||
|
QToolButton *m_ignoreWSButton;
|
||||||
};
|
};
|
||||||
|
|
||||||
class GitCommitDiffArgumentsWidget : public BaseGitDiffArgumentsWidget
|
class GitCommitDiffArgumentsWidget : public BaseGitDiffArgumentsWidget
|
||||||
@@ -257,6 +259,46 @@ private:
|
|||||||
QString m_fileName;
|
QString m_fileName;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class GitLogArgumentsWidget : public BaseGitDiffArgumentsWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
GitLogArgumentsWidget(Git::Internal::GitClient *client,
|
||||||
|
const QString &directory,
|
||||||
|
bool enableAnnotationContextMenu,
|
||||||
|
const QStringList &args,
|
||||||
|
const QStringList &fileNames) :
|
||||||
|
BaseGitDiffArgumentsWidget(client, directory, args),
|
||||||
|
m_client(client),
|
||||||
|
m_workingDirectory(directory),
|
||||||
|
m_enableAnnotationContextMenu(enableAnnotationContextMenu),
|
||||||
|
m_args(args),
|
||||||
|
m_fileNames(fileNames)
|
||||||
|
{
|
||||||
|
QToolButton *button = addToggleButton(QLatin1String("--patch"), tr("Show Diff"),
|
||||||
|
tr("Show difference."));
|
||||||
|
mapSetting(button, m_client->settings()->boolPointer(GitSettings::logDiffKey));
|
||||||
|
connect(button, SIGNAL(toggled(bool)), m_patienceButton, SLOT(setEnabled(bool)));
|
||||||
|
connect(button, SIGNAL(toggled(bool)), m_ignoreWSButton, SLOT(setEnabled(bool)));
|
||||||
|
m_patienceButton->setEnabled(button->isChecked());
|
||||||
|
m_ignoreWSButton->setEnabled(button->isChecked());
|
||||||
|
}
|
||||||
|
|
||||||
|
void executeCommand()
|
||||||
|
{
|
||||||
|
m_client->log(m_workingDirectory, m_fileNames, m_enableAnnotationContextMenu, m_args);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
GitClient *m_client;
|
||||||
|
QString m_workingDirectory;
|
||||||
|
bool m_enableAnnotationContextMenu;
|
||||||
|
QStringList m_args;
|
||||||
|
QStringList m_fileNames;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
inline Core::IEditor* locateEditor(const Core::ICore *core, const char *property, const QString &entry)
|
inline Core::IEditor* locateEditor(const Core::ICore *core, const char *property, const QString &entry)
|
||||||
{
|
{
|
||||||
foreach (Core::IEditor *ed, core->editorManager()->openedEditors())
|
foreach (Core::IEditor *ed, core->editorManager()->openedEditors())
|
||||||
@@ -545,8 +587,21 @@ void GitClient::graphLog(const QString &workingDirectory, const QString & branch
|
|||||||
}
|
}
|
||||||
|
|
||||||
void GitClient::log(const QString &workingDirectory, const QStringList &fileNames,
|
void GitClient::log(const QString &workingDirectory, const QStringList &fileNames,
|
||||||
bool enableAnnotationContextMenu)
|
bool enableAnnotationContextMenu, const QStringList &args)
|
||||||
{
|
{
|
||||||
|
const QString msgArg = fileNames.empty() ? workingDirectory :
|
||||||
|
fileNames.join(QString(", "));
|
||||||
|
const QString title = tr("Git Log \"%1\"").arg(msgArg);
|
||||||
|
const Core::Id editorId = Git::Constants::GIT_LOG_EDITOR_ID;
|
||||||
|
const QString sourceFile = VCSBase::VCSBaseEditorWidget::getSource(workingDirectory, fileNames);
|
||||||
|
VCSBase::VCSBaseEditorWidget *editor = findExistingVCSEditor("logFileName", sourceFile);
|
||||||
|
if (!editor)
|
||||||
|
editor = createVCSEditor(editorId, title, sourceFile, CodecLogOutput, "logFileName", sourceFile,
|
||||||
|
new GitLogArgumentsWidget(this, workingDirectory,
|
||||||
|
enableAnnotationContextMenu,
|
||||||
|
args, fileNames));
|
||||||
|
editor->setFileLogAnnotateEnabled(enableAnnotationContextMenu);
|
||||||
|
|
||||||
QStringList arguments;
|
QStringList arguments;
|
||||||
arguments << QLatin1String("log") << QLatin1String(noColorOption)
|
arguments << QLatin1String("log") << QLatin1String(noColorOption)
|
||||||
<< QLatin1String(decorateOption);
|
<< QLatin1String(decorateOption);
|
||||||
@@ -555,18 +610,14 @@ void GitClient::log(const QString &workingDirectory, const QStringList &fileName
|
|||||||
if (logCount > 0)
|
if (logCount > 0)
|
||||||
arguments << QLatin1String("-n") << QString::number(logCount);
|
arguments << QLatin1String("-n") << QString::number(logCount);
|
||||||
|
|
||||||
|
GitLogArgumentsWidget *argWidget = qobject_cast<GitLogArgumentsWidget *>(editor->configurationWidget());
|
||||||
|
QStringList userArgs = argWidget->arguments();
|
||||||
|
|
||||||
|
arguments.append(userArgs);
|
||||||
|
|
||||||
if (!fileNames.isEmpty())
|
if (!fileNames.isEmpty())
|
||||||
arguments.append(fileNames);
|
arguments.append(fileNames);
|
||||||
|
|
||||||
const QString msgArg = fileNames.empty() ? workingDirectory :
|
|
||||||
fileNames.join(QString(", "));
|
|
||||||
const QString title = tr("Git Log \"%1\"").arg(msgArg);
|
|
||||||
const Core::Id editorId = Git::Constants::GIT_LOG_EDITOR_ID;
|
|
||||||
const QString sourceFile = VCSBase::VCSBaseEditorWidget::getSource(workingDirectory, fileNames);
|
|
||||||
VCSBase::VCSBaseEditorWidget *editor = findExistingVCSEditor("logFileName", sourceFile);
|
|
||||||
if (!editor)
|
|
||||||
editor = createVCSEditor(editorId, title, sourceFile, CodecLogOutput, "logFileName", sourceFile, 0);
|
|
||||||
editor->setFileLogAnnotateEnabled(enableAnnotationContextMenu);
|
|
||||||
executeGit(workingDirectory, arguments, editor);
|
executeGit(workingDirectory, arguments, editor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ public:
|
|||||||
void graphLog(const QString &workingDirectory) { graphLog(workingDirectory, QString()); }
|
void graphLog(const QString &workingDirectory) { graphLog(workingDirectory, QString()); }
|
||||||
void graphLog(const QString &workingDirectory, const QString &branch);
|
void graphLog(const QString &workingDirectory, const QString &branch);
|
||||||
void log(const QString &workingDirectory, const QStringList &fileNames = QStringList(),
|
void log(const QString &workingDirectory, const QStringList &fileNames = QStringList(),
|
||||||
bool enableAnnotationContextMenu = false);
|
bool enableAnnotationContextMenu = false, const QStringList &args = QStringList());
|
||||||
void blame(const QString &workingDirectory, const QStringList &args, const QString &fileName,
|
void blame(const QString &workingDirectory, const QStringList &args, const QString &fileName,
|
||||||
const QString &revision = QString(), int lineNumber = -1);
|
const QString &revision = QString(), int lineNumber = -1);
|
||||||
void checkout(const QString &workingDirectory, const QString &file);
|
void checkout(const QString &workingDirectory, const QString &file);
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ const QLatin1String GitSettings::diffPatienceKey("DiffPatience");
|
|||||||
const QLatin1String GitSettings::winSetHomeEnvironmentKey("WinSetHomeEnvironment");
|
const QLatin1String GitSettings::winSetHomeEnvironmentKey("WinSetHomeEnvironment");
|
||||||
const QLatin1String GitSettings::showPrettyFormatKey("DiffPrettyFormat");
|
const QLatin1String GitSettings::showPrettyFormatKey("DiffPrettyFormat");
|
||||||
const QLatin1String GitSettings::gitkOptionsKey("GitKOptions");
|
const QLatin1String GitSettings::gitkOptionsKey("GitKOptions");
|
||||||
|
const QLatin1String GitSettings::logDiffKey("LogDiff");
|
||||||
|
|
||||||
GitSettings::GitSettings()
|
GitSettings::GitSettings()
|
||||||
{
|
{
|
||||||
@@ -70,6 +71,7 @@ GitSettings::GitSettings()
|
|||||||
declareKey(winSetHomeEnvironmentKey, false);
|
declareKey(winSetHomeEnvironmentKey, false);
|
||||||
declareKey(gitkOptionsKey, QString());
|
declareKey(gitkOptionsKey, QString());
|
||||||
declareKey(showPrettyFormatKey, 2);
|
declareKey(showPrettyFormatKey, 2);
|
||||||
|
declareKey(logDiffKey, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString GitSettings::gitBinaryPath(bool *ok, QString *errorMessage) const
|
QString GitSettings::gitBinaryPath(bool *ok, QString *errorMessage) const
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ public:
|
|||||||
static const QLatin1String winSetHomeEnvironmentKey;
|
static const QLatin1String winSetHomeEnvironmentKey;
|
||||||
static const QLatin1String showPrettyFormatKey;
|
static const QLatin1String showPrettyFormatKey;
|
||||||
static const QLatin1String gitkOptionsKey;
|
static const QLatin1String gitkOptionsKey;
|
||||||
|
static const QLatin1String logDiffKey;
|
||||||
|
|
||||||
QString gitBinaryPath(bool *ok = 0, QString *errorMessage = 0) const;
|
QString gitBinaryPath(bool *ok = 0, QString *errorMessage = 0) const;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user