VCS: Use more FilePath in VcsBaseEditor

Change-Id: I5b9ec56b5669c81872796511b56f5c5e59e452af
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
Orgad Shaneh
2022-10-13 20:38:03 +03:00
committed by Orgad Shaneh
parent 5d2e4f7d99
commit 46df40a919
2 changed files with 30 additions and 40 deletions

View File

@@ -91,11 +91,11 @@ bool DiffChunk::isValid() const
return !fileName.isEmpty() && !chunk.isEmpty();
}
QByteArray DiffChunk::asPatch(const QString &workingDirectory) const
QByteArray DiffChunk::asPatch(const FilePath &workingDirectory) const
{
QString relativeFile = workingDirectory.isEmpty() ?
fileName : QDir(workingDirectory).relativeFilePath(fileName);
const QByteArray fileNameBA = QFile::encodeName(relativeFile);
const FilePath relativeFile = workingDirectory.isEmpty() ?
fileName : fileName.relativeChildPath(workingDirectory);
const QByteArray fileNameBA = QFile::encodeName(relativeFile.toString());
QByteArray rc = "--- ";
rc += fileNameBA;
rc += "\n+++ ";
@@ -525,7 +525,7 @@ public:
TextEditorWidget *q;
const VcsBaseEditorParameters *m_parameters = nullptr;
QString m_workingDirectory;
FilePath m_workingDirectory;
QRegularExpression m_diffFilePattern;
QRegularExpression m_logEntryPattern;
@@ -808,12 +808,12 @@ void VcsBaseEditorWidget::setHighlightingEnabled(bool e)
FilePath VcsBaseEditorWidget::workingDirectory() const
{
return FilePath::fromString(d->m_workingDirectory);
return d->m_workingDirectory;
}
void VcsBaseEditorWidget::setWorkingDirectory(const FilePath &wd)
{
d->m_workingDirectory = wd.toString();
d->m_workingDirectory = wd;
}
QTextCodec *VcsBaseEditorWidget::codec() const
@@ -1187,7 +1187,7 @@ DiffChunk VcsBaseEditorWidget::diffChunk(QTextCursor cursor) const
if (!chunkStart || !block.isValid())
return rc;
QString header;
rc.fileName = findDiffFile(fileNameFromDiffSpecification(block, &header));
rc.fileName = FilePath::fromString(findDiffFile(fileNameFromDiffSpecification(block, &header)));
if (rc.fileName.isEmpty())
return rc;
// Concatenate chunk and convert
@@ -1317,15 +1317,7 @@ bool VcsBaseEditor::gotoLineOfEditor(Core::IEditor *e, int lineNumber)
// ('git diff XX' -> 'XX' , 'git diff XX file' -> 'XX/file').
QString VcsBaseEditor::getSource(const FilePath &workingDirectory, const QString &fileName)
{
if (fileName.isEmpty())
return workingDirectory.toString();
QString rc = workingDirectory.toString();
const QChar slash = QLatin1Char('/');
if (!rc.isEmpty() && !(rc.endsWith(slash) || rc.endsWith(QLatin1Char('\\'))))
rc += slash;
rc += fileName;
return rc;
return workingDirectory.pathAppended(fileName).toString();
}
QString VcsBaseEditor::getSource(const FilePath &workingDirectory, const QStringList &fileNames)
@@ -1414,25 +1406,24 @@ QString VcsBaseEditorWidget::findDiffFile(const QString &f) const
return in.isFile() ? f : QString();
// 1) Try base dir
const QChar slash = QLatin1Char('/');
if (!d->m_workingDirectory.isEmpty()) {
const QFileInfo baseFileInfo(d->m_workingDirectory + slash + f);
const FilePath baseFileInfo = d->m_workingDirectory.pathAppended(f);
if (baseFileInfo.isFile())
return baseFileInfo.absoluteFilePath();
return baseFileInfo.absoluteFilePath().toString();
}
// 2) Try in source (which can be file or directory)
if (!source().isEmpty()) {
const QFileInfo sourceInfo(source());
const QString sourceDir = sourceInfo.isDir() ? sourceInfo.absoluteFilePath()
: sourceInfo.absolutePath();
const QFileInfo sourceFileInfo(sourceDir + slash + f);
const FilePath sourcePath = FilePath::fromString(source());
if (!sourcePath.isEmpty()) {
const FilePath sourceDir = sourcePath.isDir() ? sourcePath.absoluteFilePath()
: sourcePath.absolutePath();
const FilePath sourceFileInfo = sourceDir.pathAppended(f);
if (sourceFileInfo.isFile())
return sourceFileInfo.absoluteFilePath();
return sourceFileInfo.absoluteFilePath().toString();
const FilePath topLevel =
VcsManager::findTopLevelForDirectory(FilePath::fromString(sourceDir));
VcsManager::findTopLevelForDirectory(sourceDir);
if (topLevel.isEmpty())
return QString();
return {};
const FilePath topLevelFile = topLevel.pathAppended(f);
if (topLevelFile.isFile())
@@ -1449,7 +1440,7 @@ QString VcsBaseEditorWidget::findDiffFile(const QString &f) const
if (f.endsWith(QLatin1Char('\t')))
return findDiffFile(f.left(f.length() - 1));
return QString();
return {};
}
void VcsBaseEditorWidget::addDiffActions(QMenu *, const DiffChunk &)
@@ -1459,12 +1450,12 @@ void VcsBaseEditorWidget::addDiffActions(QMenu *, const DiffChunk &)
void VcsBaseEditorWidget::slotAnnotateRevision(const QString &change)
{
const int currentLine = textCursor().blockNumber() + 1;
const QString fileName = fileNameForLine(currentLine);
QString workingDirectory = d->m_workingDirectory;
if (workingDirectory.isEmpty())
workingDirectory = QFileInfo(fileName).absolutePath();
emit annotateRevisionRequested(FilePath::fromString(workingDirectory),
QDir(workingDirectory).relativeFilePath(fileName),
const FilePath fileName = FilePath::fromString(fileNameForLine(currentLine));
const FilePath workingDirectory = d->m_workingDirectory.isEmpty()
? fileName.absolutePath()
: d->m_workingDirectory;
emit annotateRevisionRequested(workingDirectory,
fileName.relativeChildPath(workingDirectory).toString(),
change, currentLine);
}
@@ -1498,9 +1489,8 @@ bool VcsBaseEditorWidget::canApplyDiffChunk(const DiffChunk &dc) const
{
if (!dc.isValid())
return false;
const QFileInfo fi(dc.fileName);
// Default implementation using patch.exe relies on absolute paths.
return fi.isFile() && fi.isAbsolute() && fi.isWritable();
return dc.fileName.isFile() && dc.fileName.isAbsolutePath() && dc.fileName.isWritableFile();
}
// Default implementation of revert: Apply a chunk by piping it into patch,
@@ -1508,7 +1498,7 @@ bool VcsBaseEditorWidget::canApplyDiffChunk(const DiffChunk &dc) const
bool VcsBaseEditorWidget::applyDiffChunk(const DiffChunk &dc, PatchAction patchAction) const
{
return Core::PatchTool::runPatch(dc.asPatch(d->m_workingDirectory),
FilePath::fromString(d->m_workingDirectory), 0, patchAction);
d->m_workingDirectory, 0, patchAction);
}
QString VcsBaseEditorWidget::fileNameFromDiffSpecification(const QTextBlock &inBlock, QString *header) const

View File

@@ -50,9 +50,9 @@ class VCSBASE_EXPORT DiffChunk
{
public:
bool isValid() const;
QByteArray asPatch(const QString &workingDirectory) const;
QByteArray asPatch(const Utils::FilePath &workingDirectory) const;
QString fileName;
Utils::FilePath fileName;
QByteArray chunk;
QByteArray header;
};