annotate mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ListFilesSupport.java @ 732:31a1aca3305c

Update copyright
author Dmitry Neverov <dmitry.neverov@jetbrains.com>
date Tue, 14 Jan 2014 12:45:10 +0100
parents bcee3a8b2c7b
children 7bf4d943d5bb
rev   line source
732
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 667
diff changeset
1 /*
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 667
diff changeset
2 * Copyright 2000-2014 JetBrains s.r.o.
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 667
diff changeset
3 *
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 667
diff changeset
4 * Licensed under the Apache License, Version 2.0 (the "License");
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 667
diff changeset
5 * you may not use this file except in compliance with the License.
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 667
diff changeset
6 * You may obtain a copy of the License at
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 667
diff changeset
7 *
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 667
diff changeset
8 * http://www.apache.org/licenses/LICENSE-2.0
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 667
diff changeset
9 *
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 667
diff changeset
10 * Unless required by applicable law or agreed to in writing, software
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 667
diff changeset
11 * distributed under the License is distributed on an "AS IS" BASIS,
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 667
diff changeset
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 667
diff changeset
13 * See the License for the specific language governing permissions and
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 667
diff changeset
14 * limitations under the License.
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 667
diff changeset
15 */
31a1aca3305c Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 667
diff changeset
16
425
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
17 package jetbrains.buildServer.buildTriggers.vcs.mercurial;
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
18
426
c91c4f1ebd53 Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 425
diff changeset
19 import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.HgVcsRoot;
425
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
20 import jetbrains.buildServer.vcs.ListDirectChildrenPolicy;
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
21 import jetbrains.buildServer.vcs.VcsException;
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
22 import jetbrains.buildServer.vcs.VcsFileData;
435
4b6cca841ea5 New list files API
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 427
diff changeset
23 import jetbrains.buildServer.vcs.VcsRoot;
425
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
24 import org.jetbrains.annotations.NotNull;
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
25
427
144734686138 Fix tests
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 426
diff changeset
26 import java.io.File;
425
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
27 import java.util.ArrayList;
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
28 import java.util.List;
427
144734686138 Fix tests
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 426
diff changeset
29 import java.util.regex.Pattern;
425
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
30
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
31 import static com.intellij.openapi.util.text.StringUtil.isEmpty;
427
144734686138 Fix tests
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 426
diff changeset
32 import static java.util.regex.Pattern.compile;
144734686138 Fix tests
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 426
diff changeset
33 import static java.util.regex.Pattern.quote;
425
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
34
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
35 /**
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
36 * @author dmitry.neverov
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
37 */
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
38 public class ListFilesSupport implements ListDirectChildrenPolicy {
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
39
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
40 private final MercurialVcsSupport myVcs;
667
bcee3a8b2c7b Add TTL for list file policy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 472
diff changeset
41 private final ServerPluginConfig myConfig;
435
4b6cca841ea5 New list files API
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 427
diff changeset
42 private final HgVcsRootFactory myHgVcsRootFactory;
667
bcee3a8b2c7b Add TTL for list file policy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 472
diff changeset
43 private long myLastSyncTime = -1;
425
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
44
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
45 public ListFilesSupport(@NotNull MercurialVcsSupport vcs,
667
bcee3a8b2c7b Add TTL for list file policy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 472
diff changeset
46 @NotNull ServerPluginConfig config,
435
4b6cca841ea5 New list files API
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 427
diff changeset
47 @NotNull HgVcsRootFactory hgVcsRootFactory) {
425
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
48 myVcs = vcs;
667
bcee3a8b2c7b Add TTL for list file policy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 472
diff changeset
49 myConfig = config;
435
4b6cca841ea5 New list files API
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 427
diff changeset
50 myHgVcsRootFactory = hgVcsRootFactory;
425
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
51 }
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
52
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
53 @NotNull
435
4b6cca841ea5 New list files API
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 427
diff changeset
54 public List<VcsFileData> listFiles(@NotNull VcsRoot root, @NotNull String dir) throws VcsException {
4b6cca841ea5 New list files API
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 427
diff changeset
55 HgVcsRoot hgRoot = myHgVcsRootFactory.createHgRoot(root);
667
bcee3a8b2c7b Add TTL for list file policy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 472
diff changeset
56 if (isOutOfDate()) {
bcee3a8b2c7b Add TTL for list file policy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 472
diff changeset
57 myVcs.syncRepository(hgRoot);
bcee3a8b2c7b Add TTL for list file policy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 472
diff changeset
58 myLastSyncTime = System.currentTimeMillis();
bcee3a8b2c7b Add TTL for list file policy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 472
diff changeset
59 }
425
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
60 String dirPath = isEmpty(dir) || dir.endsWith("/") ? dir : dir + "/";
435
4b6cca841ea5 New list files API
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 427
diff changeset
61 return listFilesIn(hgRoot, dirPath);
425
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
62 }
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
63
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
64
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
65 @NotNull
435
4b6cca841ea5 New list files API
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 427
diff changeset
66 private List<VcsFileData> listFilesIn(@NotNull HgVcsRoot root, @NotNull String dir) throws VcsException {
4b6cca841ea5 New list files API
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 427
diff changeset
67 HgRepo repo = myVcs.createRepo(root);
425
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
68 List<VcsFileData> result = new ArrayList<VcsFileData>();
427
144734686138 Fix tests
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 426
diff changeset
69 Pattern p = compile(quote(File.separator));
472
6d4ce78234c5 TW-23435 list files should take VCS root branch into account
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 435
diff changeset
70 for (String file : repo.listFiles(root.getBranchName())) {
427
144734686138 Fix tests
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 426
diff changeset
71 String canonicalFile = p.matcher(file).replaceAll("/");
425
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
72 if (!canonicalFile.startsWith(dir))
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
73 continue;
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
74 String relativePath = canonicalFile.substring(dir.length());
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
75 int idx = relativePath.indexOf("/");
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
76 if (idx >= 0) {
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
77 result.add(new VcsFileData(relativePath.substring(0, idx), true));
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
78 } else {
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
79 result.add(new VcsFileData(relativePath, false));
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
80 }
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
81 }
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
82 return result;
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
83 }
667
bcee3a8b2c7b Add TTL for list file policy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 472
diff changeset
84
bcee3a8b2c7b Add TTL for list file policy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 472
diff changeset
85 private boolean isOutOfDate() {
bcee3a8b2c7b Add TTL for list file policy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 472
diff changeset
86 if (myLastSyncTime == -1)
bcee3a8b2c7b Add TTL for list file policy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 472
diff changeset
87 return true;
bcee3a8b2c7b Add TTL for list file policy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 472
diff changeset
88 return System.currentTimeMillis() - myLastSyncTime > myConfig.listFilesTTLSeconds() * 1000;
bcee3a8b2c7b Add TTL for list file policy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 472
diff changeset
89 }
425
e33c3e4918f5 Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
90 }