aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/DiffFormatterTest.java
Commit message (Collapse)AuthorAgeFilesLines
* Make the buffer size for text/binary detection configurableThomas Wolf2021-10-301-8/+8
| | | | | | | | | | | | | | | | | | | | | | | | | The various streams used in JGit for text/binary and CR-LF detection used different buffer sizes. Most used 8000, but one used 8KiB, and one used 8096 (SIC!) bytes. Considering only the first 8kB of a file/blob is not sufficient; it may give behavior incompatible with C git. C git considers the whole blob; since it uses memory-mapped files it can do so with acceptable performance. Doing this in JGit would most likely incur a noticeable performance penalty. But 8kB is a bit small; in the file in bug 576971 the limit was hit before the first CR-LF, which occurred on line 155 at offset 9759 in the file. Make RawText.FIRST_FEW_BYTES only a default and minimum setting, and set it to 8KiB. Make the actual buffer size configurable: provide static methods getBufferSize() and setBuffersize(), and use getBufferSize() throughout instead of the constant. This enables users of the JGit library to set their own possibly larger buffer size. Bug: 576971 Change-Id: I447762c9a5147a521f73d2864ba59ed89f555d54 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* Fix PathSuffixFilter: can decide only on full pathsThomas Wolf2021-06-211-1/+69
| | | | | | | | | | | On a subtree, a PathSuffixFilter must return -1 ("indeterminate"), not 0 ("include"), otherwise negation goes wrong: an indeterminate result (-1) is passed on, but a decision (0/1) is inverted. As a result a negated PathSuffixFilter would skip all folders. Bug: 574253 Change-Id: I27fe785c0d772392a5b5efe0a7b1c9cafcb6e566 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* DiffFormatter: correctly deal with tracked files in ignored foldersThomas Wolf2020-07-171-1/+55
| | | | | | | | | | | | | | | | | | | | | | | | In JGit 5.0, the FileTreeIterator was changed to skip ignored folders by default. To catch tracked files inside ignored folders, the tree walk needs to have a DirCacheIterator, and the FileTreeIterator has to know about that DirCacheIterator via setDirCacheIterator(). (Or the optimization has to be switched off explicitly via setWalkIgnoredDirectories(true).) Skipping ignored directories is an important optimization in some cases, for instance in node.js/npm projects, where we'd otherwise traverse the whole huge and deep hierarchy of the typically ignored node_modules folder. While all uses of WorkingTreeIterator in JGit had been adapted, DiffFormatter was forgotten. To make it work correctly (again) also for such cases, make it set up a WorkingTreeeIterator automatically, and make sure the WorkingTreeSource can find such files, too. Also pass the repository to the TreeWalks used inside the DiffFormatter to pick up the correct attributes, filters, and line-ending settings. Bug: 565081 Change-Id: Ie88ac81166dc396ba28b83313964c1712b6ca199 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* DiffFormatterTest: Add a test to confirm the default rename detection settingsDavid Pursehouse2020-06-261-0/+13
| | | | | | | | | | | | | | | Add a test that confirms: - No rename detector is initialized by default - Rename detector is initialized after calling setDetectRenames(true) - Rename limit and rename score have the default values 400 and 60, respectively. Note that there are no constants for these values so the test hard codes them. Change-Id: I327e2b348a40ef67d8a184e5ab09f4e9ab573e1c Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* Update EDL 1.0 license headers to new short SPDX compliant formatMatthias Sohn2020-01-041-38/+5
| | | | | | | | | | This is the format given by the Eclipse legal doc generator [1]. [1] https://www.eclipse.org/projects/tools/documentation.php?id=technology.jgit Bug: 548298 Change-Id: I8d8cabc998ba1b083e3f0906a8d558d391ffb6c4 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Fix DiffFormatter for diffs against working tree with autocrlf=trueThomas Wolf2018-03-071-0/+98
| | | | | | | | | | | | | | The WorkingTreeSource produced an ObjectLoader that returned inconsistent sizes: the file size in getSize(), but then a correctly filtered smaller stream in openStream(). This resulted either in an IOE "short read of block" or in an EOFException depending on the resulting filtered size. Fix this by ensuring that getSize() does return the size of the filtered stream. Bug: 530106 Change-Id: I7c7c85036047dc10030ed29c1d5a6c7f34f2bdff Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* Enable and fix warnings about redundant specification of type argumentsDavid Pursehouse2017-02-201-1/+1
| | | | | | | | | | Since the introduction of generic type parameter inference in Java 7, it's not necessary to explicitly specify the type of generic parameters. Enable the warning in Eclipse, and fix all occurrences. Change-Id: I9158caf1beca5e4980b6240ac401f3868520aad0 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* Deprecate SafeBufferedOutputStreamShawn Pearce2016-11-141-5/+5
| | | | | | | | | | | | | | | | | | | | | Java 8 fixed the silent flush during close issue by FilterOutputStream (base class of BufferedOutputStream) using try-with-resources to close the stream, getting a behavior matching what JGit's SafeBufferedOutputStream was doing: try { flush(); } finally { out.close(); } With Java 8 as the minimum required version to run JGit it is no longer necessary to override close() or have this class. Deprecate the class, and use the JRE's version of close. Change-Id: Ic0584c140010278dbe4062df2e71be5df9a797b3
* Merge branch 'stable-4.1' into stable-4.2Matthias Sohn2016-02-101-0/+62
|\ | | | | | | | | | | | | | | * stable-4.1: Fix diff for added and removed submodule Change-Id: I37dd71ed19b06e9bbcffe37370081ab875c6d8d4 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
| * Fix diff for added and removed submoduleHugo Arès2016-02-041-0/+62
| | | | | | | | | | | | | | | | | | Since If13f7b406, submodule difference are shown as a hunk. The issue was that added and removed submodule were considered as Edit.REPLACE instead of Edit.INSERT and Edit.DELETE in the DiffFormatter result. Change-Id: I4330c2aa3f10e29d7d6b0b2e5286e59293a06239 Signed-off-by: Hugo Arès <hugo.ares@ericsson.com>
* | DiffFormatterTest: Remove accidentally added trailing whitespaceDavid Pursehouse2016-01-211-2/+2
| | | | | | | | | | Change-Id: Ia7a3b05b79c3a5530a4445e6e48ceae445425224 Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
* | DiffFormatterTest: Create auto-closeable instances in try-with-resourceDavid Pursehouse2016-01-211-78/+82
|/ | | | | | | | Git, ByteArrayOutputStream, and DiffFormatter are auto-closeable and should be managed in try-with-resource. Change-Id: I83395116acb4b4f7cd4300fd69564355bc07e4bb Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
* Show submodule difference as a hunkJacob Keller2015-09-241-3/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Current DiffFormat behavior regarding submodules (aka git links) is incorrect. The "Subproject commit <sha1>" appears as part of the diff header, rather than as its own hunk. --> From JGit implementation diff --git a/plugins/cookbook-plugin b/plugins/cookbook-plugin index b9d3ca8..ec6ed89 160000 --- a/plugins/cookbook-plugin +++ b/plugins/cookbook-plugin -Subproject commit b9d3ca8a65030071e28be19296ba867ab424fbbf +Subproject commit ec6ed89c47ba7223f82d9cb512926a6c5081343e --> From C Git 2.5.2 diff --git a/plugins/cookbook-plugin b/plugins/cookbook-plugin index b9d3ca8..ec6ed89 160000 --- a/plugins/cookbook-plugin +++ b/plugins/cookbook-plugin @@ -1 +1 @@ -Subproject commit b9d3ca8a65030071e28be19296ba867ab424fbbf +Subproject commit ec6ed89c47ba7223f82d9cb512926a6c5081343e The current way of processing submodules results in no hunk header and includes the contents of the hunk as part of the headers. To fix this, we can't just have our writeGitLinkDiffText output the hunk header. We have to change the flow so that the raw text gets parsed as a diff. The easiest way to do this is to fake the RawText in the FormatResult when we have a GITLINK. It should be noted that it seems possible for there to be a difference between a GITLINK and a non-GITLINK, but I don't think this can happen in practice, so I don't think we need to worry too much about it. This patch also fixes up the test for GitLink headers, as the test was for the old behavior. My setup has 3 other failing tests which may or may not be the result of environmental changes. However, the same tests fail without this commit, so I do not believe they are related. Bug: 477759 Change-Id: If13f7b406904fad814416c93ed09ea47ef183337 Signed-off-by: Jacob Keller <jacob.keller@gmail.com>
* Replace deprecated release() methods by close()Matthias Sohn2015-05-211-2/+3
| | | | | | | | See the discussion [1] in the Gerrit mailing list. [1] https://groups.google.com/forum/#!topic/repo-discuss/RRQT_xCqz4o Change-Id: I2c67384309c5c2e8511a7d0d4e088b4e95f819ff Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Handle diff formatting when there is nothing to compare withRobin Rosenberg2014-07-061-0/+78
| | | | | | | | DiffFormatter now suports either side being null and the log program will output the diff for the first commit. Bug: 395791 Change-Id: I378957b57e9ad1f7195ba416f402178453f0ebd3
* Eliminate warning about overlapping variable namesRobin Rosenberg2014-07-041-5/+5
| | | | Change-Id: I7e749092c5b51e2857c186088e2c5c6c6d295367
* [findBugs] Don't ignore exceptional return value of File.mkdir()Matthias Sohn2014-02-181-1/+2
| | | | Change-Id: Ic4c61472412aa158a355bb444805cde8c5d2833a Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* [findBugs] Don't rely on default encodingMatthias Sohn2014-02-181-1/+1
| | | | Change-Id: I9be2ffe95e8d716326ba63b67672741ac316f9a5 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* [findBugs] Don't call toString() on a stringMatthias Sohn2014-02-181-1/+1
| | | | Change-Id: I0b91ffd473e2f14623ddf409e4f0f342c8941e42 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Fix diff header on renamed or copied filesShawn Pearce2014-02-181-0/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | When git-core renames or copies a file and the mode differs the header shows the mode change first, then the rename or copy data: diff --git a/COPYING b/LICENSE old mode 100644 new mode 100755 similarity index 92% rename from COPYING rename to LICENSE index d645695..54863be --- a/COPYING +++ b/LICENSE @@ -56,20 +56,6 @@ JGit relies on this ordering inside of FileHeader. Parsing "new file mode NNN" after "copy from/to" or "rename from/to" resets the change type to be ADD, losing the COPIED or RENAMED status and old path. This fixes a 4 year old bug in Gerrit Code Review that prevents opening a file for review if the file was copied from another file, modified in this change, and the mode was updated (e.g. execute bit was added). Change-Id: If4c9ecd61ef0ca8e3e1ea857301f7b5c948efb96 [ms: added test case] Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Fix DiffFormatter NPEs for DiffEntry without content changeRobin Stocker2013-05-151-1/+30
| | | | | | | | DiffEntry.getOldId() returns null for a diff without an index line (e.g. only mode changed, rename without content change). Bug: 407743 Change-Id: I42eac87421f2a53c985af260a253338f578492bc
* Move base test classes to the junit bundle for reuse for Java 7 testsRobin Rosenberg2013-02-041-1/+1
| | | | Change-Id: Iedb54eb9d8396bc3ae66d8754c1527fd9ca655f9
* Declare essentially static methods as staticRobin Rosenberg2012-12-271-2/+3
| | | | Change-Id: I83ca25fb569c0dbc36eb374d5437fcf2b65a6f68
* Add type argumente to some raw reclarationRobin Rosenberg2012-12-271-2/+3
| | | | Change-Id: Ief195fb5c55f75172f0428fdac8c8874292ae566
* Make sure all bytes are written to files on close, or get an error.Robin Rosenberg2012-01-151-2/+2
| | | | | | | | | | Java's BufferedOutputStream swallows any errors that occur when flushing the buffer in close(). This class overrides close to make sure an error during the final flush is reported back to the caller. Change-Id: I74a82b31505fadf8378069c5f6554f1033c28f9b Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Fix diff when first text is the start of the otherRobin Rosenberg2011-05-151-0/+40
| | | | | | | | | | The problem occurred when the first text ends in the middle of the last line of the other text and the first text has no end of line. Bug: 344975 Change-Id: I1f0dd9f8062f2148a7c1341c9122202e082ad19d Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
* Convert all JGit unit tests to JUnit 4Robin Rosenberg2010-12-311-0/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | Eclipse has some problem re-running single JUnit tests if the tests are in Junit 3 format, but the JUnit 4 launcher is used. This was quite unnecessary and the move was not completed. We still have no JUnit4 test. This completes the extermination of JUnit3. Most of the work was global searce/replace using regular expression, followed by numerous invocarions of quick-fix and organize imports and verification that we had the same number of tests before and after. - Annotations were introduced. - All references to JUnit3 classes removed - Half-good replacement for getting the test name. This was needed to make the TestRngs work. The initialization of TestRngs was also made lazily since we can not longer find out the test name in runtime in the @Before methods. - Renamed test classes to end with Test, with the exception of TestTranslateBundle, which fails from Maven - Moved JGitTestUtil to the junit support bundle Change-Id: Iddcd3da6ca927a7be773a9c63ebf8bb2147e2d13 Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Move rename detection, path following into DiffFormatterShawn O. Pearce2010-09-021-5/+12
| | | | | | | | | | | | | Applications just want a quick way to configure our diff implementation, and then just want to use it without a lot of fuss. Move all of the rename detection logic and path following logic out of our pgm package and into DiffFormatter itself, making it much easier for a GUI to take advantage of the features without duplicating a lot of code. Change-Id: I4b54e987bb6dc804fb270cbc495fe4cae26c7b0e Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Correct diff header formattingShawn O. Pearce2010-09-011-0/+70
| | | | | | | | | | | | | | | | | | | | | | When adding or deleting a file, we shouldn't ever prefix /dev/null with the a/ or b/ prefixes. Doing so is a mistake and confuses a patch parser which handles /dev/null magically, while a/dev/null is a file called null in the dev directory of the project. Also when adding or deleting the "diff --git" line has the "real" path on both sides, so we should see the following when adding the file called foo: diff --git a/foo b/foo --- /dev/null +++ b/foo The --- and +++ lines do not appear in a pure rename or copy delta, C Git diff seems to omit these, so we now omit them as well. We also omit the index line when the ObjectIds are exactly equal. Change-Id: Ic46892dea935ee8bdee29088aab96307d7ec6d3d Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Fully implement SHA-1 abbreviationsShawn O. Pearce2010-08-231-5/+5
| | | | | | | | | | | | | | | | | | ObjectReader implementations are now responsible for creating the unique abbreviation of an ObjectId, or for resolving an abbreviation back to its full form. In this latter case the reader can offer up multiple candidates to the caller, who may be able to disambiguate them based on context. Repository.resolve() doesn't take multiple candidates into account right now, but it could in the future by looking for a remaining ^0 or ^{commit} suffix and take an expansion if there is only one commit that matches the input abbreviation. It could also use the distance from an annotated tag to resolve "tag-NNN-gcommit" style strings that are often output by `git describe`. Change-Id: Icd3250adc8177ae05278b858933afdca0cbbdb56 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Create FileHeader from DiffEntryJeff Schumacher2010-07-081-0/+186
Added support for converting DiffEntrys to FileHeaders. FileHeaders are DiffEntrys with a buffer containing the diff output as well as a list of HunkHeaders. The HunkHeaders contain EditLists. The createFileHeader(DiffEntry) method in DiffFormatter performs a Myers Diff on the files refered to by the DiffEntry, then puts the returned EditList into a single HunkHeader, which is then put into the FileHeader to be returned. It also generates the appropriate diff header an puts it into the FileHeader's buffer. The rest of the diff output, which would normally be parsed to generate the HunkHeaders, is not generated. In fact, the purpose of this method is to avoid the costly diff output generation and parsing normally required to create a FileHeader. Change-Id: I7d8b18c0f6c85e3d02ad58995d3d231e69af5887