Mercurial > hg > mercurial
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 | 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 | 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 | 32 import static java.util.regex.Pattern.compile; |
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 | 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 | 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 } |