package com.coverity.ps.common.plugins.scm;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import com.coverity.ps.common.config.ScmConfigData;
import com.coverity.ps.common.CimProxy;
import com.coverity.ws.v4.CovRemoteServiceException_Exception;
import com.coverity.ws.v4.UserDataObj;
/*
* Provides support for Perforce
*/
public class PerforcePlugin implements ScmPlugin {
// build user map email -> user
static Map<String, UserDataObj> userMap = new HashMap<String, UserDataObj>();
static {
try {
// map e-mail address to users
List<UserDataObj> users;
users = CimProxy.getInstance().getAllUsers();
for(UserDataObj user : users) {
userMap.put(user.getEmail(), user);
}
} catch (CovRemoteServiceException_Exception e) {
e.printStackTrace();
}
}
private ScmConfigData scmStreamData;
public void setData(ScmConfigData scmStreamData) {
this.scmStreamData = scmStreamData;
}
private String getConfig(String key) {
return this.scmStreamData.get(key);
}
/**
* Returns the user name of the last person modified the file
*/
public String getFileOwner(String file) throws Exception {
final StringBuilder commandBuilder = new StringBuilder(100);
String p4client = getConfig("client");
String p4port = getConfig("port");
String p4user = getConfig("user");
String p4password = getConfig("password");
String p4repository = getConfig("repository");
String p4strip = getConfig("strip-path");
commandBuilder.append("p4 -s");
if (p4client != null)
commandBuilder.append(" -c ").append(p4client);
if (p4port != null)
commandBuilder.append(" -p ").append(p4port);
if (p4user != null)
commandBuilder.append(" -u ").append(p4user);
if (p4password != null)
commandBuilder.append(" -P ").append(p4password);
if ((p4repository != null) && (p4repository.length() > 0))
file = p4repository + file;
if ((p4strip != null) && (p4strip.length() > 0))
file = file.replace(p4strip, "");
file = file.replace("/", java.io.File.separator);
commandBuilder.append(" filelog -i -m 5 ").append(file);
String command = commandBuilder.toString();
String owner = "nobody";
try {
Process process = Runtime.getRuntime().exec(command);
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
String text = br.readLine();
Pattern p = Pattern.compile(".* by (\\w+)@");
while (text != null) {
if (text.contains(" edit on ")) {
Matcher m = p.matcher(text);
if (m.find()) {
owner = new String(m.group(1));
break;
}
}
text = br.readLine();
}
return owner;
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
private String parse_output_for_owner(String text) {
return "toto";
}
public static void main(String[] args) {
try {
if(args.length > 0) {
PerforcePlugin svn = new PerforcePlugin();
String author = svn.getFileOwner(args[0]);
System.out.println("file owner=" + author);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}