forked from qt-creator/qt-creator
DiffEditor: Fix git diff parsing for rename + mode change
Sample output: diff --git a/projects/cosign/build.sh b/projects/argo/build.sh old mode 100755 new mode 100644 similarity index 88% rename from projects/cosign/build.sh rename to projects/argo/build.sh index 87d865d2..14b8885c --- a/projects/cosign/build.sh +++ b/projects/argo/build.sh @@ -13,7 +13,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # ################################################################################ +$SRC/cncf-fuzzing/projects/argo/build.sh + -compile_go_fuzzer github.com/sigstore/cosign/test FuzzGetPassword fuzz_getPassword gofuzz Change-Id: Ifa66dfdb80b309d72f524f15c681823ab7e133ba Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
committed by
Orgad Shaneh
parent
9f7c822197
commit
be1f89c93c
@@ -1341,6 +1341,26 @@ void DiffEditor::Internal::DiffEditorPlugin::testReadPatch_data()
|
||||
|
||||
QTest::newRow("Mode change") << patch << fileDataList9;
|
||||
|
||||
//////////////
|
||||
patch = R"(diff --git a/old.sh b/new.sh
|
||||
old mode 100644
|
||||
new mode 100755
|
||||
similarity index 100%
|
||||
rename from old.sh
|
||||
rename to new.sh
|
||||
)"
|
||||
;
|
||||
|
||||
fileData1 = FileData();
|
||||
fileData1.leftFileInfo = DiffFileInfo("old.sh");
|
||||
fileData1.rightFileInfo = DiffFileInfo("new.sh");
|
||||
fileData1.fileOperation = FileData::RenameFile;
|
||||
|
||||
QList<FileData> fileDataList10;
|
||||
fileDataList10 << fileData1;
|
||||
|
||||
QTest::newRow("Mode change + rename") << patch << fileDataList10;
|
||||
|
||||
//////////////
|
||||
|
||||
// Subversion New
|
||||
|
@@ -997,12 +997,15 @@ static QList<FileData> readDiffPatch(StringView patch, bool *ok, QFutureInterfac
|
||||
// The git diff patch format (CopyFile, RenameFile)
|
||||
// 0. [some text lines to skip, e.g. show description]\n
|
||||
// 1. diff --git a/[leftFileName] b/[rightFileName]\n
|
||||
// 2. [dis]similarity index [0-100]%\n
|
||||
// 2a. old mode [oldFileModeNumber]\n
|
||||
// new mode [newFileModeNumber]\n
|
||||
// 2b. <Nothing, only in case when no ChangeMode>
|
||||
// 3. [dis]similarity index [0-100]%\n
|
||||
// [copy / rename] from [leftFileName]\n
|
||||
// [copy / rename] to [rightFileName]
|
||||
// 3a. <Nothing more, only when similarity index was 100%>
|
||||
// 3b. index [leftIndexSha]..[rightIndexSha] <optionally: octalNumber>
|
||||
// 4. --- [leftFileNameOrDevNull]\n
|
||||
// 4a. <Nothing more, only when similarity index was 100%>
|
||||
// 4b. index [leftIndexSha]..[rightIndexSha] <optionally: octalNumber>
|
||||
// 5. --- [leftFileNameOrDevNull]\n
|
||||
// +++ [rightFileNameOrDevNull]\n
|
||||
// <Chunks>
|
||||
|
||||
@@ -1164,10 +1167,21 @@ static bool detectFileData(StringView patch, FileData *fileData, StringView *rem
|
||||
|
||||
} else {
|
||||
// copy / rename
|
||||
|
||||
StringView afterModeOrSimilarity;
|
||||
StringView afterSimilarity;
|
||||
// (dis)similarity index [0-100]%
|
||||
readLine(afterDiffGit, &afterSimilarity, &hasNewLine);
|
||||
const StringView secondLine = readLine(afterDiffGit, &afterModeOrSimilarity, &hasNewLine);
|
||||
if (secondLine.startsWith(QLatin1String("old mode "))) {
|
||||
if (!hasNewLine)
|
||||
return false;
|
||||
readLine(afterModeOrSimilarity, &afterModeOrSimilarity, &hasNewLine); // new mode
|
||||
if (!hasNewLine)
|
||||
return false;
|
||||
// (dis)similarity index [0-100]%
|
||||
readLine(afterModeOrSimilarity, &afterSimilarity, &hasNewLine);
|
||||
} else {
|
||||
afterSimilarity = afterModeOrSimilarity;
|
||||
}
|
||||
|
||||
if (!hasNewLine)
|
||||
return false; // we need to have at least one more line
|
||||
|
||||
|
Reference in New Issue
Block a user