diff --git a/src/plugins/git/branchdialog.cpp b/src/plugins/git/branchdialog.cpp index 14346a268a413a1684da7f39a24d1f8dd1ced39d..2d157d7e70cad73da5130034e4f76265e0f5110c 100644 --- a/src/plugins/git/branchdialog.cpp +++ b/src/plugins/git/branchdialog.cpp @@ -285,7 +285,7 @@ void BranchDialog::log() if (branchName.isEmpty()) return; // Do not pass working dir by reference since it might change - GitPlugin::instance()->gitClient()->graphLog(QString(m_repository), branchName); + GitPlugin::instance()->gitClient()->log(QString(m_repository), QStringList(), false, QStringList(branchName)); } void BranchDialog::merge() diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 684a9d452d7383700233d90efd6b1b1bf39c9bf9..ebb166cb0b8dcf735e877e06af50d23100a3d493 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -70,6 +70,7 @@ #include <QTextCodec> static const char GIT_DIRECTORY[] = ".git"; +static const char graphLogFormatC[] = "%h %d %an %s %ci"; namespace Git { namespace Internal { @@ -265,13 +266,19 @@ public: m_enableAnnotationContextMenu(enableAnnotationContextMenu), m_fileNames(fileNames) { - QToolButton *button = addToggleButton(QLatin1String("--patch"), tr("Show Diff"), + QToolButton *diffButton = 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()); + mapSetting(diffButton, m_client->settings()->boolPointer(GitSettings::logDiffKey)); + connect(diffButton, SIGNAL(toggled(bool)), m_patienceButton, SLOT(setVisible(bool))); + connect(diffButton, SIGNAL(toggled(bool)), m_ignoreWSButton, SLOT(setVisible(bool))); + m_patienceButton->setVisible(diffButton->isChecked()); + m_ignoreWSButton->setVisible(diffButton->isChecked()); + QStringList graphArguments(QLatin1String("--graph")); + graphArguments << QLatin1String("--oneline") << QLatin1String("--topo-order"); + graphArguments << (QLatin1String("--pretty=format:") + QLatin1String(graphLogFormatC)); + QToolButton *graphButton = addToggleButton(graphArguments, tr("Graph"), + tr("Show textual graph log.")); + mapSetting(graphButton, m_client->settings()->boolPointer(GitSettings::graphLogKey)); } void executeCommand() @@ -666,35 +673,6 @@ void GitClient::status(const QString &workingDirectory) Qt::QueuedConnection); } -static const char graphLogFormatC[] = "%h %d %an %s %ci"; - -// Create a graphical log. -void GitClient::graphLog(const QString &workingDirectory, const QString & branch) -{ - QStringList arguments; - arguments << QLatin1String("log") << QLatin1String(noColorOption); - - int logCount = settings()->intValue(GitSettings::logCountKey); - if (logCount > 0) - arguments << QLatin1String("-n") << QString::number(logCount); - arguments << (QLatin1String("--pretty=format:") + QLatin1String(graphLogFormatC)) - << QLatin1String("--topo-order") << QLatin1String("--graph"); - - QString title; - if (branch.isEmpty()) { - title = tr("Git Log"); - } else { - title = tr("Git Log \"%1\"").arg(branch); - arguments << branch; - } - const Core::Id editorId = Git::Constants::GIT_LOG_EDITOR_ID; - const QString sourceFile = VcsBase::VcsBaseEditorWidget::getSource(workingDirectory, QStringList()); - VcsBase::VcsBaseEditorWidget *editor = findExistingVCSEditor("logFileName", sourceFile); - if (!editor) - editor = createVcsEditor(editorId, title, sourceFile, CodecLogOutput, "logFileName", sourceFile, 0); - executeGit(workingDirectory, arguments, editor); -} - void GitClient::log(const QString &workingDirectory, const QStringList &fileNames, bool enableAnnotationContextMenu, const QStringList &args) { diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h index 046c9ae954304d5ccc6513fbede9ba3fb5707294..b56142138cca0369950feb8b866175bbce9448b7 100644 --- a/src/plugins/git/gitclient.h +++ b/src/plugins/git/gitclient.h @@ -137,8 +137,6 @@ public: void merge(const QString &workingDirectory, const QStringList &unmergedFileNames = QStringList()); void status(const QString &workingDirectory); - void graphLog(const QString &workingDirectory) { graphLog(workingDirectory, QString()); } - void graphLog(const QString &workingDirectory, const QString &branch); void log(const QString &workingDirectory, const QStringList &fileNames = QStringList(), bool enableAnnotationContextMenu = false, const QStringList &args = QStringList()); void blame(const QString &workingDirectory, const QStringList &args, const QString &fileName, diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp index 1b329c329ec862f0c926bb0122ace72096ad80fe..456d87ddfa204bfbd41133a88672ca7e17d8e47f 100644 --- a/src/plugins/git/gitplugin.cpp +++ b/src/plugins/git/gitplugin.cpp @@ -401,7 +401,8 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage) createRepositoryAction(localRepositoryMenu, tr("Log"), Core::Id("Git.LogRepository"), - globalcontext, true, &GitClient::graphLog); + globalcontext, true, + SLOT(logRepository())); createRepositoryAction(localRepositoryMenu, tr("Clean..."), Core::Id("Git.CleanRepository"), @@ -720,6 +721,13 @@ void GitPlugin::logProject() m_gitClient->log(state.currentProjectTopLevel(), state.relativeCurrentProject()); } +void GitPlugin::logRepository() +{ + const VcsBase::VcsBasePluginState state = currentState(); + QTC_ASSERT(state.hasTopLevel(), return); + m_gitClient->log(state.topLevel()); +} + void GitPlugin::undoFileChanges(bool revertStaging) { const VcsBase::VcsBasePluginState state = currentState(); diff --git a/src/plugins/git/gitplugin.h b/src/plugins/git/gitplugin.h index 9bf2f44bdf4cfe5f82c56cf6569ae532a73ce473..12b5ea2bdb6e82c0e5291c08e39f472b91aaadf6 100644 --- a/src/plugins/git/gitplugin.h +++ b/src/plugins/git/gitplugin.h @@ -113,6 +113,7 @@ private slots: void logFile(); void blameFile(); void logProject(); + void logRepository(); void undoFileChanges(bool revertStaging = true); void undoUnstagedFileChanges(); void resetRepository(); diff --git a/src/plugins/git/gitsettings.cpp b/src/plugins/git/gitsettings.cpp index 5b908c47600c9e4f427a4030cff7819705abf8b8..2c1e27fc8ac49cfbc8b1c7220a120aef615540a2 100644 --- a/src/plugins/git/gitsettings.cpp +++ b/src/plugins/git/gitsettings.cpp @@ -46,6 +46,7 @@ const QLatin1String GitSettings::showPrettyFormatKey("DiffPrettyFormat"); const QLatin1String GitSettings::gitkOptionsKey("GitKOptions"); const QLatin1String GitSettings::logDiffKey("LogDiff"); const QLatin1String GitSettings::repositoryBrowserCmd("RepositoryBrowserCmd"); +const QLatin1String GitSettings::graphLogKey("GraphLog"); GitSettings::GitSettings() { @@ -64,6 +65,7 @@ GitSettings::GitSettings() declareKey(showPrettyFormatKey, 2); declareKey(logDiffKey, false); declareKey(repositoryBrowserCmd, QString()); + declareKey(graphLogKey, false); } QString GitSettings::gitBinaryPath(bool *ok, QString *errorMessage) const diff --git a/src/plugins/git/gitsettings.h b/src/plugins/git/gitsettings.h index 4858a284e13ce9ddac560466a1415ab3eab86b10..194cc65faef93e87f0c2246144eccf855aa3486c 100644 --- a/src/plugins/git/gitsettings.h +++ b/src/plugins/git/gitsettings.h @@ -52,6 +52,7 @@ public: static const QLatin1String gitkOptionsKey; static const QLatin1String logDiffKey; static const QLatin1String repositoryBrowserCmd; + static const QLatin1String graphLogKey; QString gitBinaryPath(bool *ok = 0, QString *errorMessage = 0) const;