diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index ed5b4f87456..22bed1ab0bd 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -276,12 +276,14 @@ protected: const QString &leftCommit, const QString &rightCommit); -protected: void runCommand(const QList &args, QTextCodec *codec = nullptr); QStringList addConfigurationArguments(const QStringList &args) const; QStringList baseArguments() const; +public: + void initialize(); + private: void updateBranchList(); @@ -318,7 +320,11 @@ GitBaseDiffEditorController::GitBaseDiffEditorController(IDocument *document, connect(&m_decorator, &DescriptionWidgetDecorator::branchListRequested, this, &GitBaseDiffEditorController::updateBranchList); setDisplayName("Git Diff"); - if (rightCommit.isEmpty()) { +} + +void GitBaseDiffEditorController::initialize() +{ + if (m_rightCommit.isEmpty()) { // This is workaround for lack of support for merge commits and resolving conflicts, // we compare the current state of working tree to the HEAD of current branch // instead of showing unsupported combined diff format. @@ -941,19 +947,20 @@ void GitClient::stage(DiffEditor::DiffEditorController *diffController, void GitClient::requestReload(const QString &documentId, const QString &source, const QString &title, const QString &workingDirectory, - std::function factory) const + std::function factory) const { // Creating document might change the referenced source. Store a copy and use it. const QString sourceCopy = source; IDocument *document = DiffEditorController::findOrCreateDocument(documentId, title); QTC_ASSERT(document, return); - VcsBaseDiffEditorController *controller = factory(document); + GitBaseDiffEditorController *controller = factory(document); QTC_ASSERT(controller, return); controller->setVcsBinary(settings().binaryPath()); controller->setVcsTimeoutS(settings().vcsTimeoutS()); controller->setProcessEnvironment(processEnvironment()); controller->setWorkingDirectory(workingDirectory); + controller->initialize(); connect(controller, &DiffEditorController::chunkActionsRequested, this, &GitClient::chunkActionsRequested, Qt::DirectConnection); diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h index 72ca26455f9..925e7dc56c4 100644 --- a/src/plugins/git/gitclient.h +++ b/src/plugins/git/gitclient.h @@ -48,10 +48,9 @@ QT_END_NAMESPACE namespace Core { class ICore; } namespace VcsBase { - class VcsCommand; - class SubmitFileModel; - class VcsBaseDiffEditorController; - class VcsBaseEditorWidget; +class VcsCommand; +class SubmitFileModel; +class VcsBaseEditorWidget; } namespace DiffEditor { @@ -63,6 +62,7 @@ namespace Git { namespace Internal { class CommitData; +class GitBaseDiffEditorController; class GitSubmitEditorPanelData; class Stash; @@ -377,7 +377,7 @@ private: QTextCodec *codecFor(CodecType codecType, const QString &source = QString()) const; void requestReload(const QString &documentId, const QString &source, const QString &title, const QString &workingDirectory, - std::function factory) const; + std::function factory) const; // determine version as '(major << 16) + (minor << 8) + patch' or 0. unsigned synchronousGitVersion(QString *errorMessage = nullptr) const;