package hudson.scm;
import hudson.Extension;
import hudson.model.AbstractProject;
import hudson.model.User;
import hudson.tasks.MailAddressResolver;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;
/**
* {@link MailAddressResolver} implementation for major CVS hosting sites.
* @author Kohsuke Kawaguchi
*/
@Extension
public class MailAddressResolverImpl extends MailAddressResolver {
public String findMailAddressFor(User u) {
for (AbstractProject<?,?> p : u.getProjects()) {
SCM scm = p.getScm();
if (scm instanceof CVSSCM) {
CVSSCM cvsscm = (CVSSCM) scm;
String s = findMailAddressFor(u,cvsscm.getCvsRoot());
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
String username = "([A-Za-z0-9_\\-])+";
String host = "(.*.dev.java.net|kohsuke.sfbay.*)";
Pattern cvsUrl = Pattern.compile(":pserver:"+username+"@"+host+":/cvs");
RULE_TABLE.put(cvsUrl,"@dev.java.net");
}
{// source forge
Pattern cvsUrl = Pattern.compile(":(pserver|ext):([^@]+)@([^.]+).cvs.(sourceforge|sf).net:.+");
RULE_TABLE.put(cvsUrl,"@users.sourceforge.net");
}
// TODO: read some file under $HUDSON_HOME?
}
}