package hudson.plugins.lockedfilesreport; import hudson.plugins.lockedfilesreport.model.FileUsageDetails; import hudson.util.ArgumentListBuilder; import java.io.BufferedReader; import java.io.IOException; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class FindFilesInUseWithHandle extends FindFilesInUseCommand implements Serializable { private static final long serialVersionUID = 1L; private static final Pattern HANDLE_PATTERN = Pattern.compile("(\\S+)\\s+pid: (\\d+)\\s+(\\S+)\\s+(\\S*):\\s+(.*)"); private final String exec; public FindFilesInUseWithHandle(String exec) { this.exec = exec; } public FindFilesInUseWithHandle() { this("handle.exe"); } @Override public List<FileUsageDetails> parseOutput(int result, BufferedReader reader, String workspacePath) throws IOException { List<FileUsageDetails> list = new ArrayList<FileUsageDetails>(); if (result == 1) { return list; } String line = reader.readLine(); while (line != null) { Matcher matcher = HANDLE_PATTERN.matcher(line); if (matcher.matches()) { list.add(new FileUsageDetails(matcher.group(5), matcher.group(5).substring(workspacePath.length() + 1), matcher.group(2), matcher.group(1), matcher.group(3))); } line = reader.readLine(); } return list; } @Override public ArgumentListBuilder getArguments(String workspacePath) { ArgumentListBuilder builder = new ArgumentListBuilder(); builder.add(exec); builder.add("-u"); builder.add(workspacePath.replace("/", "\\")); return builder; } }