Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions api/src/org/labkey/api/reports/ExternalScriptEngine.java
Original file line number Diff line number Diff line change
Expand Up @@ -444,6 +444,7 @@ protected File writeScriptFile(String script, ScriptContext context, List<String
}
}

FileUtil.createTempFile(scriptFile);
try (PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(scriptFile))))
{
pw.write(script);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -423,7 +423,7 @@ protected void cacheResults(ViewContext context, List<ParamReplacement> replacem
for (File src : param.getFiles())
{
File dst = new File(cacheDir, src.getName());
if (src.exists() && dst.createNewFile())
if (src.exists() && FileUtil.createTempFile(dst))
{
FileUtil.copyFile(src, dst);

Expand Down
1 change: 1 addition & 0 deletions api/src/org/labkey/api/reports/report/ScriptReport.java
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,7 @@ public File _createInputDataFile(@NotNull ViewContext context, ResultsFactory fa
try (TSVGridWriter tsv = new TSVGridWriter(srf, dataColumns))
{
tsv.setColumnHeaderType(ColumnHeaderType.Name); // CONSIDER: Use FieldKey instead
FileUtil.createTempFile(resultFile);
tsv.write(resultFile);
}
}
Expand Down
2 changes: 2 additions & 0 deletions api/src/org/labkey/api/reports/report/python/IpynbReport.java
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@ public HttpView<?> renderReport(ViewContext context) throws Exception
var descriptor = getDescriptor();
String script = descriptor.getProperty(ScriptReportDescriptor.Prop.script);
File scriptFile = new File(workingDirectory, FileUtil.makeLegalName(descriptor.getReportName()) + ".ipynb");
FileUtil.createTempFile(scriptFile);
IOUtil.copyCompletely(new StringReader(script), new FileWriter(scriptFile, StringUtilsLabKey.DEFAULT_CHARSET));

Set<File> beforeExecute = new HashSet<>(FileUtils.listFiles(workingDirectory, null, true));
Expand Down Expand Up @@ -304,6 +305,7 @@ private static void extractTar(InputStream in, File targetDirectory) throws IOEx
}
else
{
FileUtil.createTempFile(path);
try (FileOutputStream os = new FileOutputStream(path))
{
IOUtils.copy(tar, os);
Expand Down
15 changes: 8 additions & 7 deletions api/src/org/labkey/api/reports/report/r/RserveScriptEngine.java
Original file line number Diff line number Diff line change
Expand Up @@ -253,16 +253,17 @@ protected void copyWorkingDirectoryFromRemote(RConnection rconn) throws IOExcept
File wd = getWorkingDir(getContext());
try
{
String[] names = rconn.eval("dir("+ toR(defaultIfBlank(rserveWorkingDirectory, ".")) +", all.files = TRUE, full.names = TRUE, recursive = TRUE, include.dirs = FALSE, no.. = FALSE)").asStrings();
for (var name : names)
String[] paths = rconn.eval("dir("+ toR(defaultIfBlank(rserveWorkingDirectory, ".")) +", all.files = TRUE, full.names = TRUE, recursive = TRUE, include.dirs = FALSE, no.. = FALSE)").asStrings();
for (var remotePath : paths)
{
if ("input_data.tsv".equalsIgnoreCase(name))
if ("input_data.tsv".equalsIgnoreCase(remotePath))
continue;
if ("script.R".equalsIgnoreCase(name))
if ("script.R".equalsIgnoreCase(remotePath))
continue;
new File(wd,name).getParentFile().mkdirs();
try (InputStream is = rconn.openFile(name);
FileOutputStream fos = new FileOutputStream(new File(wd,name)))
File file = new File(wd,remotePath);
FileUtil.createTempFile(file);
try (InputStream is = rconn.openFile(remotePath);
FileOutputStream fos = new FileOutputStream(file))
{
IOUtil.copyCompletely(is, fos);
}
Expand Down
23 changes: 23 additions & 0 deletions api/src/org/labkey/api/util/FileUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,15 @@
import java.nio.CharBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import java.nio.file.FileSystems;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.nio.file.attribute.BasicFileAttributes;
import java.nio.file.attribute.FileAttribute;
import java.nio.file.attribute.PosixFilePermission;
import java.nio.file.attribute.PosixFilePermissions;
import java.security.DigestInputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
Expand All @@ -66,6 +70,7 @@
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;

Expand Down Expand Up @@ -1220,6 +1225,24 @@ public static File createTempFile(@Nullable String prefix, @Nullable String suff
return path.toFile();
}


private static final boolean isPosix =
FileSystems.getDefault().supportedFileAttributeViews().contains("posix");
final static private FileAttribute<?>[] tempFileAttributes = new FileAttribute[] { PosixFilePermissions.asFileAttribute(Set.of(PosixFilePermission.OWNER_READ, PosixFilePermission.OWNER_WRITE)) };

public static boolean createTempFile(File file) throws IOException
{
if (file.exists())
return false;
file.getParentFile().mkdirs();
if (isPosix)
Files.createFile(file.toPath(), tempFileAttributes);
else
Files.createFile(file.toPath());
return true;
}


public static void deleteTempFile(File f)
{
if (null != f && f.isFile())
Expand Down