summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit/src
Commit message (Collapse)AuthorAgeFilesLines
* Remove @since tags from internal packagesJonathan Nieder2017-01-2418-41/+0
| | | | | | | | | These packages don't use @since tags because they are not part of the stable public API. Some @since tags snuck in, though. Remove them to make the convention easier to find for new contributors and the expectations clearer for users. Change-Id: I6c17d3cfc93657f1b33cf5c5708f2b1c712b0d31
* gc: loosen unreferenced objectsDavid Turner2017-01-242-6/+69
| | | | | | | | | | | | | | | | | An unreferenced object might appear in a pack. This could only happen because it was previously referenced, and then later that reference was removed. When we gc, we copy the referenced objects into a new pack, and delete the old pack. This would remove the unreferenced object. Now we first create a loose object from any unreferenced object in the doomed pack. This kicks off the two-week grace period for that object, after which it will be collected if it's not referenced. This matches the behavior of regular git. Change-Id: I59539aca1d0d83622c41aa9bfbdd72fa868ee9fb Signed-off-by: David Turner <dturner@twosigma.com> Signed-off-by: Jonathan Nieder <jrn@google.com>
* [infer] Mark ManifestParse.getFilteredProjects non-nullMatthias Sohn2017-01-231-1/+2
| | | | Change-Id: I05653df7a0337443d2c8e53f47f4e95ec9ca1a9c Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* [infer] Fix potential NPE in DiffFormatterMatthias Sohn2017-01-231-1/+1
| | | | Change-Id: Ia33e2af9ce3393d9173ca0dc7efefd86c965d8c8 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* [infer] Fix potential NPE in CloneCommandMatthias Sohn2017-01-231-6/+18
| | | | Change-Id: Ie7eeba3ae719ff207c7535d535a9e0bd6c9e99e6 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Change StreamGobbler to Runnable to avoid unused FutureShawn Pearce2017-01-211-12/+15
| | | | | | | | | | | | | It can be considered a programming error to create a Future<T> but do nothing with that object. There is an async computation happening and without holding and checking the Future for done or exception the caller has no idea if it has completed. FS doesn't really care about these StreamGobblers finishing. Instead use Runnable with execute(Runnable), which doesn't return a Future. Change-Id: I93b66d1f6c869e66be5c1169d8edafe781e601f6
* Add missing @since tags on new API constantsMatthias Sohn2017-01-191-2/+2
| | | | Change-Id: Ia8b861da07fba99644ccc9eb5578a46cc39600a1 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* gc: Add options to preserve and prune old pack filesJames Melvin2017-01-194-6/+163
| | | | | | | | | | | | | | | | | | | The new --preserve-oldpacks option moves old pack files into the preserved subdirectory instead of deleting them after repacking. The new --prune-preserved option prunes old pack files from the preserved subdirectory after repacking, but before potentially moving the latest old packfiles to this subdirectory. These options are designed to prevent stale file handle exceptions during git operations which can happen on users of NFS repos when repacking is done on them. The strategy is to preserve old pack files around until the next repack with the hopes that they will become unreferenced by then and not cause any exceptions to running processes when they are finally deleted (pruned). Change-Id: If3f729f0d9ce920ee2c3e6acdde46f2068be61d2 Signed-off-by: James Melvin <jmelvin@codeaurora.org>
* Normalizer creating a valid branch name from a stringWim Jongman2017-01-181-0/+37
| | | | | | | | | | | Generic normalization method for a possible invalid branch name. The method compresses dividers between spaces, then replaces spaces and non word characters with underscores. This method is needed in preparation for subsequent EGit changes. Bug: 509878 Change-Id: Ic0d12f098f90f912a45bcc5693d6accf751d4e58 Signed-off-by: Wim Jongman <wim.jongman@remainsoftware.com>
* Merge "Fix StashApplyCommand for stashes containing untracked changes."Christian Halstrick2017-01-161-5/+5
|\
| * Fix StashApplyCommand for stashes containing untracked changes.Thomas Wolf2017-01-151-5/+5
| | | | | | | | | | | | | | | | | | | | | | If there are untracked changes, apply only the untracked tree after a successful merge. The merge tree from merging untracked with HEAD would also contain files already reset before (changes in tracked files) and try to reset those again,leading to false checkout conflicts. Bug: 505804 Change-Id: Iaced4d277623334d11e3d1cca5969590d7c5093e Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | Fix possible InvalidObjectIdException in ObjectDirectoryMarc Strapetz2017-01-152-2/+9
|/ | | | | | | | | | ObjectDirectory.getShallowCommits should throw an IOException instead of an InvalidArgumentException if invalid SHAs are present in .git/shallow (as this file is usually edited by a human). Change-Id: Ia3a39d38f7aec4282109c7698438f0795fbec905 Signed-off-by: Marc Strapetz <marc.strapetz@syntevo.com> Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* Skip pack header bytes in DfsPackFileZhen Chen2017-01-131-1/+10
| | | | | | | | | The 12 bytes `PACK...` header is written in PackWriter before reading CachedPack files. In DfsPackFile#copyPackBypassCache, the header was not skipped when the first block is not in cache. Change-Id: Ibbe2e564d36b79922a936657f286addb1044d237 Signed-off-by: Zhen Chen <czhen@google.com>
* Pack refs/tags/ with refs/heads/Shawn Pearce2017-01-032-2/+14
| | | | | | | | | | | | | | | | | | | | | | This fixes a nasty performance issue for repositories that have many objects referenced through refs/tags/, but not in refs/heads/. Situations like this can arise when a project has made releases like refs/tags/v1.0, and then decides to orphan history and start over for version 2. The v1.0 objects are not reachable from master anymore, but are still live due to the v1.0 tag. When tags are packed in the GC_OTHER pack, bitmaps are not able to cover the repository's contents. This may cause very slow counting times during git clone, as the server must enumerate the ancient history under refs/tags/ to respond to the client. Clients by default always ask for all tags when asking for all heads during clone. This has been true since git-core commit 8434c2f1afedb (Apr 27 2008), when clone was converted to a builtin. Including tags in the main GC pack should still allow servers to benefit from the fast full pack reuse path when serving a clone to a client. Change-Id: I22e29517b5bc6fa3d6b19a19f13bef0c68afdca3
* Get rid of javax.servlet API dependency for core org.eclipse.jgitMarc Strapetz2017-01-031-5/+4
| | | | | Change-Id: I57d5d4fab7e0b1bd4cf5f1850e8569c8ac5def88 Signed-off-by: Marc Strapetz <marc.strapetz@syntevo.com> Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
* [findBugs] PackWriter.NONE should be finalMatthias Sohn2016-12-301-1/+1
| | | | Change-Id: I4b5621bcb4db82e0560408b3cde6f18b0cc55b29 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* [findBugs] Remove reliance on default encoding in Base64Matthias Sohn2016-12-291-11/+3
| | | | Change-Id: I6901da975a86c460ce7c783a519669d8be8e23bb Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* [findBugs] Fix potential NPE in GCMatthias Sohn2016-12-291-3/+4
| | | | Change-Id: I59cda76b2c5039e08612f394ee4f7f1788578c49 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Fix keep pack filenameJames Melvin2016-12-272-1/+5
| | | | | | | | | Previously it was looking for a keep file with the name of a pack file (extenstion included) appended with a '.keep'. However, the keep file name should be the pack file name with a '.keep' extension Change-Id: I9dc4c7c393ae20aefa0b9507df8df83610ce4d42 Signed-off-by: James Melvin <jmelvin@codeaurora.org>
* Merge branch 'stable-4.5'Matthias Sohn2016-12-241-3/+8
|\ | | | | | | | | | | | | | | * origin/stable-4.5: Fix one case of missing object Change-Id: Ia6384f4be71086d5a0a8c42c7521220f57dfd086 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
| * Fix one case of missing objectHector Oswaldo Caballero2016-12-131-3/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When a repository is being GCed and a concurrent push is received, there is the possibility of having a missing object. This is due to the fact that after the list of objects to delete is built, there is a window of time when an unreferenced and ready to delete object can be referenced by the incoming push. In that case, the object would be deleted because there is no way to know it is no longer unreferenced. This will leave the repository in an inconsistent state and most of the operations fail with a missing tree/object error. Given the incoming push change the last modified date for the now referenced object, verify this one is still a candidate to delete before actually performing the delete operation. Change-Id: Iadcb29b8eb24b0cb4bb9335b670443c138a60787 Signed-off-by: Hector Oswaldo Caballero <hector.caballero@ericsson.com>
* | [infer] Fix resource leak in IndexDiffMatthias Sohn2016-12-211-5/+7
| | | | | | | | | | | | | | | | We only need the tree id to add it to a TreeWalk so change tree's type to AnyObjectId. Bug: 509385 Change-Id: I98dd5fef15cd173fe1fd84273f0f48e64e12e608 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | [infer] Fix resource leak in ObjectCheckerMatthias Sohn2016-12-211-2/+3
| | | | | | | | | | Bug: 509385 Change-Id: I6b6ff5b721d959eb0708003a40c8f97d6826ac46 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | [infer] Fix a resource leak in PackWriterMatthias Sohn2016-12-191-7/+8
| | | | | | | | | | Bug: 509385 Change-Id: Ic8a82895fa39be73f1bd8427cfe9437be6fc4e3e Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | [infer] Fix resource leaks in DfsInserterMatthias Sohn2016-12-191-3/+4
| | | | | | | | | | Bug: 509385 Change-Id: Id5dc40bb3fb9da97ea0795cca1f2bcdcde347767 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | [infer] Fix resource leak in ManifestParserMatthias Sohn2016-12-181-14/+8
| | | | | | | | | | Bug: 509385 Change-Id: Icfe58ac2e5344546448a55ad14ec082356be968c Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | [infer] Fix resource leak in RepoCommandMatthias Sohn2016-12-181-9/+3
| | | | | | | | | | Bug: 509385 Change-Id: I30c427f0dd2fc1fceb6b003dfdee0a05efaefca9 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | [infer] Fix resource leak in DirCacheMatthias Sohn2016-12-181-3/+3
| | | | | | | | | | Bug: 509385 Change-Id: I5f914c910ef3a7583594fb31c7757d3dddf6a05e Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | [infer] Fix SubmoduleWalk leaks in submodule commandsMatthias Sohn2016-12-183-6/+3
| | | | | | | | | | Bug: 509385 Change-Id: I4cba81d8ea596800a40799dc9cb763fae01fe508 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | [infer] Fix resource leaks in SubmoduleAddCommandMatthias Sohn2016-12-181-2/+8
| | | | | | | | | | Bug: 509385 Change-Id: I9d25cf117cfb19df108f5fe281232193fd898474 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | [infer] Fix resource leaks in RebaseCommandMatthias Sohn2016-12-181-7/+9
| | | | | | | | | | Bug: 509385 Change-Id: I9fbdfda59f7bc577aab55dc92ff897b00b5cb050 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | [infer] Fix resource leak in BlameCommandMatthias Sohn2016-12-181-5/+6
| | | | | | | | | | Bug: 509385 Change-Id: Ic57fd3bf940752229e35102e7761823f7d3d8732 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | Fix FileSnapshot.isModifiedChristian Halstrick2016-12-131-6/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | FileSnapshot.isModified may have reported a file to be clean although it was actually dirty. Imagine you have a FileSnapshot on file f. lastmodified and lastread are both t0. Now time is t1 and you 1) modify the file 2) update the FileSnapshot of the file (lastModified=t1, lastRead=t1) 3) modify the file again 4) wait 3 seconds 5) ask the Filesnapshot whether the file is dirty or not. It erroneously answered it's clean. Any file which has been modified longer than 2.5 seconds ago was reported to be clean. As the test shows that's not always correct. The real-world problem fixed by this change is the following: * A gerrit server using JGit to serve git repositories is processing fetch requests while simultaneously a native git garbage collection runs on the repo. * At time t1 native git writes temporary files in the pack folder setting the mtime of the pack folder to t1. * A fetch request causes JGit to search for new packfiles and JGit remembers this scan in a Filesnapshot on the packs folder. Since the gc is not finished JGit doesn't see any new packfiles. * The fetch is processed and the gc ends while the filesystem timer is still t1. GC writes a new packfile and deletes the old packfile. * 3 seconds later another request arrives. JGit does not yet know about the new packfile but is also not rescanning the pack folder because it cached that the last scan happened at time t1 and pack folder's mtime is also t1. Now JGit will not be able to resolve any object contained in this new pack. This behavior may be persistent if objects referenced by the ref/meta/config branch are affected so gerrit can't read permissions stored in the refs/meta/config branch anymore and will not allow any pushes anymore. The pack folder will not change its mtime and therefore no rescan will take place. Change-Id: I3efd0ccffeb97b01207dc3e7a6b85c6b06928fad Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | Decide whether to "Accept-Encoding: gzip" on a request-by-request basisZhen Chen2016-12-092-18/+78
| | | | | | | | | | | | | | | | | | When the reply is already compressed (e.g. a packfile fetched using dumb HTTP), "Content-Encoding: gzip" wastes bandwidth relative to sending the content raw. So don't "Accept-Encoding: gzip" for such requests. Change-Id: Id25702c0b0ed2895df8e9790052c3417d713572c Signed-off-by: Zhen Chen <czhen@google.com>
* | Replace usage of deprecated EWAHCompressedBitmap.add(long)David Pursehouse2016-12-072-3/+3
| | | | | | | | | | | | | | | | | | | | The add(long) method was deprecated in favor of addWord(long) in the 0.8.3 release of JavaEWAH [1]. [1] https://github.com/lemire/javaewah/commit/e443cf5e Change-Id: I89c397ed02e040f57663d04504399dfdc0889626 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* | Fix merge-base calculationChristian Halstrick2016-11-281-10/+33
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fix JGits merge-base calculation in case of inconsistent commit times. JGit was potentially failing to compute correct merge-bases when the commit times where inconsistent (a parent commit was younger than a child commit). The code in MergeBaseGenerator was aware of the fact that sometimes the discovery of a merge base x can occur after the parents of x have been seen (see comment in #carryOntoOne()). But in the light of inconsistent commit times it was possible that these parents of a merge-base have already been returned as a merge-base. This commit fixes the bug by buffering all commits generated by MergeBaseGenerator. It is expected that this buffer will be small because the number of merge-bases will be small. Additionally a new flag is used to mark the ancestors of merge-bases. This allows to filter out the unwanted commits. Bug: 507584 Change-Id: I9cc140b784c3231b972bd2c3de61a789365237ab
* | Specify RevisionSyntaxException message in Repository#resolveGrace Wang2016-11-241-3/+11
| | | | | | | | | | | | | | | | This does not address all cases where no message is specified, only cases where Repository#isValidRefName returns false. Change-Id: Ib88cdabfdcdf37be0053e06949b0e21ad87a9575 Signed-off-by: Grace Wang <gracewang92@gmail.com>
* | Add missing @since tags for new APIMatthias Sohn2016-11-232-1/+5
| | | | | | | | Change-Id: I900d745195f58c067fadf209bb92cd3c852c59f4 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | dump HTTP: Avoid being confused by Content-Length of a gzipped streamZhen Chen2016-11-222-3/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | TransportHttp sets 'Accept-Encoding: gzip' to allow the server to compress HTTP responses. When fetching a loose object over HTTP, it uses the following code to read the response: InputStream in = openInputStream(c); int len = c.getContentLength(); return new FileStream(in, len); If the content is gzipped, openInputStream decompresses it and produces the correct content for the object. Unfortunately the Content-Length header contains the length of the compressed stream instead of the actual content length. Use a length of -1 instead since we don't know the actual length. Loose objects are already compressed, so the gzip encoding typically produces a longer compressed payload. The value from the Content-Length is too high, producing EOFException: Short read of block. Change-Id: I8d5284dad608e3abd8217823da2b365e8cd998b0 Signed-off-by: Zhen Chen <czhen@google.com> Helped-by: Jonathan Nieder <jrn@google.com>
* | Close input stream after useZhen Chen2016-11-221-7/+11
| | | | | | | | | | | | | | The InputStream in FileStream in downloadPack is never closed. Change-Id: I59975d0b8d51f4b3e3ba9d4496b254d508cb936d Signed-off-by: Zhen Chen <czhen@google.com>
* | Define MonotonicClock interface for advanced timestampsShawn Pearce2016-11-2114-30/+658
| | | | | | | | | | | | | | | | | | | | | | | | | | MonotonicClock can be implemented to provide more certainity about time than the standard System.currentTimeMillis() can provide. This can be used by classes such as PersonIdent and Ketch to rely on more certainity about time moving in a strictly ascending order. Gerrit Code Review can also leverage this interface through its embedding of JGit and use MonotonicClock and ProposedTimestamp to provide stronger assurance that NoteDb time is moving forward. Change-Id: I1a3cbd49a39b150a0d49b36d572da113ca83a786
* | Update JavaEWAH to 1.1.6Dave Borowitz2016-11-171-2/+2
| | | | | | | | | | | | | | | | Use Oxygen M3 Orbit repository which provides the bundles built using the new orbit-recipe based build. CQ: 11658 Change-Id: I7f3dcc966732b32830c75d5daa55383bd028d182 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | Add missing @since tags for new APIMatthias Sohn2016-11-141-0/+2
| | | | | | | | Change-Id: Iaf83f66637d6a13e4a6d096ba8529553af7e30ed Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | Fix cryptoVer constant name to CRYPTO_VERShawn Pearce2016-11-141-3/+3
| | | | | | | | Change-Id: I46c39f2eceb4d58e49bd6273b87711f35250ab5c
* | RepositoryCache: simplify codeShawn Pearce2016-11-141-6/+3
| | | | | | | | | | | | | | | | | | | | | | The type parameters can now be inferred when creating ConcurrentHashMap. A for loop over the keys of a ConcurrentHashMap doesn't need to use an Iterator<Map.Entry>; loop syntax handles this just fine over keySet(). Change-Id: I1f85bb81b77f7cd1caec77197f2f0bf78e4a82a1
* | Add missing @Override found by ErrorProneShawn Pearce2016-11-144-17/+25
| | | | | | | | Change-Id: I585242507815aad4aa0103fd55a6c369e342ab33
* | Deprecate SafeBufferedOutputStreamShawn Pearce2016-11-1411-58/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Java 8 fixed the silent flush during close issue by FilterOutputStream (base class of BufferedOutputStream) using try-with-resources to close the stream, getting a behavior matching what JGit's SafeBufferedOutputStream was doing: try { flush(); } finally { out.close(); } With Java 8 as the minimum required version to run JGit it is no longer necessary to override close() or have this class. Deprecate the class, and use the JRE's version of close. Change-Id: Ic0584c140010278dbe4062df2e71be5df9a797b3
* | Merge "Support {get,set}GitwebDescription on InMemoryRepository"David Pursehouse2016-11-141-0/+13
|\ \
| * | Support {get,set}GitwebDescription on InMemoryRepositoryShawn Pearce2016-11-141-0/+13
| | | | | | | | | | | | | | | | | | | | | | | | This simplifies testing for Gerrit Code Review where application code is updating the repository description and the test harness uses InMemoryRepository. Change-Id: I9fbcc028ae24d90209a862f5f4f03e46bfb71db0
* | | Organize importsDavid Pursehouse2016-11-1435-51/+46
|/ / | | | | | | | | Change-Id: I7c545d06b1bced678c020fab9af1382bc4416b6e Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>