public virtual void TestParse_AddNoNewline() { NGit.Patch.Patch p = ParseTestPatchFile(); NUnit.Framework.Assert.AreEqual(1, p.GetFiles().Count); NUnit.Framework.Assert.IsTrue(p.GetErrors().IsEmpty()); FileHeader f = p.GetFiles()[0]; NUnit.Framework.Assert.AreEqual("a", f.GetNewPath()); NUnit.Framework.Assert.AreEqual(256, f.startOffset); NUnit.Framework.Assert.AreEqual("f2ad6c7", f.GetOldId().Name); NUnit.Framework.Assert.AreEqual("c59d9b6", f.GetNewId().Name); NUnit.Framework.Assert.AreEqual(FileHeader.PatchType.UNIFIED, f.GetPatchType()); NUnit.Framework.Assert.AreSame(FileMode.REGULAR_FILE, f.GetOldMode()); NUnit.Framework.Assert.AreSame(FileMode.REGULAR_FILE, f.GetNewMode()); NUnit.Framework.Assert.AreEqual(1, f.GetHunks().Count); { HunkHeader h = f.GetHunks()[0]; NUnit.Framework.Assert.AreSame(f, h.GetFileHeader()); NUnit.Framework.Assert.AreEqual(321, h.startOffset); NUnit.Framework.Assert.AreEqual(1, h.GetOldImage().GetStartLine()); NUnit.Framework.Assert.AreEqual(1, h.GetOldImage().GetLineCount()); NUnit.Framework.Assert.AreEqual(1, h.GetNewStartLine()); NUnit.Framework.Assert.AreEqual(1, h.GetNewLineCount()); NUnit.Framework.Assert.AreEqual(0, h.GetLinesContext()); NUnit.Framework.Assert.AreEqual(1, h.GetOldImage().GetLinesAdded()); NUnit.Framework.Assert.AreEqual(1, h.GetOldImage().GetLinesDeleted()); NUnit.Framework.Assert.AreSame(f.GetOldId(), h.GetOldImage().GetId()); NUnit.Framework.Assert.AreEqual(367, h.endOffset); } }
public virtual void TestParseGitFileName_Empty() { FileHeader fh = Data(string.Empty); NUnit.Framework.Assert.AreEqual(-1, fh.ParseGitFileName(0, fh.buf.Length)); NUnit.Framework.Assert.IsNotNull(fh.GetHunks()); NUnit.Framework.Assert.IsTrue(fh.GetHunks().IsEmpty()); NUnit.Framework.Assert.IsFalse(fh.HasMetaDataChanges()); }
public virtual void TestHunkHeader() { NGit.Patch.Patch p = ParseTestPatchFile("testGetText_BothISO88591.patch"); FileHeader fh = p.GetFiles()[0]; EditList list0 = fh.GetHunks()[0].ToEditList(); NUnit.Framework.Assert.AreEqual(1, list0.Count); NUnit.Framework.Assert.AreEqual(new Edit(4 - 1, 5 - 1, 4 - 1, 5 - 1), list0[0]); EditList list1 = fh.GetHunks()[1].ToEditList(); NUnit.Framework.Assert.AreEqual(1, list1.Count); NUnit.Framework.Assert.AreEqual(new Edit(16 - 1, 17 - 1, 16 - 1, 17 - 1), list1[0 ]); }
public virtual void TestParse_GitBinaryDelta() { NGit.Patch.Patch p = ParseTestPatchFile(); NUnit.Framework.Assert.AreEqual(1, p.GetFiles().Count); NUnit.Framework.Assert.IsTrue(p.GetErrors().IsEmpty()); FileHeader fh = p.GetFiles()[0]; NUnit.Framework.Assert.IsTrue(fh.GetNewPath().StartsWith("zero.bin")); NUnit.Framework.Assert.AreEqual(DiffEntry.ChangeType.MODIFY, fh.GetChangeType()); NUnit.Framework.Assert.AreEqual(FileHeader.PatchType.GIT_BINARY, fh.GetPatchType( )); NUnit.Framework.Assert.AreSame(FileMode.REGULAR_FILE, fh.GetNewMode()); NUnit.Framework.Assert.IsNotNull(fh.GetOldId()); NUnit.Framework.Assert.IsNotNull(fh.GetNewId()); NUnit.Framework.Assert.AreEqual("08e7df176454f3ee5eeda13efa0adaa54828dfd8", fh.GetOldId ().Name); NUnit.Framework.Assert.AreEqual("d70d8710b6d32ff844af0ee7c247e4b4b051867f", fh.GetNewId ().Name); NUnit.Framework.Assert.IsTrue(fh.GetHunks().IsEmpty()); NUnit.Framework.Assert.IsFalse(fh.HasMetaDataChanges()); BinaryHunk fwd = fh.GetForwardBinaryHunk(); BinaryHunk rev = fh.GetReverseBinaryHunk(); NUnit.Framework.Assert.IsNotNull(fwd); NUnit.Framework.Assert.IsNotNull(rev); NUnit.Framework.Assert.AreEqual(12, fwd.GetSize()); NUnit.Framework.Assert.AreEqual(11, rev.GetSize()); NUnit.Framework.Assert.AreSame(fh, fwd.GetFileHeader()); NUnit.Framework.Assert.AreSame(fh, rev.GetFileHeader()); NUnit.Framework.Assert.AreEqual(BinaryHunk.Type.DELTA_DEFLATED, fwd.GetType()); NUnit.Framework.Assert.AreEqual(BinaryHunk.Type.DELTA_DEFLATED, rev.GetType()); NUnit.Framework.Assert.AreEqual(496, fh.endOffset); }
public virtual void TestError_GitBinaryNoForwardHunk() { NGit.Patch.Patch p = ParseTestPatchFile(); NUnit.Framework.Assert.AreEqual(2, p.GetFiles().Count); { FileHeader fh = p.GetFiles()[0]; NUnit.Framework.Assert.AreEqual("org.spearce.egit.ui/icons/toolbar/fetchd.png", fh .GetNewPath()); NUnit.Framework.Assert.AreEqual(FileHeader.PatchType.GIT_BINARY, fh.GetPatchType( )); NUnit.Framework.Assert.IsTrue(fh.GetHunks().IsEmpty()); NUnit.Framework.Assert.IsNull(fh.GetForwardBinaryHunk()); } { FileHeader fh = p.GetFiles()[1]; NUnit.Framework.Assert.AreEqual("org.spearce.egit.ui/icons/toolbar/fetche.png", fh .GetNewPath()); NUnit.Framework.Assert.AreEqual(FileHeader.PatchType.UNIFIED, fh.GetPatchType()); NUnit.Framework.Assert.IsTrue(fh.GetHunks().IsEmpty()); NUnit.Framework.Assert.IsNull(fh.GetForwardBinaryHunk()); } NUnit.Framework.Assert.AreEqual(1, p.GetErrors().Count); FormatError e = p.GetErrors()[0]; NUnit.Framework.Assert.AreEqual(FormatError.Severity.ERROR, e.GetSeverity()); NUnit.Framework.Assert.AreEqual("Missing forward-image in GIT binary patch", e.GetMessage ()); NUnit.Framework.Assert.AreEqual(297, e.GetOffset()); NUnit.Framework.Assert.AreEqual("\n", e.GetLineText()); }
public virtual void TestParse_GitBinaryLiteral() { NGit.Patch.Patch p = ParseTestPatchFile(); int[] binsizes = new int[] { 359, 393, 372, 404 }; NUnit.Framework.Assert.AreEqual(5, p.GetFiles().Count); NUnit.Framework.Assert.IsTrue(p.GetErrors().IsEmpty()); for (int i = 0; i < 4; i++) { FileHeader fh = p.GetFiles()[i]; NUnit.Framework.Assert.AreEqual(DiffEntry.ChangeType.ADD, fh.GetChangeType()); NUnit.Framework.Assert.IsNotNull(fh.GetOldId()); NUnit.Framework.Assert.IsNotNull(fh.GetNewId()); NUnit.Framework.Assert.AreEqual(ObjectId.ZeroId.Name, fh.GetOldId().Name); NUnit.Framework.Assert.AreSame(FileMode.REGULAR_FILE, fh.GetNewMode()); NUnit.Framework.Assert.IsTrue(fh.GetNewPath().StartsWith("org.spearce.egit.ui/icons/toolbar/" )); NUnit.Framework.Assert.AreEqual(FileHeader.PatchType.GIT_BINARY, fh.GetPatchType( )); NUnit.Framework.Assert.IsTrue(fh.GetHunks().IsEmpty()); NUnit.Framework.Assert.IsTrue(fh.HasMetaDataChanges()); BinaryHunk fwd = fh.GetForwardBinaryHunk(); BinaryHunk rev = fh.GetReverseBinaryHunk(); NUnit.Framework.Assert.IsNotNull(fwd); NUnit.Framework.Assert.IsNotNull(rev); NUnit.Framework.Assert.AreEqual(binsizes[i], fwd.GetSize()); NUnit.Framework.Assert.AreEqual(0, rev.GetSize()); NUnit.Framework.Assert.AreSame(fh, fwd.GetFileHeader()); NUnit.Framework.Assert.AreSame(fh, rev.GetFileHeader()); NUnit.Framework.Assert.AreEqual(BinaryHunk.Type.LITERAL_DEFLATED, fwd.GetType()); NUnit.Framework.Assert.AreEqual(BinaryHunk.Type.LITERAL_DEFLATED, rev.GetType()); } FileHeader fh_1 = p.GetFiles()[4]; NUnit.Framework.Assert.AreEqual("org.spearce.egit.ui/plugin.xml", fh_1.GetNewPath ()); NUnit.Framework.Assert.AreEqual(DiffEntry.ChangeType.MODIFY, fh_1.GetChangeType() ); NUnit.Framework.Assert.AreEqual(FileHeader.PatchType.UNIFIED, fh_1.GetPatchType() ); NUnit.Framework.Assert.IsFalse(fh_1.HasMetaDataChanges()); NUnit.Framework.Assert.AreEqual("ee8a5a0", fh_1.GetNewId().Name); NUnit.Framework.Assert.IsNull(fh_1.GetForwardBinaryHunk()); NUnit.Framework.Assert.IsNull(fh_1.GetReverseBinaryHunk()); NUnit.Framework.Assert.AreEqual(1, fh_1.GetHunks().Count); NUnit.Framework.Assert.AreEqual(272, fh_1.GetHunks()[0].GetOldImage().GetStartLine ()); }
public virtual void TestGetText_NoBinary() { Encoding cs = Sharpen.Extensions.GetEncoding("ISO-8859-1"); NGit.Patch.Patch p = ParseTestPatchFile(); NUnit.Framework.Assert.IsTrue(p.GetErrors().IsEmpty()); NUnit.Framework.Assert.AreEqual(1, p.GetFiles().Count); FileHeader fh = p.GetFiles()[0]; NUnit.Framework.Assert.AreEqual(0, fh.GetHunks().Count); NUnit.Framework.Assert.AreEqual(ReadTestPatchFile(cs), fh.GetScriptText(cs, cs)); }
public virtual void TestParse_NoBinary() { NGit.Patch.Patch p = ParseTestPatchFile(); NUnit.Framework.Assert.AreEqual(5, p.GetFiles().Count); NUnit.Framework.Assert.IsTrue(p.GetErrors().IsEmpty()); for (int i = 0; i < 4; i++) { FileHeader fh = p.GetFiles()[i]; NUnit.Framework.Assert.AreEqual(DiffEntry.ChangeType.ADD, fh.GetChangeType()); NUnit.Framework.Assert.IsNotNull(fh.GetOldId()); NUnit.Framework.Assert.IsNotNull(fh.GetNewId()); NUnit.Framework.Assert.AreEqual("0000000", fh.GetOldId().Name); NUnit.Framework.Assert.AreSame(FileMode.MISSING, fh.GetOldMode()); NUnit.Framework.Assert.AreSame(FileMode.REGULAR_FILE, fh.GetNewMode()); NUnit.Framework.Assert.IsTrue(fh.GetNewPath().StartsWith("org.spearce.egit.ui/icons/toolbar/" )); NUnit.Framework.Assert.AreEqual(FileHeader.PatchType.BINARY, fh.GetPatchType()); NUnit.Framework.Assert.IsTrue(fh.GetHunks().IsEmpty()); NUnit.Framework.Assert.IsTrue(fh.HasMetaDataChanges()); NUnit.Framework.Assert.IsNull(fh.GetForwardBinaryHunk()); NUnit.Framework.Assert.IsNull(fh.GetReverseBinaryHunk()); } FileHeader fh_1 = p.GetFiles()[4]; NUnit.Framework.Assert.AreEqual("org.spearce.egit.ui/plugin.xml", fh_1.GetNewPath ()); NUnit.Framework.Assert.AreEqual(DiffEntry.ChangeType.MODIFY, fh_1.GetChangeType() ); NUnit.Framework.Assert.AreEqual(FileHeader.PatchType.UNIFIED, fh_1.GetPatchType() ); NUnit.Framework.Assert.IsFalse(fh_1.HasMetaDataChanges()); NUnit.Framework.Assert.AreEqual("ee8a5a0", fh_1.GetNewId().Name); NUnit.Framework.Assert.IsNull(fh_1.GetForwardBinaryHunk()); NUnit.Framework.Assert.IsNull(fh_1.GetReverseBinaryHunk()); NUnit.Framework.Assert.AreEqual(1, fh_1.GetHunks().Count); NUnit.Framework.Assert.AreEqual(272, fh_1.GetHunks()[0].GetOldImage().GetStartLine ()); }
public virtual void TestError_DisconnectedHunk() { NGit.Patch.Patch p = ParseTestPatchFile(); NUnit.Framework.Assert.AreEqual(1, p.GetFiles().Count); { FileHeader fh = p.GetFiles()[0]; NUnit.Framework.Assert.AreEqual("org.eclipse.jgit/src/org/spearce/jgit/lib/RepositoryConfig.java" , fh.GetNewPath()); NUnit.Framework.Assert.AreEqual(1, fh.GetHunks().Count); } NUnit.Framework.Assert.AreEqual(1, p.GetErrors().Count); FormatError e = p.GetErrors()[0]; NUnit.Framework.Assert.AreEqual(FormatError.Severity.ERROR, e.GetSeverity()); NUnit.Framework.Assert.AreEqual("Hunk disconnected from file", e.GetMessage()); NUnit.Framework.Assert.AreEqual(18, e.GetOffset()); NUnit.Framework.Assert.IsTrue(e.GetLineText().StartsWith("@@ -109,4 +109,11 @@ assert" )); }
public virtual void TestGetText_Convert() { Encoding csOld = Sharpen.Extensions.GetEncoding("ISO-8859-1"); Encoding csNew = Sharpen.Extensions.GetEncoding("UTF-8"); NGit.Patch.Patch p = ParseTestPatchFile(); NUnit.Framework.Assert.IsTrue(p.GetErrors().IsEmpty()); NUnit.Framework.Assert.AreEqual(1, p.GetFiles().Count); FileHeader fh = p.GetFiles()[0]; NUnit.Framework.Assert.AreEqual(2, fh.GetHunks().Count); // Read the original file as ISO-8859-1 and fix up the one place // where we changed the character encoding. That makes the exp // string match what we really expect to get back. // string exp = ReadTestPatchFile(csOld); exp = exp.Replace("\x12f\xcdngstr\x12f\x10am", "\u00c5ngstr\u00f6m"); NUnit.Framework.Assert.AreEqual(exp, fh.GetScriptText(csOld, csNew)); }
public virtual void TestError_GarbageBetweenFiles() { NGit.Patch.Patch p = ParseTestPatchFile(); NUnit.Framework.Assert.AreEqual(2, p.GetFiles().Count); { FileHeader fh = p.GetFiles()[0]; NUnit.Framework.Assert.AreEqual("org.eclipse.jgit.test/tst/org/spearce/jgit/lib/RepositoryConfigTest.java" , fh.GetNewPath()); NUnit.Framework.Assert.AreEqual(1, fh.GetHunks().Count); } { FileHeader fh = p.GetFiles()[1]; NUnit.Framework.Assert.AreEqual("org.eclipse.jgit/src/org/spearce/jgit/lib/RepositoryConfig.java" , fh.GetNewPath()); NUnit.Framework.Assert.AreEqual(1, fh.GetHunks().Count); } NUnit.Framework.Assert.AreEqual(1, p.GetErrors().Count); FormatError e = p.GetErrors()[0]; NUnit.Framework.Assert.AreEqual(FormatError.Severity.WARNING, e.GetSeverity()); NUnit.Framework.Assert.AreEqual("Unexpected hunk trailer", e.GetMessage()); NUnit.Framework.Assert.AreEqual(926, e.GetOffset()); NUnit.Framework.Assert.AreEqual("I AM NOT HERE\n", e.GetLineText()); }
public virtual void TestParse_ConfigCaseInsensitive() { NGit.Patch.Patch p = ParseTestPatchFile(); NUnit.Framework.Assert.AreEqual(2, p.GetFiles().Count); NUnit.Framework.Assert.IsTrue(p.GetErrors().IsEmpty()); FileHeader fRepositoryConfigTest = p.GetFiles()[0]; FileHeader fRepositoryConfig = p.GetFiles()[1]; NUnit.Framework.Assert.AreEqual("org.eclipse.jgit.test/tst/org/spearce/jgit/lib/RepositoryConfigTest.java" , fRepositoryConfigTest.GetNewPath()); NUnit.Framework.Assert.AreEqual("org.eclipse.jgit/src/org/spearce/jgit/lib/RepositoryConfig.java" , fRepositoryConfig.GetNewPath()); NUnit.Framework.Assert.AreEqual(572, fRepositoryConfigTest.startOffset); NUnit.Framework.Assert.AreEqual(1490, fRepositoryConfig.startOffset); NUnit.Framework.Assert.AreEqual("da7e704", fRepositoryConfigTest.GetOldId().Name); NUnit.Framework.Assert.AreEqual("34ce04a", fRepositoryConfigTest.GetNewId().Name); NUnit.Framework.Assert.AreEqual(FileHeader.PatchType.UNIFIED, fRepositoryConfigTest .GetPatchType()); NUnit.Framework.Assert.AreSame(FileMode.REGULAR_FILE, fRepositoryConfigTest.GetOldMode ()); NUnit.Framework.Assert.AreSame(FileMode.REGULAR_FILE, fRepositoryConfigTest.GetNewMode ()); NUnit.Framework.Assert.AreEqual(1, fRepositoryConfigTest.GetHunks().Count); { HunkHeader h = fRepositoryConfigTest.GetHunks()[0]; NUnit.Framework.Assert.AreSame(fRepositoryConfigTest, h.GetFileHeader()); NUnit.Framework.Assert.AreEqual(921, h.startOffset); NUnit.Framework.Assert.AreEqual(109, h.GetOldImage().GetStartLine()); NUnit.Framework.Assert.AreEqual(4, h.GetOldImage().GetLineCount()); NUnit.Framework.Assert.AreEqual(109, h.GetNewStartLine()); NUnit.Framework.Assert.AreEqual(11, h.GetNewLineCount()); NUnit.Framework.Assert.AreEqual(4, h.GetLinesContext()); NUnit.Framework.Assert.AreEqual(7, h.GetOldImage().GetLinesAdded()); NUnit.Framework.Assert.AreEqual(0, h.GetOldImage().GetLinesDeleted()); NUnit.Framework.Assert.AreSame(fRepositoryConfigTest.GetOldId(), h.GetOldImage(). GetId()); NUnit.Framework.Assert.AreEqual(1490, h.endOffset); } NUnit.Framework.Assert.AreEqual("45c2f8a", fRepositoryConfig.GetOldId().Name); NUnit.Framework.Assert.AreEqual("3291bba", fRepositoryConfig.GetNewId().Name); NUnit.Framework.Assert.AreEqual(FileHeader.PatchType.UNIFIED, fRepositoryConfig.GetPatchType ()); NUnit.Framework.Assert.AreSame(FileMode.REGULAR_FILE, fRepositoryConfig.GetOldMode ()); NUnit.Framework.Assert.AreSame(FileMode.REGULAR_FILE, fRepositoryConfig.GetNewMode ()); NUnit.Framework.Assert.AreEqual(3, fRepositoryConfig.GetHunks().Count); { HunkHeader h = fRepositoryConfig.GetHunks()[0]; NUnit.Framework.Assert.AreSame(fRepositoryConfig, h.GetFileHeader()); NUnit.Framework.Assert.AreEqual(1803, h.startOffset); NUnit.Framework.Assert.AreEqual(236, h.GetOldImage().GetStartLine()); NUnit.Framework.Assert.AreEqual(9, h.GetOldImage().GetLineCount()); NUnit.Framework.Assert.AreEqual(236, h.GetNewStartLine()); NUnit.Framework.Assert.AreEqual(9, h.GetNewLineCount()); NUnit.Framework.Assert.AreEqual(7, h.GetLinesContext()); NUnit.Framework.Assert.AreEqual(2, h.GetOldImage().GetLinesAdded()); NUnit.Framework.Assert.AreEqual(2, h.GetOldImage().GetLinesDeleted()); NUnit.Framework.Assert.AreSame(fRepositoryConfig.GetOldId(), h.GetOldImage().GetId ()); NUnit.Framework.Assert.AreEqual(2434, h.endOffset); } { HunkHeader h = fRepositoryConfig.GetHunks()[1]; NUnit.Framework.Assert.AreEqual(2434, h.startOffset); NUnit.Framework.Assert.AreEqual(300, h.GetOldImage().GetStartLine()); NUnit.Framework.Assert.AreEqual(7, h.GetOldImage().GetLineCount()); NUnit.Framework.Assert.AreEqual(300, h.GetNewStartLine()); NUnit.Framework.Assert.AreEqual(7, h.GetNewLineCount()); NUnit.Framework.Assert.AreEqual(6, h.GetLinesContext()); NUnit.Framework.Assert.AreEqual(1, h.GetOldImage().GetLinesAdded()); NUnit.Framework.Assert.AreEqual(1, h.GetOldImage().GetLinesDeleted()); NUnit.Framework.Assert.AreEqual(2816, h.endOffset); } { HunkHeader h = fRepositoryConfig.GetHunks()[2]; NUnit.Framework.Assert.AreEqual(2816, h.startOffset); NUnit.Framework.Assert.AreEqual(954, h.GetOldImage().GetStartLine()); NUnit.Framework.Assert.AreEqual(7, h.GetOldImage().GetLineCount()); NUnit.Framework.Assert.AreEqual(954, h.GetNewStartLine()); NUnit.Framework.Assert.AreEqual(7, h.GetNewLineCount()); NUnit.Framework.Assert.AreEqual(6, h.GetLinesContext()); NUnit.Framework.Assert.AreEqual(1, h.GetOldImage().GetLinesAdded()); NUnit.Framework.Assert.AreEqual(1, h.GetOldImage().GetLinesDeleted()); NUnit.Framework.Assert.AreEqual(3035, h.endOffset); } }
private int ParseHunks(FileHeader fh, int c, int end) { byte[] buf = fh.buf; while (c < end) { // If we see a file header at this point, we have all of the // hunks for our current file. We should stop and report back // with this position so it can be parsed again later. // if (RawParseUtils.Match(buf, c, DIFF_GIT) >= 0) { break; } if (RawParseUtils.Match(buf, c, DIFF_CC) >= 0) { break; } if (RawParseUtils.Match(buf, c, DIFF_COMBINED) >= 0) { break; } if (RawParseUtils.Match(buf, c, FileHeader.OLD_NAME) >= 0) { break; } if (RawParseUtils.Match(buf, c, FileHeader.NEW_NAME) >= 0) { break; } if (FileHeader.IsHunkHdr(buf, c, end) == fh.GetParentCount()) { HunkHeader h = fh.NewHunkHeader(c); h.ParseHeader(); c = h.ParseBody(this, end); h.endOffset = c; fh.AddHunk(h); if (c < end) { switch (buf[c]) { case (byte)('@'): case (byte)('d'): case (byte)('\n'): { break; } default: { if (RawParseUtils.Match(buf, c, SIG_FOOTER) < 0 && RawParseUtils.Match(buf, c, SIG_FOOTER_WINDOWS) < 0) { Warn(buf, c, JGitText.Get().unexpectedHunkTrailer); } break; } } } continue; } int eol = RawParseUtils.NextLF(buf, c); if (fh.GetHunks().IsEmpty() && (RawParseUtils.Match(buf, c, GIT_BINARY) >= 0 || RawParseUtils.Match(buf, c, GIT_BINARY_WINDOWS) >= 0)) { fh.patchType = FileHeader.PatchType.GIT_BINARY; return ParseGitBinary(fh, eol, end); } if (fh.GetHunks().IsEmpty() && ((BIN_TRAILER.Length < eol - c && RawParseUtils.Match(buf, eol - BIN_TRAILER.Length, BIN_TRAILER) >= 0 ) || (BIN_TRAILER_WINDOWS.Length < eol - c && RawParseUtils.Match(buf, eol - BIN_TRAILER_WINDOWS.Length, BIN_TRAILER_WINDOWS) >= 0)) && MatchAny(buf, c, BIN_HEADERS )) { // The patch is a binary file diff, with no deltas. // fh.patchType = FileHeader.PatchType.BINARY; return eol; } // Skip this line and move to the next. Its probably garbage // after the last hunk of a file. // c = eol; } if (fh.GetHunks().IsEmpty() && fh.GetPatchType() == FileHeader.PatchType.UNIFIED && !fh.HasMetaDataChanges()) { // Hmm, an empty patch? If there is no metadata here we // really have a binary patch that we didn't notice above. // fh.patchType = FileHeader.PatchType.BINARY; } return c; }
private int ParseHunks(FileHeader fh, int c, int end) { byte[] buf = fh.buf; while (c < end) { // If we see a file header at this point, we have all of the // hunks for our current file. We should stop and report back // with this position so it can be parsed again later. // if (RawParseUtils.Match(buf, c, DIFF_GIT) >= 0) { break; } if (RawParseUtils.Match(buf, c, DIFF_CC) >= 0) { break; } if (RawParseUtils.Match(buf, c, DIFF_COMBINED) >= 0) { break; } if (RawParseUtils.Match(buf, c, FileHeader.OLD_NAME) >= 0) { break; } if (RawParseUtils.Match(buf, c, FileHeader.NEW_NAME) >= 0) { break; } if (FileHeader.IsHunkHdr(buf, c, end) == fh.GetParentCount()) { HunkHeader h = fh.NewHunkHeader(c); h.ParseHeader(); c = h.ParseBody(this, end); h.endOffset = c; fh.AddHunk(h); if (c < end) { switch (buf[c]) { case (byte)('@'): case (byte)('d'): case (byte)('\n'): { break; } default: { if (RawParseUtils.Match(buf, c, SIG_FOOTER) < 0 && RawParseUtils.Match(buf, c, SIG_FOOTER_WINDOWS) < 0) { Warn(buf, c, JGitText.Get().unexpectedHunkTrailer); } break; } } } continue; } int eol = RawParseUtils.NextLF(buf, c); if (fh.GetHunks().IsEmpty() && (RawParseUtils.Match(buf, c, GIT_BINARY) >= 0 || RawParseUtils.Match(buf, c, GIT_BINARY_WINDOWS) >= 0)) { fh.patchType = FileHeader.PatchType.GIT_BINARY; return(ParseGitBinary(fh, eol, end)); } if (fh.GetHunks().IsEmpty() && ((BIN_TRAILER.Length < eol - c && RawParseUtils.Match(buf, eol - BIN_TRAILER.Length, BIN_TRAILER) >= 0) || (BIN_TRAILER_WINDOWS.Length < eol - c && RawParseUtils.Match(buf, eol - BIN_TRAILER_WINDOWS.Length, BIN_TRAILER_WINDOWS) >= 0)) && MatchAny(buf, c, BIN_HEADERS )) { // The patch is a binary file diff, with no deltas. // fh.patchType = FileHeader.PatchType.BINARY; return(eol); } // Skip this line and move to the next. Its probably garbage // after the last hunk of a file. // c = eol; } if (fh.GetHunks().IsEmpty() && fh.GetPatchType() == FileHeader.PatchType.UNIFIED && !fh.HasMetaDataChanges()) { // Hmm, an empty patch? If there is no metadata here we // really have a binary patch that we didn't notice above. // fh.patchType = FileHeader.PatchType.BINARY; } return(c); }