summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit
Commit message (Collapse)AuthorAgeFilesLines
* Show notes in Log CLI commandSasa Zivkov2011-02-231-0/+6
| | | | | | | | | | | | | | Support for --no-standard-notes and --show-notes=REF options is added to the Log command. The --show-notes option can be specified more than once if more than one notes branch should be used for showing notes. The notes are displayed from note branches in the order how the note branches are specified in the command line. However, the standard note, from the refs/notes/commits, is always displayed as first unless the --no-standard-notes options is given. Change-Id: I4e7940804ed9d388b625b8e8a8e25bfcf5ee15a6 Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
* PackWriter: Fix total delta countShawn O. Pearce2011-02-221-1/+3
| | | | | | | | The total delta count is supposed to include reused deltas, not just newly created deltas. Change-Id: I98cbdcef80d59714a4f62ff322e7b709b08b6d26 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Merge "Create empty GIT_DIR/hooks directory"Shawn O. Pearce2011-02-221-0/+1
|\
| * Create empty GIT_DIR/hooks directoryShawn O. Pearce2011-02-221-0/+1
| | | | | | | | | | | | Bug: 337801 Change-Id: I5e0c4d838a211509fb4cc7e048dba6efaec15d5c Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | Merge "Fix potential NullPointerException in PlotCommit"Shawn Pearce2011-02-221-0/+3
|\ \ | |/ |/|
| * Fix potential NullPointerException in PlotCommitMathias Kinzler2011-02-221-0/+3
| | | | | | | | | | Change-Id: Ib7f661a259561251e74337fa233036e041c42423 Signed-off-by: Mathias Kinzler <mathias.kinzler@sap.com>
* | PackWriter: Hoist and cluster reference targetsShawn O. Pearce2011-02-183-0/+62
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Many source browsers and network related tools like UploadPack need to find and parse the target of all branches and annotated tags within the repository during their startup phase. Clustering these together into the same part of the pack file will improve locality, reducing thrashing when an application starts and needs to load all of these into memory at once. To prevent bottlenecking basic log viewing tools that are scannning backwards from the tip of a current branch (and don't need tags) we place this cluster of older targets after 4096 newer commits have already been placed into the pack stream. 4096 was chosen as a rough guess, but was based on a few factors: - log viewers typically show 5-200 commits per page - users only view the first page or two - DHT can cram 2200-4000 commits per 1 MiB chunk thus these will fall into the second commit chunk (roughly) Unfortunately this placement hurts history tools that are scanning backwards through the commit graph and completely ignored tags or branch heads when they started. An ancient tagged commit is no longer positioned behind its first child (its now much earlier), resulting in a page fault for the parser to reload this cluster of objects on demand. This may be an acceptable loss. If a user is walking backwards and has already scanned through more than 4096 commits of history, waiting for the region to reload isn't really that bad compared to the amount of time already spent. If the repository is so small that there are less than 4096 commits, this change has no impact on the placement of objects. Change-Id: If3052e430d305e17878d94145c93754f56b74c61 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | PackWriter: Parse tag target objects in a batchShawn O. Pearce2011-02-181-2/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If the underlying storage has a high latency per SHA-1 lookup (e.g. the DHT support we are working on), parsing each wanted annotated tag object back to its underlying commit is too slow, its a sequential lookup for each tag. With hundreds of tags in a repository this takes far too long. Instead queue up a list of the tags whose objects need to be found, and then locate all of those in one parseAny batch. This works for the common case of annotated tag to single tree or commit. For the less often used tag->tag->commit, it at least gets us one level parsed in the larger batch before we have to go back to sequential lookups. Change-Id: I94beef3f14281406f15c8cf9fa02d83faf102a19 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | PackWriter: Short-circuit counting on full cached pack reuseShawn O. Pearce2011-02-181-0/+19
|/ | | | | | | | | | | | | If one or more cached packs fully covers the request, don't bother with looking up the objects and trying to walk the graph. Just use the cached packs and return immediately. This helps clones of quiet repositories that have not been modified since their last repack, its likely the cached packs are accurate and no graph walking is required. Change-Id: I9062a5ac2f71b525322590209664a84051fd5f8a Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* PackWriter: Correct total delta count when reusing packShawn O. Pearce2011-02-181-1/+3
| | | | | | | | If the CachedPack knows its delta count, we need to increment both the totalDeltas and reusedDeltas fields of the stats object. Change-Id: I70113609c22476ce7f1e4d9a92f486e9b0f59e44 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* PackWriter: Fix warning about untyped collectionShawn O. Pearce2011-02-181-2/+2
| | | | | Change-Id: I44699d8ab9768844ba91f7224a7d4ee685c93ce6 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* BundleWriter: Always use OFS_DELTAShawn O. Pearce2011-02-181-0/+1
| | | | | | | | | | | CGit just learned to always use OFS_DELTA when writing out bundle files. This makes sense because bundle came about well after OFS_DELTA was established, so any version of CGit that can read a bundle file can also read OFS_DELTA. Since OFS_DELTA is smaller, always use it when writing bundles. Change-Id: I44f9921494798ea0c99e16eab58b87bebeb9aff5 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Merge "PackWriter: Sort commits by parse order to improve locality"Chris Aniszczyk2011-02-181-10/+31
|\
| * PackWriter: Sort commits by parse order to improve localityShawn O. Pearce2011-02-171-10/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | RevWalk in JGit and the revision code in C Git both parse commits out of the pack file in an order that differs from strict timestamp and topological sorting. Both implementations pop a commit from the head of a date queue, and then immediately parse all of its parents in order to insert those into the date queue at the proper positions as determined by their committer timestamp field. This implies that the parents are parsed when their most recent child is popped from the queue, and not where they are popped during traversal. Hoisting a parent commit to be immediately behind its child improves locality by making sure all parents of a merge are clustered together, and thus can be paged into the parser by the pack file buffering system (aka WindowCache in JGit) together. Change-Id: I80f9e64cafa2e8f082776b43845edf23065386a2 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | Wrong constant used when configuring a repositoryTomasz Zarna2011-02-181-2/+2
|/ | | | Bug: 337546 Change-Id: Ib2f31d621caa5f8b24ce74ce82499889d4f30550
* Merge "Changed TreeWalk.forPath(...) to work with recursive paths."Shawn Pearce2011-02-182-8/+32
|\
| * Changed TreeWalk.forPath(...) to work with recursive paths.Jesse Greenwald2011-02-172-8/+32
| | | | | | | | | | | | | | | | Previously, this method would not (always) work when a recursive path such as "a/b" was passed into it. Change-Id: I0752a1f5fc7fef32064d8f921b33187c0bdc7227 Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
* | Add git-reset to the Git APIChris Aniszczyk2011-02-174-0/+273
|/ | | | | | Bug: 334764 Change-Id: Ice404629687d7f2a595d8d4eccf471b12f7e32ec Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
* Merge "Fix NullPointer when pulling from a deleted local branch"Shawn Pearce2011-02-161-1/+4
|\
| * Fix NullPointer when pulling from a deleted local branchStefan Lay2011-02-161-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | A checked Exception is thrown instead. The reason for throwing an Exception is that the state of the repository is inconsistent in this case: There is a merge configuration containing a non-existing local branch. Ideally the deletion of a local branch should also delete the corresponding merge configuration. Bug: 337315 Change-Id: I71e56ffb90e11e6e3c1bbd964ad63972d67990c0 Signed-off-by: Stefan Lay <stefan.lay@sap.com>
* | smart-http: Support progress in ReceivePackShawn O. Pearce2011-02-153-28/+55
|/ | | | | | | | | | | | | | As PackParser supports a progress meter for the "Resolving deltas" phase of its work, we should export this to smart HTTP clients so they know the server is still working on their (large) upload. However this isn't as simple as just dropping in a binding for the SmartOutputStream to flush when its told to. We want to avoid spurious flushes triggered by the use of sideband, or the status report formatting in the send-pack/receive-pack protocol. Change-Id: Ibd88022a298c5fed0edb23dfaf2e90278807ba8b Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* PackWriter: Try for accurate delta reuse on cached packShawn O. Pearce2011-02-152-0/+22
| | | | | | | | | If a cached pack is used, it might know how many deltas are contained within it. Record that count as part of our reusedDeltas field for the stats line we show clients. Change-Id: I1c61fb817305a95eeac654cccf132cba20b2339c Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* UploadPack: Expose advertised refs to callersShawn O. Pearce2011-02-151-0/+5
| | | | | | | | | | Like ReceivePack, callers that embed UploadPack within their service may wish to see the set of references that were sent to the client. We already have the map on hand, it just needs to be exposed with a getter. Change-Id: I123b23e475860d5bb968906bef59068985088b7b Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* RepositoryBuilder: Allow callers to require repository existsShawn O. Pearce2011-02-152-2/+31
| | | | | | | | | | The setMustExist() method allows callers to require the repository exists in order for build() to succeed. This is useful within a RepositoryResolver where existence is required. Change-Id: I6a1154551435cf0da6c2b4a7f4dce266abea5dff Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
* Merge "daemon: Use HTTP's resolver and factory pattern"Chris Aniszczyk2011-02-1512-134/+754
|\
| * daemon: Use HTTP's resolver and factory patternShawn O. Pearce2011-02-1412-134/+754
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Using a resolver and factory pattern for the anonymous git:// Daemon class makes transport.Daemon more useful on non-file storage systems, or in embedded applications where the caller wants more precise control over the work tasks constructed within the daemon. Rather than defining new interfaces, move the existing HTTP ones into transport.resolver and make them generic on the connection handle type. For HTTP, continue to use HttpServletRequest, and for transport.Daemon use DaemonClient. To remain compatible with transport.Daemon, FileResolver needs to learn how to use multiple base directories, and how to export any Repository instance at a fixed name. Change-Id: I1efa6b2bd7c6567e983fbbf346947238ea2e847e Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | Merge "Fix processing of broken symbolic references in RefDirectory"Shawn Pearce2011-02-151-5/+7
|\ \ | |/ |/|
| * Fix processing of broken symbolic references in RefDirectoryMarc Strapetz2011-02-151-5/+7
| | | | | | | | Change-Id: I1f85890fe718f38ef4b62ebe711f0668267873a2
* | Merge "UploadPack: Expose PackWriter activity to a logger"Chris Aniszczyk2011-02-144-5/+272
|\ \
| * | UploadPack: Expose PackWriter activity to a loggerShawn O. Pearce2011-02-134-5/+272
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The UploadPackLogger interface allows applications that embed GitServlet or otherwise use UploadPack to service clients to track and log how PackWriter was used, and what it sent. This provides more granularity into the request activity than might be available from the HTTP server logs, helping administrators to better understand utilization and Git server performance. Change-Id: I1d36b060eb3385339d5f986e68192789ef70fc4e Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | | Merge "RevWalk: Avoid unnecessary re-parsing of commit bodies"Chris Aniszczyk2011-02-1411-2/+112
|\| |
| * | RevWalk: Avoid unnecessary re-parsing of commit bodiesShawn O. Pearce2011-02-1311-2/+112
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If the RevFilter doesn't actually require the commit body, we shouldn't reparse it if the body was disposed. This happens often inside of UploadPack during common ancestor negotation, the RevWalk is reset and re-run over roughly the same commit space, but the bodies are discarded because the commit message is not relevant to the process. Change-Id: I87b6b6a5fb269669867047698abf718d366bd002 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | | Merge "RevWalk: Don't reset ObjectReader when stopping"Chris Aniszczyk2011-02-142-4/+0
|\| |
| * | RevWalk: Don't reset ObjectReader when stoppingShawn O. Pearce2011-02-132-4/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Applications like UploadPack reset() and reuse the same RevWalk multiple times in very rapid succession. Releasing the ObjectReader's internal state on each use, only to allocate it again on the next cycle kills performance if the ObjectReader has internal caches, or even if the Inflater gets returned and pulled from the InflaterCache too frequently. Making releasing the ObjectReader the application's responsibility when it is done with the RevWalk, which most already do by wrapping their loop in a try/finally block. Change-Id: I3ad188a719e8d7f6bf27d1a7ca16d465534713f4 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | | Merge "UploadPack: Donate parsed commits to PackWriter"Chris Aniszczyk2011-02-143-12/+71
|\| |
| * | UploadPack: Donate parsed commits to PackWriterShawn O. Pearce2011-02-133-12/+71
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When UploadPack has computed the merge base between the client's have set and the want set, its already loaded and parsed all of the interesting commits that PackWriter needs to transmit to the client. Switching the RevWalk and its object pool over to be an ObjectWalk saves PackWriter from needing to re-parse these same commits from the ObjectDatabase, reducing the startup latency for the enumeration phase of packing. UploadPack doesn't want to use an ObjectWalk for the okToGiveUp() tests because its slower, during each commit popped it needs to cache the tree into the pendingObjects list, and during each reset() it discards a bunch of ObjectWalk specific state and reallocates some internal collections. ObjectWalk was never meant to be rapidly reset() like UploadPack does, so its perhaps somewhat cleaner to allow "upgrading" a RevWalk to an ObjectWalk. Bug: 301639 Change-Id: I97ef52a0b79d78229c272880aedb7f74d0f7532f Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | | CreateBranchCommand: Wrong existence checkMathias Kinzler2011-02-141-1/+3
|/ / | | | | | | | | | | Bug: 337044 Change-Id: I3bc42fea1f552f10d4729999cab6fb4241b70325 Signed-off-by: Mathias Kinzler <mathias.kinzler@sap.com>
* | Setup the default remote and merge config in CloneCommandChris Aniszczyk2011-02-131-1/+8
| | | | | | | | | | | | Bug: 336621 Change-Id: I8c889d7b42f6f121d096acad1fada8e3752d74f9 Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
* | UploadPack: Rely on peeled ref data for include-tagShawn O. Pearce2011-02-131-10/+21
| | | | | | | | | | | | | | | | | | | | | | The peeled reference information for tags is more efficient to work with than parsing the tag objects, as usually its coming from the packed-refs file, which stores the peeled information for us. Rely on the peeled information to decide if the tag should be included or not, instead of using our RevWalk to parse the object. Change-Id: I6714a8560a1c04b5578e9c5b469ea3c77188dff3 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | UploadPack: Assume okToGiveUp is initially falseShawn O. Pearce2011-02-131-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | When negotiate() starts there is at least one want, but no haves, and thus no common base exists. Its not ok to give up yet, the client should try to find a common base with the server. Avoid scanning our history along the want chains until we have found at least one commit in common with the client, this will trigger okToGiveUp to be set to null, enabling okToGiveUp() to perform the scan. Bug: 301639 Change-Id: I98a82a5424fd4c9995924375c7910f76ca4f03af Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | UploadPack: Avoid walking the entire project historyShawn O. Pearce2011-02-132-3/+50
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If the client presents a common commit on a side branch, and there is a want for a disconnected branch UploadPack was walking back on the entire history of the disconnected branch because it never would find the common commit. Limit our search back along any given want to be no earlier than the oldest common commit received via a "have" line from our client. This prevents us from looking at all of the project history. Bug: 301639 Change-Id: Iffaaa2250907150d6efa1cf2f2fcf59851d5267d Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
* | Merge "UploadPack: Tag non-commits SATISIFIED earlier"Chris Aniszczyk2011-02-131-5/+3
|\ \
| * | UploadPack: Tag non-commits SATISIFIED earlierShawn O. Pearce2011-02-061-5/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This gets non-commits out of the wantSatisfied() main loop by making use of the cached SATISIFIED flag and its existing bypass. Anything that isn't a commit cannot be discovered by the have negotiation, so its always assumed to be SATISIFIED by the server. Bug: 301639 Change-Id: I1ef354fbf2e2ed44c9020a4069d7179f2159f19f Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | | Merge "UploadPack: Don't discard COMMON, SATISIFIED flags"Chris Aniszczyk2011-02-131-0/+2
|\| |
| * | UploadPack: Don't discard COMMON, SATISIFIED flagsShawn O. Pearce2011-02-061-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When the walker resets, its going to scrub the COMMON and SATISIFIED flags off a commit if the commit is contained within another commit the client wants. This is common if the client asks for both a 'maint' and 'master' branch, and 'maint' is also fully merged into 'master'. COMMON shouldn't be scrubbed during reset because its used to control membership of the commonBase collection, which is a List. commonBase should technically be a set, but membership is cheaper with a RevFlag. COMMON appears on a commit reachable from a WANT when there is also a PEER_HAS flag present, as this is a merge base. Scrubbing this off when another branch is tested isn't useful. SATISIFIED is a cache to tell us if wantSatisified() has already completed for this particular WANT. If it has, there isn't a need to recompute on that branch. Scrubbing it off 'maint' when we test 'master' just means we would later need to re-test 'maint', wasting CPU time on the server. Bug: 301639 Change-Id: I3bb67d68212e4f579e8c5dfb138f007b406d775f Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | | Merge "UploadPack: Fix want-is-satisfied test"Chris Aniszczyk2011-02-131-1/+1
|\| |
| * | UploadPack: Fix want-is-satisfied testShawn O. Pearce2011-02-061-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | okToGiveUpImp() has been missing a ! for a long time. This loop over wantAll() is looking for an object where wantSatisfied() returns false, because there is no common merge base present. Unfortunately it was missing a !, causing the loop to break and return false after at least one want was satisified. Bug: 301639 Change-Id: Ifdbe0b22c9cd0a9181546d090b4990d792d70c82 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | | Merge "UploadPack: Avoid parsing want list on clone"Chris Aniszczyk2011-02-131-46/+60
|\| |
| * | UploadPack: Avoid parsing want list on cloneShawn O. Pearce2011-02-041-46/+60
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If a client wants to perform a clone of the repository, it sends wants, but no haves. There is no point in parsing the want list within UploadPack, as there won't be a common merge base search. Instead just defer the parsing to PackWriter, which will do its own parsing and object enumeration. If the client does have a "have" set, defer parsing of the want list until the have list is also parsed, and parse them together in a single batch queue. This lets the underlying storage system use a larger lookup batch if there is significant latency involved when resolving an ObjectId to a RevObject. Change-Id: I9c30d34f8e344da05c8a2c041a6dc181d8e8bc19 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | Qualify post 0.11 buildsMatthias Sohn2011-02-123-28/+28
| | | | | | | | | | Change-Id: Ibcef4fc4c986c2cda01e943d16aa1c53eff99f25 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>