package hudson.scm;
import hudson.tasks.MailAddressResolver;
import hudson.Extension;
import hudson.model.User;
import hudson.model.AbstractProject;
import java.util.Map;
import java.util.HashMap;
import java.util.regex.Pattern;
/**
* {@link MailAddressResolver} that checks for well-known repositories that and computes user e-mail address.
*
* @author Kohsuke Kawaguchi
*/
@Extension
public class SubversionMailAddressResolverImpl extends MailAddressResolver {
public String findMailAddressFor(User u) {
for (AbstractProject<?,?> p : u.getProjects()) {
SCM scm = p.getScm();
if (scm instanceof SubversionSCM) {
SubversionSCM svn = (SubversionSCM) scm;
for (SubversionSCM.ModuleLocation loc : svn.getLocations(p.getLastBuild())) {
String s = findMailAddressFor(u,loc.remote);
if(s!=null) return s;
}
}
}
// didn't hit any known rules
return null;
}
/**
*
* @param scm
* String that represents SCM connectivity.
*/
protected String findMailAddressFor(User u, String scm) {
for (Map.Entry<Pattern, String> e : RULE_TABLE.entrySet())
if(e.getKey().matcher(scm).matches())
return u.getId()+e.getValue();
return null;
}
private static final Map<Pattern,String/*suffix*/> RULE_TABLE = new HashMap<Pattern, String>();
static {
{// java.net
Pattern svnurl = Pattern.compile("https://[^.]+.dev.java.net/svn/([^/]+)(/.*)?");
RULE_TABLE.put(svnurl,"@dev.java.net");
}
{// source forge
Pattern svnUrl = Pattern.compile("(http|https)://[^.]+.svn.(sourceforge|sf).net/svnroot/([^/]+)(/.*)?");
RULE_TABLE.put(svnUrl,"@users.sourceforge.net");
}
// TODO: read some file under $HUDSON_HOME?
}
}