diff options
author | Orgad Shaneh <orgad.shaneh@audiocodes.com> | 2013-07-01 22:56:36 +0300 |
---|---|---|
committer | Orgad Shaneh <orgads@gmail.com> | 2013-07-03 13:34:38 +0200 |
commit | 20e9b33741e04880f9f367f63a71b23c73b6a8e4 (patch) | |
tree | 04e2c279f94535df1ddd1fc726dc0990fdd5110f | |
parent | db4ce016bc1ffe0b35771cf0876e128009998389 (diff) | |
download | qt-creator-20e9b33741e04880f9f367f63a71b23c73b6a8e4.tar.gz |
VCS: Use relative path for apply/revert chunk
Task-number: QTCREATORBUG-9715
Change-Id: I3bfaea3922ace396230ef5e215712a9f3459808b
Reviewed-by: Eike Ziller <eike.ziller@digia.com>
-rw-r--r-- | src/plugins/vcsbase/vcsbaseeditor.cpp | 9 | ||||
-rw-r--r-- | src/plugins/vcsbase/vcsbaseeditor.h | 2 | ||||
-rw-r--r-- | src/plugins/vcsbase/vcsbaseplugin.cpp | 2 |
3 files changed, 8 insertions, 5 deletions
diff --git a/src/plugins/vcsbase/vcsbaseeditor.cpp b/src/plugins/vcsbase/vcsbaseeditor.cpp index 247ff8e589..d88b522950 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 6971b701cf..a7ceda39a8 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 3263da69af..c8d58b6e79 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())); |