Hi all,
 
I've been trying to write an enforcer plugin that will validate the SCM
information contained in a POM actually reflects the actual repository
location.  I'm only concerned with SVN.
 
Basically I am trying to do is a "svn info project.getBaseDir()" and
compare the repository url that comes back with the one defined in the
SCM tag.
 
I've been failing misserably as using I can not construct a
SCMProviderRepository with the File argument. even though the svn
provider supports getting the url from a file location[1] it just ends
up throwing a null pointer exception[2].
 
I have managed to get the following code to work - but it doesn't work
out where the repo is from the .svn files.  How can I adapt it to do so
it will work with the local file location not the remote location- I'm
tearing my hair out!
 

        String devSCM = project.getScm().getDeveloperConnection();
        String devSVN = devSCM.replaceFirst("scm:svn:", "");
        ScmRepository scmRepo = scmManger.makeScmRepository(devSCM);
        log.warn("Using " + base + " as the base directory");
        ScmProvider provider = scmManger.getProviderByUrl(devSCM); 
        if (provider instanceof AbstractSvnScmProvider) {
             AbstractSvnScmProvider svnProvider =
(AbstractSvnScmProvider)provider;
            // following returns null and a n.p.e is later thrown by
AbstractCommand.execute(AbstractCommand.java:49)
            //ScmProviderRepository providerRepo =
svnProvider.makeProviderScmRepository(project.getBaseDir());
             ScmProviderRepository providerRepo =
svnProvider.makeProviderScmRepository(devSVN, '\u0000');
             ScmFileSet fileSet = new ScmFileSet(project.getBasedir(),
"pom.xml");
            SvnInfoScmResult infoResult = svnProvider.info(providerRepo,
fileSet, null);
            if (infoResult.isSuccess()) {
                ....
            }
        }

 

[1]
http://maven.apache.org/scm/xref/org/apache/maven/scm/provider/svn/Abstr
actSvnScmProvider.html#110

Regards,

    /James

Reply via email to