forked from qt-creator/qt-creator
Git: Cache author and encoding for instant blame
Querying both may be expensive and is only necessary when the repository is changed. Fixes: QTCREATORBUG-29151 Change-Id: I1d37f8b8708c02a8c3dc2d89fe7e331f0f416818 Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
committed by
André Hartmann
parent
ac0f273081
commit
29371dc2f3
@@ -394,6 +394,7 @@ public:
|
||||
void instantBlameOnce();
|
||||
void instantBlame();
|
||||
void stopInstantBlame();
|
||||
bool refreshWorkingDirectory(const FilePath &workingDirectory);
|
||||
|
||||
void onApplySettings();
|
||||
|
||||
@@ -428,6 +429,8 @@ public:
|
||||
FilePath m_submitRepository;
|
||||
QString m_commitMessageFileName;
|
||||
|
||||
FilePath m_workingDirectory;
|
||||
QTextCodec *m_codec = nullptr;
|
||||
Author m_author;
|
||||
int m_lastVisitedEditorLine = -1;
|
||||
QTimer *m_cursorPositionChangedTimer = nullptr;
|
||||
@@ -1439,9 +1442,8 @@ void GitPluginPrivate::setupInstantBlame()
|
||||
}
|
||||
|
||||
const Utils::FilePath workingDirectory = GitPlugin::currentState().currentFileTopLevel();
|
||||
if (workingDirectory.isEmpty())
|
||||
if (!refreshWorkingDirectory(workingDirectory))
|
||||
return;
|
||||
m_author = GitClient::instance()->getAuthor(workingDirectory);
|
||||
|
||||
const TextEditorWidget *widget = TextEditorWidget::fromEditor(editor);
|
||||
if (!widget)
|
||||
@@ -1524,9 +1526,8 @@ void GitPluginPrivate::instantBlameOnce()
|
||||
this, [this] { m_blameMark.reset(); }, Qt::SingleShotConnection);
|
||||
|
||||
const Utils::FilePath workingDirectory = GitPlugin::currentState().topLevel();
|
||||
if (workingDirectory.isEmpty())
|
||||
if (!refreshWorkingDirectory(workingDirectory))
|
||||
return;
|
||||
m_author = GitClient::instance()->getAuthor(workingDirectory);
|
||||
}
|
||||
|
||||
m_lastVisitedEditorLine = -1;
|
||||
@@ -1574,10 +1575,9 @@ void GitPluginPrivate::instantBlame()
|
||||
const CommitInfo info = parseBlameOutput(output.split('\n'), filePath, m_author);
|
||||
m_blameMark.reset(new BlameMark(filePath, line, info));
|
||||
};
|
||||
QTextCodec *codec = GitClient::instance()->encoding(GitClient::EncodingCommit, workingDirectory);
|
||||
GitClient::instance()->vcsExecWithHandler(workingDirectory,
|
||||
{"blame", "-p", "-L", lineString, "--", filePath.toString()},
|
||||
this, commandHandler, RunFlags::NoOutput, codec);
|
||||
this, commandHandler, RunFlags::NoOutput, m_codec);
|
||||
}
|
||||
|
||||
void GitPluginPrivate::stopInstantBlame()
|
||||
@@ -1587,6 +1587,21 @@ void GitPluginPrivate::stopInstantBlame()
|
||||
disconnect(m_blameCursorPosConn);
|
||||
}
|
||||
|
||||
bool GitPluginPrivate::refreshWorkingDirectory(const FilePath &workingDirectory)
|
||||
{
|
||||
if (workingDirectory.isEmpty())
|
||||
return false;
|
||||
|
||||
if (m_workingDirectory == workingDirectory)
|
||||
return true;
|
||||
|
||||
m_workingDirectory = workingDirectory;
|
||||
m_author = GitClient::instance()->getAuthor(workingDirectory);
|
||||
m_codec = GitClient::instance()->encoding(GitClient::EncodingCommit, workingDirectory);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
IEditor *GitPluginPrivate::openSubmitEditor(const QString &fileName, const CommitData &cd)
|
||||
{
|
||||
IEditor *editor = EditorManager::openEditor(FilePath::fromString(fileName),
|
||||
|
Reference in New Issue
Block a user