summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit
Commit message (Collapse)AuthorAgeFilesLines
* Merge "reftable: add random suffix to table names"Matthias Sohn2021-02-051-2/+6
|\
| * reftable: add random suffix to table namesHan-Wen Nienhuys2021-01-251-2/+6
| | | | | | | | | | | | | | | | | | | | | | In some circumstances (eg. compacting a stack that has deletions), the result may have a {min, max} range that already exists. In these cases, we would rename onto an already existing file, which does not work on Windows. By adding a random suffix, we disambiguate the files, and avoid this failure scenario. Change-Id: I0273f99bb845cfbdbd8cdd582b55d3c310505d29 Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
* | TransportGitAnon: remove unnecessary socket bind to a local addressAlina Djamankulova2021-02-051-1/+0
| | | | | | | | | | | | | | | | | | before connecting. A socket gets bound on connect in the next line. Signed-off-by: Alina Djamankulova <adjama@google.com> Change-Id: I69a423c592e2fdd582b3c40099137b4ef3d05b39
* | IO: fix IO.readFully(InputStream, byte[], int)Thomas Wolf2021-01-311-3/+3
| | | | | | | | | | | | | | | | | | This would run into an endless loop if the offset given was not zero. Fix the logic to exit the read loop when the buffer is full. Luckily all existing uses of this method call it only with offset zero. Change-Id: I0ec2a4fb43efe4a605d06ac2e88cf155d50e2f1e Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | Merge "Move reachability checker generation into the ObjectReader object"Jonathan Nieder2021-01-2910-27/+120
|\ \
| * | Move reachability checker generation into the ObjectReader objectTerry Parker2021-01-2810-27/+120
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Reachability checkers are retrieved from RevWalk and ObjectWalk objects: * RevWalk.createReachabilityChecker() * ObjectWalk.createObjectReachabilityChecker() Since RevWalks and ObjectWalks are themselves directly instantiated in hundreds of places (e.g. UploadPack...) overriding them in a consistent way requires overloading 100s of methods, which isn't feasible. Moving reachability checker generation to a more central place solves that problem. The ObjectReader object seems a good place from which to get reachability checkers, because reachability checkers return information about relationships between objects. ObjectDatabases delegate many operations to ObjectReaders, and reachability bitmaps are attached to ObjectReaders. The Bitmapped and Pedestrian reachability checker objects were package private in the org.eclipse.jgit.revwalk package. This change makes them public and moves them to the org.eclipse.jgit.internal.revwalk package. Corresponding tests are also moved. Motivation: 1) Reachability checking algorithms need to scale. One of the internal Android repositories has ~2.4 million refs/changes/* references, causing bad long tail performance in reachability checks. 2) Reachability check performance is impacted by repository topography: number of refs, number of objects, amounts of related vs. unrelated history. 3) Reachability check performance is also affected by per-branch access (Gerrit branch permissions) since different users can see different branches. 4) Reachability check performance isn't affected by any state in a RevWalk or ObjectWalk. I don't yet know if a single algorithm will work for all cases in #2 and #3. We may need to evolve the ReachabilityChecker interfaces over time to solve the Gerrit branch permissions case, or use Gerrit-specific identity information to solve that in an efficient way. This change takes the existing public API and moves it to the ObjectReader/whole repository level, which is where we can do consistent customizations for #2 and #3. We intend to upstream the best of whatever works, but anticipate the need for multiple rounds of experimentation. Change-Id: I9185feff43551fb387957c436112d5250486833d Signed-off-by: Terry Parker <tparker@google.com>
* | | Merge changes I36d9b63e,I8c5db581,I2c02e89cJonathan Tan2021-01-277-0/+150
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | * changes: Compare getting all refs except specific refs with seek and with filter Add getsRefsByPrefixWithSkips (excluding prefixes) to ReftableDatabase Add seekPastPrefix method to RefCursor
| * | | Add getsRefsByPrefixWithSkips (excluding prefixes) to ReftableDatabaseGal Paikin2021-01-274-0/+93
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We sometimes want to get all the refs except specific prefixes, similarly to getRefsByPrefix that gets all the refs of a specific prefix. We now create a new method that gets all refs matching a prefix except a set of specific prefixes. One use-case is for Gerrit to be able to get all the refs except refs/changes; in Gerrit we often have lots of refs/changes, but very little other refs. Currently, to get all the refs except refs/changes we need to get all the refs and then filter the refs/changes, which is very inefficient. With this method, we can simply skip the unneeded prefix so that we don't have to go over all the elements. RefDirectory still uses the inefficient implementation, since there isn't a simple way to use Refcursor to achieve the efficient implementation (as done in ReftableDatabase). Signed-off-by: Gal Paikin <paiking@google.com> Change-Id: I8c5db581acdeb6698e3d3a2abde8da32f70c854c
| * | | Add seekPastPrefix method to RefCursorGal Paikin2021-01-263-0/+57
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This method will be used by the follow-up change. This useful if we want to go over all the changes after a specific ref. For example, the new method allows us to create a follow-up that would go over all the refs until we reach a specific ref (e.g refs/changes/), and then we use seekPastPrefix(refs/changes/) to read the rest of the refs, thus basically we return all refs except a specific prefix. When seeking past a prefix, the previous condition that created the RefCursor still applies. E.g, if the cursor was created by seekRefsWithPrefix, we can skip some refs but we will not return refs that are not starting with this prefix. Signed-off-by: Gal Paikin <paiking@google.com> Change-Id: I2c02e89c877fe90da8619cb8a4a9a0c865f238ef
* | | | Wrap the Files.list returned Stream in a try-with-resources blockTerry Parker2021-01-263-5/+21
| |/ / |/| | | | | | | | | | | | | | | | | | | | | | | | | | Adds a new FileUtils.hasFiles(Path) helper method to correctly handle the Files.list returned Stream. These errors were found by compiling the code using JDK11's javac compiler. Change-Id: Ie8017fa54eb56afc2e939a2988d8b2c5032cd00f Signed-off-by: Terry Parker <tparker@google.com>
* | | TemporaryBuffer: fix toByteArray(limit)Thomas Wolf2021-01-221-3/+32
| |/ |/| | | | | | | | | | | Heap always copied whole blocks, which leads to AIOOBEs. LocalFile didn't overwrite the method and thus caused NPEs. Change-Id: Ia37d4a875df9f25d4825e6bc95fed7f0dff42afb Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | Merge "[spotbugs]: Fix potential NPE in FileSnapshot constructor"Matthias Sohn2021-01-181-1/+1
|\ \
| * | [spotbugs]: Fix potential NPE in FileSnapshot constructorMatthias Sohn2021-01-031-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | File#getParent can return null which caused this spotbugs warning. FS.FileStoreAttributes#get already gets the parent directory if the passed File is not a directory and checks for null. Hence there is no need to get the parent directory in the FileSnapshot constructor. Change-Id: I77f71503cffb05970ab8d9ba55b69c96c53098b9 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | | TransportHttp: support preemptive Basic authenticationThomas Wolf2021-01-143-0/+75
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If the caller knows already HTTP Basic authentication will be needed and if it also already has the username and password, preemptive authentication is a little bit more efficient since it avoids the initial 401 response. Add a setPreemptiveBasicAuthentication(username, password) method to TransportHttp. Client code could call this for instance in a TransportConfigCallback. The method throws an IllegalStateException if it is called after an HTTP request has already been made. Additionally, a URI can include userinfo. Although it is not recommended to put passwords in URIs, JGit's URIish and also the Java URL and URI classes still allow it. The underlying HTTP connection may omit these fields though. If present, take these fields as additional source for preemptive Basic authentication if setPreemptiveBasicAuthentication() has not been called. No preemptive authentication will be done if the connection is redirected to a different host. Add tests. Bug: 541327 Change-Id: Id00b975e56a15b532de96f7bbce48106d992a22b Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | | TransportHttp: shared SSLContext during fetch or pushThomas Wolf2021-01-147-41/+205
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | TransportHttp makes several HTTP requests. The SSLContext and socket factory must be shared over these requests, otherwise authentication information may not be propagated correctly from one request to the next. This is important for authentication mechanisms that rely on client-side state, like NEGOTIATE (either NTLM, if the underlying HTTP library supports it, or Kerberos). In particular, SPNEGO cannot authenticate on a POST request; the authentication must come from the initial GET request, which implies that the POST request must use the same SSLContext and socket factory that was used for the GET. Change the way HTTPS connections are configured. Introduce the concept of a GitSession, which is a client-side HTTP session over several HTTPS requests. TransportHttp creates such a session and uses it to configure all HTTP requests during that session (fetch or push). This gives a way to abstract away the differences between JDK and Apache HTTP connections and to configure SSL setup outside. A GitSession can maintain state and thus give all HTTP requests in a session the same socket factory. Introduce an extension interface HttpConnectionFactory2 that adds a method to obtain a new GitSession. Implement this for both existing HTTP connection factories. Change TransportHttp to use the new GitSession to configure HTTP connections. The old methods for disabling SSL verification still exist to support possibly external connection and connection factory implementations that do not make use of the new GitSession yet. Bug: 535850 Change-Id: Iedf67464e4e353c1883447c13c86b5a838e678f1 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | | TransportHttp: make the connection factory configurableThomas Wolf2021-01-144-2/+49
| |/ |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously, TransportHttp always used the globally set connection factory. This is problematic if that global factory is changed in the middle of a fetch or push operation. Initialize the factory to use in the constructor, then use that factory for all HTTP requests made through this transport. Provide a setter and a getter for it so that client code can customize the factory, if needed, in a TransportConfigCallback. Once a factory has been used on a TransportHttp instance it cannot be changed anymore. Make the global static factory reference volatile. Change-Id: I7c6ee16680407d3724e901c426db174a3125ba1c Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | Tag message must not include the signatureThomas Wolf2021-01-101-12/+36
| | | | | | | | | | | | | | | | | | | | | | | | Signatures on tags are just tacked onto the end of the message. Getting the message must not return the signature. Compare [1] and [2] in C git, which both drop a signature at the end of an object body. [1] https://github.com/git/git/blob/21bf933/builtin/tag.c#L173 [2] https://github.com/git/git/blob/21bf933/ref-filter.c#L1276 Change-Id: Ic8a1062b8bc77f2d7c138c3fe8a7fd13b1253f38 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | Protocol V2: don't log spurious ACKs in UploadPackThomas Wolf2021-01-062-6/+29
| | | | | | | | | | | | | | | | | | | | | | UploadPack may log ACKs in protocol V2 that it doesn't send (if it got a "done" from the client), or may log ACKs twice. That makes packet log analysis difficult. Add a new constructor to PacketLineOut to omit all logging from an instance, and use it in UploadPack. Change-Id: Ic29ef5f9a05cbcf5f4858a4e1b206ef0e6421c65 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | Merge "Protocol V2: respect MAX_HAVES only once we got at least one ACK"Thomas Wolf2021-01-051-1/+11
|\ \
| * | Protocol V2: respect MAX_HAVES only once we got at least one ACKThomas Wolf2021-01-041-1/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The negotiation in the git protocol contains a cutoff: if the client has sent more than MAX_HAVES "have" lines without getting an ACK, it gives up and sends a "done". MAX_HAVES is 256. However, this cutoff must kick in only if at least one ACK has been received. Otherwise the client may give up way too early, which makes the server send all its history. See [1]. This was missed when protocol V2 was implemented for fetching in JGit in commit 0853a241. Compare also C git commit 0b07eecf6ed.[2] C git had the same bug.[3][4] [1] https://github.com/git/git/blob/6c430a647cb9/Documentation/technical/pack-protocol.txt#L385 [2] https://github.com/git/git/commit/0b07eecf6ed [3] https://lore.kernel.org/git/b7f5bfb9-61fb-2552-4399-b744428728e4@suse.cz/ [4] https://lore.kernel.org/git/20200422084254.GA27502@furthur.local/ Bug: 553083 Change-Id: I1f4e2cc16b5eed6971d981d472329185abb9e4a9 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | | Merge "FileSnapshot: don't try to read file attributes twice"Christian Halstrick2021-01-051-4/+17
|\ \ \ | | |/ | |/|
| * | FileSnapshot: don't try to read file attributes twiceMatthias Sohn2021-01-031-4/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If file doesn't exist set state to MISSING_FILE immediately. Doing that by calling File#lastModified and File#length effectively does the same since they set the value to 0 if the file doesn't exist. Log an error if a different exception than NoSuchFileException is caught. Change-Id: I0d4396b9f80446692a088d17522d64f735ce6708
* | | RepositoryCache: declare schedulerLock finalMatthias Sohn2021-01-031-1/+1
| |/ |/| | | | | | | | | | | | | This fixes errorprone error [SynchronizeOnNonFinalField]: Synchronizing on non-final fields is not safe: if the field is ever updated, different threads may end up locking on different objects. Change-Id: I42fe5bde825151693e2da2d5b6cd6e1d34038dbc
* | Enable git wire protocol version 2 on server side per defaultDavid Ostrovsky2021-01-031-1/+2
| | | | | | | | | | | | Bug: 563145 Change-Id: Id5030c2b85466da0a8ccf3d78ae78df16d64ffc5 Signed-off-by: David Ostrovsky <david@ostrovsky.org>
* | Client-side protocol V2 support for fetchingThomas Wolf2021-01-0118-182/+1071
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Make all transports request protocol V2 when fetching. Depending on the transport, set the GIT_PROTOCOL environment variable (file and ssh), pass the Git-Protocol header (http), or set the hidden "\0version=2\0" (git anon). We'll fall back to V0 if the server doesn't reply with a version 2 answer. A user can control which protocol the client requests via the git config protocol.version; if not set, JGit requests protocol V2 for fetching. Pushing always uses protocol V0 still. In the API, there is only a new Transport.openFetch() version that takes a collection of RefSpecs plus additional patterns to construct the Ref prefixes for the "ls-refs" command in protocol V2. If none are given, the server will still advertise all refs, even in protocol V2. BasePackConnection.readAdvertisedRefs() handles falling back to protocol V0. It newly returns true if V0 was used and the advertised refs were read, and false if V2 is used and an explicit "ls-refs" is needed. (This can't be done transparently inside readAdvertisedRefs() because a "stateless RPC" transport like TransportHttp may need to open a new connection for writing.) BasePackFetchConnection implements the changes needed for the protocol V2 "fetch" command (stateless protocol, simplified ACK handling, delimiters, section headers). In TransportHttp, change readSmartHeaders() to also recognize the "version 2" packet line as a valid smart server indication. Adapt tests, and run all the HTTP tests not only with both HTTP connection factories (JDK and Apache HttpClient) but also with both protocol V0 and V2. The SSH tests are much slower and much more focused on the SSH protocol and SSH key handling. Factor out two very simple cloning and pulling tests and make those run with protocol V2. Bug: 553083 Change-Id: I357c7f5daa7efb2872f1c64ee6f6d54229031ae1 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* Use Map interface instead of ConcurrentHashMap classThomas Wolf2021-01-015-8/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | On Android, the co-variant override of ConcurrentHashMap.keySet() introduced in Java 8 was undone. [1] If compiled Java code calls that co-variant override directly, one gets a NoSuchMethodError exception at run-time on Android. Making the code call that method via Map.keySet() side-steps this problem. This is similar to bug 496262, where the same problem cropped up when compiling with Java 8 against a Java 7 target, but here we cannot use bootclasspath. We build against Java 8, not against the Android version of it. Recent Android versions should have some bytecode "magic" that adds the co-variant override in bytecode (see the commit referenced in [1]), but on older Android version this problem may still occur. (Or perhaps the "magic" is ineffective...) There are two pull requests on Github for this problem, both from 2020, [2][3] while the Android commit [1] is from March 2018. Apparently people still occasionally run into this problem in the wild. [1] https://android.googlesource.com/platform/libcore/+/0e8b937ded4de39f1d1cea5f04800d67dd2ec570/ojluni/src/main/java/java/util/concurrent/ConcurrentHashMap.java#1244 [2] https://github.com/eclipse/jgit/pull/104 [3] https://github.com/eclipse/jgit/pull/100 Change-Id: I7c07e0cc59871cb7fe60795e22867827fa9c2458 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* Fix NPE in DirCacheCheckoutThomas Wolf2020-12-301-8/+10
| | | | | | | | | | | If a file exists in head, merge, and the working tree, but not in the index, and we're doing a force checkout, the checkout must be an "update", not a "keep". This is a follow-up on If3a9b9e60064459d187c7db04eb4471a72c6cece. Bug: 569962 Change-Id: I59a7ac41898ddc1dd90e86b09b621a41fdf45667 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* Merge "Added check for null on DirCacheEntry in checkoutEntry method"Christian Halstrick2020-12-301-2/+6
|\
| * Added check for null on DirCacheEntry in checkoutEntry methodTudor Matrescu2020-12-031-2/+6
| | | | | | | | | | | | | | | | | | | | Observed the error when trying to force checkout from a branch that had no changes on it. When the 'keep()' method from 'DirCacheCheckout' method was called the 'DirCacheEntry e' was null and was passed like this to the 'checkoutEntry()' method where the 'getObjectId()' is being called on the 'e' object Change-Id: If3a9b9e60064459d187c7db04eb4471a72c6cece
* | [spotbugs] Fix incorrect lazy initialization in SystemReaderMatthias Sohn2020-12-221-2/+2
| | | | | | | | | | | | This fixes two warnings of type LI_LAZY_INIT_STATIC. Change-Id: I26a7a48aed9d0a0547e908a56b7014a7620fadd8 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | [spotbugs] Don't use class from java.util.concurrent for lockingMatthias Sohn2020-12-221-1/+3
| | | | | | | | | | | | | | | | Use a dedicated Lock object to lock the scheduler in RepositoryCache#configureEviction to fix spotbugs warning JLM_JSR166_UTILCONCURRENT_MONITORENTER. Change-Id: I003dcf0ed1a0a3f4eea5d8a2f51a07473d28a928 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | [spotbugs] Fix potential NPE in FS.FileStoreAttributes#getMatthias Sohn2020-12-221-0/+3
| | | | | | | | | | | | | | Path#getParent can return null, return fallback filestore attributes in that case. Change-Id: Ic09484d527bc87b27964b625e07373b82412f2da Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | [spotbugs] Fix FileReftableStack#equals to check for nullMatthias Sohn2020-12-221-0/+3
| | | | | | | | | | | | | | | | | | | | | | This fixes spotbugs warning NP_EQUALS_SHOULD_HANDLE_NULL_ARGUMENT. This implementation violated the contract defined by java.lang.Object.equals() because it did not check for null being passed as the argument. All equals() methods should return false if passed a null value. Change-Id: I607f6979613d390aae2f3546b587f63133d6d73c Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | [spotbugs] FileReftableDatabase: extract lock to local variableMatthias Sohn2020-12-221-2/+4
| | | | | | | | | | | | | | This fixes UL_UNRELEASED_LOCK_EXCEPTION_PATH raised by spotbugs in #compactFully. Change-Id: I370578ad9a027c5c9709d60a1dfafdac0cfca908 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | [spotbugs] DfsReftableDatabase: extract lock to local variableMatthias Sohn2020-12-221-4/+7
| | | | | | | | | | | | | | This fixes UL_UNRELEASED_LOCK_EXCEPTION_PATH raised by spotbugs in #DfsReftableDatabase and #clearCache. Change-Id: Ifd3189288d2a8e64139c02cd105eb335fa2f68cf Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | [spotbugs] Silence NP_BOOLEAN_RETURN_NULL in IgnoreNode#checkIgnoredMatthias Sohn2020-12-222-1/+10
| | | | | | | | | | | | Also mark the return value @Nullable to enable null analysis in Eclipse. Change-Id: I5b286d657d432f4b32afd4dd370f76892b115422 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | Revert "Remove unused API problem filters"Matthias Sohn2020-12-221-0/+11
| | | | | | | | | | | | | | | | | | This reverts commit 022b02dea10612cb01f9694212b72bd1bbd69cb9. Removing this API warning filter was wrong since we intentionally removed the config constant CONFIG_REFSTORAGE_REFTREE. Change-Id: Ie068e539157cc2312efc8a07feabeb0dd2f75096 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | Remove unused API problem filtersMatthias Sohn2020-12-171-11/+0
| | | | | | | | | | Change-Id: Id533cf598cd37c277b4de06fdd8ae74cfeede4d0 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | [spotbugs] Fix potential NPE in FS#writeMatthias Sohn2020-12-171-1/+4
| | | | | | | | | | | | Path#getParent can return null. Change-Id: I01f13ac426dda4c007cc5caab546a0c9be62ce76 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | [spotbugs] Fix potential NPE in WorkingTreeIterator#isModifiedMatthias Sohn2020-12-171-2/+4
| | | | | | | | | | | | | | | | File#list can return null. Fix the potential NPE by using Files#list which is also faster since it retrieves directory entries lazily while File#list retrieves them eagerly. Change-Id: Idf4bda398861c647587e357326b8bc8b587a2584 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | [spotbugs] Fix potential NPE in FileRepository#convertToReftableMatthias Sohn2020-12-171-1/+3
| | | | | | | | | | | | | | | | File#listFiles can return null. Use Files#list which does not return null and should be faster since it's returning directory entries lazily while File#listFiles fetches them eagerly. Change-Id: I3bfe2a52278244fc469143692c06b05d9af0d0d4 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | [spotbugs] silence warnings for intended use of == to compare stringsMatthias Sohn2020-12-171-2/+20
| | | | | | | | Change-Id: Ib6967ad4deb5cf233d1f1d714cd094da5fad48e3 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | [spotbugs] silence short-circuit warning in PackOutputStream#writeMatthias Sohn2020-12-171-0/+6
| | | | | | | | Change-Id: I47b7a7991afae0dd1e678bd5e1f8e81599791e5f Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | FetchProcess#execute: fix formattingMatthias Sohn2020-12-171-2/+3
| | | | | | | | Change-Id: I133af64e6b165bdc58b8d7c805f0c68b6919baf2 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | [errorprone] FetchProcess: ensure exception isn't suppressedMatthias Sohn2020-12-171-0/+7
| | | | | | | | | | | | | | | | If TransportException is thrown in the finally block of execute() ensure that the exception handled in the previous catch block isn't suppressed. Change-Id: I670acdfb4d36e7a419a9a79ae9faab2e085a43ee Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | [errorprone] WalkFetchConnection: ensure exception isn't suppressedMatthias Sohn2020-12-171-0/+5
| | | | | | | | | | | | | | | | If TransportException is thrown in the finally block of downloadPackedObject() ensure that the exception handled in the previous catch block isn't suppressed. Change-Id: I23982a2b215e38f681cc1719788985e60232699a Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | Remove unused API problem filtersMatthias Sohn2020-12-151-52/+0
| | | | | | | | Change-Id: I982f21dfaec4e35818eca7a4793e24a2cec4e467 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | Remove reftree and ketchHan-Wen Nienhuys2020-12-1542-6550/+9
| | | | | | | | | | | | | | This was experimental code and never used in production. Change-Id: Ia3da7f2b82d9e365cec2ccf9397cbc47439cd150 Signed-off-by: Han-Wen Nienhuys <hanwen@google.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | LooseObjects: fix formattingMatthias Sohn2020-12-151-13/+13
| | | | | | | | Change-Id: I992e5066d1dc4603e5bae991b26605d319f5cdc2 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | Split out loose object handling from ObjectDirectoryMartin Fick2020-12-152-120/+245
| | | | | | | | | | | | | | | | | | | | | | | | The ObjectDirectory class manages the interactions for the entire object database, this includes loose objects, packfiles, alternates, and shallow commits. To help reduce the complexity of this class, abstract some of the loose object specific details into a class which understands just this, leaving the ObjectDirectory to focus more on the interactions between the different mechanisms. Change-Id: I39f3a74d6308f042a2a2baa57769f4acde5ba5e0 Signed-off-by: Martin Fick <mfick@codeaurora.org> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>