aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java
Commit message (Collapse)AuthorAgeFilesLines
* Submodules: use relative paths for worktree and gitdirSimon Eder2024-12-111-0/+17
| | | | | | | | | | | | | | | | Currently absolute paths are used for a submodules 'worktree' and 'gitdir'. This has drawbacks if a git repository containing submodules is copied to a different location. Enable using relative paths when creating a file-based repository. Add optional relative path support to the clone and init commands, and use it in the submodule commands to generate relative paths. The new implementation mimics the cgit behavior which also uses relative paths instead of absolute ones. Bug: jgit-78 Change-Id: I31c5a938d5cbc030d273fc649c94ee0c90b4ce01
* Use ShutdownHook to gracefully handle JVM shutdownMatthias Sohn2023-09-121-11/+5
| | | | | | | | | | in all classes which already registered their own shutdown hook - CloneCommand - GC#PidLock - FS#FileStoreAttributes - LocalDiskRepositoryTestCase#Cleanup Change-Id: I3efc1f83f3cbbf43eeeaaedcd2bee1ef31971a72
* CloneCommand: set HEAD also when not checking outThomas Wolf2022-09-181-11/+9
| | | | | | | CloneCommand, when setNoCheckout(true) was set, did not set HEAD. With C git, "git clone --no-checkout" does. Change-Id: Ief3df7e904ce90829a6345a6c3e9ee6a68486ab0 Signed-off-by: Thomas Wolf <twolf@apache.org>
* Pass on shallowSince only if not nullThomas Wolf2022-09-181-1/+3
| | | | | | | FetchCommand.setShallowSince() and Transport.setDeepenSince() require a non-null argument. Change-Id: I1c3a20be518374e380a4e90787ed834438da40ee Signed-off-by: Thomas Wolf <twolf@apache.org>
* Fetch: add support for shallowRobin Müller2022-07-311-1/+91
| | | | | | | | | | This adds support for shallow cloning. The CloneCommand and the FetchCommand now have the new methods setDepth, setShallowSince and addShallowExclude to tell the server that the client doesn't want to download the complete history. Bug: 475615 Change-Id: Ic80fb6efb5474543ae59be590ebe385bec21cc0d
* Ignore IllegalStateException if JVM is already shutting downMatthias Sohn2021-08-291-2/+10
| | | | | | | | | Trying to register/unregister a shutdown hook when the JVM is already in shutdown throws an IllegalStateException. Ignore this exception since we can't do anything about it. Bug: 575367 Change-Id: Ic967c16c7f566c84778795315ab369e76668b364
* Fail clone if initial branch doesn't exist in remote repositoryMatthias Sohn2021-02-221-0/+1
| | | | | | | | | | jgit clone --branch foo <url> did not fail if the remote branch "foo" didn't exist in the remote repository being cloned. Bug: 546580 Change-Id: I55648ad3a39da4a5711dfa8e6d6682bb8190a6d6 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Add support for reading symrefs from pack capabilitiesLee Worrall2020-11-261-0/+4
| | | | | | | | | | | | | | | A SymbolicRef is added to the advertised refs for any symref in capabilities whose target is an advertised ref; this may replace an existing entry, such as HEAD. When cloning, if any advertised HEAD is symbolic then use the target rather than looking for an advertised ref with a matching objectId. Add --symref option to LsRemote command. Bug: 514052 Change-Id: Idfb48e6f6e8dcfe57a6896883fe6d84d533aa9d0 Signed-off-by: Lee Worrall <worrall.la@gmail.com>
* tag option for clone commandAlexander Nittka2020-03-151-1/+35
| | | | | | | | Allow explicitly setting the tag option for the remote configuration when cloning a repository. Bug: 561021 Change-Id: Iac43268a2bb231ae7599c3255bf555883d34fa32 Signed-off-by: Alexander Nittka <alex@nittka.de>
* Merge branch 'stable-5.6'Matthias Sohn2020-02-101-16/+26
|\ | | | | | | | | | | | | | | * stable-5.6: Restore behavior of CloneCommand Change-Id: I3092bf214c41436b57e0ede9d2202f8aabf15471 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
| * Restore behavior of CloneCommandThomas Wolf2020-02-041-16/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Commit 6216b0de changed the behavior of the setMirror(), setCloneAllBranches(), and setBranchesToClone() operations. Before that commit, these could be set and reset independently and only in call() it would be determined what exactly to do. Since that commit, the last of these calls would determine the operation. This means that the sequence cloneCommand.setCloneAllBranches(true); cloneCommand.setBranchesToClone(/* some list of refs */); would formerly do a "clone all" giving a fetch refspec with wildcards +refs/heads/*:refs/remotes/origin/* which picks up new upstream branches, whereas since commit 6216b0de individual non-wildcard fetch refspecs would be generated and new upstream branches would not be fetched anymore. Undo this behavioral change. Make the operations independently settable and resettable again, and determine the exact operation only in call(): mirror=true > cloneAll=true > specific refs, where ">" means "takes precedence over", and if none is set assume cloneAll=true. Note that mirror=true implies setBare(true). Bug: 559796 Change-Id: I7162b60e99de5e3e512bf27ff4113f554c94f5a6 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | ErrorProne: Enable and fix UnusedException checkDavid Pursehouse2020-01-271-3/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Enable UnusedException at ERROR level which causes the build to fail in many places with: [UnusedException] This catch block catches an symbol and re-throws another, but swallows the caught symbol rather than setting it as a cause. This can make debugging harder. Fix it by setting the caught exception as cause on the subsequently thrown exception. Note: The grammatically incorrect error message is copy-pasted as-is from the version of ErrorProne currently used in Bazel; it has been fixed by [1] in the latest version. [1] https://github.com/google/error-prone/commit/d57a39c Change-Id: I11ed38243091fc12f64f1b2db404ba3f1d2e98b5 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | Update EDL 1.0 license headers to new short SPDX compliant formatMatthias Sohn2020-01-041-38/+5
|/ | | | | | | | | | This is the format given by the Eclipse legal doc generator [1]. [1] https://www.eclipse.org/projects/tools/documentation.php?id=technology.jgit Bug: 548298 Change-Id: I8d8cabc998ba1b083e3f0906a8d558d391ffb6c4 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Implement mirror option in CloneCommandMatthias Sohn2019-10-211-26/+66
| | | | | Bug: 552173 Change-Id: If79adf578b303890314a3285d7a6d2c71f48d091 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Merge branch 'stable-5.2' into stable-5.3Matthias Sohn2019-08-231-1/+1
|\ | | | | | | | | | | | | | | | | | | | | * stable-5.2: Prepare 5.1.11-SNAPSHOT builds JGit v5.1.10.201908230655-r Use AtomicReferences to cache user and system level configs Fix copy-paste typo in CloneCommand#cleanup Change-Id: I3ababc0f9b540cf1785925395d32a85d30aed40d Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
| * Merge branch 'stable-5.1' into stable-5.2Matthias Sohn2019-08-231-1/+1
| |\ | | | | | | | | | | | | | | | | | | | | | | | | | | | * stable-5.1: Prepare 5.1.11-SNAPSHOT builds JGit v5.1.10.201908230655-r Use AtomicReferences to cache user and system level configs Fix copy-paste typo in CloneCommand#cleanup Change-Id: Ie383633de334e65901ed4c6deb2d59cfcce98e16
| | * Fix copy-paste typo in CloneCommand#cleanupAdrien Bustany2019-08-231-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | deleteChildren was called on directory instead of gitDir, leading to a potential null pointer exception if the git directory existed initially. Bug: 550340 Change-Id: Iafc3b2961253a99862a59e81c7371f7bc564b412 Signed-off-by: Adrien Bustany <adrien-xx-eclipse@bustany.org>
* | | Enable cloning only specific tagsThomas Wolf2019-01-271-13/+29
|/ / | | | | | | | | | | | | | | | | | | | | Single-branch-clone should be able to clone a single tag. Enhance CloneCommand to accept also full refs of tags in setBranchesToClone(). Make sure we also include fetch ref specs for the fetch command for tags. This mimics the behavior of native git's single-branch clone: git clone --branch <tag> --single-branch <URI> Bug: 542611 Change-Id: I285cf043751d9b0ba71258ee8214c0e5d1191428 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | Set TagOpt.AUTO_FOLLOW when not cloning all branchesThomas Wolf2018-09-151-8/+8
| | | | | | | | | | | | | | | | | | | | Otherwise fetching all tags may pull in commits not on the specified branches. Canonical git also does this.[1] [1] https://github.com/git/git/blob/b160b6e69/builtin/clone.c#L1124 Bug: 538768 Change-Id: If0ac75fb9fae0c95d1a48b22954c54d4c3c09a47 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | Fix fetch refspecs when not cloning all branchesThomas Wolf2018-09-151-13/+10
|/ | | | | | | | | | | | | | | | | | | | | When not all branches are cloned, the fetch refspec for the remote should not be "+refs/heads/*:refs/remotes/origin/*": that would fetch all branches on the very next fetch, thus making a clone with only a subset of the branches rather pointless. Instead, produce refspecs for the cloned branches only. Canonical git also does this for its --single-branch case; it doesn't have an option to clone only a subset of the branches (only one or all). Bug: 466858 Change-Id: Ie871880f757663437efac1e8b3313094f9e629b3 Also-by: Julian Enoch <julian.enoch@ericsson.com> Signed-off-by: Julian Enoch <julian.enoch@ericsson.com> Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch> Signed-off-by: David Pursehouse <david.pursehouse@gmail.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Remove further unnecessary 'final' keywordsHan-Wen Nienhuys2018-05-181-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Remove it from * package private functions. * try blocks * for loops this was done with the following python script: $ cat f.py import sys import re import os def replaceFinal(m): return m.group(1) + "(" + m.group(2).replace('final ', '') + ")" methodDecl = re.compile(r"^([\t ]*[a-zA-Z_ ]+)\(([^)]*)\)") def subst(fn): input = open(fn) os.rename(fn, fn + "~") dest = open(fn, 'w') for l in input: l = methodDecl.sub(replaceFinal, l) dest.write(l) dest.close() for root, dirs, files in os.walk(".", topdown=False): for f in files: if not f.endswith('.java'): continue full = os.path.join(root, f) print full subst(full) Change-Id: If533a75a417594fc893e7c669d2c1f0f6caeb7ca Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
* Remove 'final' in parameter listsHan-Wen Nienhuys2018-05-151-2/+2
| | | | | Change-Id: Id924f79c8b2c720297ebc49bf9c5d4ddd6d52547 Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
* CloneCommand: Suppress resource warning about RepositoryDavid Pursehouse2018-03-241-2/+2
| | | | | | | | | | | Repository is not opened in try-with-resource because it is wrapped in a Git instance which should be closed by the caller. On exeptions during fetch, it is explicitly closed in the catch blocks. Suppress the warning with an explanatory comment. Change-Id: Ib32c74ce39bb810077ab84db33002bdde806f3b6 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* Open auto-closeable resources in try-with-resourceDavid Pursehouse2018-03-131-5/+2
| | | | | | | | | | | | | | | | | | | | When an auto-closeable resources is not opened in try-with-resource, the warning "should be managed by try-with-resource" is emitted by Eclipse. Fix the ones that can be silenced simply by moving the declaration of the variable into a try-with-resource. In cases where we explicitly call the close() method, for example in tests where we are testing specific behavior caused by the close(), suppress the warning. Leave the ones that will require more significant refcactoring to fix. They can be done in separate commits that can be reviewed and tested in isolation. Change-Id: I9682cd20fb15167d3c7f9027cecdc82bc50b83c4 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* Progress reporting for checkoutMarkus Duft2018-01-231-0/+1
| | | | | | | | | | | | | | The reason for the change is LFS: when using a lot of LFS files, checkout can take quite some time on larger repositories. To avoid "hanging" UI, provide progress reporting. Also implement (partial) progress reporting for cherry-pick, reset, revert which are using checkout internally. The feature is also useful without LFS, so it is independent of it. Change-Id: I021e764241f3c107eaf2771f6b5785245b146b42 Signed-off-by: Markus Duft <markus.duft@ssi-schaefer.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* CloneCommand: option to set FS to be usedMarc Strapetz2017-12-291-0/+20
| | | | | Change-Id: If8342974d07b7d89a6c5721a6dd03826886aa89e Signed-off-by: Marc Strapetz <marc.strapetz@syntevo.com>
* Fix javadoc in org.eclipse.jgit annotations and api packagesMatthias Sohn2017-12-181-16/+28
| | | | Change-Id: I2761ea91f8dfed16ea54e7a6646af03a30c15ec9 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* CloneCommand: Refactor listing of files in deleteChildrenDavid Pursehouse2017-12-081-3/+3
| | | | | | | | | | | | | File.listFiles() returns null if the given File does not represent a directory, so we can just test for null instead of making a separate call to FS.DETECTED.isDirectory() This also avoids a false-positive error from SpotBugs which claims that there is a potential null-pointer exception on dereferencing the result of Files.listFiles(). Change-Id: I18e09e391011db997470f5a09d8e38bb604c0213 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* Fix default directory set when setDirectory wasn't called.Joan Goyeau2017-08-251-2/+13
| | | | | | Bug: 519883 Change-Id: I46716e9626b4c4adc0806a7c8df6914309040b94 Signed-off-by: Joan Goyeau <joan@goyeau.com>
* CloneCommand#setCallback should return 'this'David Pursehouse2017-06-081-1/+3
| | | | | | | | | | | The other methods in this class follow the builder pattern, and return 'this', allowing multiple method calls to be chained in a single statement. Update the setCallback method to do the same. Change-Id: I0366d28bf66ba47f08ee7eee636d613c9fe079f5 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* Add shutdown hook to cleanup unfinished clone when JVM is killedMatthias Sohn2017-05-131-0/+4
| | | | | Bug: 516303 Change-Id: I5181b0e8096af3537296848ac7dd74dff0b6d279 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Clean up the disk when cloning failsThomas Wolf2017-05-121-10/+80
| | | | | | | | | | | | | | CloneCommand.call() has three stages: preparation, then the actual clone (init/fetch), and finally maybe checking out the working directory. Restructure such that if we fail or are cancelled during the actual clone (middle phase), we do clean up the disk again. This prevents leaving behind a partial clone in an inconsistent state: either we have a fully successfully built clone, or nothing at all. Bug: 516303 Change-Id: I9b18c60f8f99816d42a3deb7d4a33a9f22eeb709 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* Clone: add --recurse-submodules optionDavid Pursehouse2017-04-271-1/+55
| | | | | | | | | | Add the --recurse-submodules option on the command, which causes submodules to also be initialized and updated. Add a callback interface on CloneCommand and SubmoduleUpdateCommand to them to provide progress feedback for clone operations. Change-Id: I41b1668bc0d0bdfa46a9a89882c9657ea3063fc1 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Enable and fix warnings about redundant specification of type argumentsDavid Pursehouse2017-02-201-1/+1
| | | | | | | | | | Since the introduction of generic type parameter inference in Java 7, it's not necessary to explicitly specify the type of generic parameters. Enable the warning in Eclipse, and fix all occurrences. Change-Id: I9158caf1beca5e4980b6240ac401f3868520aad0 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* Enable and fix 'Should be tagged with @Override' warningDavid Pursehouse2017-02-191-0/+1
| | | | | | | | | | | | | | | | | | | | | | | Set missingOverrideAnnotation=warning in Eclipse compiler preferences which enables the warning: The method <method> of type <type> should be tagged with @Override since it actually overrides a superclass method Justification for this warning is described in: http://stackoverflow.com/a/94411/381622 Enabling this causes in excess of 1000 warnings across the entire code-base. They are very easy to fix automatically with Eclipse's "Quick Fix" tool. Fix all of them except 2 which cause compilation failure when the project is built with mvn; add TODO comments on those for further investigation. Change-Id: I5772061041fd361fe93137fd8b0ad356e748a29c Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* [infer] Fix potential NPE in CloneCommandMatthias Sohn2017-01-231-6/+18
| | | | Change-Id: Ie7eeba3ae719ff207c7535d535a9e0bd6c9e99e6 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Handle all values of branch.[name].rebaseThomas Wolf2016-09-151-2/+3
| | | | | | | | | | | | | | | | | BranchConfig treated this config property as a boolean, but git also allows the values "preserve" and "interactive". Config property pull.rebase also allows the same values. Replace private enum PullCommand.PullRebaseMode by new public enum BranchConfig.BranchRebaseMode and adapt all uses. Add a new setter to PullCommand. Note: PullCommand will treat "interactive" like "true", i.e., as a non-interactive rebase. Not sure how "interactive" should be handled. At least it won't balk on it. Bug: 499482 Change-Id: I7309360f5662b2c2efa1bd8ea6f112c63cf064af Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* [findBugs] Prevent potential NPE in CloneCommand.init()Matthias Sohn2016-05-301-0/+10
| | | | | | | File.listFiles() returns null if the File is not a directory, improve validation of directory and gitDir to fix this. Change-Id: I763d08835faf96a0beb8e706992df0908526bd2c Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Null-annotated Ref class and fixed related compiler errorsAndrey Loskutov2015-12-151-4/+9
| | | | | | | | | This change fixes all compiler errors in JGit and replaces possible NPE's with either appropriate exceptions, avoiding multiple "Nullable return" method calls or early returning from the method. Change-Id: I24c8a600ec962d61d5f40abf73eac4203e115240 Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
* Clone should create Git instances which are able to close repositoryAndrey Loskutov2015-08-041-1/+1
| | | | | | Bug: 474093 Change-Id: I13be133dac7834d1d2b51eb9948a716b8719d057 Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
* Clone should close repository after errors in fetch or checkoutAndrey Loskutov2015-08-021-1/+8
| | | | | | Bug: 474093 Change-Id: Ia0a1478260b94a71a947aa8c04ee0c836d390aec Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
* Treat CloneCommand.setBranch(null) as setBranch("HEAD")Jonathan Nieder2015-06-111-0/+6
| | | | | | | | | | | | | | This method is documented to take a branch name (not a possibly null string). The only way a caller could have set null without either re-setting to a sane value afterward or producing NullPointerException was to also call setNoCheckout(true), in which case there would have been no reason to set the branch in the first place. Make setBranch(null) request the default behavior (remote's default branch) instead, imitating C git's clone --no-branch. Change-Id: I960e7046b8d5b5bc75c7f3688f3a075d3a951b00 Signed-off-by: Jonathan Nieder <jrn@google.com>
* Treat CloneCommand.setRemote(null) as setRemote("origin")Jonathan Nieder2015-06-111-1/+5
| | | | | | | | | | | | | | | | | | A non-bare clone command with null remote produces a NullPointerException when trying to produce a refspec to fetch against. In a bare repository, a null remote name is accepted by mistake, producing a configuration with items like 'remote.url' instead of 'remote.<remote>.url'. This was never meant to work. Instead, let's make setRemote(null) undo any previous setRemote calls and re-set the remote name to DEFAULT_REMOTE, imitating C git clone's --no-origin option. While we're here, add some tests for setRemote working normally. Change-Id: I76f502da5e677df501d3ef387e7f61f42a7ca238 Signed-off-by: Jonathan Nieder <jrn@google.com>
* Document CloneCommand.setURI(null)Jonathan Nieder2015-06-111-1/+2
| | | | | | | | call() throws InvalidRemoteException if uri == null, so there should never be reason to leave the URI set to null. Document this. Change-Id: I7f2cdbe8042d99cf8a3c1a8c4c2dcb58c5b8c305 Signed-off-by: Jonathan Nieder <jrn@google.com>
* Handle null in ProgressMonitor settersJonathan Nieder2015-06-111-0/+3
| | | | | | | | | | | These commands' monitor fields can never be null unless someone passes null to setProgressMonitor. Anyone passing null probably meant to disable the ProgressMonitor, so do that (by falling back to NullProgressMonitor.INSTANCE) instead of saving a null and eventually producing NullPointerException. Change-Id: I63ad93ea8ad669fd333a5fd40880e7583ba24827 Signed-off-by: Jonathan Nieder <jrn@google.com>
* Document CloneCommand.setDirectory(null) and setGitDir(null) more clearlyJonathan Nieder2015-06-111-2/+4
| | | | | Change-Id: I74757ca68eaa941833846a7c8d983b4e996fa207 Signed-off-by: Jonathan Nieder <jrn@google.com>
* Use try-with-resource to close resources in CloneCommandMatthias Sohn2015-04-031-4/+1
| | | | Change-Id: I9536bc208a5f3ec34f0a82fb565b4253be38e074 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Document that Git instance returned by CloneCommand needs to be closedMatthias Sohn2015-01-221-0/+6
| | | | | Bug: 448570 Change-Id: Ieee334f4d82cd71ba98b26abb8667e8f64cac665 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Allow explicit configuration of git directory in CloneCommandChristian Halstrick2014-12-151-4/+59
| | | | | | | This feature is needed to support the new submodule layout where the .git folder of the submodules is under .git/modules/<submodule>. Change-Id: If5f13426cfd09b7677e23478e9700c8c25a6dae5
* Handle short branch/tag name for setBranch in CloneCommandRobin Stocker2013-05-261-4/+14
| | | | | | | | | | | | | | Before, it was not clear from the documentation what kind of branch name was accepted. Users specifying "branch" (instead of "refs/heads/branch") got no error message and ended up with a repository without HEAD and no checkout. With this, CloneCommand now tries "$branch", then "refs/heads/$branch" and then "refs/tags/$branch". C Git only does the last two, but for compatibility we should still allow "refs/heads/branch". Bug: 390994 Change-Id: I4be13144f2a21a6583e0942f0c7c40da32f2247a Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>