forked from qt-creator/qt-creator
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 <orgads@gmail.com>
This commit is contained in:
@@ -136,6 +136,7 @@ private:
|
|||||||
void addJob(VcsBase::Command *command,
|
void addJob(VcsBase::Command *command,
|
||||||
const QString &gitCommand,
|
const QString &gitCommand,
|
||||||
const QStringList &arguments);
|
const QStringList &arguments);
|
||||||
|
QStringList addHeadWhenCommandInProgress() const;
|
||||||
int timeout() const;
|
int timeout() const;
|
||||||
QProcessEnvironment processEnvironment() const;
|
QProcessEnvironment processEnvironment() const;
|
||||||
QString gitPath() const;
|
QString gitPath() const;
|
||||||
@@ -159,7 +160,9 @@ GitDiffHandler::GitDiffHandler(DiffEditor::DiffEditorController *controller,
|
|||||||
|
|
||||||
void GitDiffHandler::diffFile(const QString &fileName)
|
void GitDiffHandler::diffFile(const QString &fileName)
|
||||||
{
|
{
|
||||||
postCollectTextualDiffOutputUsingDiffCommand(QStringList() << QLatin1String("--") << fileName);
|
postCollectTextualDiffOutputUsingDiffCommand(addHeadWhenCommandInProgress()
|
||||||
|
<< QLatin1String("--")
|
||||||
|
<< fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GitDiffHandler::diffFiles(const QStringList &stagedFileNames,
|
void GitDiffHandler::diffFiles(const QStringList &stagedFileNames,
|
||||||
@@ -174,7 +177,7 @@ void GitDiffHandler::diffFiles(const QStringList &stagedFileNames,
|
|||||||
arguments << stagedArguments;
|
arguments << stagedArguments;
|
||||||
|
|
||||||
if (!unstagedFileNames.isEmpty()) {
|
if (!unstagedFileNames.isEmpty()) {
|
||||||
QStringList unstagedArguments;
|
QStringList unstagedArguments = addHeadWhenCommandInProgress();
|
||||||
unstagedArguments << QLatin1String("--");
|
unstagedArguments << QLatin1String("--");
|
||||||
unstagedArguments << unstagedFileNames;
|
unstagedArguments << unstagedFileNames;
|
||||||
arguments << unstagedArguments;
|
arguments << unstagedArguments;
|
||||||
@@ -185,17 +188,20 @@ void GitDiffHandler::diffFiles(const QStringList &stagedFileNames,
|
|||||||
|
|
||||||
void GitDiffHandler::diffProjects(const QStringList &projectPaths)
|
void GitDiffHandler::diffProjects(const QStringList &projectPaths)
|
||||||
{
|
{
|
||||||
postCollectTextualDiffOutputUsingDiffCommand(QStringList() << QLatin1String("--") << projectPaths);
|
postCollectTextualDiffOutputUsingDiffCommand(addHeadWhenCommandInProgress()
|
||||||
|
<< QLatin1String("--")
|
||||||
|
<< projectPaths);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GitDiffHandler::diffRepository()
|
void GitDiffHandler::diffRepository()
|
||||||
{
|
{
|
||||||
postCollectTextualDiffOutputUsingDiffCommand(QStringList());
|
postCollectTextualDiffOutputUsingDiffCommand(addHeadWhenCommandInProgress());
|
||||||
}
|
}
|
||||||
|
|
||||||
void GitDiffHandler::diffBranch(const QString &branchName)
|
void GitDiffHandler::diffBranch(const QString &branchName)
|
||||||
{
|
{
|
||||||
postCollectTextualDiffOutputUsingDiffCommand(QStringList() << branchName);
|
postCollectTextualDiffOutputUsingDiffCommand(addHeadWhenCommandInProgress()
|
||||||
|
<< branchName);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GitDiffHandler::show(const QString &id)
|
void GitDiffHandler::show(const QString &id)
|
||||||
@@ -265,6 +271,18 @@ void GitDiffHandler::addJob(VcsBase::Command *command,
|
|||||||
command->addJob(args, timeout());
|
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)
|
void GitDiffHandler::postCollectTextualDiffOutputUsingDiffCommand(const QStringList &arguments)
|
||||||
{
|
{
|
||||||
postCollectTextualDiffOutputUsingDiffCommand(QList<QStringList>() << arguments);
|
postCollectTextualDiffOutputUsingDiffCommand(QList<QStringList>() << arguments);
|
||||||
|
|||||||
Reference in New Issue
Block a user