aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit/resources
Commit message (Collapse)AuthorAgeFilesLines
* Support refspecs with wildcard in middle (not only at end)Robin Stocker2013-05-281-0/+1
| | | | | | | | | | | | | | | The following refspec, which can be used to fetch GitHub pull requests, is supported by C Git but was not yet by JGit: +refs/pull/*/head:refs/remotes/origin/pr/* The reason is that the wildcard in the source is in the middle. This change also includes more validation (e.g. "refs//heads" is not valid) and test cases. Bug: 405099 Change-Id: I9bcef7785a0762ed0a98ca95a0bdf8879d5702aa
* Extend the FS class for Java7Robin Rosenberg2013-05-041-0/+1
| | | | | | | | | | | | | | | | | | | | | The most important difference is that in Java7 we have symbolic links and for most operations in the work tree we want to operate on the link itself rather than the link target, which the old File methods generally do. We also add support for the hidden attribute, which only makes sense on Windows and exists, just since there are claims that Files.exists is faster the File.exists. A new bundle is only activated when run with a Java7 execution environment. It is implemented as a fragment. Tycho currently has no way to conditionally include optional features based on the java version used to run the build, this means with this change the jgit packaging build always needs to be run using java 7. Change-Id: I3d6580d6fa7b22f60d7e54ab236898ed44954ffd Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* TagCommand should be able to create unannotated tags tooRobin Rosenberg2013-05-031-0/+1
| | | | | | | Using the low level API's is just too cumbersome. Change-Id: Id5b9f560ee095d6db0b2ea5b26aef3e53021626e Signed-off-by: Robin Stocker <robin@nibor.org>
* Allow to get repo statistics from GarbageCollectionCommand before gcEdwin Kempin2013-03-201-0/+1
| | | | | | | | | | | | | | | | | When running the garbage collection for a repository it is often interesting to compare the repository statistics from before and after the garbage collection to understand the effect of the garbage collection. This is why it makes sense that the GarbageCollectionCommand provides a method to retrieve the repository statistics before running the garbage collection. So far without running the garbage collection the repository statistics can only be retrieved by using JGit internal classes. This is what EGit and Gerrit do at the moment, but it would be better to have an API for this. Change-Id: Id7e579157e9fbef5cfd1fc9f97ada45f0ca8c379 Signed-off-by: Edwin Kempin <edwin.kempin@sap.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Fix location of DfsText.propertiesShawn Pearce2013-03-191-0/+0
| | | | | | The file was not moved when the package was renamed to internal. Change-Id: I29a078d6316daa4e4407db9ecedc8b7ed05535cd
* Include the number of ms in timeout error messageRobin Stocker2013-03-081-2/+2
| | | | | | Noticed that while analyzing bug 402131. Change-Id: If3fd40b64d5088c4579946271a67346cbd9e6556
* Support creating pack bitmap indexes in PackWriter.Colby Ranger2013-03-051-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Update the PackWriter to support writing out pack bitmap indexes, a parallel ".bitmap" file to the ".pack" file. Bitmaps are selected at commits every 1 to 5,000 commits for each unique path from the start. The most recent 100 commits are all bitmapped. The next 19,000 commits have a bitmaps every 100 commits. The remaining commits have a bitmap every 5,000 commits. Commits with more than 1 parent are prefered over ones with 1 or less. Furthermore, previously computed bitmaps are reused, if the previous entry had the reuse flag set, which is set when the bitmap was placed at the max allowed distance. Bitmaps are used to speed up the counting phase when packing, for requests that are not shallow. The PackWriterBitmapWalker uses a RevFilter to proactively mark commits with RevFlag.SEEN, when they appear in a bitmap. The walker produces the full closure of reachable ObjectIds, given the collection of starting ObjectIds. For fetch request, two ObjectWalks are executed to compute the ObjectIds reachable from the haves and from the wants. The ObjectIds needed to be written are determined by taking all the resulting wants AND NOT the haves. For clone requests, we get cached pack support for "free" since it is possible to determine if all of the ObjectIds in a pack file are included in the resulting list of ObjectIds to write. On my machine, the best times for clones and fetches of the linux kernel repository (with about 2.6M objects and 300K commits) are tabulated below: Operation Index V2 Index VE003 Clone 37530ms (524.06 MiB) 82ms (524.06 MiB) Fetch (1 commit back) 75ms 107ms Fetch (10 commits back) 456ms (269.51 KiB) 341ms (265.19 KiB) Fetch (100 commits back) 449ms (269.91 KiB) 337ms (267.28 KiB) Fetch (1000 commits back) 2229ms ( 14.75 MiB) 189ms ( 14.42 MiB) Fetch (10000 commits back) 2177ms ( 16.30 MiB) 254ms ( 15.88 MiB) Fetch (100000 commits back) 14340ms (185.83 MiB) 1655ms (189.39 MiB) Change-Id: Icdb0cdd66ff168917fb9ef17b96093990cc6a98d
* Added read/write support for pack bitmap index.Colby Ranger2013-03-051-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A pack bitmap index is an additional index of compressed bitmaps of the object graph. Furthermore, a logical API of the index functionality is included, as it is expected to be used by the PackWriter. Compressed bitmaps are created using the javaewah library, which is a word-aligned compressed variant of the Java bitset class based on run-length encoding. The library only works with positive integer values. Thus, the maximum number of ObjectIds in a pack file that this index can currently support is limited to Integer.MAX_VALUE. Every ObjectId is given an integer mapping. The integer is the position of the ObjectId in the complete ObjectId list, sorted by offset, for the pack file. That integer is what the bitmaps use to reference the ObjectId. Currently, the new index format can only be used with pack files that contain a complete closure of the object graph e.g. the result of a garbage collection. The index file includes four bitmaps for the Git object types i.e. commits, trees, blobs, and tags. In addition, a collection of bitmaps keyed by an ObjectId is also included. The bitmap for each entry in the collection represents the full closure of ObjectIds reachable from the keyed ObjectId (including the keyed ObjectId itself). The bitmaps are further compressed by XORing the current bitmaps against prior bitmaps in the index, and selecting the smallest representation. The XOR'd bitmap and offset from the current entry to the position of the bitmap to XOR against is the actual representation of the entry in the index file. Each entry contains one byte, which is currently used to note whether the bitmap should be blindly reused. Change-Id: Id328724bf6b4c8366a088233098c18643edcf40f
* Implement recursive merge strategyGeorge C. Young2013-02-221-0/+3
| | | | | | | | | | | | Extend ResolveMerger with RecursiveMerger to merge two tips that have up to 200 bases. Bug: 380314 CQ: 6854 Change-Id: I6292bb7bda55c0242a448a94956f2d6a94fddbaa Also-by: Christian Halstrick <christian.halstrick@sap.com> Signed-off-by: Chris Aniszczyk <zx@twitter.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Fix stash apply using merge logicRobin Rosenberg2013-01-301-0/+3
| | | | | | | | | | | | Instead of the complicated strange stuff, implement staah apply as cherry-pick. Provided there are no conflicts and it is requested that the index should be applied, perform yet another cherry-pick, but discard tha results thereof it that would result in conflicts. Bug: 376035 Change-Id: I553f3a753e0124b102a51f8edbb53ddeff2912e2
* Enable marking entries using TreeFilters in DiffEntryRobin Stocker2013-01-231-0/+1
| | | | | | | | | | | | | | | | | | | | 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>
* Update DfsGarbageCollector to not read back a pack index.Colby Ranger2013-01-181-0/+1
| | | | | | | | | Previously, the Dfs GC excluded objects from packs by passing a previously written index to the PackWriter. Reading back a file on Dfs is slow. Instead, allow the PackWriter to expose the objects included in a pack and forward that to invocations of excludeObjects() . Change-Id: I377cb4ab07f62cf790505e1eeb0b2efe81897c79
* Update the revert command and things relating to revertRobin Rosenberg2012-12-281-1/+1
| | | | | | | | | | | | | | | | | Cherry-pick has been fixed, but even though revert does basically the same thing, the fixes were not carried over here. - Recognize the revert-states, analogous to the cherry picking states - Make reset handle a revert-in-progress - Update REVERT_HEAD and MERGE_MSG when revert fails due to conflicts - Clear revert state on commit and reset - Format the message similarily to how cherry-pick does. This is not exactly how C Git does it. The interface is still not the same as for cherry-picking. Change-Id: I8ea956fcbc9526d62a2365360feea23a9280eba3 Signed-off-by: Chris Aniszczyk <zx@twitter.com>
* [findBugs] Don't pass null for non-null parameter in RebaseCommandMatthias Sohn2012-12-051-0/+1
| | | | Change-Id: Iee4d50aa9c6b75f9906d2c51a940ddc90a944192
* RevWalk support for shallow clonesMarc Strapetz2012-11-211-0/+1
| | | | | | | | | | | | StartGenerator now processes .git/shallow to have the RevWalk stop for shallow commits. See RevWalkShallowTest for tests. Bug: 394543 CQ: 6908 Change-Id: Ia5af1dab3fe9c7888f44eeecab1e1bcf2e8e48fe Signed-off-by: Chris Aniszczyk <zx@twitter.com>
* Add GarbageCollectCommand to porcelain APIMatthias Sohn2012-11-181-0/+2
| | | | | | | Bug: 394544 Change-Id: I73faa55d860db64efc3412fee27386df47552a75 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com> Signed-off-by: Chris Aniszczyk <zx@twitter.com>
* Add support for --no-ff while mergingTomasz Zarna2012-11-161-0/+1
| | | | | | Bug: 394432 Change-Id: I373128c0ba949f9b24248874f77f3d68b50ccfd1 Signed-off-by: Chris Aniszczyk <zx@twitter.com>
* Add a test for org.eclipse.jgit.pgm.TagTomasz Zarna2012-11-151-0/+1
| | | | | | | | The test checks if an error is thrown when trying to create the same tag for the second time. Change-Id: I4ed2f6c997587f0ea23bd26a32fb64a2d48a980e Signed-off-by: Chris Aniszczyk <zx@twitter.com>
* Simplify push error message when ref already existsShawn O. Pearce2012-10-171-1/+2
| | | | | | | | | | | | | | If a client attempts to create a branch that already exists on the remote side, tell them "already exists" rather than repeat lots of information about the reference. Previously the error looked like: ! [remote rejected] tags/1.3.1 -> 1.3.1 (Ref Ref[refs/tags/1.3.1=e3857ee05...] already exists) Now it will simply say: ! [remote rejected] tags/1.3.1 -> 1.3.1 (already exists) Change-Id: I96fc67ca8b650052de6e662449a3c5bc8bbc010b
* CommitCommand: Don't allow amending on initial commitRobin Stocker2012-10-081-0/+1
| | | | Change-Id: I27b13510eb6756da21d0d359d76031da4a875e28
* Introduce ParseExceptions for GitDateParserChristian Halstrick2012-09-171-0/+1
| | | | | | | | | Instead of just returning null when something was not parseable we should throw a real ParseException. This allows us to distinguish between specifications which are unparseable and those which represent no date (e.g. "never") Change-Id: Ib3c1aa64b65ed0e0270791a365f2fa72ab78a3f4
* Garbage collector for FileRepositoriesChristian Halstrick2012-07-291-0/+5
| | | | | | | | | | | | | | | | | | | | | Implements a garbage collector for FileRepositories. Main ideas are copied from the garbage collector for DFS based repos (DfsGarbageCollector). Added functionalities are - pruning loose objects - handling of the index - packing refs - handling of reflogs (objects referenced from reflog will not be pruned/) These are features of a GC which are not handled in this change and which should come with subsequent changes: - unpacking packed objects into loose objects (to support that pruning packed objects doesn't delete them until they are older than two weeks) - expiration of reflogs - support for configuration parameters (e.g. gc.pruneExpire) Change-Id: I14ea5cb7e0fd1b5c50b994fd77f4e05bfbb9d911 Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
* ReceivePack supports InputStream data after packIan Wetherbee2012-06-151-0/+1
| | | | | | | When receiving a pack, data buffered after the pack can restored to the InputStream if the stream supports mark and reset. Change-Id: If04915c32c91be28db8df7e8491ed3e9fe0e1608
* Read .gitmodules config from the tree in SubmoduleWalkDave Borowitz2012-06-151-0/+1
| | | | | | | | | | | | | It is not always appropriate to use the .gitmodules file from the working tree, for example if reading the modules at a specific commit. And sometimes it is impossible, as in a bare repository. When using the static factory methods, automatically set up the appropriate root tree so lazy loading of the config file reads from the appropriate place. Leave the current behavior of looking in the working tree as a fallback for the case where walking the index. Change-Id: I71b7ed3ba16c80b0adb8c5fd85b5c37fd4aef8eb
* Add "--squash" option to MergeCommandTomasz Zarna2012-06-151-0/+1
| | | | | | | CQ: 6570 Bug: 351806 Change-Id: I5e47810376419264ecf4247b5a333af5c8945080 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Add Transport URI constructor without a repositoryIan Wetherbee2012-06-141-0/+1
| | | | | | | Let a Transport instance be opened with only a URI, for use in the upcoming publish-subscribe feature. Change-Id: I391c60c10d034b5c1c0ef19b1f24a9ba76b17bb5
* Externalize parsing exception message for RebaseCommand#ActionTomasz Zarna2012-04-021-0/+1
| | | | Change-Id: Id0d7801e4de98bf118dbecadf623c9ffd7ab7554
* Add command support for dropping a stashed commitKevin Sawicki2012-03-211-0/+3
| | | | | | | | | | | | | | This extracts the logic for writing to the reflog from RefDirectory into a new ReflogWriter class. This class creates a public API for writing reflog entries similar to ReflogReader for reading reflog entries. The new command supports rewriting the stash's log to remove a configured entry followed by updating the stash ref to the value at the bottom of the newly written log. Change-Id: Icfcbc70e838666769a742a94196eb8dc9c7efcc7 Signed-off-by: Chris Aniszczyk <zx@twitter.com>
* Move JGitText to an internal packageRobin Rosenberg2012-03-121-0/+0
| | | | Change-Id: I763590a45d75f00a09097ab6f89581a3bbd3c797
* Add ApplyCommand to JGit APITomasz Zarna2012-03-041-0/+3
| | | | | | | Bug: 361548 CQ: 6243 Change-Id: I08e1369e142bb19f42a8d7bbb5a7d062cc8533fc Signed-off-by: Chris Aniszczyk <zx@twitter.com>
* Fix a typo referring to RevFilter as RefFilterDave Borowitz2012-02-291-1/+1
| | | | Change-Id: I173efca7540b522d386216d1bd229e9a061263b2
* Add command support for applying a stashed commitKevin Sawicki2012-02-281-0/+4
| | | | | | | | | Applies the changes in a stashed commit to the local working directory and index Bug: 309355 Change-Id: I9fd5ede8affc7f0060ffa7c5cec34573b6fa2b1b Signed-off-by: Chris Aniszczyk <zx@twitter.com>
* Add support for creating a stashed commitKevin Sawicki2012-02-281-0/+2
| | | | | | | | | Adds a new command to stash the index and working directory changes in a commit stored in refs/stash Bug: 309355 Change-Id: I2ce85b1601b74b07e286a3f99feb358dfbdfe29c Signed-off-by: Chris Aniszczyk <zx@twitter.com>
* Support gitdir references in working tree .git fileKevin Sawicki2012-02-081-0/+1
| | | | | | | | | | | | | A '.git' file in a repository's working tree root is now parsed as a ref to a folder located elsewhere. This supports submodules having their repository location outside of the parent repository's working directory such as in the parent repository's '.git/modules' directory. This adds support to BaseRepositoryBuilder for repositories created with the '--separate-git-dir' option specified to 'git init'. Change-Id: I73c538f6d845bdbc0c4e2bce5a77f900cf36e1a9 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Support relative submodule URLs on init/add/syncKevin Sawicki2012-01-171-0/+1
| | | | | | | | | | Interpret submodule URLs that start with './' or '../' as relative to either the configured remote for the HEAD branch, or 'origin', or the parent repository working directory if no remote URL is configured Bug: 368536 Change-Id: Id4985824023b75cd45cd64a4dd9d421166391e10
* Skip a number commits before starting to show the commit outputTomasz Zarna2012-01-021-0/+1
| | | | Change-Id: Id2666d897d29b6371f7a6cf241cfda02964b4971 Signed-off-by: Kevin Sawicki <kevin@github.com>
* Sort translation bundle keys in alphabetical order.Tomasz Zarna2012-01-021-41/+41
| | | | Change-Id: I83e26531ea924178ba43fa82b3c1fe02afd23eca Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Add comand support for git-submoduleKevin Sawicki2011-12-281-0/+3
| | | | | | | | | | | | | | | | Adds the following commands: - Add - Init - Status - Sync - Update This also updates AddCommand so that file patterns added that are submodules can be staged in the index. Change-Id: Ie5112aa26430e5a2a3acd65a7b0e1d76067dc545 Signed-off-by: Kevin Sawicki <kevin@github.com> Signed-off-by: Chris Aniszczyk <zx@twitter.com>
* Add commit id and parent count to exception messageKevin Sawicki2011-12-271-1/+1
| | | | | Bug: 357312 Change-Id: I2f85cf88650594eca7df6aa0e26bea329674f08e
* Limit the number of commits in LogCommand outputTomasz Zarna2011-12-231-0/+1
| | | | | Bug: 316680 Change-Id: I88cf7aac6b5763cc94421433dd4bbd42f81e0e69
* Support getting specific entry number in reflogKevin Sawicki2011-12-191-1/+1
| | | | | | | The number specified is interpreted as relative to the last entry in the reflog. Change-Id: Ie4dd03370bb0d475a0e89d3015113ca98920100f
* Add exception class for when locking a file failsKevin Sawicki2011-12-181-1/+0
| | | | | | | | This will allows calling classes to handle lock failures without checking against the message and will also provide access to the file that could not be locked. Change-Id: I95bc59e1330a7af71ae3b0485c4516299193f504
* Support resolving integer-based reflog revisionsKevin Sawicki2011-12-161-1/+2
| | | | | | | | | | | Revision strings such as 'master@{0}' can now be resolved by Repository.resolve by reading the reflog for the ref and returning the commit for the entry number specified. This still throws an exception for cases not supported such as 'master@{yesterday}'. Change-Id: I6162777d6510e083565a77cac4545cda5a9aefb3
* Guard against null branch in PullCommandKevin Sawicki2011-11-221-0/+1
| | | | | | | | Throw a NoHeadException when Repository.getFullBranch returns null Bug: 351543 Change-Id: I666cd5b67781508a293ae553c6fe5c080c8f4d99 Signed-off-by: Kevin Sawicki <kevin@github.com>
* maxObjectSizeLimit for receive-pack.Sasa Zivkov2011-11-221-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ReceivePack (and PackParser) can be configured with the maxObjectSizeLimit in order to prevent users from pushing too large objects to Git. The limit check is applied to all object types although it is most likely that a BLOB will exceed the limit. In all cases the size of the object header is excluded from the object size which is checked against the limit as this is the size of which a BLOB object would take in the working tree when checked out as a file. When an object exceeds the maxObjectSizeLimit the receive-pack will abort immediately. Delta objects (both offset and ref delta) are also checked against the limit. However, for delta objects we will first check the size of the inflated delta block against the maxObjectSizeLimit and abort immediately if it exceeds the limit. In this case we even do not know the exact size of the resolved delta object but we assume it will be larger than the given maxObjectSizeLimit as delta is generally only chosen if the delta can copy more data from the base object than the delta needs to insert or needs to represent the copy ranges. Aborting early, in this case, avoids unnecessary inflating of the (huge) delta block. Unfortunately, it is too expensive (especially for a large delta) to compute SHA-1 of an object that causes the receive-pack to abort. This would decrease the value of this feature whose main purpose is to protect server resources from users pushing huge objects. Therefore we don't report the SHA-1 in the error message. Change-Id: I177ef24553faacda444ed5895e40ac8925ca0d1e Signed-off-by: Sasa Zivkov <sasa.zivkov@sap.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Add missing '' characters around quoted variablesKevin Sawicki2011-11-181-6/+6
| | | | | | | | Double ' characters are needed for variables to appear in single quotes. Variables surrounded with a s single ' will not be replaced when formatted Change-Id: I0182c1f679ba879ca19dd81bf46924f415dc6003 Signed-off-by: Kevin Sawicki <kevin@github.com>
* Add an object encapsulating the state of a PackWriterDave Borowitz2011-11-141-0/+1
| | | | | | | | Exposes essentially the same state machine to the programmer as is exposed to the client via a ProgressMonitor, using a wrapper around beginTask()/endTask(). Change-Id: Ic3622b4acea65d2b9b3551c668806981fa7293e3
* DFS: A storage layer for JGitShawn O. Pearce2011-11-041-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In practice the DHT storage layer has not been performing as well as large scale server environments want to see from a Git server. The performance of the DHT schema degrades rapidly as small changes are pushed into the repository due to the chunk size being less than 1/3 of the pushed pack size. Small chunks cause poor prefetch performance during reading, and require significantly longer prefetch lists inside of the chunk meta field to work around the small size. The DHT code is very complex (>17,000 lines of code) and is very sensitive to the underlying database round-trip time, as well as the way objects were written into the pack stream that was chunked and stored on the database. A poor pack layout (from any version of C Git prior to Junio reworking it) can cause the DHT code to be unable to enumerate the objects of the linux-2.6 repository in a completable time scale. Performing a clone from a DHT stored repository of 2 million objects takes 2 million row lookups in the DHT to locate the OBJECT_INDEX row for each object being cloned. This is very difficult for some DHTs to scale, even at 5000 rows/second the lookup stage alone takes 6 minutes (on local filesystem, this is almost too fast to bother measuring). Some servers like Apache Cassandra just fall over and cannot complete the 2 million lookups in rapid fire. On a ~400 MiB repository, the DHT schema has an extra 25 MiB of redundant data that gets downloaded to the JGit process, and that is before you consider the cost of the OBJECT_INDEX table also being fully loaded, which is at least 223 MiB of data for the linux kernel repository. In the DHT schema answering a `git clone` of the ~400 MiB linux kernel needs to load 248 MiB of "index" data from the DHT, in addition to the ~400 MiB of pack data that gets sent to the client. This is 193 MiB more data to be accessed than the native filesystem format, but it needs to come over a much smaller pipe (local Ethernet typically) than the local SATA disk drive. I also never got around to writing the "repack" support for the DHT schema, as it turns out to be fairly complex to safely repack data in the repository while also trying to minimize the amount of changes made to the database, due to very common limitations on database mutation rates.. This new DFS storage layer fixes a lot of those issues by taking the simple approach for storing relatively standard Git pack and index files on an abstract filesystem. Packs are accessed by an in-process buffer cache, similar to the WindowCache used by the local filesystem storage layer. Unlike the local file IO, there are some assumptions that the storage system has relatively high latency and no concept of "file handles". Instead it looks at the file more like HTTP byte range requests, where a read channel is a simply a thunk to trigger a read request over the network. The DFS code in this change is still abstract, it does not store on any particular filesystem, but is fairly well suited to the Amazon S3 or Apache Hadoop HDFS. Storing packs directly on HDFS rather than HBase removes a layer of abstraction, as most HBase row reads turn into an HDFS read. Most of the DFS code in this change was blatently copied from the local filesystem code. Most parts should be refactored to be shared between the two storage systems, but right now I am hesistent to do this due to how well tuned the local filesystem code currently is. Change-Id: Iec524abdf172e9ec5485d6c88ca6512cd8a6eafb
* Cosmetic adjustment of relative date format, do not display "0 months"Robin Rosenberg2011-10-261-0/+1
| | | | | | | Though it may seem less precise, "0 months" looks bad and the reference Git implementation also does not display "0 months" Change-Id: I488e9c97656f9941788ae88d7c5c1562ab6c26f0
* Use JGitText.refAlreadyExists instead of "ref exists"Tomasz Zarna2011-08-241-1/+1
| | | | Change-Id: I113bcf82c6292db5269271f799d09c80acc40bcd