Vcs: Move annotate and annotateRevisionRequested into VcsBaseClientImpl

... and use that in the Git client.

Change-Id: Ie70ec0d5908776d11eb69613d45f565d4f0ce32b
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
This commit is contained in:
Tobias Hunger
2015-04-13 11:38:44 +02:00
parent ed51368979
commit a55fb4a378
6 changed files with 34 additions and 48 deletions

View File

@@ -955,51 +955,37 @@ void GitClient::show(const QString &source, const QString &id, const QString &na
}); });
} }
void GitClient::annotateRevisionRequested(const QString &workingDirectory, const QString &file, void GitClient::annotate(const QString &workingDir, const QString &file, const QString &revision,
const QString &change, int lineNumber) int lineNumber, const QStringList &extraOptions)
{
QString sha1 = change;
// This might be invoked with a verbose revision description
// "SHA1 author subject" from the annotation context menu. Strip the rest.
const int blankPos = sha1.indexOf(QLatin1Char(' '));
if (blankPos != -1)
sha1.truncate(blankPos);
blame(workingDirectory, QStringList(), file, sha1, lineNumber);
}
void GitClient::blame(const QString &workingDirectory,
const QStringList &args,
const QString &fileName,
const QString &revision,
int lineNumber)
{ {
const Id editorId = Git::Constants::GIT_BLAME_EDITOR_ID; const Id editorId = Git::Constants::GIT_BLAME_EDITOR_ID;
const QString id = VcsBaseEditor::getTitleId(workingDirectory, QStringList(fileName), revision); const QString id = VcsBaseEditor::getTitleId(workingDir, QStringList(file), revision);
const QString title = tr("Git Blame \"%1\"").arg(id); const QString title = tr("Git Blame \"%1\"").arg(id);
const QString sourceFile = VcsBaseEditor::getSource(workingDirectory, fileName); const QString sourceFile = VcsBaseEditor::getSource(workingDir, file);
VcsBaseEditorWidget *editor = findExistingVCSEditor("blameFileName", id); VcsBaseEditorWidget *editor = findExistingVCSEditor("blameFileName", id);
if (!editor) { if (!editor) {
auto *argWidget = new GitBlameArgumentsWidget(settings()); auto *argWidget = new GitBlameArgumentsWidget(settings());
argWidget->setBaseArguments(args); argWidget->setBaseArguments(extraOptions);
connect(argWidget, &VcsBaseEditorParameterWidget::commandExecutionRequested, connect(argWidget, &VcsBaseEditorParameterWidget::commandExecutionRequested,
[=] { [=] {
const int line = VcsBaseEditor::lineNumberOfCurrentEditor(); const int line = VcsBaseEditor::lineNumberOfCurrentEditor();
blame(workingDirectory, args, fileName, revision, line); annotate(workingDir, file, revision, line, extraOptions);
} ); } );
editor = createVcsEditor(editorId, title, sourceFile, codecFor(CodecSource, sourceFile), editor = createVcsEditor(editorId, title, sourceFile, codecFor(CodecSource, sourceFile),
"blameFileName", id); "blameFileName", id);
editor->setConfigurationWidget(argWidget); editor->setConfigurationWidget(argWidget);
} }
editor->setWorkingDirectory(workingDirectory); editor->setWorkingDirectory(workingDir);
QStringList arguments(QLatin1String("blame")); QStringList arguments(QLatin1String("blame"));
arguments << QLatin1String("--root"); arguments << QLatin1String("--root");
arguments.append(editor->configurationWidget()->arguments()); arguments.append(editor->configurationWidget()->arguments());
arguments << QLatin1String("--") << fileName; arguments.append(extraOptions);
arguments << QLatin1String("--") << file;
if (!revision.isEmpty()) if (!revision.isEmpty())
arguments << revision; arguments << revision;
executeGit(workingDirectory, arguments, editor, false, 0, lineNumber); executeGit(workingDir, arguments, editor, false, 0, lineNumber);
} }
bool GitClient::synchronousCheckout(const QString &workingDirectory, bool GitClient::synchronousCheckout(const QString &workingDirectory,

View File

@@ -162,8 +162,9 @@ public:
void log(const QString &workingDirectory, const QString &fileName = QString(), void log(const QString &workingDirectory, const QString &fileName = QString(),
bool enableAnnotationContextMenu = false, const QStringList &args = QStringList()); bool enableAnnotationContextMenu = false, const QStringList &args = QStringList());
void reflog(const QString &workingDirectory); void reflog(const QString &workingDirectory);
void blame(const QString &workingDirectory, const QStringList &args, const QString &fileName, void annotate(const QString &workingDir, const QString &file,
const QString &revision = QString(), int lineNumber = -1); const QString &revision = QString(), int lineNumber = -1,
const QStringList &extraOptions = QStringList()) override;
void reset(const QString &workingDirectory, const QString &argument, const QString &commit = QString()); void reset(const QString &workingDirectory, const QString &argument, const QString &commit = QString());
void addFile(const QString &workingDirectory, const QString &fileName); void addFile(const QString &workingDirectory, const QString &fileName);
bool synchronousLog(const QString &workingDirectory, bool synchronousLog(const QString &workingDirectory,
@@ -357,9 +358,6 @@ private slots:
void branchesForCommit(const QString &revision); void branchesForCommit(const QString &revision);
private: private:
void annotateRevisionRequested(const QString &workingDirectory, const QString &file,
const QString &change, int lineNumber) override;
void stage(const QString &patch, bool revert); void stage(const QString &patch, bool revert);
VcsBase::VcsBaseEditorWidget *findExistingVCSEditor(const char *registerDynamicProperty, VcsBase::VcsBaseEditorWidget *findExistingVCSEditor(const char *registerDynamicProperty,
const QString &dynamicPropertyValue) const; const QString &dynamicPropertyValue) const;

View File

@@ -715,7 +715,7 @@ void GitPlugin::blameFile()
const VcsBasePluginState state = currentState(); const VcsBasePluginState state = currentState();
QTC_ASSERT(state.hasFile(), return); QTC_ASSERT(state.hasFile(), return);
const int lineNumber = VcsBaseEditor::lineNumberOfCurrentEditor(state.currentFile()); const int lineNumber = VcsBaseEditor::lineNumberOfCurrentEditor(state.currentFile());
m_gitClient->blame(state.currentFileTopLevel(), QStringList(), state.relativeCurrentFile(), QString(), lineNumber); m_gitClient->annotate(state.currentFileTopLevel(), state.relativeCurrentFile(), QString(), lineNumber);
} }
void GitPlugin::logProject() void GitPlugin::logProject()

View File

@@ -164,7 +164,7 @@ bool GitVersionControl::managesFile(const QString &workingDirectory, const QStri
bool GitVersionControl::vcsAnnotate(const QString &file, int line) bool GitVersionControl::vcsAnnotate(const QString &file, int line)
{ {
const QFileInfo fi(file); const QFileInfo fi(file);
m_client->blame(fi.absolutePath(), QStringList(), fi.fileName(), QString(), line); m_client->annotate(fi.absolutePath(), fi.fileName(), QString(), line);
return true; return true;
} }

View File

@@ -175,6 +175,19 @@ void VcsBaseClientImpl::resetCachedVcsInfo(const QString &workingDir)
Core::VcsManager::resetVersionControlForDirectory(workingDir); Core::VcsManager::resetVersionControlForDirectory(workingDir);
} }
void VcsBaseClientImpl::annotateRevisionRequested(const QString &workingDirectory,
const QString &file, const QString &change,
int line)
{
QString changeCopy = change;
// This might be invoked with a verbose revision description
// "SHA1 author subject" from the annotation context menu. Strip the rest.
const int blankPos = changeCopy.indexOf(QLatin1Char(' '));
if (blankPos != -1)
changeCopy.truncate(blankPos);
annotate(workingDirectory, file, changeCopy, line);
}
int VcsBaseClientImpl::vcsTimeout() const int VcsBaseClientImpl::vcsTimeout() const
{ {
return settings().intValue(VcsBaseClientSettings::timeoutKey); return settings().intValue(VcsBaseClientSettings::timeoutKey);
@@ -650,19 +663,6 @@ void VcsBaseClient::statusParser(const QString &text)
emit parsedStatus(lineInfoList); emit parsedStatus(lineInfoList);
} }
void VcsBaseClient::annotateRevisionRequested(const QString &workingDirectory,
const QString &file, const QString &change,
int line)
{
QString changeCopy = change;
// This might be invoked with a verbose revision description
// "SHA1 author subject" from the annotation context menu. Strip the rest.
const int blankPos = changeCopy.indexOf(QLatin1Char(' '));
if (blankPos != -1)
changeCopy.truncate(blankPos);
annotate(workingDirectory, file, changeCopy, line);
}
} // namespace VcsBase } // namespace VcsBase
#include "moc_vcsbaseclient.cpp" #include "moc_vcsbaseclient.cpp"

View File

@@ -95,10 +95,15 @@ public:
virtual QProcessEnvironment processEnvironment() const; virtual QProcessEnvironment processEnvironment() const;
// VCS functionality:
virtual void annotate(const QString &workingDir, const QString &file,
const QString &revision = QString(), int lineNumber = -1,
const QStringList &extraOptions = QStringList()) = 0;
protected: protected:
void resetCachedVcsInfo(const QString &workingDir); void resetCachedVcsInfo(const QString &workingDir);
virtual void annotateRevisionRequested(const QString &workingDirectory, const QString &file, virtual void annotateRevisionRequested(const QString &workingDirectory, const QString &file,
const QString &change, int line) = 0; const QString &change, int line);
private: private:
void saveSettings(); void saveSettings();
@@ -179,9 +184,6 @@ public slots:
const QStringList &extraOptions = QStringList()); const QStringList &extraOptions = QStringList());
protected: protected:
void annotateRevisionRequested(const QString &workingDirectory, const QString &file,
const QString &change, int line);
enum VcsCommandTag enum VcsCommandTag
{ {
CreateRepositoryCommand, CreateRepositoryCommand,