summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit
Commit message (Collapse)AuthorAgeFilesLines
* 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>
* | Correct Javadoc of DiffFormatter classShawn O. Pearce2010-09-011-1/+1
|/ | | | | | | | This class does a lot more than just reflow a patch script, it now is the primary means of creating a diff output. Change-Id: I74467c9a53dc270ef8c84e7c75f388414ec8ba8f Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Partial support for index file format "3".Marc Strapetz2010-08-314-15/+83
| | | | | | | | Extended flags are processed and available via DirCacheEntry's new isSkipWorkTree() and isIntentToAdd() methods. "resolve-undo" information is completely ignored since its an optional extension. Change-Id: Ie6e9c6784c9f265ca3c013c6dc0e6bd29d3b7233
* Merge "DirCacheEntry: UPDATE_NEEDED should be in-core flag."Shawn Pearce2010-08-311-4/+8
|\
| * DirCacheEntry: UPDATE_NEEDED should be in-core flag.Marc Strapetz2010-08-311-4/+8
| | | | | | | | | | | | In correspondance to CGit, UPDATE_NEEDED flag should not be written to disk. Furthermore, it currently intersects CGit's CE_EXTENDED flag.
* | Fix RawParseUtils.formatBase10 to work with negative valuesMarc Strapetz2010-08-311-0/+2
| | | | | | | | | | Change-Id: Iffa220de76c5e180796fa46c4d67f52a1b3b2e35 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | Remove deprecated PersonIdent constructorChris Aniszczyk2010-08-311-24/+0
| | | | | | | | | | Change-Id: I3831de1b6df25a52df30d367f0216573e6ee6b53 Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
* | Improve MergeAlgorithm to produce smaller conflictsChristian Halstrick2010-08-311-4/+35
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The merge algorithm was reporting conflicts which where to big. Example: The common base was "ABC", the "ours" version contained "AB1C" (the addition of "1" after pos 2) and the "theirs" version also contained "AB1C". We have two potentially conflicting edits in the same region which happen to bring in exactly the same content. This should not be a conflict - but was previously reported as "AB<<<1===1>>>C". This is fixed by checking every conflicting chunk whether the conflicting regions have a common prefix or suffix and by removing this regions from the conflict. Change-Id: I4dc169b8ef7a66ec6b307e9a956feef906c9e15e Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
* | Let Resolve be the default Merge strategyChristian Halstrick2010-08-311-1/+1
| | | | | | | | | | | | | | the merge command should use by default the "resolve" merge strategy. Change-Id: I6c6973a3397cca12bd8a6bd950d04b1766a08b4c Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
* | Added merge strategy RESOLVEChristian Halstrick2010-08-316-68/+800
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This adds the first merge strategy to JGit which does real content-merges if necessary. The new merge strategy "resolve" takes as input three commits: a common base, ours and theirs. It will simply takeover changes on files which are only touched in ours or theirs. For files touched in ours and theirs it will try to merge the two contents knowing taking into account the specified common base. Rename detection has not been introduced for now. Change-Id: I49a5ebcdcf4f540f606092c0f1dc66c965dc66ba Signed-off-by: Christian Halstrick <christian.halstrick@sap.com> Signed-off-by: Stefan Lay <stefan.lay@sap.com>
* | Improve LargeObjectException reportingShawn O. Pearce2010-08-308-13/+111
| | | | | | | | | | | | | | | | | | | | Use 3 different types of LargeObjectException for the 3 major ways that we can fail to load an object. For each of these use a unique string translation which describes the root cause better than just the ObjectId.name() does. Change-Id: I810c98d5691b74af9fc6cbd46fc9879e35a7bdca Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | IndexPack: Use byte limited form of getCachedBytesShawn O. Pearce2010-08-301-2/+2
| | | | | | | | | | | | | | | | | | | | Currently our algorithm requires that we have the delta base as a contiguous byte array... but getCachedBytes() might not work if the object is considered to be large by its underlying loader. Use the limited form to obtain the object as a byte array instead. Change-Id: I33f12a8811cb6a4a67396174733f209db8119b42 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | Undo translation of protocol string 'unpack error'Shawn O. Pearce2010-08-303-3/+1
| | | | | | | | | | | | | | | | | | | | | | | | This string is part of the network protocol, and isn't meant to be translated into another language. Clients actually scan for the string "unpack error " off the wire and react magically to this information. If it were translated, they would instead have a protocol exception, which isn't very useful when there is already an error occurring. Change-Id: Ia5dc8d36ba65ad2552f683bb637e80b77a7d92f0 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | Merge "Buffer very large delta streams to reduce explosion of CPU work"Shawn O. Pearce2010-08-284-4/+273
|\ \
| * | Buffer very large delta streams to reduce explosion of CPU workShawn O. Pearce2010-08-274-4/+273
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Large delta streams are unpacked incrementally, but because a delta can seek to a random position in the base to perform a copy we may need to inflate the base repeatedly just to complete one delta. So work around it by copying the base to a temporary file, and then we can read from that temporary file using random seeks instead. Its far more efficient because we now only need to inflate the base once. This is still really ugly because we have to dump to a temporary file, but at least the code can successfully process a large file without throwing OutOfMemoryError. If speed is an issue, the user will need to increase the JVM heap and ensure core.streamFileThreshold is set to a higher value, so we don't use this code path as often. Unfortunately we lose the "optimization" of skipping over portions of a delta base that we don't actually need in the final result. This is going to cause us to inflate and write to disk useless regions that were deleted and do not appear in the final result. We could later improve on our code by trying to flatten delta instruction streams before we touch the bottom base object, and then only store the portions of the base we really need for the final result and that appear out-of-order. Since that is some pretty complex code I'm punting on it for now and just doing this simple whole-object buffering. Because the process umask might be permitting other users to read files we create, we put the temporary buffers into $GIT_DIR/objects. We can reasonably assume that if a reader can read our temporary buffer file in that directory, they can also read the base pack file we are pulling it from and therefore its not a security breach to expose the inflated content in a file. This requires a reader to have write access to the repository, but only if the file is really big. I'd rather err on the side of caution here and refuse to read a very big file into /tmp than to possibly expose a secured content because the Java 5 JVM won't let us create a protected temporary file that only the current user can access. Change-Id: I66fb80b08cbcaf0f65f2db0462c546a495a160dd Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | | Revert "Hide Maven target directories from Eclipse"Robin Rosenberg2010-08-281-11/+0
|/ / | | | | | | | | | | | | | | | | This reverts commit db4c516f673e4c274e55adc27a95891c52a5aba8 since it breaks compatibility with Eclipse 3.5 which can no longer import the projects Bug: 323390 Change-Id: I3cc91364a6747cfcb4c611a9be5258f81562f726
* | Add TagCommandChris Aniszczyk2010-08-275-0/+382
| | | | | | | | | | | | | | | | | | A tag command is added to the Git porcelain API. Tests were also added to stress test the tag command. Change-Id: Iab282a918eb51b0e9c55f628a3396ff01c9eb9eb Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | Implement a Dircache checkout (needed for merge)Christian Halstrick2010-08-274-0/+909
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Implementation of a checkout (or 'git read-tree') operation which works together with DirCache. This implementation does similar things as WorkDirCheckout which main problem is that it works with deprecated GitIndex. Since GitIndex doesn't support multiple stages of a file which is required in merge situations this new implementation is required to enable merge support. Change-Id: I13f0f23ad60d98e5168118a7e7e7308e066ecf9c Signed-off-by: Christian Halstrick <christian.halstrick@sap.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com> Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
* | Add getBaseCommit() to MergerChristian Halstrick2010-08-261-3/+22
| | | | | | | | | | | | | | | | | | | | | | The Merger was was only exposing the merge base as an AbstractTreeIterator. Since we need the merge base as RevCommit to generate the merge result I expose it here. Change-Id: Ibe846370a35ac9bdb0c97ce2e36b2287577fbcad Signed-off-by: Christian Halstrick <christian.halstrick@sap.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | Merge "Fix parsing of multiple authors in PersonIdent."Shawn Pearce2010-08-262-44/+63
|\ \
| * | Fix parsing of multiple authors in PersonIdent.Marc Strapetz2010-08-262-44/+63
| |/ | | | | | | | | | | | | | | | | PersonIdent should be parsable for an invalid commit which contains multiple authors, like "A <a@a.org>, B <b@b.org>". PersonIdent(String) constructor now delegates to RawParseUtils.parsePersonIdent(). Change-Id: Ie9798d36d9ecfcc0094ca795f5a44b003136eaf7
* / Run formatter on edited lines via save actionChris Aniszczyk2010-08-261-3/+4
|/ | | | | | | | Updates the project level settings to run the formatter on save on only on the edited lines. Change-Id: I26dd69d0c95e6d73f9fdf7031f3c1dbf3becbb79 Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
* Increase the default streaming threshold to 15 MiBShawn O. Pearce2010-08-251-1/+1
| | | | | | | | | | | | | | | | | | | | | Applying deltas in the large streaming mode is horrifically slow. Trying to pack icu4c is impossible because a single 11 MiB file sits on top of a 15 MiB file though a 10 deep delta chain, which results in this very slow inflate process. Upping the default limit to 15 MiB lets us process this large in a reasonable time, but its still sufficiently low enough to prevent exploding the heap of a very large process like Eclipse or Gerrit Code Review. We have to revisit the streaming delta application process and do something much smarter, like flatten the delta chain before we apply it to the base. But even that is ugly, I've seen a 155 MiB delta sitting on top of a 450 MiB file to produce a 300 MiB result object. If the chain is deep, we may have trouble flatting it down. Change-Id: If5a0dcbf9d14ea683d75546f104b09bb8cd8fdbb Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Fix reuse from pack file for REF_DELTA typesShawn O. Pearce2010-08-251-1/+1
| | | | | | | | | | | | | We miscomputed the CRC32 checksum for a REF_DELTA type of object, by not including the full 20 byte ObjectId of the delta base in the CRC code we use when the delta is too large to go through our two faster small reuse code paths. This resulted in a corruption error during packing, where the PackFile erroneously suspected the data was wrong on the local filesystem and aborted writing, because the CRC didn't match what we had read from the index. Change-Id: I7d12cdaeaf2c83ddc11223ce0108d9bd6886e025 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Cleanup and correct resolve JavadocShawn O. Pearce2010-08-251-10/+30
| | | | | | | | | We didn't fully cover what we support and what we don't. It was also a bit hard to follow the syntaxes supported. Clean that up by documenting it. Change-Id: I7b96fa6cbefcc2364a51f336712ad361ae42df2d Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Support parsing commit:path style blob referencesShawn O. Pearce2010-08-251-0/+29
| | | | | | | | | We can now resolve expressions that reference a path within a commit, designating a specific revision of a specific tree or file in the project. Change-Id: Ie6a8be629d264d72209db894bd680c5900035cc0 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Support parsing git describe style outputShawn O. Pearce2010-08-251-16/+44
| | | | | | | | | | We now match on the -gABBREV style output created by git describe when its describing a non-tagged commit, and resolve that back to the full ObjectId using the abbreviation resolution feature that we already support. Change-Id: Ib3033f9483d9e1c66c8bb721ff48d4485bcdaef1 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Throw AmbiguousObjectException during resolve if its ambiguousShawn O. Pearce2010-08-251-1/+9
| | | | | | | | | | | Its wrong to return null if we are resolving an abbreviation and we have proven it matches more than one object. We know how to resolve it if we had more nybbles, as there are two or more objects with the same prefix. Declare that to the caller quite clearly by giving them an AmbiguousObjectException. Change-Id: I01bb48e587e6d001b93da8575c2c81af3eda5a32 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Complete an abbreviation when formatting a patchShawn O. Pearce2010-08-255-9/+144
| | | | | | | | | | If we are given a DiffEntry header that already has abbreviated ObjectIds on it, we may still be able to resolve those locally and output the difference. Try to do that through the new resolve API on ObjectReader. Change-Id: I0766aa5444b7b8fff73620290f8c9f54adc0be96 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Use limited getCachedBytes in RevWalkShawn O. Pearce2010-08-256-48/+78
| | | | | | | | | | | | | Parsing is rewritten to use the size limited form of getCachedBytes, thus freeing the revwalk infrastructure from needing to care about a large object vs. a small object when it gets an ObjectLoader. Right now we hardcode our upper bound for a commit or annotated tag to be 15 MiB. I don't know of any that is more than 1 MiB in the wild, so going 15x that should give us some reasonable headroom. Change-Id: If296c211d8b257d76e44908504e71dd9ba70ffa8 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Use limited getCachedBytes code to reduce duplicationShawn O. Pearce2010-08-254-83/+12
| | | | | | | | | Rather than duplicating this block everywhere, reuse the limited size form of getCachedBytes to acquire the content of an object. Change-Id: I2e26a823e6fd0964d8f8dbfaa0fc2e8834c179c1 Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
* Add brute force byte array loading to ObjectLoaderShawn O. Pearce2010-08-252-6/+110
| | | | | | | | | | | | | | | | | Some algorithms are coded in a way that requires us to provide them the entire object contents as a contiguous byte array. The parsers in RevCommit and RevTag, or our RawText objects are really good examples of these. Instead of duplicating this logic everywhere, lets put it into the base ObjectLoader type. That way the caller only needs to give us their upper size bound, and we'll do the rest of the heavy work to figure out if the object still fits within that bound, and get them an array that has the complete contents. Change-Id: Id95a7f79d2b97e39f6949370ccca2f2c9cfb1a0f Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
* Merge "Add ObjectId to the LargeObjectException"Chris Aniszczyk2010-08-251-2/+26
|\
| * Add ObjectId to the LargeObjectExceptionShawn O. Pearce2010-08-251-2/+26
| | | | | | | | | | | | | | | | | | | | | | | | A chunk of code that throws LargeObjectException may or may not have the specific ObjectId on hand when its thrown. If it does, we want to cache it in the exception, and put that in the message. If it is missing we want to be able to set it later from a higher level stack frame that does have the object handy. Change-Id: Ife25546158868bdfa886037e4493ef8235ebe4b9 Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
* | Merge "Don't copy more than the object size"Chris Aniszczyk2010-08-251-3/+3
|\ \
| * | Don't copy more than the object sizeShawn O. Pearce2010-08-241-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If the loader's stream is broken and returns to us more content than it originally declared as the size of the object, don't copy that onto the output stream. Instead throw EOFException and abort fast. This way we don't follow an infinite stream, but instead will at least stop when the size was reached. Change-Id: I7ec0c470c875f03b1f12a74a9b4d2f6e73b659bb Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | | Merge "Use the ObjectStream size during copyTo"Chris Aniszczyk2010-08-251-1/+2
|\| | | |/ |/|
| * Use the ObjectStream size during copyToShawn O. Pearce2010-08-241-1/+2
| | | | | | | | | | | | | | | | | | If the stream is a delta decompression stream, getting the size can be expensive. Its cheaper to get it from the stream itself rather than from the object loader. Change-Id: Ia7f0af98681f6d56ea419a48c6fa8eea09274b28 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | Fixed typo in DirCache documentationBenjamin Muskalla2010-08-251-1/+1
|/ | | | | Change-Id: Ifc2e9047a45d57829fce59c66618e5de9120a5bb Signed-off-by: Benjamin Muskalla <bmuskalla@eclipsesource.com>
* Fix ObjectDirectory abbreviation resolution to notice new packsShawn O. Pearce2010-08-241-11/+23
| | | | | | | | | | | | | | | If we can't resolve an abbreviation, it might be because there is a new pack file we haven't picked up yet. Try scanning the packs again and recheck each pack if there were differences from the last scan we did. Because of this, we don't have to open a pack during the test where we generate a pack on the fly. We'll miss on the first loop during which the PackList is the NO_PACKS magic initialization constant, and pick up the newly created index during this retry logic. Change-Id: I7b97efb29a695ee60c90818be380f7ea23ad13a3 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Fully implement SHA-1 abbreviationsShawn O. Pearce2010-08-2314-34/+412
| | | | | | | | | | | | | | | | | | 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>
* Delete deprecated ObjectWriterShawn O. Pearce2010-08-235-327/+138
| | | | | | | | ObjectWriter is a deprecated API that people shouldn't be using. So get rid of it in favor of the ObjectInserter API. Change-Id: I6218bcb26b6b9ffb64e3e470dba5dca2e0a62fd4 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Add openEntryStream to WorkingTreeIteratorShawn O. Pearce2010-08-232-6/+36
| | | | | | | | | This makes it easier for abstract tools like AddCommand to open the file from the working tree, without knowing internal details about how the tree is managed. Change-Id: Ie64a552f07895d67506fbffb3ecf1c1be8a7b407 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Add setLength(long) to DirCacheEntryShawn O. Pearce2010-08-233-0/+18
| | | | | | | | | | | Applications should favor the long style interface, especially when their source input is a long type, e.g. coming from java.io.File. This way when the index format is later changed to support a larger file size than 2 GiB we can handle it by just changing the entry code, and not need to fix a lot of applications. Change-Id: I332563caeb110014e2d544dc33050ce67ae9e897 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>