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
99f99dcd2fce @NotNull
eugene.petrenko@jetbrains.com
parents: 732
diff changeset
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
99f99dcd2fce @NotNull
eugene.petrenko@jetbrains.com
parents: 732
diff changeset
50 @NotNull
99f99dcd2fce @NotNull
eugene.petrenko@jetbrains.com
parents: 732
diff changeset
51 public static File createTempDir(@NotNull final File parentDir) throws IOException {
99f99dcd2fce @NotNull
eugene.petrenko@jetbrains.com
parents: 732
diff changeset
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
99f99dcd2fce @NotNull
eugene.petrenko@jetbrains.com
parents: 732
diff changeset
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
3eb02fd5fd78 TW-24810
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 509
diff changeset
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 }