annotate mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/Settings.java @ 44:1490e2981799

labeling/tagging support
author Pavel.Sher
date Fri, 05 Sep 2008 01:15:29 +0400
parents 798e750e4f26
children 4059fcc5473e
rev   line source
27
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
1 /*
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
2 * Copyright 2000-2007 JetBrains s.r.o.
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
3 *
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
4 * Licensed under the Apache License, Version 2.0 (the "License");
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
5 * you may not use this file except in compliance with the License.
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
6 * You may obtain a copy of the License at
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
7 *
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
8 * http://www.apache.org/licenses/LICENSE-2.0
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
9 *
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
10 * Unless required by applicable law or agreed to in writing, software
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
11 * distributed under the License is distributed on an "AS IS" BASIS,
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
13 * See the License for the specific language governing permissions and
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
14 * limitations under the License.
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
15 */
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
16 package jetbrains.buildServer.buildTriggers.vcs.mercurial.command;
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
17
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
18 import jetbrains.buildServer.buildTriggers.vcs.mercurial.Constants;
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
19 import jetbrains.buildServer.buildTriggers.vcs.mercurial.PathUtil;
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
20 import jetbrains.buildServer.vcs.VcsRoot;
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
21 import jetbrains.buildServer.util.Hash;
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
22 import jetbrains.buildServer.util.FileUtil;
44
1490e2981799 labeling/tagging support
Pavel.Sher
parents: 29
diff changeset
23 import jetbrains.buildServer.util.StringUtil;
27
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
24 import org.jetbrains.annotations.NotNull;
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
25
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
26 import java.io.File;
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
27
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
28 /**
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
29 * Represents Mercurial repository settings
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
30 */
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
31 public class Settings {
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
32 private String myRepository;
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
33 private String myHgCommandPath;
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
34 private File myWorkingDir;
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
35 private File myWorkFolderParentDir;
44
1490e2981799 labeling/tagging support
Pavel.Sher
parents: 29
diff changeset
36 private String myPushUrl;
27
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
37
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
38 public Settings(@NotNull File workFolderParentDir, @NotNull VcsRoot vcsRoot) {
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
39 myWorkFolderParentDir = workFolderParentDir;
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
40 setRepository(vcsRoot.getProperty(Constants.REPOSITORY_PROP));
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
41 setHgCommandPath(vcsRoot.getProperty(Constants.HG_COMMAND_PATH_PROP));
44
1490e2981799 labeling/tagging support
Pavel.Sher
parents: 29
diff changeset
42 myPushUrl = vcsRoot.getProperty(Constants.PUSH_URL);
27
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
43 }
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
44
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
45 public Settings() {
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
46 }
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
47
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
48 public void setRepository(@NotNull final String repository) {
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
49 myRepository = repository;
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
50 }
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
51
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
52 /**
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
53 * Returns repository path
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
54 * @return repository path
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
55 */
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
56 @NotNull
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
57 public String getRepository() {
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
58 return myRepository;
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
59 }
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
60
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
61 /**
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
62 * Returns path to hg command
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
63 * @return path to hg command
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
64 */
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
65 @NotNull
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
66 public String getHgCommandPath() {
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
67 return myHgCommandPath;
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
68 }
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
69
44
1490e2981799 labeling/tagging support
Pavel.Sher
parents: 29
diff changeset
70 /**
1490e2981799 labeling/tagging support
Pavel.Sher
parents: 29
diff changeset
71 * Returns URL to use for push command if it was specified or repository path otherwise
1490e2981799 labeling/tagging support
Pavel.Sher
parents: 29
diff changeset
72 * @return URL to use for push command if it was specified or repository path otherwise
1490e2981799 labeling/tagging support
Pavel.Sher
parents: 29
diff changeset
73 */
1490e2981799 labeling/tagging support
Pavel.Sher
parents: 29
diff changeset
74 public String getPushUrl() {
1490e2981799 labeling/tagging support
Pavel.Sher
parents: 29
diff changeset
75 return StringUtil.isEmpty(myPushUrl) ? getRepository() : myPushUrl;
1490e2981799 labeling/tagging support
Pavel.Sher
parents: 29
diff changeset
76 }
1490e2981799 labeling/tagging support
Pavel.Sher
parents: 29
diff changeset
77
27
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
78 public void setHgCommandPath(@NotNull final String hgCommandPath) {
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
79 myHgCommandPath = hgCommandPath;
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
80 }
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
81
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
82 public void setWorkingDir(@NotNull final File workingDir) {
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
83 myWorkingDir = FileUtil.getCanonicalFile(workingDir);
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
84 }
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
85
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
86 /**
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
87 * Returns repository working directory where all mercurial commands should be invoked
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
88 * @return repository working directory
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
89 */
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
90 @NotNull
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
91 public File getWorkingDir() {
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
92 if (myWorkingDir != null) {
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
93 return myWorkingDir;
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
94 }
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
95
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
96 return getDefaultWorkDir(myWorkFolderParentDir, myRepository);
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
97 }
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
98
29
798e750e4f26 first version of agent side checkout
Pavel.Sher
parents: 27
diff changeset
99 /**
798e750e4f26 first version of agent side checkout
Pavel.Sher
parents: 27
diff changeset
100 * Returns true if current working directory contains copy of repository (contains .hg directory)
798e750e4f26 first version of agent side checkout
Pavel.Sher
parents: 27
diff changeset
101 * @return see above
798e750e4f26 first version of agent side checkout
Pavel.Sher
parents: 27
diff changeset
102 */
798e750e4f26 first version of agent side checkout
Pavel.Sher
parents: 27
diff changeset
103 public boolean hasCopyOfRepository() {
798e750e4f26 first version of agent side checkout
Pavel.Sher
parents: 27
diff changeset
104 // need better way to check that repository copy is ok
798e750e4f26 first version of agent side checkout
Pavel.Sher
parents: 27
diff changeset
105 return getWorkingDir().isDirectory() && new File(getWorkingDir(), ".hg").isDirectory();
798e750e4f26 first version of agent side checkout
Pavel.Sher
parents: 27
diff changeset
106 }
798e750e4f26 first version of agent side checkout
Pavel.Sher
parents: 27
diff changeset
107
27
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
108 public static String DEFAULT_WORK_DIR_PREFIX = "hg_";
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
109
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
110 private static File getDefaultWorkDir(@NotNull File workFolderParentDir, @NotNull String repPath) {
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
111 String workingDirname = DEFAULT_WORK_DIR_PREFIX + String.valueOf(Hash.calc(normalize(repPath)));
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
112 return FileUtil.getCanonicalFile(new File(workFolderParentDir, workingDirname));
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
113 }
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
114
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
115 private static String normalize(final String path) {
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
116 String normalized = PathUtil.normalizeSeparator(path);
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
117 if (path.endsWith("/")) {
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
118 return normalized.substring(0, normalized.length()-1);
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
119 }
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
120 return normalized;
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
121 }
7944e8985ebd prepare modules structure for agent side checkout
Pavel.Sher
parents:
diff changeset
122 }