summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit
Commit message (Collapse)AuthorAgeFilesLines
* Merge branch 'stable-0.9'Shawn O. Pearce2010-09-101-1/+1
|\ | | | | | | | | * stable-0.9: Correct Javadoc for WS_IGNORE_CHANGE comparator
| * Correct Javadoc for WS_IGNORE_CHANGE comparatorShawn O. Pearce2010-09-101-1/+1
| | | | | | | | | | Change-Id: I8aa1e7c7ae192ed28b2c8aaa3c5884b7b4666e9c Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | Allow ../relative paths in remotesChris West (Faux)2010-09-101-1/+6
|/ | | | | | | | | git allows remotes to be relative paths, but the regex validating urls wouldn't accept anything starting with "..". Other functionality works fine with these paths. Bug: 311300 Change-Id: Ib74de0450a1c602b22884e19d994ce2f52634c77
* Unpack and cache large deltas as loose objectsShawn O. Pearce2010-09-075-61/+105
| | | | | | | | | | | | | | | | | | | | | | | | | | Instead of spooling large delta bases into temporary files and then immediately deleting them afterwards, spool the large delta out to a normal loose object. Later any requests for that large delta can be answered by reading from the loose object, which is much easier to stream efficiently for readers. Since the object is now duplicated, once in the pack as a delta and again as a loose object, any future prune-packed will automatically delete the loose object variant, releasing the wasted disk space. As prune-packed is run automatically during either repack or gc, and gc --auto triggers automatically based on the number of loose objects, we get automatic cache management for free. Large objects that were unpacked will be periodically cleared out, and will simply be restored later if they are needed again. After a short offline discussion with Junio Hamano today, we may want to propose a change to prune-packed to hold onto larger loose objects which also exist in pack files as deltas, if the loose object was recently accessed or modified in the last 2 days. Change-Id: I3668a3967c807010f48cd69f994dcbaaf582337c Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Remember loose objects and fast-track their lookupShawn O. Pearce2010-09-073-2/+176
| | | | | | | | | | | | | | | | | | | Recently created objects are usually what branches point to, and are usually written out as loose objects. But due to the high cost of asking the operating system if a file exists, these are the last thing that ObjectDirectory examines when looking for an object by its ObjectId. Caching recently seen loose objects permits the opening code to jump directly to the loose object, accelerating lookup for branch heads that are accessed often. To avoid exploding the cache its limited to approximately 2048 entries. When more ids are added, the table is simply cleared and reset in size. Change-Id: I18f483217412b102f754ffd496c87061d592e535 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Correctly name DeltaBaseCacheShawn O. Pearce2010-09-074-16/+8
| | | | | | | | | | | | | | | | | | | This class is used only to cache the unpacked form of an object that was used as a base for another object. The theory goes that if an object is used as a delta base for A, it will probably also be a delta base for B, C, D, E, etc. and therefore having an unpacked copy of it on hand will make delta resolution for the others very fast. However since objects are usually only accessed once, we don't want to cache everything we unpack, just things that we are likely to need again. The only things we need again are the delta bases. Hence, its a delta base cache. This gets us the class name UnpackedObjectCache back, so we can use it to actually create a cache of unpacked object information. Change-Id: I121f356cf4eca7b80126497264eac22bd5825a1d Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Support core.autocrlf = inputShawn O. Pearce2010-09-076-9/+151
| | | | | | | | | | | | | | The core.autocrlf variable can take on three values: false, true, and input. Parsing it as a boolean is wrong, we instead need to parse a tri-state enumeration. Add support for parsing and setting enum values from Java from and to the text based configuration file, and use that to handle the autocrlf variable. Bug: 301775 Change-Id: I81b9e33087a33d2ef2eac89ba93b9e83b7ecc223 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Refactor diff sequence APIShawn O. Pearce2010-09-0615-569/+432
| | | | | | | | | | | | | | | Instead of making the sequence itself responsible for the equivalence function, use an external function that is supplied by the caller. This cleans up the code because we now say cmp.equals(a, ai, b, bi) instead of a.equals(ai, b, bi). This refactoring also removes the odd concept of creating different types of sequences to have different behaviors for whitespace ignoring. Instead DiffComparator now supports singleton functions that apply a particular equivalence algorithm to a type of sequence. Change-Id: I559f494d81cdc6f06bfb4208f60780c0ae251df9 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Merge "Reduce compares in Edit.getType"Chris Aniszczyk2010-09-061-7/+12
|\
| * Reduce compares in Edit.getTypeShawn O. Pearce2010-09-031-7/+12
| | | | | | | | | | | | | | | | | | | | We can slightly optimize this method by removing some compares based on knowledge of how the orderings have to work. This way a getType() invocation requires at most 2 int compares for any result, vs. the 6 required to find REPLACE before. Change-Id: I62a04cc513a6d28c300d1c1496a8608d5df4efa6 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | Fix checkReferencedIsReachable to use correct base listShawn O. Pearce2010-09-062-10/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When checkReferencedIsReachable is set in ReceivePack we are trying to prove that the push client is permitted to access an object that it did not send to us, but that the received objects link to either via a link inside of an object (e.g. commit parent pointer or tree member) or by a delta base reference. To do this check we are making a list of every potential delta base, and then ensuring that every delta base used appears on this list. If a delta base does not appear on this list, we abort with an error, letting the client know we are missing a particular object. Preventing spurious errors about missing delta base objects requires us to use the exact same list of potential delta bases as the remote push client used. This means we must use TOPO ordering, and we need to enable BOUNDARY sorting so that ObjectWalk will correctly include any trees found during the enumeration back to the common merge base between the interesting and uninteresting heads. To ensure JGit's own push client matches this same potential delta base list, we need to undo 60aae90d4d15 ("Disable topological sorting in PackWriter") and switch back to using the conventional TOPO ordering for commits in a pack file. This ensures that our own push client will use the same potential base object list as checkReferencedIsReachable uses on the receiving side. Change-Id: I14d0a326deb62a43f987b375cfe519711031e172 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | Discard object bodies when checking connectivityShawn O. Pearce2010-09-061-0/+2
| | | | | | | | | | | | | | | | | | | | Since we are only checking the links between objects we don't need to hold onto commit messages after their headers have been parsed by the walker. Dropping them saves a bit of memory, which is always good when accepting huge pack files. Change-Id: I378920409b6acf04a35cdf24f81567b1ce030e36 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | DeltaStream: Fix data corruption when reading large copiesShawn O. Pearce2010-09-061-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If the copy instruction was larger than the input buffer given to us, we copied the wrong part of the base stream during the next read(). This occurred on really big binary files where a copy instruction of 64k wasn't unreasonable, but the caller's buffer was only 8192 bytes long. We copied the first 8192 bytes correctly, but then reseeked the base stream back to the start of the copy region on the second read of 8192 bytes. Instead of a sequence like ABCD being read into the caller, we read AAAA. Change-Id: I240a3f722a3eda1ce8ef5db93b380e3bceb1e201 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | Use 8192 as default buffer size in ObjectLoader copyToShawn O. Pearce2010-09-061-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As ObjectStreams are supposed to be buffered, most implementors will be wrapping their underlying stream inside of a BufferedInputStream in order to satisfy this requirement. Because developers are by nature lazy, they will use the default buffer size rather than specify their own. The OpenJDk JRE implementations use 8192 as the default buffer size, and when the higher level reader uses the same buffer size the buffers "stack" nicely by avoiding a copy to the internal buffer array. As OpenJDK is a popular virtual machine, we should try to benefit from this nice stacking property during copyTo(). Change-Id: I69d53f273b870b841ced2be2e9debdfd987d98f4 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | Merge "Add helper methods to Edit"Chris Aniszczyk2010-09-061-0/+41
|\|
| * Add helper methods to EditShawn O. Pearce2010-09-031-0/+41
| | | | | | | | | | | | | | | | | | | | | | | | Exposing isEmpty, getLengthA, getLengthB make it easier to examine the state of an edit and work with it from higher level code. The before and after cut routines make it easy to split an edit that contains another edit, such as to decompose a REPLACE that contains a common sequence within it. Change-Id: Id63d6476a7a6b23acb7ab237d414a0a1a7200290 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | Merge "Use 5 MiB for RevWalk default limit"Shawn O. Pearce2010-09-062-27/+3
|\ \
| * | Use 5 MiB for RevWalk default limitShawn O. Pearce2010-09-022-27/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Instead of getting the limit from CoreConfig, use the larger of the reader's limit or 5 MiB, under the assumption that any annotated tag or commit of interest should be under 5 MiB. But if a repository was really insane and had bigger objects, the reader implementation can set its streaming limit higher in order to allow RevWalk to still process it. Change-Id: If2c15235daa3e2d1f7167e781aa83fedb5af9a30 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | | cleanup: Remove unnecessary @SuppressWarningsRobin Rosenberg2010-09-051-1/+0
| |/ |/| | | | | | | Change-Id: I1b239b587e1cc811bbd6e1513b07dc93a891a842 Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
* | Fix QuotedString.GIT_PATH escaping rulesShawn O. Pearce2010-09-031-1/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | We shouldn't escape non-special ASCII characters such as '@' or '~'. These are valid in a path name on POSIX systems, and may appear as part of a path in a GNU or Git style patch script. Escaping them into octal just obfuscates the user's intent, with no gain. When parsing an escaped octal sequence, we must parse no more than 3 digits. That is, "\1002" is actually "@2", not the Unicode character \u0202. Change-Id: I3a849a0d318e69b654f03fd559f5d7f99dd63e5c Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | Remove costly quoting test in DiffFormatterShawn O. Pearce2010-09-031-2/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | QuotedString.GIT_PATH returns the input reference exactly if the string does not require quoting, otherwise it returns a copy that contains the quotes on either end, plus escapes in the middle where necessary to meet conventions. Testing the return against '"' + name + '"' is always false, because GIT_PATH will never return it that way. The only way we have quotes on either end is if there is an escape in the middle, in which case the string isn't equal anyway. Change-Id: I4d21d8e5c7da0d7df9792c01ce719548fa2df16b Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | Merge branch 'unpack-error'Shawn O. Pearce2010-09-034-0/+70
|\ \ | |/ |/| | | | | | | | | * unpack-error: ReceivePack: Rethrow exceptions caught during indexing Change-Id: I0d0239d69cb5cd1a622bdee879978f0299e0ca40
| * ReceivePack: Rethrow exceptions caught during indexingShawn O. Pearce2010-09-034-0/+70
| | | | | | | | | | | | | | | | | | | | | | | | | | If we get an exception while indexing the incoming pack, its likely a stream corruption. We already report an error to the client, but we eat the stack trace, which makes debugging issues related to a bug inside of JGit nearly impossible. Rethrow it under a new type UnpackException, so embedding servers or applications can catch the error and provide it to a human who might be able to forward such traces onto a JGit developer for evaluation. Change-Id: Icad41148bbc0c76f284c7033a195a6b51911beab Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | Move ObjectDirectory streaming limit to WindowCacheConfigShawn O. Pearce2010-09-027-30/+35
| | | | | | | | | | | | | | | | | | | | | | | | | | IDEs like Eclipse offer up the settings in WindowCacheConfig to the user as a global set of options that are configured for the entire JVM process, not per-repository, as the cache is shared across the entire JVM. The limit on how much we are willing to allocate for an object buffer is similar to the limit on how much we can use for data caches, allocating that much space impacts the entire JVM and not just a single repository, so it should be a global limit. Change-Id: I22eafb3e223bf8dea57ece82cd5df8bfe5badebc Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | Support creating the working directory differenceShawn O. Pearce2010-09-025-41/+471
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If the iterators passed into a diff formatter are working tree iterators, we should enable ignoring files that are ignored, as well as actually pull up the current content from the working tree rather than getting it from the repository. Because we abstract away the working directory access logic, we can now actually support rename detection between the working directory and the local repository when using a DiffFormatter. This means its possible for an application to show an unstaged delete-add pair as a rename if the add path is not ignored. (Because the ignored file wouldn't show up in our difference output.) Even more interesting is we can now do rename detection between any two working trees, if both input iterators are WorkingTreeIterators. Unfortunately we don't (yet) optimize for comparing the working tree with the index involved so we can take advantage of cached stat data to rule out non-dirty paths. Change-Id: I4c0598afe48d8f99257266bf447a0ecd23ca7f5e Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | Fix TreeWalk bug comparing DirCache and WorkingTree with ANY_DIFFShawn O. Pearce2010-09-026-6/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When comparing a DirCache and a WorkingTree using ANY_DIFF we sometimes didn't recursive into a subtree of both sides gave us zeroId() back for the identity of a subtree. This happens when the DirCache doesn't have a valid cache tree for the subtree, as then it uses zeroId() for the ObjectId of the subtree, which then appears to be equal to the zeroId() of the WorkingTreeIterator's subtree. We work around this by adding a hasId() method that returns true only if this iterator has a valid ObjectId. The idEquals method on TreeWalk than only performs a compare between two iterators if both iterators have a valid id. Change-Id: I695f7fafbeb452e8c0703a05c02921fae0822d3f Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | Move rename detection, path following into DiffFormatterShawn O. Pearce2010-09-023-36/+368
| | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* | Merge "Fix RepositoryState.MERGING"Chris Aniszczyk2010-09-021-2/+2
|\ \
| * | Fix RepositoryState.MERGINGJens Baumgart2010-09-021-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | canResetHead now returns true. Resetting mixed / hard works in EGit in merging state. Change-Id: I1512145bbd831bb9734528ce8b71b1701e3e6aa9 Signed-off-by: Jens Baumgart <jens.baumgart@sap.com>
* | | Merge "Add reset() to AbstractTreeIterator API"Chris Aniszczyk2010-09-025-0/+45
|\ \ \
| * | | Add reset() to AbstractTreeIterator APIShawn O. Pearce2010-09-015-0/+45
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This allows callers to force the iterator back to its starting point, so it can be traversed again. The default way to do this is to use back(1) until first() is true, but this isn't very efficient for any iterator. All current implementations have better ways to implement reset without needing to seek backwards. Change-Id: Ia26e6c852fdac8a0e9c80ac72c8cca9d897463f4 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | | | Merge "Improve DiffFormatter text file access"Chris Aniszczyk2010-09-021-38/+75
|\| | |
| * | | Improve DiffFormatter text file accessShawn O. Pearce2010-09-011-38/+75
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When we are asked to create a difference between two files the caller really wants to see that output. Instead of punting because a file is too big to process, consider it to be binary. This reduces the accuracy of our output display, but makes it a lot more likely that the formatter can still generate something semi-useful. We set our default binary threshold to 50 MiB, which is the same threshold that PackWriter uses before punting and deciding a file is too big to delta compress. Anything under this size we try to load and process, anything over that size (or that won't allocate in the heap) gets tagged as binary. Change-Id: I69553c9ef96db7f2058c6210657f1181ce882335 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | | | Merge "Correct diff header formatting"Chris Aniszczyk2010-09-021-84/+165
|\| | |
| * | | Correct diff header formattingShawn O. Pearce2010-09-011-84/+165
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* | | | Merge "Remove duplicated code in DiffFormatter"Chris Aniszczyk2010-09-021-33/+23
|\| | |
| * | | Remove duplicated code in DiffFormatterShawn O. Pearce2010-09-011-33/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Instead of trying to stream out the header, we can drop a redundant code path by formatting the header into a temporary buffer and then streaming out the actual line differences later. Its a small amount of unnecessary work to buffer the file header, but these are typically very tiny so the cost to format and reparse is relatively low. Change-Id: Id14a527a74ee0bd7e07f46fdec760c22b02d5bdf Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | | | Merge "Adding sorting to LongList"Christian Halstrick2010-09-021-0/+7
|\ \ \ \
| * | | | Adding sorting to LongListShawn O. Pearce2010-09-021-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sorting the array can be useful when its being used as a map of pairs that are appended into the array and then later merge-joined against another array of similar semantics. Change-Id: I2e346ef5c99ed1347ec0345b44cda0bc29d03e90 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | | | | Merge "Use int[] rather than IntList for RawText hashes"Christian Halstrick2010-09-025-11/+9
|\| | | | | |_|/ / |/| | |
| * | | Use int[] rather than IntList for RawText hashesShawn O. Pearce2010-09-015-11/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We know exactly how many lines we need by the time we compute our per-line hashes, as we have already built the lines IntList to give us the starting position of each line in the buffer. Using that we can properly size the array, and don't need the dynamic growing feature of IntList. So drop the indirection and just use a fixed size array. Change-Id: I5c8c592514692a8abff51e5928aedcf71e100365 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | | | Merge "Add toString and improve Javadoc of NotIgnoredFilter"Chris Aniszczyk2010-09-011-13/+11
|\ \ \ \ | |/ / / |/| | |
| * | | Add toString and improve Javadoc of NotIgnoredFilterShawn O. Pearce2010-09-011-13/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Today while debugging some TreeWalk related code I noticed this filter did not have a toString(), making it harder to see what the filter graph was at a glance in the debugger. Add a toString() for debugging to match other TreeFilters, and clean up the Javadoc slightly so its a bit more clear about the purpose of the filter. While we are mucking about with some of this code, simplify the logic of include so its shorter and thus faster to read. The pattern now more closely matches that of SkipWorkTreeFilter. Change-Id: Iad433a1fa6b395dc1acb455aca268b9ce2f1d41b Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | | | Refactor Git API exceptions to a new packageChris Aniszczyk2010-09-0116-28/+102
|/ / / | | | | | | | | | | | | | | | | | | | | | Create a new 'org.eclipse.jgit.api.errors' package to contain exceptions related to using the Git porcelain API. Change-Id: Iac1781bd74fbd520dffac9d347616c3334994470 Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
* | | IndexDiff honors Index entries' "skipWorkTree" flag.Marc Strapetz2010-09-012-2/+100
| | | | | | | | | | | | | | | Change-Id: I428d11412130b64fc46d7052011f5dff3d653802 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | | Merge "Avoid double quotes in Git Config"Shawn Pearce2010-09-011-3/+9
|\ \ \
| * | | Avoid double quotes in Git ConfigMathias Kinzler2010-09-011-3/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently, if a branch is created that has special chars ('#' in the bug), Config will surround the subsection name with double quotes during it's toText method which will result in an invalid file after saving the Config. Bug: 318249 Change-Id: I0a642f52def42d936869e4aaaeb6999567901001 Signed-off-by: Mathias Kinzler <mathias.kinzler@sap.com>
* | | | Merge "Add FS.detect() for detection of file system abstraction."Shawn Pearce2010-09-011-6/+34
|\ \ \ \ | |_|/ / |/| | |
| * | | Add FS.detect() for detection of file system abstraction.Marc Strapetz2010-09-011-6/+34
| |/ / | | | | | | | | | | | | | | | To give the user more control on which file system abstraction should be used on Windows, FS.detect() may be configured to assume a Cygwin installation or nor.
* | | Move DiffFormatter default initialization to fieldsShawn O. Pearce2010-09-011-4/+2
| | | | | | | | | | | | | | | | | | | | | | | | Other fields in this class are initialized in their declaration, make the code consistent with itself and use only one style. Change-Id: I49a007e97ba52faa6b89f7e4b1eec85dccac0fa4 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>