|
18 | 18 | */
|
19 | 19 |
|
20 | 20 | /*
|
21 |
| - * Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved. |
| 21 | + * Copyright (c) 2006, 2020, Oracle and/or its affiliates. All rights reserved. |
22 | 22 | * Portions Copyright (c) 2019, Chris Fraire <cfraire@me.com>.
|
23 | 23 | */
|
24 | 24 |
|
|
29 | 29 | import org.opengrok.indexer.configuration.RuntimeEnvironment;
|
30 | 30 | import org.opengrok.indexer.logger.LoggerFactory;
|
31 | 31 |
|
| 32 | +import java.io.File; |
32 | 33 | import java.util.ArrayList;
|
33 | 34 | import java.util.List;
|
34 | 35 | import java.util.logging.Level;
|
35 | 36 | import java.util.logging.Logger;
|
| 37 | +import java.util.regex.Matcher; |
| 38 | +import java.util.regex.Pattern; |
36 | 39 |
|
37 | 40 | public class CtagsUtil {
|
38 | 41 |
|
@@ -86,6 +89,39 @@ public static List<String> getLanguages(String ctagsBinary) {
|
86 | 89 | return result;
|
87 | 90 | }
|
88 | 91 |
|
| 92 | + /** |
| 93 | + * Deletes Ctags temporary files left over after terminating Ctags processes |
| 94 | + * in case of timeout, @see Ctags#doCtags. |
| 95 | + */ |
| 96 | + public static void deleteTempFiles() { |
| 97 | + String[] dirs = {System.getProperty("java.io.tmpdir"), |
| 98 | + System.getenv("TMPDIR"), System.getenv("TMP")}; |
| 99 | + |
| 100 | + for (String dir : dirs) { |
| 101 | + deleteTempFiles(dir); |
| 102 | + } |
| 103 | + } |
| 104 | + |
| 105 | + private static void deleteTempFiles(String directoryName) { |
| 106 | + final Pattern pattern = Pattern.compile("tags\\.\\S{6}"); // ctags uses this pattern to call mkstemp() |
| 107 | + |
| 108 | + if (directoryName == null) { |
| 109 | + return; |
| 110 | + } |
| 111 | + |
| 112 | + File dir = new File(directoryName); |
| 113 | + File[] files = dir.listFiles((dir1, name) -> { |
| 114 | + Matcher matcher = pattern.matcher(name); |
| 115 | + return matcher.find(); |
| 116 | + }); |
| 117 | + |
| 118 | + for (File file : files) { |
| 119 | + if (file.isFile() && !file.delete()) { |
| 120 | + LOGGER.log(Level.WARNING, "cannot delete file {0}", file); |
| 121 | + } |
| 122 | + } |
| 123 | + } |
| 124 | + |
89 | 125 | /**
|
90 | 126 | * Creates a new instance, and attempts to configure it from the
|
91 | 127 | * environment.
|
|
0 commit comments