Mercurial > hg > mercurial
annotate mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/HgFileUtil.java @ 949:32bfdf49827f
disable failing test
The tested logic is not used
author | Dmitry Neverov <dmitry.neverov@gmail.com> |
---|---|
date | Thu, 17 Mar 2016 11:51:14 +0100 |
parents | 98657a5c5cb1 |
children | 7bf4d943d5bb |
rev | line source |
---|---|
732
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
668
diff
changeset
|
1 /* |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
668
diff
changeset
|
2 * Copyright 2000-2014 JetBrains s.r.o. |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
668
diff
changeset
|
3 * |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
668
diff
changeset
|
4 * Licensed under the Apache License, Version 2.0 (the "License"); |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
668
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:
668
diff
changeset
|
6 * You may obtain a copy of the License at |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
668
diff
changeset
|
7 * |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
668
diff
changeset
|
8 * http://www.apache.org/licenses/LICENSE-2.0 |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
668
diff
changeset
|
9 * |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
668
diff
changeset
|
10 * Unless required by applicable law or agreed to in writing, software |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
668
diff
changeset
|
11 * distributed under the License is distributed on an "AS IS" BASIS, |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
668
diff
changeset
|
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
668
diff
changeset
|
13 * See the License for the specific language governing permissions and |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
668
diff
changeset
|
14 * limitations under the License. |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
668
diff
changeset
|
15 */ |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
668
diff
changeset
|
16 |
417
74487e2c6356
Use shorter temp directory names
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
17 package jetbrains.buildServer.buildTriggers.vcs.mercurial; |
74487e2c6356
Use shorter temp directory names
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
18 |
478
0a33f3dbd261
Ensure temp dirs are deleted
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
417
diff
changeset
|
19 import com.intellij.openapi.diagnostic.Logger; |
845
07a3d55dda1b
Reuse utility method
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
844
diff
changeset
|
20 import com.intellij.openapi.util.SystemInfo; |
417
74487e2c6356
Use shorter temp directory names
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
21 import jetbrains.buildServer.util.FileUtil; |
478
0a33f3dbd261
Ensure temp dirs are deleted
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
417
diff
changeset
|
22 import org.jetbrains.annotations.NotNull; |
0a33f3dbd261
Ensure temp dirs are deleted
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
417
diff
changeset
|
23 import org.jetbrains.annotations.Nullable; |
417
74487e2c6356
Use shorter temp directory names
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
24 |
74487e2c6356
Use shorter temp directory names
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
25 import java.io.File; |
74487e2c6356
Use shorter temp directory names
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
26 import java.io.IOException; |
74487e2c6356
Use shorter temp directory names
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
27 |
74487e2c6356
Use shorter temp directory names
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
28 /** |
74487e2c6356
Use shorter temp directory names
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
29 * @author dmitry.neverov |
74487e2c6356
Use shorter temp directory names
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
30 */ |
74487e2c6356
Use shorter temp directory names
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
31 public final class HgFileUtil { |
74487e2c6356
Use shorter temp directory names
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
32 |
74487e2c6356
Use shorter temp directory names
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
33 private final static String TEMP_DIR_PREFIX = "hg"; |
864
98657a5c5cb1
UP-1916 don't use lock per temp dir
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
845
diff
changeset
|
34 private final static Object ourTmpDirLock = new Object(); |
417
74487e2c6356
Use shorter temp directory names
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
35 |
74487e2c6356
Use shorter temp directory names
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
36 private HgFileUtil() { |
74487e2c6356
Use shorter temp directory names
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
37 } |
74487e2c6356
Use shorter temp directory names
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
38 |
74487e2c6356
Use shorter temp directory names
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
39 /** |
74487e2c6356
Use shorter temp directory names
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
40 * Create a temp dir with short name |
74487e2c6356
Use shorter temp directory names
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
41 * @return created dir |
74487e2c6356
Use shorter temp directory names
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
42 * @throws IOException in case of I/O error |
74487e2c6356
Use shorter temp directory names
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
43 */ |
803 | 44 @NotNull |
417
74487e2c6356
Use shorter temp directory names
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
45 public static File createTempDir() throws IOException { |
74487e2c6356
Use shorter temp directory names
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
46 File parentDir = new File(FileUtil.getTempDirectory()); |
668
5abe150c9187
TW-32540 ensure a custom clone dir has only valid symbols
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
629
diff
changeset
|
47 return createTempDir(parentDir); |
5abe150c9187
TW-32540 ensure a custom clone dir has only valid symbols
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
629
diff
changeset
|
48 } |
5abe150c9187
TW-32540 ensure a custom clone dir has only valid symbols
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
629
diff
changeset
|
49 |
803 | 50 @NotNull |
51 public static File createTempDir(@NotNull final File parentDir) throws IOException { | |
52 //noinspection ResultOfMethodCallIgnored | |
618
178326c22081
ensure parent dir exists
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
615
diff
changeset
|
53 parentDir.mkdirs(); |
178326c22081
ensure parent dir exists
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
615
diff
changeset
|
54 |
417
74487e2c6356
Use shorter temp directory names
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
55 int suffix = 0; |
74487e2c6356
Use shorter temp directory names
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
56 File dir; |
615
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
604
diff
changeset
|
57 while (true) { |
417
74487e2c6356
Use shorter temp directory names
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
58 suffix++; |
615
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
604
diff
changeset
|
59 String tmpDirName = TEMP_DIR_PREFIX + suffix; |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
604
diff
changeset
|
60 dir = new File(parentDir, tmpDirName); |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
604
diff
changeset
|
61 if (dir.exists()) |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
604
diff
changeset
|
62 continue; |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
604
diff
changeset
|
63 |
864
98657a5c5cb1
UP-1916 don't use lock per temp dir
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
845
diff
changeset
|
64 synchronized (ourTmpDirLock) { |
623
0d44c31bb36c
Another workaround for 'access denied' error
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
621
diff
changeset
|
65 try { |
0d44c31bb36c
Another workaround for 'access denied' error
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
621
diff
changeset
|
66 if (!dir.createNewFile()) |
0d44c31bb36c
Another workaround for 'access denied' error
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
621
diff
changeset
|
67 continue; |
0d44c31bb36c
Another workaround for 'access denied' error
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
621
diff
changeset
|
68 } catch (IOException e) { |
629
376e35ed7801
finally workaround windows createNewFile bug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
623
diff
changeset
|
69 //workaround for http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6325169 |
376e35ed7801
finally workaround windows createNewFile bug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
623
diff
changeset
|
70 if (SystemInfo.isWindows && "Access is denied".equals(e.getMessage())) |
623
0d44c31bb36c
Another workaround for 'access denied' error
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
621
diff
changeset
|
71 continue; |
0d44c31bb36c
Another workaround for 'access denied' error
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
621
diff
changeset
|
72 throw e; |
0d44c31bb36c
Another workaround for 'access denied' error
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
621
diff
changeset
|
73 } |
615
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
604
diff
changeset
|
74 if (!dir.delete()) |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
604
diff
changeset
|
75 continue; |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
604
diff
changeset
|
76 if (!dir.mkdir()) |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
604
diff
changeset
|
77 continue; |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
604
diff
changeset
|
78 } |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
604
diff
changeset
|
79 return dir; |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
604
diff
changeset
|
80 } |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
604
diff
changeset
|
81 } |
7ea82d063131
TW-30589 fix create temp dir race condition
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
604
diff
changeset
|
82 |
478
0a33f3dbd261
Ensure temp dirs are deleted
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
417
diff
changeset
|
83 |
803 | 84 public static void deleteDir(@Nullable final File dir, @NotNull final Logger logger) { |
478
0a33f3dbd261
Ensure temp dirs are deleted
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
417
diff
changeset
|
85 if (dir == null) |
0a33f3dbd261
Ensure temp dirs are deleted
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
417
diff
changeset
|
86 return; |
845
07a3d55dda1b
Reuse utility method
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
844
diff
changeset
|
87 FileUtil.symlinkAwareDelete(dir); |
604 | 88 if (dir.exists()) |
478
0a33f3dbd261
Ensure temp dirs are deleted
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
417
diff
changeset
|
89 logger.warn("Cannot delete directory " + dir.getAbsolutePath()); |
0a33f3dbd261
Ensure temp dirs are deleted
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
417
diff
changeset
|
90 } |
417
74487e2c6356
Use shorter temp directory names
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
91 } |