Fix MRELEASE-759: Add ScmTranslator.toRelativePath()
git-svn-id: https://svn.apache.org/repos/asf/maven/release/trunk@1341231 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmCheckModificationsPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmCheckModificationsPhase.java
index 9dfcae9..db85305 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmCheckModificationsPhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmCheckModificationsPhase.java
@@ -36,6 +36,7 @@
import org.apache.maven.shared.release.scm.ReleaseScmCommandException;
import org.apache.maven.shared.release.scm.ReleaseScmRepositoryException;
import org.apache.maven.shared.release.scm.ScmRepositoryConfigurator;
+import org.apache.maven.shared.release.scm.ScmTranslator;
import org.codehaus.plexus.util.SelectorUtils;
import org.codehaus.plexus.util.StringUtils;
@@ -44,6 +45,7 @@
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.Set;
/**
@@ -61,6 +63,13 @@
* @plexus.requirement
*/
private ScmRepositoryConfigurator scmRepositoryConfigurator;
+
+ /**
+ * SCM URL translators mapped by provider name.
+ *
+ * @plexus.requirement role="org.apache.maven.shared.release.scm.ScmTranslator"
+ */
+ private Map<String, ScmTranslator> scmTranslators;
/**
* The filepatterns to exclude from the status check.
@@ -130,20 +139,35 @@
List<ScmFile> changedFiles = result.getChangedFiles();
- // TODO: would be nice for SCM status command to do this for me.
- for ( Iterator<ScmFile> i = changedFiles.iterator(); i.hasNext(); )
+ if ( !changedFiles.isEmpty() )
{
- ScmFile f = i.next();
-
- // SelectorUtils expects File.separator, don't standardize!
- String fileName = f.getPath().replace( "\\", File.separator ).replace( "/", File.separator );
-
- for ( String exclusionPattern : exclusionPatterns )
+ ScmTranslator scmTranslator = scmTranslators.get( repository );
+
+ // TODO: would be nice for SCM status command to do this for me.
+ for ( Iterator<ScmFile> i = changedFiles.iterator(); i.hasNext(); )
{
- if ( SelectorUtils.matchPath( exclusionPattern, fileName ) )
+ ScmFile f = i.next();
+
+ String path;
+ if ( scmTranslator != null )
{
- logDebug( relResult, "Ignoring changed file: " + fileName );
- i.remove();
+ path = scmTranslator.toRelativePath( f.getPath() );
+ }
+ else
+ {
+ path = f.getPath();
+ }
+
+ // SelectorUtils expects File.separator, don't standardize!
+ String fileName = path.replace( "\\", File.separator ).replace( "/", File.separator );
+
+ for ( String exclusionPattern : exclusionPatterns )
+ {
+ if ( SelectorUtils.matchPath( exclusionPattern, fileName ) )
+ {
+ logDebug( relResult, "Ignoring changed file: " + fileName );
+ i.remove();
+ }
}
}
}
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/ClearCaseScmTranslator.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/ClearCaseScmTranslator.java
index 8362058..7008cba 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/ClearCaseScmTranslator.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/ClearCaseScmTranslator.java
@@ -28,16 +28,25 @@
public class ClearCaseScmTranslator
implements ScmTranslator
{
+ /**
+ * {@inheritDoc}
+ */
public String translateBranchUrl( String url, String branchName, String branchBase )
{
return url;
}
+ /**
+ * {@inheritDoc}
+ */
public String translateTagUrl( String url, String tag, String tagBase )
{
return url;
}
+ /**
+ * {@inheritDoc}
+ */
public String resolveTag( String tag )
{
if ( !"HEAD".equals( tag ) )
@@ -49,4 +58,12 @@
return null;
}
}
+
+ /**
+ * {@inheritDoc}
+ */
+ public String toRelativePath( String path )
+ {
+ return path;
+ }
}
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/CvsScmTranslator.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/CvsScmTranslator.java
index e1668f6..ab5544d 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/CvsScmTranslator.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/CvsScmTranslator.java
@@ -28,16 +28,25 @@
public class CvsScmTranslator
implements ScmTranslator
{
+ /**
+ * {@inheritDoc}
+ */
public String translateBranchUrl( String url, String branchName, String branchBase )
{
return url;
}
+ /**
+ * {@inheritDoc}
+ */
public String translateTagUrl( String url, String tag, String tagBase )
{
return url;
}
+ /**
+ * {@inheritDoc}
+ */
public String resolveTag( String tag )
{
if ( !"HEAD".equals( tag ) )
@@ -49,4 +58,12 @@
return null;
}
}
+
+ /**
+ * {@inheritDoc}
+ */
+ public String toRelativePath( String path )
+ {
+ return path;
+ }
}
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/GitScmTranslator.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/GitScmTranslator.java
index 394aba3..1d4ca4d 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/GitScmTranslator.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/GitScmTranslator.java
@@ -22,7 +22,8 @@
/**
* @plexus.component role="org.apache.maven.shared.release.scm.ScmTranslator" role-hint="git"
*/
-public class GitScmTranslator implements ScmTranslator
+public class GitScmTranslator
+ implements ScmTranslator
{
/** {@inheritDoc} */
@@ -42,4 +43,10 @@
{
return tag;
}
+
+ /** {@inheritDoc} */
+ public String toRelativePath( String path )
+ {
+ return path;
+ }
}
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/HgScmTranslator.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/HgScmTranslator.java
index b891194..96ff86b 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/HgScmTranslator.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/HgScmTranslator.java
@@ -22,7 +22,8 @@
/**
* @plexus.component role="org.apache.maven.shared.release.scm.ScmTranslator" role-hint="hg"
*/
-public class HgScmTranslator implements ScmTranslator
+public class HgScmTranslator
+ implements ScmTranslator
{
/** {@inheritDoc} */
@@ -42,4 +43,10 @@
{
return tag;
}
+
+ /** {@inheritDoc} */
+ public String toRelativePath( String path )
+ {
+ return path;
+ }
}
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/JazzScmTranslator.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/JazzScmTranslator.java
index c1effc8..88c13be 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/JazzScmTranslator.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/JazzScmTranslator.java
@@ -1,5 +1,7 @@
package org.apache.maven.shared.release.scm;
+import java.io.File;
+
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -76,4 +78,21 @@
// project.scm.tag is not required, so return null.
return null;
}
+
+ /**
+ * {@inheritDoc}
+ */
+ public String toRelativePath( String path )
+ {
+ String relativePath;
+ if ( path.startsWith( "\\" ) || path.startsWith( "/" ) )
+ {
+ relativePath = path.substring( 1 );
+ }
+ else
+ {
+ relativePath = path;
+ }
+ return relativePath.replace( "\\", File.separator ).replace( "/", File.separator );
+ }
}
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/ScmTranslator.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/ScmTranslator.java
index f7e8836..21b83e9 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/ScmTranslator.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/ScmTranslator.java
@@ -59,4 +59,13 @@
* @return the tag to use, or <code>null</code> if the provider does not use tags
*/
String resolveTag( String tag );
+
+ /**
+ * Translates an ScmFile path to a path relative to the working directory.
+ *
+ * @param path
+ * @return the relative path with OS specific File separator
+ * @since 2.3.1
+ */
+ String toRelativePath( String path );
}
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/SubversionScmTranslator.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/SubversionScmTranslator.java
index d81bea1..c74917d 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/SubversionScmTranslator.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/SubversionScmTranslator.java
@@ -32,19 +32,36 @@
public class SubversionScmTranslator
implements ScmTranslator
{
+ /**
+ * {@inheritDoc}
+ */
public String translateBranchUrl( String url, String branchName, String branchBase )
{
return SvnTagBranchUtils.resolveUrl( url, branchBase, SvnTagBranchUtils.SVN_BRANCHES,
new ScmBranch( branchName ) );
}
+ /**
+ * {@inheritDoc}
+ */
public String translateTagUrl( String url, String tag, String tagBase )
{
return SvnTagBranchUtils.resolveUrl( url, tagBase, SvnTagBranchUtils.SVN_TAGS, new ScmTag( tag ) );
}
+ /**
+ * {@inheritDoc}
+ */
public String resolveTag( String tag )
{
return null;
}
+
+ /**
+ * {@inheritDoc}
+ */
+ public String toRelativePath( String path )
+ {
+ return path;
+ }
}
diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/scm/ClearCaseScmTranslatorTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/scm/ClearCaseScmTranslatorTest.java
index 7dada88..9743a7d 100644
--- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/scm/ClearCaseScmTranslatorTest.java
+++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/scm/ClearCaseScmTranslatorTest.java
@@ -47,4 +47,9 @@
assertEquals( "url", scmTranslator.translateBranchUrl( "url", "branchName", null ) );
assertEquals( "url", scmTranslator.translateBranchUrl( "url", "branchName", "tagBase" ) );
}
+
+ public void testGetRelativePath()
+ {
+ assertEquals( "a/b/c", "a/b/c" );
+ }
}
diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/scm/CvsScmTranslatorTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/scm/CvsScmTranslatorTest.java
index 2848fa9..e2cf8b1 100644
--- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/scm/CvsScmTranslatorTest.java
+++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/scm/CvsScmTranslatorTest.java
@@ -47,4 +47,9 @@
assertEquals( "url", scmTranslator.translateBranchUrl( "url", "branchName", null ) );
assertEquals( "url", scmTranslator.translateBranchUrl( "url", "branchName", "tagBase" ) );
}
+
+ public void testGetRelativePath()
+ {
+ assertEquals( "a/b/c", "a/b/c" );
+ }
}
diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/scm/GitScmTranslatorTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/scm/GitScmTranslatorTest.java
index db8e0cf..a9acd1c 100644
--- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/scm/GitScmTranslatorTest.java
+++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/scm/GitScmTranslatorTest.java
@@ -47,4 +47,9 @@
assertEquals( "url", scmTranslator.translateBranchUrl( "url", "branchName", null ) );
assertEquals( "url", scmTranslator.translateBranchUrl( "url", "branchName", "tagBase" ) );
}
+
+ public void testGetRelativePath()
+ {
+ assertEquals( "a/b/c", "a/b/c" );
+ }
}
diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/scm/HgScmTranslatorTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/scm/HgScmTranslatorTest.java
index 19080ed..e731b17 100644
--- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/scm/HgScmTranslatorTest.java
+++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/scm/HgScmTranslatorTest.java
@@ -46,4 +46,9 @@
assertEquals( "url", scmTranslator.translateBranchUrl( "url", "branchName", null ) );
assertEquals( "url", scmTranslator.translateBranchUrl( "url", "branchName", "tagBase" ) );
}
+
+ public void testGetRelativePath()
+ {
+ assertEquals( "a/b/c", "a/b/c" );
+ }
}
diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/scm/JazzScmTranslatorTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/scm/JazzScmTranslatorTest.java
index 6e5aa6b..187606c 100644
--- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/scm/JazzScmTranslatorTest.java
+++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/scm/JazzScmTranslatorTest.java
@@ -19,6 +19,8 @@
* under the License.
*/
+import java.io.File;
+
import junit.framework.TestCase;
public class JazzScmTranslatorTest
@@ -47,4 +49,12 @@
assertEquals( "url:branchName", scmTranslator.translateBranchUrl( "url:module", "branchName", null ) );
assertEquals( "url:branchName", scmTranslator.translateBranchUrl( "url:module", "branchName", "tagBase" ) );
}
+
+ public void testGetRelativePath()
+ {
+ assertEquals( "BogusTest" + File.separator + "release.properties", scmTranslator.toRelativePath( "BogusTest/release.properties" ) );
+ assertEquals( "BogusTest" + File.separator + "release.properties", scmTranslator.toRelativePath( "/BogusTest/release.properties" ) );
+ assertEquals( "BogusTest" + File.separator + "release.properties", scmTranslator.toRelativePath( "BogusTest\\release.properties" ) );
+ assertEquals( "BogusTest" + File.separator + "release.properties", scmTranslator.toRelativePath( "\\BogusTest\\release.properties" ) );
+ }
}
diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/scm/SubversionScmTranslatorTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/scm/SubversionScmTranslatorTest.java
index 9b6943c..43c3766 100644
--- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/scm/SubversionScmTranslatorTest.java
+++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/scm/SubversionScmTranslatorTest.java
@@ -48,4 +48,9 @@
assertEquals( "url/branches/branchName", scmTranslator.translateBranchUrl( "url", "branchName", null ) );
assertEquals( "tagBase/branchName", scmTranslator.translateBranchUrl( "url", "branchName", "tagBase" ) );
}
+
+ public void testGetRelativePath()
+ {
+ assertEquals( "a/b/c", "a/b/c" );
+ }
}