From ceedde87694068bd1d4f97deaaf0d7cca6fa0780 Mon Sep 17 00:00:00 2001 From: jkobus Date: Wed, 13 Aug 2014 15:07:36 +0200 Subject: [PATCH] Try to show some meaningful diff when in merging state. Instead of showing 3-way diff, show simple diff of conflicted file compared to the head of current branch. Task-number: QTCREATORBUG-10099 Change-Id: I9419236f0249fd2752f89ea80a2a644fb80af095 Reviewed-by: Orgad Shaneh --- src/plugins/git/gitclient.cpp | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 9ede72f3044..886dea836f6 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -136,6 +136,7 @@ private: void addJob(VcsBase::Command *command, const QString &gitCommand, const QStringList &arguments); + QStringList addHeadWhenCommandInProgress() const; int timeout() const; QProcessEnvironment processEnvironment() const; QString gitPath() const; @@ -159,7 +160,9 @@ GitDiffHandler::GitDiffHandler(DiffEditor::DiffEditorController *controller, void GitDiffHandler::diffFile(const QString &fileName) { - postCollectTextualDiffOutputUsingDiffCommand(QStringList() << QLatin1String("--") << fileName); + postCollectTextualDiffOutputUsingDiffCommand(addHeadWhenCommandInProgress() + << QLatin1String("--") + << fileName); } void GitDiffHandler::diffFiles(const QStringList &stagedFileNames, @@ -174,7 +177,7 @@ void GitDiffHandler::diffFiles(const QStringList &stagedFileNames, arguments << stagedArguments; if (!unstagedFileNames.isEmpty()) { - QStringList unstagedArguments; + QStringList unstagedArguments = addHeadWhenCommandInProgress(); unstagedArguments << QLatin1String("--"); unstagedArguments << unstagedFileNames; arguments << unstagedArguments; @@ -185,17 +188,20 @@ void GitDiffHandler::diffFiles(const QStringList &stagedFileNames, void GitDiffHandler::diffProjects(const QStringList &projectPaths) { - postCollectTextualDiffOutputUsingDiffCommand(QStringList() << QLatin1String("--") << projectPaths); + postCollectTextualDiffOutputUsingDiffCommand(addHeadWhenCommandInProgress() + << QLatin1String("--") + << projectPaths); } void GitDiffHandler::diffRepository() { - postCollectTextualDiffOutputUsingDiffCommand(QStringList()); + postCollectTextualDiffOutputUsingDiffCommand(addHeadWhenCommandInProgress()); } void GitDiffHandler::diffBranch(const QString &branchName) { - postCollectTextualDiffOutputUsingDiffCommand(QStringList() << branchName); + postCollectTextualDiffOutputUsingDiffCommand(addHeadWhenCommandInProgress() + << branchName); } void GitDiffHandler::show(const QString &id) @@ -265,6 +271,18 @@ void GitDiffHandler::addJob(VcsBase::Command *command, command->addJob(args, timeout()); } +QStringList GitDiffHandler::addHeadWhenCommandInProgress() const +{ + QStringList args; + // 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. + GitClient::CommandInProgress commandInProgress = m_gitClient->checkCommandInProgress(m_workingDirectory); + if (commandInProgress != GitClient::NoCommand) + args << QLatin1String(HEAD); + return args; +} + void GitDiffHandler::postCollectTextualDiffOutputUsingDiffCommand(const QStringList &arguments) { postCollectTextualDiffOutputUsingDiffCommand(QList() << arguments);