Mercurial > hg > mercurial
view mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CloneCommand.java @ 977:38adef4f1b8f Indore-2017.2.x
Update copyright
author | pavel.sher |
---|---|
date | Mon, 22 Jan 2018 11:40:45 +0100 |
parents | d1a5fc6c1d6e |
children | 6e4a700806e4 |
line wrap: on
line source
/* * Copyright 2000-2018 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package jetbrains.buildServer.buildTriggers.vcs.mercurial.command; import jetbrains.buildServer.vcs.VcsException; import org.jetbrains.annotations.NotNull; import java.io.File; import java.io.IOException; public class CloneCommand extends AuthCommand { private String myToId; private boolean myUpdateWorkingDir = true; private String myRepository; private File myWorkingDir; private boolean myUsePullProtocol = true; private boolean myUseUncompressedTransfer = false; private boolean myTraceback; public CloneCommand(@NotNull CommandSettings commandSettings, @NotNull String hgPath, @NotNull File workingDir, @NotNull AuthSettings authSettings) { super(commandSettings, hgPath, workingDir, authSettings); myWorkingDir = workingDir; } public CloneCommand fromRepository(@NotNull String repositoryUrl) { myRepository = repositoryUrl; return this; } public CloneCommand fromRepository(@NotNull File localRepository) throws IOException { return fromRepository(localRepository.getCanonicalPath()); } public CloneCommand toRevision(@NotNull String revision) { return toRevision(new ChangeSet(revision)); } public CloneCommand toRevision(@NotNull ChangeSet cset) { myToId = cset.getId(); return this; } public CloneCommand setUpdateWorkingDir(boolean doUpdateWorkingDir) { myUpdateWorkingDir = doUpdateWorkingDir; return this; } public CloneCommand useUncompressedTransfer(boolean doUseUncompressedTransfer) { myUseUncompressedTransfer = doUseUncompressedTransfer; return this; } public CloneCommand setUsePullProtocol(boolean usePullProtocol) { myUsePullProtocol = usePullProtocol; return this; } public CloneCommand withTraceback(boolean runWithTraceback) { myTraceback = runWithTraceback; return this; } public void call() throws VcsException { myWorkingDir.mkdirs(); MercurialCommandLine cli = createCommandLine(); File parent = myWorkingDir.getParentFile(); cli.setWorkDirectory(parent.getAbsolutePath()); cli.addParameter("clone"); if (myTraceback) cli.addParameter("--traceback"); if (myToId != null) { cli.addParameter("-r"); cli.addParameter(myToId); } if (myUsePullProtocol) cli.addParameter("--pull"); if (!myUpdateWorkingDir) { cli.addParameter("-U"); } if (myUseUncompressedTransfer) { cli.addParameter("--uncompressed"); } CommandSettings settings = myCommandSettings.setTimeout(24 * 3600); // some repositories are quite large, we set timeout to 24 hours if (settings.getProgressConsumer() != null) { cli.addParameters("--config", "extensions.progress="); cli.addParameters("--config", "progress.format=topic number"); cli.addParameters("--config", "progress.delay=0"); cli.addParameters("--config", "progress.assume-tty=True"); cli.setHasProgress(true); } String repositoryUrl = myAuthSettings.getRepositoryUrlWithCredentials(myRepository); cli.addParameter(repositoryUrl); cli.addParameter(myWorkingDir.getName()); runCommand(cli, settings); } @NotNull @Override protected String getDescription() { return "hg clone " + myAuthSettings.getRepositoryUrlWithHiddenPassword(myRepository); } }