dmitry@732: /* pavel@977: * Copyright 2000-2018 JetBrains s.r.o. dmitry@732: * dmitry@732: * Licensed under the Apache License, Version 2.0 (the "License"); dmitry@732: * you may not use this file except in compliance with the License. dmitry@732: * You may obtain a copy of the License at dmitry@732: * dmitry@732: * http://www.apache.org/licenses/LICENSE-2.0 dmitry@732: * dmitry@732: * Unless required by applicable law or agreed to in writing, software dmitry@732: * distributed under the License is distributed on an "AS IS" BASIS, dmitry@732: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. dmitry@732: * See the License for the specific language governing permissions and dmitry@732: * limitations under the License. dmitry@732: */ dmitry@732: dmitry@275: package jetbrains.buildServer.buildTriggers.vcs.mercurial; dmitry@275: dmitry@834: import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.HgVcsRoot; eugene@775: import jetbrains.buildServer.util.StringUtil; dmitry@275: import jetbrains.buildServer.vcs.impl.VcsRootImpl; dmitry@275: import org.jetbrains.annotations.NotNull; dmitry@275: dmitry@649: import java.io.File; dmitry@649: import java.io.IOException; dmitry@649: dmitry@275: /** dmitry@275: * @author dmitry.neverov dmitry@275: */ dmitry@275: public class VcsRootBuilder { dmitry@275: eugene@775: private String myExtensions; dmitry@275: private String myRepository; dmitry@275: private String myUsername; dmitry@275: private String myPassword; dmitry@276: private String myBranch; dmitry@275: private long myRootId = 1L; dmitry@280: private String myHgPath; dmitry@371: private String myUserForTag; dmitry@531: private File myCloneRepositoryTo; dmitry@544: private boolean myDetectSubrepoChanges = false; dmitry@649: private boolean myTagsAsBranches = false; dmitry@686: private boolean myIncludeSubreposInPatch = true; dmitry@686: private boolean myUseArchiveForPatch = false; dmitry@834: private HgVcsRoot.PurgePolicy myPurgePolicy; dmitry@966: private String myCustomConfig; dmitry@371: dmitry@371: public static VcsRootBuilder vcsRoot() { dmitry@371: return new VcsRootBuilder(); dmitry@371: } dmitry@275: dmitry@275: public VcsRootImpl build() throws IOException { dmitry@309: VcsRootImpl vcsRoot = new VcsRootImpl(myRootId, Constants.VCS_NAME); dmitry@275: vcsRoot.addProperty(Constants.REPOSITORY_PROP, myRepository); dmitry@280: vcsRoot.addProperty(Constants.HG_COMMAND_PATH_PROP, myHgPath != null ? myHgPath : Util.getHgPath()); dmitry@275: vcsRoot.addProperty(Constants.USERNAME, myUsername); dmitry@275: vcsRoot.addProperty(Constants.PASSWORD, myPassword); dmitry@276: vcsRoot.addProperty(Constants.BRANCH_NAME_PROP, myBranch); dmitry@371: vcsRoot.addProperty(Constants.USER_FOR_TAG, myUserForTag); dmitry@544: vcsRoot.addProperty(Constants.DETECT_SUBREPO_CHANGES, String.valueOf(myDetectSubrepoChanges)); dmitry@686: vcsRoot.addProperty(Constants.INCLUDE_SUBREPOS_IN_PATCH, String.valueOf(myIncludeSubreposInPatch)); dmitry@686: vcsRoot.addProperty(Constants.USE_ARCHIVE_FOR_PATCH, String.valueOf(myUseArchiveForPatch)); eugene@775: vcsRoot.addProperty(Constants.HG_EXTENSIONS, myExtensions); dmitry@531: if (myCloneRepositoryTo != null) dmitry@531: vcsRoot.addProperty(Constants.SERVER_CLONE_PATH_PROP, String.valueOf(myCloneRepositoryTo.getAbsolutePath())); dmitry@649: vcsRoot.addProperty(Constants.USE_TAGS_AS_BRANCHES, String.valueOf(myTagsAsBranches)); dmitry@834: if (myPurgePolicy != null) dmitry@834: vcsRoot.addProperty(Constants.PURGE_POLICY, myPurgePolicy.name()); dmitry@966: if (myCustomConfig != null) dmitry@966: vcsRoot.addProperty(Constants.CUSTOM_HG_CONFIG_PROP, myCustomConfig); dmitry@275: return vcsRoot; dmitry@275: } dmitry@275: dmitry@275: dmitry@356: public VcsRootBuilder withUrl(@NotNull String repository) { dmitry@275: myRepository = repository; dmitry@275: return this; dmitry@275: } dmitry@275: eugene@775: @NotNull eugene@775: public VcsRootBuilder withExtensions(@NotNull String... extensions) { eugene@775: myExtensions = StringUtil.join(extensions, "\n"); eugene@775: return this; eugene@775: } eugene@775: dmitry@275: eugene@704: public VcsRootBuilder withLocalRepository(@NotNull final File repo) { eugene@704: return withUrl(repo.getPath()).withCloneRepositoryTo(repo.getParentFile()); eugene@704: } eugene@704: eugene@704: dmitry@638: public VcsRootBuilder withUrl(@NotNull File repository) { dmitry@638: myRepository = repository.getAbsolutePath(); dmitry@638: return this; dmitry@638: } dmitry@638: dmitry@638: dmitry@356: public VcsRootBuilder withUserName(@NotNull String username) { dmitry@275: myUsername = username; dmitry@275: return this; dmitry@275: } dmitry@275: dmitry@275: dmitry@356: public VcsRootBuilder withPassword(@NotNull String password) { dmitry@275: myPassword = password; dmitry@275: return this; dmitry@275: } dmitry@275: dmitry@275: dmitry@356: public VcsRootBuilder withBranch(@NotNull String branch) { dmitry@276: myBranch = branch; dmitry@276: return this; dmitry@276: } dmitry@276: dmitry@276: dmitry@356: public VcsRootBuilder withId(long rootId) { dmitry@275: myRootId = rootId; dmitry@275: return this; dmitry@275: } dmitry@280: dmitry@280: dmitry@356: public VcsRootBuilder withHgPath(String hgPath) { dmitry@280: myHgPath = hgPath; dmitry@280: return this; dmitry@280: } dmitry@371: dmitry@371: dmitry@371: public VcsRootBuilder withUserForTag(String username) { dmitry@371: myUserForTag = username; dmitry@371: return this; dmitry@371: } dmitry@531: dmitry@531: dmitry@531: public VcsRootBuilder withCloneRepositoryTo(File cloneTo) { dmitry@531: myCloneRepositoryTo = cloneTo; dmitry@531: return this; dmitry@531: } dmitry@544: dmitry@544: dmitry@544: public VcsRootBuilder withSubrepoChanges(boolean detectSubrepoChanges) { dmitry@544: myDetectSubrepoChanges = detectSubrepoChanges; dmitry@544: return this; dmitry@544: } dmitry@649: dmitry@649: dmitry@686: public VcsRootBuilder withSubreposInPatch(boolean includeSubreposInPatch) { dmitry@686: myIncludeSubreposInPatch = includeSubreposInPatch; dmitry@686: return this; dmitry@686: } dmitry@686: dmitry@686: dmitry@686: public VcsRootBuilder withArchiveForPatch(boolean useArchiveForPatch) { dmitry@686: myUseArchiveForPatch = useArchiveForPatch; dmitry@686: return this; dmitry@686: } dmitry@686: dmitry@686: dmitry@649: public VcsRootBuilder withTagsEnabled(boolean useTagsAsBranches) { dmitry@649: myTagsAsBranches = useTagsAsBranches; dmitry@649: return this; dmitry@649: } dmitry@834: dmitry@834: dmitry@834: public VcsRootBuilder withPurgePolicy(HgVcsRoot.PurgePolicy policy) { dmitry@834: myPurgePolicy = policy; dmitry@834: return this; dmitry@834: } dmitry@966: dmitry@966: dmitry@966: public VcsRootBuilder withCustomConfig(String customConfig) { dmitry@966: myCustomConfig = customConfig; dmitry@966: return this; dmitry@966: } dmitry@275: }