diff options
Diffstat (limited to 'org.eclipse.jgit/src/org/eclipse/jgit')
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java | 42 |
1 files changed, 26 insertions, 16 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java index 809f2d111a..7008cd49a8 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java @@ -104,7 +104,9 @@ public class CloneCommand extends TransportCommand<CloneCommand, Git> { private ProgressMonitor monitor = NullProgressMonitor.INSTANCE; - private FETCH_TYPE fetchType = FETCH_TYPE.ALL_BRANCHES; + private boolean cloneAllBranches; + + private boolean mirror; private boolean cloneSubmodules; @@ -118,6 +120,8 @@ public class CloneCommand extends TransportCommand<CloneCommand, Git> { private boolean gitDirExistsInitially; + private FETCH_TYPE fetchType; + private enum FETCH_TYPE { MULTIPLE_BRANCHES, ALL_BRANCHES, MIRROR } @@ -195,6 +199,7 @@ public class CloneCommand extends TransportCommand<CloneCommand, Git> { throw new InvalidRemoteException( MessageFormat.format(JGitText.get().invalidURL, uri)); } + setFetchType(); @SuppressWarnings("resource") // Closed by caller Repository repository = init(); FetchResult fetchResult = null; @@ -238,6 +243,20 @@ public class CloneCommand extends TransportCommand<CloneCommand, Git> { return new Git(repository, true); } + private void setFetchType() { + if (mirror) { + fetchType = FETCH_TYPE.MIRROR; + setBare(true); + } else if (cloneAllBranches) { + fetchType = FETCH_TYPE.ALL_BRANCHES; + } else if (branchesToClone != null && !branchesToClone.isEmpty()) { + fetchType = FETCH_TYPE.MULTIPLE_BRANCHES; + } else { + // Default: neither mirror nor all nor specific refs given + fetchType = FETCH_TYPE.ALL_BRANCHES; + } + } + private static boolean isNonEmptyDirectory(File dir) { if (dir != null && dir.exists()) { File[] files = dir.listFiles(); @@ -619,8 +638,7 @@ public class CloneCommand extends TransportCommand<CloneCommand, Git> { * @return {@code this} */ public CloneCommand setCloneAllBranches(boolean cloneAllBranches) { - this.fetchType = cloneAllBranches ? FETCH_TYPE.ALL_BRANCHES - : this.fetchType; + this.cloneAllBranches = cloneAllBranches; return this; } @@ -640,10 +658,7 @@ public class CloneCommand extends TransportCommand<CloneCommand, Git> { * @since 5.6 */ public CloneCommand setMirror(boolean mirror) { - if (mirror) { - this.fetchType = FETCH_TYPE.MIRROR; - setBare(true); - } + this.mirror = mirror; return this; } @@ -664,8 +679,9 @@ public class CloneCommand extends TransportCommand<CloneCommand, Git> { * Set the branches or tags to clone. * <p> * This is ignored if {@link #setCloneAllBranches(boolean) - * setCloneAllBranches(true)} is used. If {@code branchesToClone} is - * {@code null} or empty, it's also ignored and all branches will be cloned. + * setCloneAllBranches(true)} or {@link #setMirror(boolean) setMirror(true)} + * is used. If {@code branchesToClone} is {@code null} or empty, it's also + * ignored. * </p> * * @param branchesToClone @@ -675,13 +691,7 @@ public class CloneCommand extends TransportCommand<CloneCommand, Git> { * @return {@code this} */ public CloneCommand setBranchesToClone(Collection<String> branchesToClone) { - if (branchesToClone == null || branchesToClone.isEmpty()) { - // fallback to default - fetchType = FETCH_TYPE.ALL_BRANCHES; - } else { - this.fetchType = FETCH_TYPE.MULTIPLE_BRANCHES; - this.branchesToClone = branchesToClone; - } + this.branchesToClone = branchesToClone; return this; } |