diff --git a/src/plugins/vcsbase/vcsbaseeditor.cpp b/src/plugins/vcsbase/vcsbaseeditor.cpp index 247ff8e589f..d88b522950d 100644 --- a/src/plugins/vcsbase/vcsbaseeditor.cpp +++ b/src/plugins/vcsbase/vcsbaseeditor.cpp @@ -98,9 +98,11 @@ bool DiffChunk::isValid() const return !fileName.isEmpty() && !chunk.isEmpty(); } -QByteArray DiffChunk::asPatch() const +QByteArray DiffChunk::asPatch(const QString &workingDirectory) const { - const QByteArray fileNameBA = QFile::encodeName(fileName); + QString relativeFile = workingDirectory.isEmpty() ? + fileName : QDir(workingDirectory).relativeFilePath(fileName); + const QByteArray fileNameBA = QFile::encodeName(relativeFile); QByteArray rc = "--- "; rc += fileNameBA; rc += "\n+++ "; @@ -1466,7 +1468,8 @@ bool VcsBaseEditorWidget::canApplyDiffChunk(const DiffChunk &dc) const // (passing '-R' for revert), assuming we got absolute paths from the VCS plugins. bool VcsBaseEditorWidget::applyDiffChunk(const DiffChunk &dc, bool revert) const { - return VcsBasePlugin::runPatch(dc.asPatch(), QString(), 0, revert); + return VcsBasePlugin::runPatch(dc.asPatch(d->m_diffBaseDirectory), + d->m_diffBaseDirectory, 0, revert); } QString VcsBaseEditorWidget::fileNameFromDiffSpecification(const QTextBlock &inBlock) const diff --git a/src/plugins/vcsbase/vcsbaseeditor.h b/src/plugins/vcsbase/vcsbaseeditor.h index 6971b701cf5..a7ceda39a89 100644 --- a/src/plugins/vcsbase/vcsbaseeditor.h +++ b/src/plugins/vcsbase/vcsbaseeditor.h @@ -78,7 +78,7 @@ class VCSBASE_EXPORT DiffChunk { public: bool isValid() const; - QByteArray asPatch() const; + QByteArray asPatch(const QString &workingDirectory) const; QString fileName; QByteArray chunk; diff --git a/src/plugins/vcsbase/vcsbaseplugin.cpp b/src/plugins/vcsbase/vcsbaseplugin.cpp index 3263da69af2..c8d58b6e791 100644 --- a/src/plugins/vcsbase/vcsbaseplugin.cpp +++ b/src/plugins/vcsbase/vcsbaseplugin.cpp @@ -1056,7 +1056,7 @@ bool VcsBasePlugin::runPatch(const QByteArray &input, const QString &workingDire QStringList args(QLatin1String("-p") + QString::number(strip)); if (reverse) args << QLatin1String("-R"); - ow->appendCommand(QString(), patch, args); + ow->appendCommand(workingDirectory, patch, args); patchProcess.start(patch, args); if (!patchProcess.waitForStarted()) { ow->appendError(tr("Unable to launch '%1': %2").arg(patch, patchProcess.errorString()));