summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOrgad Shaneh <orgad.shaneh@audiocodes.com>2013-07-01 22:56:36 +0300
committerOrgad Shaneh <orgads@gmail.com>2013-07-03 13:34:38 +0200
commit20e9b33741e04880f9f367f63a71b23c73b6a8e4 (patch)
tree04e2c279f94535df1ddd1fc726dc0990fdd5110f
parentdb4ce016bc1ffe0b35771cf0876e128009998389 (diff)
downloadqt-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.cpp9
-rw-r--r--src/plugins/vcsbase/vcsbaseeditor.h2
-rw-r--r--src/plugins/vcsbase/vcsbaseplugin.cpp2
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()));