summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit
Commit message (Collapse)AuthorAgeFilesLines
...
* Improved creation of JGitInternalExceptionChristian Halstrick2010-08-232-3/+3
| | | | | | | | There where 3 cases where a JGitInternalExcption was created without specifying the root cause. This has been fixed. Change-Id: I2ee08d04732371cd9e30874b1437b61217770b6a Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
* Perform automatic CRLF to LF conversion during WorkingTreeIteratorMarc Strapetz2010-08-207-59/+502
| | | | | | | | | | | | | | | | | | | WorkingTreeIterator now optionally performs CRLF to LF conversion for text files. A basic framework is left in place to support enabling (or disabling) this feature based on gitattributes, and also to support the more generic smudge/clean filter system. As there is no gitattribute support yet in JGit this is left unimplemented, but the mightNeedCleaning(), isBinary() and filterClean() methods will provide reasonable places to plug that into in the future. [sp: All bugs inside of WorkingTreeIterator are my fault, I wrote most of it while cherry-picking this patch and building it on top of Marc's original work.] CQ: 4419 Bug: 301775 Change-Id: I0ca35cfbfe3f503729cbfc1d5034ad4abcd1097e Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Expose pack fetch/push connections for subclassingShawn O. Pearce2010-08-202-5/+41
| | | | | | | | | These classes need to be visible if an application wants to define its own native pack based protocol embedded within another layer, much like we already support for smart HTTP. Change-Id: I7e2ac3ad01d15b94d340128a395fe0b2f560ff35 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Allow ObjectReuseAsIs to have more control over write orderingShawn O. Pearce2010-08-205-27/+110
| | | | | | | | | | | | | | | The reuse system used by an object database may be able to benefit from knowing what objects are coming next, and even improve data throughput by delaying (or moving up) objects that are stored near each other in the source database. Pushing the iteration down into the reuse code makes it possible for a smarter implementation to aggregate reuse. But for the standard pack file format on disk we don't bother, its quite efficient already. Change-Id: I64f0048ca7071a8b44950d6c2a5dfbca3be6bba6 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Allow ObjectToPack subclasses to use up to 4 bits of flagsShawn O. Pearce2010-08-201-3/+69
| | | | | | | | | | | | | | | Some instances may benefit from having access to memory efficient storage for some small values, like single flag bits. Give up a portion of our delta depth field to make 4 bits available to any subclass that wants it. This still gives us room for delta chains of 1,048,576 objects, and that is just insane. Unpacking 1 million objects to get to something is longer than most users are willing to wait for data from Git. Change-Id: If17ea598dc0ddbde63d69a6fcec0668106569125 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Implement async/batch lookup of object dataShawn O. Pearce2010-08-2010-176/+864
| | | | | | | | | | | | | | | | | | | | | | | | | An ObjectReader implementation may be very slow for a single object, but yet support bulk queries efficiently by batching multiple small requests into a single larger request. This easily happens when the reader is built on top of a database that is stored on another host, as the network round-trip time starts to dominate the operation cost. RevWalk, ObjectWalk, UploadPack and PackWriter are the first major users of this new bulk interface, with the goal being to support an efficient way to pack a repository for a fetch/clone client when the source repository is stored in a high-latency storage system. Processing the want/have lists is now done in bulk, to remove the high costs associated with common ancestor negotiation. PackWriter already performs object reuse selection in bulk, but it now can also do the object size lookup and object counting phases with higher efficiency. Actual object reuse, deltification, and final output are still doing sequential lookups, making them a bit more expensive to perform. Change-Id: I4c966f84917482598012074c370b9831451404ee Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Offer ObjectReaders advice about a RevWalkShawn O. Pearce2010-08-206-3/+70
| | | | | | | | | | | By giving the reader information about the roots of a revision traversal, some readers may be able to prefetch information from their backing store using background threads in order to reduce data access latency. However this isn't typically necessary so the default reader implementation doesn't react to the advice. Change-Id: I72c6cbd05cff7d8506826015f50d9f57d5cda77e Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Allow object reuse selection to occur in parallelShawn O. Pearce2010-08-205-14/+42
| | | | | | | | | | | | | | | | | ObjectReader implementations may wish to use multiple threads in order to evaluate object reuse faster. Let the reader make that decision by passing the iteration down into the reader. Because the work is pushed into the reader, it may need to locate a given ObjectToPack given its ObjectId. This can easily occur if the reader has sent a list of ObjectIds to the object database and gets back information keyed only by ObjectId, without the ObjectToPack handle. Expose lookup using the PackWriter's own internal map, so the reader doesn't need to build a redundant copy to track the assocation of ObjectId back to ObjectToPack. Change-Id: I0c536405a55034881fb5db92a2d2a99534faed34 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Flush the pack header as soon as its readyShawn O. Pearce2010-08-201-0/+1
| | | | | | | | | | | | | | When the output stream is deeply buffered (e.g. 1 MiB or more in an HTTP servlet on some containers) trying to kick out the header earlier will prevent the client from stalling hard while the first 1 MiB is received and it can process the pack header. Forcing a flush here lets the client see the header and start its progress monitor for "Receiving objects: (1/N)" so the user knows there is still activity occurring, even though the buffering may cause there to be some lag as the buffer fills up on the sending side. Change-Id: I3edf39e8f703fe87a738dc236d426b194db85e3a Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Export the ObjectId on MissingObjectExceptionShawn O. Pearce2010-08-201-0/+8
| | | | | | | | Callers catching a MissingObjectException may need programmatic access to the ObjectId that wasn't available in the repository. Change-Id: I2be0380251ebe7e4921fa74e246724e48ad88b0e Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Expose OBJ_ANY in ObjectReaderShawn O. Pearce2010-08-201-1/+1
| | | | | | | | | Storage implementations or application code using an ObjectReader may want to access this constant without being inside of a subclass of the reader. Change-Id: I6c871a03d5846b9bb899de4d14a265e8b204d8e0 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Expose getType in ObjectToPackShawn O. Pearce2010-08-201-1/+2
| | | | | | | | | Storage implementations may find this useful when implementing the ObjectReuseAsIs interface on their ObjectReader. Expose it so we don't force them to create a redundant copy of the information. Change-Id: I802ec8113c00884fccde5d0e92b9849716316f62 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Add copyTo(ByteBuffer) to AnyObjectIdShawn O. Pearce2010-08-201-0/+10
| | | | | Change-Id: I3572f6113db883002f9c3a5ecc1bcc8370105c98 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Add copyTo(byte[], int) to AnyObjectIdShawn O. Pearce2010-08-201-0/+16
| | | | | | | | | This permits formatting in hex into an existing byte array supplied by the caller, and mirrors our copyRawTo method with the same parameter signature. Change-Id: Ia078d83e338b09b903bfd2d04284e5283f885a19 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Add a public RevTag.parse() methodShawn O. Pearce2010-08-201-0/+53
| | | | | | | | | | Callers might have a canonical tag encoding on hand that they wish to convert into a clean structure for presentation purposes, and the object may not be available in a repository. (E.g. maybe its a "draft" tag being written in an editor.) Change-Id: I387a462afb70754aa7ee20891e6c0262438fdf32 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Add a public RevCommit.parse() methodShawn O. Pearce2010-08-201-0/+48
| | | | | | | | | | Callers might have a canonical commit encoding on hand that they wish to convert into a clean structure for presentation purposes, and the object may not be available in a repository. (E.g. maybe its a "draft" commit being written in an editor.) Change-Id: I21759cff337cbbb34dbdde91aec5aa4448a1ef37 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Make Tag class only for writingShawn O. Pearce2010-08-206-242/+97
| | | | | | | | | | The Tag class now only supports the creation of an annotated tag object. To read an annotated tag, applictions should use RevTag. This permits us to have exactly one implementation, and RevTag's is faster and more bug-free. Change-Id: Ib573f7e15f36855112815269385c21dea532e2cf Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Make Commit class only for writingShawn O. Pearce2010-08-207-365/+245
| | | | | | | | | | The Commit class now only supports the creation of a commit object. To read a commit, applictions should use RevCommit. This permits us to have exactly one implementation, and RevCommit's is faster and more bug-free. Change-Id: Ib573f7e15f36855112815269385c21dea532e2cf Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Correct PersonIdent hashCode() and equals() to ignore millisecondsShawn O. Pearce2010-08-201-2/+5
| | | | | | | | | | Git doesn't store millisecond accuracy in person identity lines, so a line that we create in Java and round-trip through a Git object wouldn't compare as being equal. Truncate to seconds when comparing values to ensure the same identity is equal. Change-Id: Ie4ebde64061f52c612714e89ad34de8ac2694b07 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Try really hard to load a commit or tagShawn O. Pearce2010-08-201-1/+25
| | | | | | | | | | | | | | When we need the canonical form of a commit or a tag in order to parse it into our RevCommit or RevTag fields, we really need it as a single contiguous byte array. However the ObjectDatabase may choose to give us a large loader. In general commits or tags are always under the several MiB limit, so even if the loader calls it "large" we should still be able to afford the JVM heap memory required to get a single byte array. Coerce even large loaders into a single byte array anyway. Change-Id: I04efbaa7b31c5f4b0a68fc074821930b1132cfcf Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Fix formatting of serialization code in ObjectIdShawn O. Pearce2010-08-191-3/+4
| | | | | Change-Id: I5b3e99e9e658fe272a9e171db04b0f20e48ed8d3 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Make ObjectId.compareTo finalShawn O. Pearce2010-08-191-4/+4
| | | | | | | | | | Since equals() is now final and does not permit being overridden, we should do the same thing with compareTo() to prevent different subclasses from having different ordering behaviors. This could lead to the same mess that we had with different equals() behaviors. Change-Id: I35a849b6efccee5fe74cc5788a3566a1516004b7 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Make ObjectId.hashCode final tooShawn O. Pearce2010-08-191-1/+1
| | | | | | | | | | Since equals() is now final and does not permit being overridden, we should do the same thing with hashCode() to prevent different subclasses from having different hashing behaviors. This could lead to the same mess that we had with different equals() behaviors. Change-Id: I35a849b6efccee5fe74cc5788a3566a1516004b7 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Remove unnecessary ObjectId.copy() callsShawn O. Pearce2010-08-191-2/+2
| | | | | | | | | | | | | | | | | | | | When RevObject overrode equals() to provide only reference equality we used to need to convert a RevObject into an ObjectId by copy() just to use standard Java tools like JUnit assertEquals(), or to use contains() or get() on standard java.util collection types. Now that we have removed this override and made ObjectId's equals() final (preventing any of this mess in the future), some copy() calls are unnecessary. Anytime the value is being used as an input to a lookup routine, or to an equals, we can avoid the copy(). However we still want to use copy() anytime we are given an ObjectId that may exist long-term, where we don't want the high cost of the additional storage from a RevCommit extension. So we can't remove all uses of copy(), just some of them. Change-Id: Ief275dace435c0ddfa362ac8e5d93558bc7e9fc3 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Fix missing Configuration Change eventingMathias Kinzler2010-08-193-0/+63
| | | | | | | | | Configuration change events were not being triggered, now they are forwarded from the FileConfig up to the Repository's listeners. Change-Id: Ida94a59f5a2b7fa8ae0126e33c13343275483ee5 Signed-off-by: Mathias Kinzler <mathias.kinzler@sap.com> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Enhance MergeResult to report conflicts, etcChristian Halstrick2010-08-193-25/+136
| | | | | | | | | | The MergeResult class is enhanced to report more data about a three-way merge. Information about conflicts and the base, ours, theirs commits can be retrived. Change-Id: Iaaf41a1f4002b8fe3ddfa62dc73c787f363460c2 Signed-off-by: Christian Halstrick <christian.halstrick@sap.com> Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
* Allow for optional tagger and message in TagChris Aniszczyk2010-08-181-4/+7
| | | | | | | | | We should be more lenient when tagging without an tagger or message. Currently, we will throw an NPE which is incorrect behavior. Change-Id: I04e30ce25a9432e4ca56c3f29658ecb24fb18d24 Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
* Remove getter and setter for author in TagChris Aniszczyk2010-08-182-18/+4
| | | | | | | | | There was a duplicated getter and setter for tagger in Tag. There's no needed to have two getters and setters that represent the same things. The appropriate tests were updated also. Change-Id: If46dc00c4c0f31ea4234c6d3bda3c03e6ebbafac Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
* added resetIndex() to RepositoryTestCaseChristian Halstrick2010-08-181-0/+9
| | | | | | | | | | | | Added a utility method to set the reset an index to match exactly some content in the filesystem. This can be used by tests to prepare commits in the working-tree and set the index in one shot. [sp: Cleaned up formatting, added getEntryFile(), released inserter.] Change-Id: If38b1f7cacaaf769f51b14541c5da0c1e24568a5 Signed-off-by: Christian Halstrick <christian.halstrick@sap.com> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Do not trigger RefsChangedEvent on the first attempt to read a refRobin Rosenberg2010-08-181-1/+1
| | | | | | | | Such events make no sense, it has never been visible to this process so no client can have a stale value of the ref. Change-Id: Iea3a5035b0a1410b80b09cf53387b22b78b18018 Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
* Add FileRepository(String) convenience constructorKetan Padegaonkar2010-08-181-0/+14
| | | | | | | | Add a convenience API in FileRepository to pass in a String that points to the GIT_DIR location. This is converted to a File and sent through the usual constructor. Change-Id: I588388f37e89b8c690020f110a1bc59f46170c40
* Backout RevObject's object-identity based equals implementationMatthias Sohn2010-08-152-12/+2
| | | | | | | | | | | | | | This restores the transitivity and symmetry properties of the equals methods on the AnyObjectId type hierarchy as defined in [1]. Following [2] we declare these equals methods final to ensure that semantics of equals are consistent across AnyObjectId's type hierarchy. [1] http://download-llnw.oracle.com/javase/6/docs/api/java/lang/Object.html#equals(java.lang.Object) [2] http://www.angelikalanger.com/Articles/JavaSolutions/SecretsOfEquals/Equals.html Bug: 321502 Change-Id: Ibace21fa268c4aa15da6c65d42eb705ab1aa24b3 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Merge "Fix RevCommitList to work with subclasses of RevWalk"Shawn Pearce2010-08-121-6/+2
|\
| * Fix RevCommitList to work with subclasses of RevWalkMatthias Sohn2010-08-131-6/+2
| | | | | | | | | | Bug: 321502 Change-Id: Ic4bc49a0da90234271aea7c0a4e344a1c3620cfc Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | Improve IndexDiff performanceJens Baumgart2010-08-122-0/+97
|/ | | | | | | | | Exclude ignored files from IndexDiff tree walk. This makes EGit commit much faster. Change-Id: I398499510c22c37667b7612db32eac3b31d325f0 Signed-off-by: Jens Baumgart <jens.baumgart@sap.com> Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
* Merge "Hide Maven target directories from Eclipse"Chris Aniszczyk2010-08-111-0/+11
|\
| * Hide Maven target directories from EclipseRobin Rosenberg2010-08-081-0/+11
| | | | | | | | | | Change-Id: I64f12a35423a90ced9c9bc83f6869d8ed766dd35 Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
* | TransportHttp does not honor timeout settingMathias Kinzler2010-08-101-0/+2
| | | | | | | | | | | | | | This can result in an infinitely hanging IDE. Change-Id: I669bc8d220a07011a42edf79de31825305ff3763 Signed-off-by: Mathias Kinzler <mathias.kinzler@sap.com>
* | Fix NPE on commit in empty RepositoryJens Baumgart2010-08-091-4/+16
|/ | | | | | | | NPE occured when committing in an empty repository. Bug: 321858 Change-Id: Ibddb056c32c14c1444785501c43b95fdf64884b1 Signed-off-by: Jens Baumgart <jens.baumgart@sap.com>
* Merge branch 'rename-bug'Shawn O. Pearce2010-08-061-5/+5
|\ | | | | | | | | | | | | | | | | | | * rename-bug: Fix ArrayIndexOutOfBounds on non-square exact rename matrix Conflicts: org.eclipse.jgit/src/org/eclipse/jgit/diff/RenameDetector.java Change-Id: Ie0b8dd3e1ec174f79ba39dc4706bb0694cc8be29
| * Fix ArrayIndexOutOfBounds on non-square exact rename matrixShawn O. Pearce2010-08-061-5/+5
| | | | | | | | | | | | | | | | | | | | | | | | If the exact rename matrix for a particular ObjectId isn't square we crashed with an ArrayIndexOutOfBoundsException because the matrix entries were encoded backwards. The encode function accepts the source (aka deleted) index first, not second. Add a unit test to cover this non-square case to ensure we don't have this regression in the future. Change-Id: I5b005e5093e1f00de2e3ec104e27ab6820203566 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | Merge changes I39bfefee,I47795987,I70d120fb,I58cc5e01,I96bee7b9Shawn O. Pearce2010-08-0513-500/+903
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | * changes: Enable configuration of non-standard pack settings Pass PackConfig down to PackWriter when packing Simplify UploadPack use of options during writing Move PackWriter configuration to PackConfig Allow PackWriter callers to manage the thread pool
| * | Enable configuration of non-standard pack settingsShawn O. Pearce2010-07-281-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For daemons we might want to disable delta compression entirely, or in some strange case an administrator might need to turn of delta reuse. Expose these normally internal pack settings through the pack configuration section. Change-Id: I39bfefee8384c864cc04ffac724f197240c8a11a Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
| * | Pass PackConfig down to PackWriter when packingShawn O. Pearce2010-07-286-14/+100
| | | | | | | | | | | | | | | | | | | | | | | | | | | When we are creating a pack the higher level application should be able to override the PackConfig used, allowing it to control the number of threads used or how much memory is allocated per writer. Change-Id: I47795987bb0d161d3642082acc2f617d7cb28d8c Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
| * | Simplify UploadPack use of options during writingShawn O. Pearce2010-07-281-4/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | We only use these variables once, so just put them at the proper use site and avoid assigning the local variable. The code is a bit shorter and the intent is a little bit more clear. Change-Id: I70d120fb149b612ac93055ea39bc053b8d90a5db Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
| * | Move PackWriter configuration to PackConfigShawn O. Pearce2010-07-287-485/+637
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This refactoring permits applications to configure global per-process settings for all packing and easily pass it through to per-request PackWriters, ensuring that the process configuration overrides the repository specific settings. For example this might help in a daemon environment where the server wants to cap the resources used to serve a dynamic upload pack request, even though the repository's own pack.* settings might be configured to be more aggressive. This allows fast but less bandwidth efficient serving of clients, while still retaining good compression through a cron managed `git gc`. Change-Id: I58cc5e01b48924b1a99f79aa96c8150cdfc50846 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
| * | Allow PackWriter callers to manage the thread poolShawn O. Pearce2010-07-282-24/+185
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | By permitting the caller of PackWriter to select the Executor it uses for task execution, we give the caller the ability to manage the lifecycle of the thread pool, including reusing it across concurrent pack generators. This is the first step to supporting application thread pools within Daemon or another managed service like Gerrit Code Review. Change-Id: I96bee7b9c30ff9885f2bd261d0b6daaac713b5a4 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | | Merge "Remove static progress task names from PackWriter"Shawn O. Pearce2010-08-051-30/+6
|\| |
| * | Remove static progress task names from PackWriterShawn O. Pearce2010-07-281-30/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | These need to be dynamic based on the current thread's environment at time of execution in order to be properly localized for the end user that will be seeing these messages. Change-Id: I4976f462cfe606edd2761c0e36b2f6b20f63d53c Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | | Merge "Add "all" parameter to the commit Command"Chris Aniszczyk2010-08-051-0/+29
|\ \ \