]> source.dussan.org Git - jgit.git/commitdiff
Set TagOpt.AUTO_FOLLOW when not cloning all branches 54/128954/2
authorThomas Wolf <thomas.wolf@paranor.ch>
Sat, 8 Sep 2018 12:59:08 +0000 (14:59 +0200)
committerMatthias Sohn <matthias.sohn@sap.com>
Fri, 14 Sep 2018 22:57:13 +0000 (00:57 +0200)
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>
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CloneCommandTest.java
org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java

index 0ad067f6a7bf1b3e7bf3e60d66a81b42bfbdb1ea..6b5fe502b77f448594b1602d7d4d4a9644da561c 100644 (file)
@@ -381,6 +381,8 @@ public class CloneCommandTest extends RepositoryTestCase {
                Git git2 = command.call();
                addRepoToClose(git2.getRepository());
                assertNotNull(git2);
+               assertNull(git2.getRepository().resolve("tag-for-blob"));
+               assertNotNull(git2.getRepository().resolve("tag-initial"));
                assertEquals(git2.getRepository().getFullBranch(), "refs/heads/master");
                assertEquals("refs/remotes/origin/master", allRefNames(git2
                                .branchList().setListMode(ListMode.REMOTE).call()));
@@ -408,6 +410,8 @@ public class CloneCommandTest extends RepositoryTestCase {
                Git git2 = command.call();
                addRepoToClose(git2.getRepository());
                assertNotNull(git2);
+               assertNull(git2.getRepository().resolve("tag-for-blob"));
+               assertNotNull(git2.getRepository().resolve("tag-initial"));
                assertEquals(git2.getRepository().getFullBranch(), "refs/heads/master");
                assertEquals("refs/heads/master", allRefNames(git2.branchList()
                                .setListMode(ListMode.ALL).call()));
index 5ea7cf87185efb571c01e5f11d126c3da5632d33..73af8ba16dd4e96c203aee2a1e5aa3f2d9c36dbb 100644 (file)
@@ -283,10 +283,11 @@ public class CloneCommand extends TransportCommand<CloneCommand, Git> {
                config.addURI(u);
 
                final String dst = (bare ? Constants.R_HEADS : Constants.R_REMOTES
-                               + config.getName() + "/") + "*"; //$NON-NLS-1$//$NON-NLS-2$
-               List<RefSpec> refSpecs = calculateRefSpecs(dst);
+                               + config.getName() + '/') + '*';
+               boolean fetchAll = cloneAllBranches || branchesToClone == null
+                               || branchesToClone.isEmpty();
 
-               config.setFetchRefSpecs(refSpecs);
+               config.setFetchRefSpecs(calculateRefSpecs(fetchAll, dst));
                config.update(clonedRepo.getConfig());
 
                clonedRepo.getConfig().save();
@@ -295,19 +296,18 @@ public class CloneCommand extends TransportCommand<CloneCommand, Git> {
                FetchCommand command = new FetchCommand(clonedRepo);
                command.setRemote(remote);
                command.setProgressMonitor(monitor);
-               command.setTagOpt(TagOpt.FETCH_TAGS);
+               command.setTagOpt(fetchAll ? TagOpt.FETCH_TAGS : TagOpt.AUTO_FOLLOW);
                configure(command);
 
                return command.call();
        }
 
-       private List<RefSpec> calculateRefSpecs(String dst) {
+       private List<RefSpec> calculateRefSpecs(boolean fetchAll, String dst) {
                RefSpec wcrs = new RefSpec();
                wcrs = wcrs.setForceUpdate(true);
-               wcrs = wcrs.setSourceDestination(Constants.R_HEADS + "*", dst); //$NON-NLS-1$
+               wcrs = wcrs.setSourceDestination(Constants.R_HEADS + '*', dst);
                List<RefSpec> specs = new ArrayList<>();
-               if (!cloneAllBranches && branchesToClone != null
-                               && !branchesToClone.isEmpty()) {
+               if (!fetchAll) {
                        for (String selectedRef : branchesToClone) {
                                if (wcrs.matchSource(selectedRef)) {
                                        specs.add(wcrs.expandFromSource(selectedRef));