aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit/src/org/eclipse/jgit/diff
Commit message (Collapse)AuthorAgeFilesLines
* Apply tree filter marks when pairing DiffEntry for renamesRobin Stocker2013-05-241-0/+2
| | | | | | | | | | When using a RenameDetector to generate new DiffEntries after using DiffEntry.scan, the treeFilterMarks of the original entries were lost. Now it combines the marks from src and dst. See EGit bug 335082 where this is used. Change-Id: I72b34b10ca12e3a6bd10ce44f4fa05b193fc52cc
* Fix DiffFormatter NPEs for DiffEntry without content changeRobin Stocker2013-05-151-1/+6
| | | | | | | | 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
* Add missing @since tagsMatthias Sohn2013-05-061-0/+1
| | | | | Change-Id: I9657125765716c874bb6ecf8844c34749cb3b069 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Require a DiffConfig when creating a FollowFilterDave Borowitz2013-05-052-8/+19
| | | | | | | | | | | The various rename detection options are an inherent part of the filter, similar to the path being followed. This fixes a potential NPE when a RevWalk with a FollowFilter is created without a Repository, since the old code path tried to get the DiffConfig from the RevWalk's possibly-missing repository. Change-Id: Idb273d5a92849b42935ac14eed73b796b80aad50
* Create constants in ConfigConstants for the "diff" sectionRobin Rosenberg2013-04-191-8/+16
| | | | | Change-Id: I5cf5fe60374d1e94eb031488e4f92c8e521f41a6 Signed-off-by: Chris Aniszczyk <zx@twitter.com>
* Extract method to output the first header line of a git diffTobias Pfeifer2013-01-301-6/+27
| | | | | | | | | | In order to be able to determine the range of the first header line (e.g. "diff --git a/file1 b/file2") in subclasses, the code that formats the first header line is extracted. Required by egit's change: Ia61398146c0336ab332234f24d341561292554db Change-Id: I9dd5eb964ed8b6869745c3162159b7425ac2c44a Signed-off-by: Tobias Pfeifer <to.pfeifer@sap.com>
* Enable marking entries using TreeFilters in DiffEntryRobin Stocker2013-01-231-2/+91
| | | | | | | | | | | | | | | | | | | | This adds a new optional TreeFilter[] argument to DiffEntry.scan. All filters will be checked during the scan to determine if an entry should be "marked" with regard to that filter. After having called scan, the user can then call isMarked(int) on the entries to find out whether they matched the TreeFilter with the passed index. An example use case for this is in the file diff viewer of EGit's History view, where we'd like to highlight entries that are matching the current filter. See EGit change I03da4b38d1591495cb290909f0e4c6e52270e97f. Bug: 393610 Change-Id: Icf911fe6fca131b2567514f54d66636a44561af1 Signed-off-by: Robin Stocker <robin@nibor.org> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Make jgit diff obey core.autocrlfRobin Rosenberg2012-12-271-57/+1
| | | | Change-Id: I0a756943d95ee20f189c154b27cd2972a116f550
* Mark non-externalizable strings as suchRobin Rosenberg2012-12-277-43/+45
| | | | | | | | | | A few classes such as Constanrs are marked with @SuppressWarnings, as are toString() methods with many liternal, but otherwise $NLS-n$ is used for string containing text that should not be translated. A few literals may fall into the gray zone, but mostly I've tried to only tag the obvious ones. Change-Id: I22e50a77e2bf9e0b842a66bdf674e8fa1692f590
* Add Javadoc description for packagesRobin Stocker2012-10-311-0/+4
| | | | | | | | | These appear as descriptions in the index, see here (currently empty): http://download.eclipse.org/jgit/docs/latest/apidocs/ Change-Id: If7996deef30ae688bade8b3ad6b19547ca3d8b50 Signed-off-by: Chris Aniszczyk <zx@twitter.com>
* Fix Javadoc formatting of org.eclipse.jgit.diff packageRobin Stocker2012-10-1712-61/+65
| | | | | | | | | | | | | Without explicit <p> elements, Javadoc joins all paragraph, resulting in unreadable Javadoc output, e.g. see here: http://download.eclipse.org/jgit/docs/jgit-2.1.0.201209190230-r/apidocs/org/eclipse/jgit/diff/MyersDiff.html Also, <pre> is needed to preserve pre-formatted content. The reflowing of text was automatically done on save. Change-Id: Ia02dd6d759ae066700098e22669ef925e3c813b5
* Removed unused parameters from private methodsRobin Rosenberg2012-06-061-2/+2
| | | | | Change-Id: I60bc03b9550ccd2350918e6328276ec9839748d5 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Add missing @since tags to mark API added in 2.0Matthias Sohn2012-05-101-1/+3
| | | | | | Change-Id: I0a86ce0e393dfde9bb27f0b29e036e76c856396e Signed-off-by: Matthias Sohn <matthias.sohn@sap.com> Signed-off-by: Chris Aniszczyk <zx@twitter.com>
* Remove 86 boxing warningsKevin Sawicki2012-05-081-3/+3
| | | | | | | | Use Integer, Character, and Long valueOf methods when passing parameters to MessageFormat and other places that expect objects instead of primitives Change-Id: I5942fbdbca6a378136c00d951ce61167f2366ca4
* Handle content length in WorkingTreeIteratorRobin Rosenberg2012-03-271-1/+2
| | | | | | | | | | Content length is computed and cached (short term) in the working tree iterator when core.autocrlf is set. Hopefully this is a cleaner fix than my previous attempt to make autocrlf work. Change-Id: I1b6bbb643101a00db94e5514b5e2b069f338907a
* Move JGitText to an internal packageRobin Rosenberg2012-03-127-7/+7
| | | | Change-Id: I763590a45d75f00a09097ab6f89581a3bbd3c797
* RawText#getEOL() does the same thing as RawText#getLineDelimiter()Tomasz Zarna2012-03-051-19/+0
| | | | | | | | | The duplication has been introduced when merging I08e1369e142bb19f42a8d7bbb5a7d062cc8533fc and I18adc63596f4657516ccc6d704a561924c79d445. The former should have been manually rebased. It also missed a copyright update in ApplyCommandTest. Change-Id: I18fe6108220f964524fb16b719604222aa7abee6
* Add ApplyCommand to JGit APITomasz Zarna2012-03-041-0/+20
| | | | | | | Bug: 361548 CQ: 6243 Change-Id: I08e1369e142bb19f42a8d7bbb5a7d062cc8533fc Signed-off-by: Chris Aniszczyk <zx@twitter.com>
* Allow to get end-of-line characters for a RawTextTomasz Zarna2012-03-021-0/+17
| | | | | Bug: 370320 Change-Id: I18adc63596f4657516ccc6d704a561924c79d445 Signed-off-by: Kevin Sawicki <kevin@github.com>
* Add getters for old and new prefixes in DiffFormatterTomasz Zarna2012-02-021-0/+18
| | | | | Bug: 370318 Change-Id: Iaf9282ba55ee3bb4e2c27fb71c598b308771bf57
* DiffFormatter#format(List) fails unless #scan(ATI, ATI) is called firstTomasz Zarna2011-12-231-1/+3
| | | | | Bug: 354919 Change-Id: I710394fe6675e0e5aa66d9118c5b10d433aa30ea
* Report diff entries for files that only change modeKevin Sawicki2011-12-142-0/+6
| | | | | | | | This also updates DiffFormatter to not write path lines for entries that have the same object id Bug: 361570 Change-Id: I830a78e2babf472503630a7aa020ebfd5c7e69c6
* Allow detecting which files were renamed during a revwalkCarsten Pfeiffer2011-10-251-1/+1
| | | | | | | | | | | | The egit history view shows the files associated with a commit by using a PathFilter. When following renames with a FollowFilter, the PathFilter cannot be configured anymore because the affected files are simply not known. Thus, it should be possible to get to know which files are renamed. Bug: 302549 Change-Id: I4761e9f5cfb4f0ef0b0e1e38991401a1d5003bea
* Adds DiffEntry.scan(TreeWalk, boolean) methodDariusz Luksza2011-08-171-1/+37
| | | | | | | | | | | | | | | Adds method into DiffEntry class that allows to specify whether changed trees are included in scanning result list. By default changed trees aren't added, but in some cases having changed tree would be useful. Also adds check for tree count in TreeWalk and when it is different from two it will thrown an IllegalArgumentException. This change is required by egit I7ddb21e7ff54333dd6d7ace3209bbcf83da2b219 Change-Id: I5a680a73e1cffa18ade3402cc86008f46c1da1f1 Signed-off-by: Dariusz Luksza <dariusz@luksza.org> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Change EditList to extend ArrayListShawn O. Pearce2011-05-311-50/+6
| | | | | | | | | | | There is no reason for this type to contain an ArrayList and try to hide the implementation. It only slows down execution by adding an extra layer of method dispatch to each invocation. Instead subclass from ArrayList. Change-Id: Ifbb9c7060c2fe3d5a7397c1aa85fbade14088637 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Add a DiffFormatter which calculates a patch-idStefan Lay2011-05-242-9/+110
| | | | | | | | | | | Adds a class which can be used to calculates a SHA1 of the diff associated with a patch, similar to git patch-id. In this version whitespace is not ignored. Change-Id: I421d15ea905e23df543082786786841cbe3ef10d Signed-off-by: Stefan Lay <stefan.lay@sap.com> Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
* Fix diff bug on inserted lineShawn O. Pearce2011-05-161-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For the following patch on the linux 2.6.32 tag: --- a/kernel/sched_fair.c +++ b/kernel/sched_fair.c @@ -685,6 +685,7 @@ static void enqueue_sleeper(struct cfs_rq *cfs_rq, struct sc static void check_spread(struct cfs_rq *cfs_rq, struct sched_entity *se) { +#if 0 #ifdef CONFIG_SCHED_DEBUG s64 d = se->vruntime - cfs_rq->min_vruntime; @@ -694,6 +695,7 @@ static void check_spread(struct cfs_rq *cfs_rq, struct sched if (d > 3*sysctl_sched_latency) schedstat_inc(cfs_rq, nr_spread_over); #endif +#endif } static void JGit produced an incorrect diff, attempting to add a new "}" instead of the new "#endif" at the end of the hunk. This was caused by a prior fix for bug 328895 where we wanted to "slide" a diff down in the file when adding a new method/function and want to show the closing curly brace as being added after the new method, rather than added onto the end of the prior function or method just before the insertion point. Bug: 345956 Change-Id: I32b9e24f1e2980258b1b39dd1807919ab1c5f9b2 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Fix diff when first text is the start of the otherRobin Rosenberg2011-05-151-1/+1
| | | | | | | | | | 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>
* DiffFormatter: Use IndexDiffFilter to speed up working treeShawn O. Pearce2010-12-101-15/+27
| | | | | | | | | If DiffFormatter is asked to compare the index to the working tree, it can go faster by using the cached stat information to compare the two entries rather than relying on SHA-1 computation alone. Change-Id: Icb21c15b8279ee8cee382e5e179e0cf8903aee4d Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Remove empty iterator from TreeWalkShawn O. Pearce2010-12-071-1/+0
| | | | | | | | | | | | | | | | | Its confusing that a new TreeWalk() needs to have reset() invoked on it before addTree(). This is a historical accident caused by how TreeWalk was abused within ObjectWalk. Drop the initial empty tree from the TreeWalk and thus remove a number of pointless reset() operations from unit tests and some of the internal JGit code. Existing application code which is still calling reset() will simply be incurring a few unnecessary field assignments, but they should consider cleaning up their code in the future. Change-Id: I434e94ffa43491019e7dff52ca420a4d2245f48b Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Fixed Merge Algorithm regarding concurrent file creationsChristian Halstrick2010-12-021-0/+3
| | | | | | | | | | | | When in OURS and THEIRS a new file is created we want a conflict when the two contents differ. If on two branches the same file with the same content is created this should not be a conflict. But: the current merge algorithm is throwing NPEs in this case. Fix this by choosing an empty RawText as common base if the base is empty. Change-Id: I21cb23f852965b82fb82ccd66ec961c7edb3ac3d Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
* Merge "Fix DiffConfig to understand "copy" resp. "copies" for diff.renames ↵Shawn Pearce2010-11-291-3/+46
|\ | | | | | | property."
| * Fix DiffConfig to understand "copy" resp. "copies" for diff.renames property.Marc Strapetz2010-11-291-3/+46
| | | | | | | | | | | | | | | | Rename detection should be considered enabled if diff.renames config property is set to "copy" or "copies", instead of throwing IllegalArgumentException. Change-Id: If55d955e37235d4d00f5b0febd6aa10c0e27814e
* | Make diff algorithm configurableChristian Halstrick2010-11-262-1/+41
|/ | | | | | | | | | | | | | | | The diff algorithm which is used by Merge, Cherry-Pick, Rebase should be configurable. A new configuration parameter "diff.algorithm" is introduced which currently accepts the values "myers" or "histogram". Based on this parameter for example the ResolveMerger will choose a diff algorithm. The reason for this is bug 331078. This bug shows that JGit is more compatible with C Git when histogram diff is in place. But since histogram diff is quite new we need an easy way to fall back to Myers diff. Bug: 331078 Change-Id: I2549c992e478d991c61c9508ad826d1a9e539ae3 Signed-off-by: Christian Halstrick <christian.halstrick@sap.com> Signed-off-by: Philipp Thun <philipp.thun@sap.com>
* RenameDetector: Only scan deletes if adds existShawn O. Pearce2010-11-121-9/+8
| | | | | | | | | If there are only deletes, don't need perform rename or copy detection. There are no adds (aka destinations) for the deletes to match against. Change-Id: I00fb90c509fa26a053de561dd8506cc1e0f5799a Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* SimilarityRenameDetector: Initialize sizes to 0Shawn O. Pearce2010-11-121-9/+4
| | | | | | | | | | | Setting the array elements to -1 is more expensive than relying on the allocator to zero the array for us first. Shifting the code to always add 1 to the size (so an empty file is actually 1 byte long) allows us to detect an unloaded size by comparing to 0, thus saving the array fill calls. Change-Id: Iad859e910655675b53ba70de8e6fceaef7cfcdd1 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* SimilarityRenameDetector: Avoid allocating source indexShawn O. Pearce2010-11-121-8/+11
| | | | | | | | | | | | | | | | | If the only file added is really small, and all of the deleted files are really big, none of the permutations will match up due to the sizes being too far apart to fit the current rename score. Avoid allocating the really big deleted SimilarityIndex by deferring its construction until at least one add along that row has a reasonable chance of matching it. This avoids expending a lot of CPU time looking at big deleted binary files when a small modified text file was broken due to a high percentage of changed lines. Change-Id: I11ae37edb80a7be1eef8cc01d79412017c2fc075 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* SimilarityRenameDetector: Only attempt to index large files onceShawn O. Pearce2010-11-121-0/+10
| | | | | | | | | | | | | | | If a file fails to index the first time the loop encounters it, the file is likely to fail to index again on the next row. Rather than wasting a huge amount of CPU to index it again and fail, remember which destination files failed to index and skip over them on each subsequent row. Because this condition is very unlikely, avoid allocating the BitSet until its actually needed. This keeps the memory usage unaffected for the common case. Change-Id: I93509b28b61a9bba8f681a7b4df4c6127bca2a09 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* SimilarityIndex: Don't overflow internal counter fieldsShawn O. Pearce2010-11-121-9/+20
| | | | | | | | | | | | | | | | | | | | | | | | | The counter portion of each pair is only 32 bits wide, but is part of a larger 64 bit integer. If the file size was larger than 4 GB the counter could overflow and impact the key, changing the hash, and later resulting in an incorrect similarity score. Guard against this overflow condition by capping the count for each record at 2^32-1. If any record contains more than that many bytes the table aborts hashing and throws TableFullException. This permits the index to scan and work on files that exceed 4 GB in size, but only if the file contains more than one unique block. The index throws TableFullException on a 4 GB file containing all zeros, but should succeed on a 6 GB file containing unique lines. The index now uses a 64 bit accumulator during the common scoring algorithm, possibly resulting in slower summations. However this index is already heavily dependent upon 64 bit integer operations being efficient, so increasing from 32 bits to 64 bits allows us to correctly handle 6 GB files. Change-Id: I14e6dbc88d54ead19336a4c0c25eae18e73e6ec2 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* SimilarityIndex: Accept files larger than 8 MBShawn O. Pearce2010-11-123-26/+80
| | | | | | | | | | | | | | | | | | | Files bigger than 8 MB (2^23 bytes) tended to overflow the internal hashtable, as the table was capped in size to 2^17 records. If a file contained 2^17 unique data blocks/lines, the table insertion got stuck in an infinite loop as the able couldn't grow, and there was no open slot for the new item. Remove the artifical 2^17 table limit and instead allow the table to grow to be as big as 2^30. With a 64 byte block size, this permits hashing inputs as large as 64 GB. If the table reaches 2^30 (or cannot be allocated) hashing is aborted. RenameDetector no longer tries to break a modify file pair, and it does not try to match the file for rename or copy detection. Change-Id: Ibb4d756844f4667e181e24a34a468dc3655863ac Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* SimilarityIndex: Correct comment explaining the logicShawn O. Pearce2010-11-121-2/+2
| | | | | | | | | This comment was wrong, due to a copy-and-paste error. Here the code is looking at records of dst that do not exist in src, and are skipping past them to find another match. Change-Id: I07c1fba7dee093a1eeffcf7e0c7ec85446777ffb Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Fix ugly diff showing insertion of new methodShawn O. Pearce2010-11-011-1/+18
| | | | | | | | | | | When adding a new method near the end of the sequence we want to show the full method inserted, and not tear the prior method due to the common trailing curly brace being consumed as part of the common end region of the sequences. Bug: 328895 Change-Id: I233bc40445fb5452863f5fb082bc3097433a8da6 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Fix broken HistogramDiffShawn O. Pearce2010-11-011-11/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | HistogramDiff failed on cases where the initial element for the LCS was actually very common (e.g. has 20 occurrences), and the first element of the inserted region after the LCS was also common but had fewer occurrences (e.g. 10), while the LCS also contained a unique element (1 occurrence). This happens often in Java source code. The initial element for the LCS might be the empty line ("\n"), and the inserted but common element might be "\t/**\n", with the LCS being a large span of lines that contains unique method declarations. Even though "/**" occurs less often than the empty line its not a better LCS if the LCS we already have contains a unique element. The logic in HistogramDiff would normally have worked fine, except I tried to optimize scanning of B by making tryLongestCommonSequence return the end of the region when there are matching elements found in A. This allows us to skip over the current LCS region, as it has already been examined, but caused us to fail to identify an element that had a lower occurrence count within the region. The solution used here is to trade space-for-time by keeping a table of A positions to their occurrence counts. This allows the matching logic to always use the smallest count for this region, even if the smallest count doesn't appear on the initial element. The new unit test testEdit_LcsContainsUnique() verifies this new behavior works as expected. Bug: 328895 Change-Id: Id170783b891f645b6a8cf6f133c6682b8de40aaf Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Correct typo in HistogramDiffIndex JavadocShawn O. Pearce2010-10-291-1/+1
| | | | | Change-Id: I8bd2e81fcc14aa86919c504f1d0001944dea50b2 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Fix oddness check in MyersDiff for negative numbersRobin Stocker2010-10-281-3/+3
| | | | | | | | It's probably not possible that these numbers are negative in the algorithm, but it's cleaner this way and gets rid of three more FindBugs warnings. Change-Id: Ifbce4e2c787fb9a7cd309c605e8d86211ef8a352
* Add getString utility functions to RawTextShawn O. Pearce2010-10-131-2/+63
| | | | | | | | | | | These routines can be useful when debugging, because we can add an expression to the Eclipse "Expressions" panel to show the text that appears on a line. Gerrit Code Review also uses these in its own subclass of RawText in order to format patch files, so pulling it up to be part of core JGit may help other applications too. Change-Id: I20a6b112e3403ecfc1c2715ae75dcecc1a85b167 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Remove dead RawText(RawTextComparator) constructorShawn O. Pearce2010-10-131-15/+0
| | | | | | | | | | Since the introduction of HashedSequence we no longer need to supply the RawTextComparator at the time of constructing a RawText. Drop the definition from the constructor, because it doesn't make sense as part of our public API. Change-Id: Iaab34611d60eee4a2036830142b089b2dae81842 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Fix RawTextComparator reduceCommonStartEnd at empty linesShawn O. Pearce2010-10-131-0/+8
| | | | | | | | | | | | | | | | | When an empty line was inserted at the beginning of the common end part of a RawText the comparator incorrectly considered it to be common, which meant the DiffAlgorithm would later not even have it be part of the region it examines. This would cause JGit to skip a line of insertion, which later confused Gerrit Code Review when it tried to match up the pre and post RawText files for a difference that had this type of insertion. Define two new unit tests to check for this insertion of a blank line condition and correct for it by removing the LF from the common region when the condition is detected. Change-Id: I2108570eb2929803b9a56f9fb9c400c758e7156b Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Delete PatienceDiffShawn O. Pearce2010-10-112-621/+0
| | | | | | | | | HistogramDiff outperforms it for any case where PatienceDiff needs to fallback to another algorithm. Consequently it's not worth keeping around, because we would always want a fallback enabled. Change-Id: I39b99cb1db4b3be74a764dd3d68cd4c9ecd91481 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Use HistogramDiff by default in DiffFormatterShawn O. Pearce2010-10-111-2/+2
| | | | | | | | Its behavior is similar to PatienceDiff, and runs nearly as fast, often beating the performance of MyersDiff. Change-Id: I43c3faefa8109f1a68ef57522bec9cf27b5df252 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>