From 03b1907a631cb31cbd4943fd1c2ceafe3e400dd6 Mon Sep 17 00:00:00 2001 From: Baptiste Mathus Date: Wed, 12 Feb 2014 12:17:16 +0100 Subject: [PATCH] SCM-741: check svn info matches what's in the pom --- maven-scm-plugin/pom.xml | 25 +++++- .../dotSvnDir/entries | 1 + .../dotSvnDir/format | 1 + .../dotSvnDir/pristine/.gitignore | 0 .../dotSvnDir/tmp/.gitignore | 0 .../dotSvnDir/wc.db | Bin 0 -> 41984 bytes .../invoker.properties | 24 ++++++ .../pom.xml | 12 +++ .../prepare.groovy | 27 +++++++ .../verify.groovy | 20 +++++ maven-scm-plugin/src/it/settings.xml | 75 ++++++++++++++++++ .../apache/maven/scm/plugin/ValidateMojo.java | 14 +++- .../provider/svn/AbstractSvnScmProvider.java | 48 ++++++++++- 13 files changed, 239 insertions(+), 8 deletions(-) create mode 100644 maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/dotSvnDir/entries create mode 100644 maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/dotSvnDir/format create mode 100644 maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/dotSvnDir/pristine/.gitignore create mode 100644 maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/dotSvnDir/tmp/.gitignore create mode 100644 maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/dotSvnDir/wc.db create mode 100644 maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/invoker.properties create mode 100644 maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/pom.xml create mode 100644 maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/prepare.groovy create mode 100644 maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/verify.groovy create mode 100644 maven-scm-plugin/src/it/settings.xml diff --git a/maven-scm-plugin/pom.xml b/maven-scm-plugin/pom.xml index 9babcf5de..fdd2762b9 100644 --- a/maven-scm-plugin/pom.xml +++ b/maven-scm-plugin/pom.xml @@ -128,7 +128,30 @@ - + + + maven-invoker-plugin + + ${project.build.directory}/it + true + true + prepare + verify + ${project.build.directory}/local-repo + src/it/settings.xml + + + + integration-test + + install + run + + + + + + org.apache.maven.plugins diff --git a/maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/dotSvnDir/entries b/maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/dotSvnDir/entries new file mode 100644 index 000000000..48082f72f --- /dev/null +++ b/maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/dotSvnDir/entries @@ -0,0 +1 @@ +12 diff --git a/maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/dotSvnDir/format b/maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/dotSvnDir/format new file mode 100644 index 000000000..48082f72f --- /dev/null +++ b/maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/dotSvnDir/format @@ -0,0 +1 @@ +12 diff --git a/maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/dotSvnDir/pristine/.gitignore b/maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/dotSvnDir/pristine/.gitignore new file mode 100644 index 000000000..e69de29bb diff --git a/maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/dotSvnDir/tmp/.gitignore b/maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/dotSvnDir/tmp/.gitignore new file mode 100644 index 000000000..e69de29bb diff --git a/maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/dotSvnDir/wc.db b/maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/dotSvnDir/wc.db new file mode 100644 index 0000000000000000000000000000000000000000..27fea5953ea0f94fb167c776ff11e613275f6e7f GIT binary patch literal 41984 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 + 4.0.0 + org.apache.maven.plugins.it + simple + 1.0-yolo-SNAPSHOT + + + scm:svn:http://svn.apache.org/repos/asf/subversion/trun + scm:svn:http://svn.apache.org/repos/asf/subversion/trun + + \ No newline at end of file diff --git a/maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/prepare.groovy b/maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/prepare.groovy new file mode 100644 index 000000000..d4b388158 --- /dev/null +++ b/maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/prepare.groovy @@ -0,0 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +// We rename the dotSvnDir in the IT folder to standard .svn naming so that the IT can execute. +// BUT we actually don't store that special versioning directory as-is to prevent potentially confusing +// (to say the least) a svn checkout of the maven-scm project. +// +File dotSvnDir = new File(basedir, 'dotSvnDir') +assert dotSvnDir.exists() +assert dotSvnDir.isDirectory() +assert dotSvnDir.renameTo(new File(basedir, '.svn')) diff --git a/maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/verify.groovy b/maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/verify.groovy new file mode 100644 index 000000000..081a2f4be --- /dev/null +++ b/maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/verify.groovy @@ -0,0 +1,20 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + File buildLog = new File(basedir, 'build.log') +assert buildLog.exists() diff --git a/maven-scm-plugin/src/it/settings.xml b/maven-scm-plugin/src/it/settings.xml new file mode 100644 index 000000000..367e82500 --- /dev/null +++ b/maven-scm-plugin/src/it/settings.xml @@ -0,0 +1,75 @@ + + + + + + + + + my.server + me + {iFtD2TFFjzoHEDN1RxW21zEBYW0Gt7GwbsOm6yDS63s=} + + + + + + it-repo + + true + + + + local.central + @localRepositoryUrl@ + + true + + + true + + + + apache.snapshots + Apache Snapshot Repository + http://people.apache.org/repo/m2-snapshot-repository + + false + + + true + + + + + + local.central + @localRepositoryUrl@ + + true + + + true + + + + + + diff --git a/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/ValidateMojo.java b/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/ValidateMojo.java index af86fdd2b..07056ddb4 100644 --- a/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/ValidateMojo.java +++ b/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/ValidateMojo.java @@ -19,15 +19,15 @@ * under the License. */ +import java.util.Iterator; +import java.util.List; + import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugins.annotations.Execute; import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; -import java.util.Iterator; -import java.util.List; - /** * Validate scm connection string. * @@ -51,6 +51,14 @@ public class ValidateMojo @Parameter( property = "scmDeveloperConnection", defaultValue = "${project.scm.developerConnection}" ) private String scmDeveloperConnection; + /** + * (Subversion specific) Enables checking that "URL" field returned by svn info matches what is specified under the scm tag. + */ + @Parameter(property = "scmCheckWorkingDirectoryUrl", defaultValue = "false") + // Actually unused in the code here. Present for doc purpose, + // see org.apache.maven.scm.provider.svn.AbstractSvnScmProvider.CHECK_WORKING_DIRECTORY_URL + private boolean scmCheckWorkingDirectoryUrl; + /** {@inheritDoc} */ public void execute() throws MojoExecutionException diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/AbstractSvnScmProvider.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/AbstractSvnScmProvider.java index 014bad8b1..16ab2f1a4 100644 --- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/AbstractSvnScmProvider.java +++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/AbstractSvnScmProvider.java @@ -19,6 +19,10 @@ * under the License. */ +import java.io.File; +import java.util.ArrayList; +import java.util.List; + import org.apache.maven.scm.CommandParameters; import org.apache.maven.scm.ScmException; import org.apache.maven.scm.ScmFileSet; @@ -31,6 +35,7 @@ import org.apache.maven.scm.command.checkout.CheckOutScmResult; import org.apache.maven.scm.command.diff.DiffScmResult; import org.apache.maven.scm.command.export.ExportScmResult; +import org.apache.maven.scm.command.info.InfoItem; import org.apache.maven.scm.command.info.InfoScmResult; import org.apache.maven.scm.command.list.ListScmResult; import org.apache.maven.scm.command.mkdir.MkdirScmResult; @@ -47,10 +52,6 @@ import org.apache.maven.scm.repository.UnknownRepositoryStructure; import org.codehaus.plexus.util.StringUtils; -import java.io.File; -import java.util.ArrayList; -import java.util.List; - /** * SCM Provider for Subversion * @@ -71,6 +72,8 @@ private static class ScmUrlParserResult private ScmProviderRepository repository; } + private static final String CHECK_WORKING_DIRECTORY_URL = "scmCheckWorkingDirectoryUrl"; + // ---------------------------------------------------------------------- // ScmProvider Implementation // ---------------------------------------------------------------------- @@ -91,14 +94,51 @@ public ScmProviderRepository makeProviderScmRepository( String scmSpecificUrl, c { ScmUrlParserResult result = parseScmUrl( scmSpecificUrl ); + if ( checkWorkingDirectoryUrl() ) + { + getLogger().debug( "Checking svn info 'URL:' field matches current sources directory" ); + try + { + InfoScmResult info = + info( result.repository, new ScmFileSet( new File( "." ) ), new CommandParameters() ); + String url = findUrlInfoItem( info ); + if ( url != null && !url.equals( scmSpecificUrl ) ) + { + result.messages.add( "The scm url does not match the value returned by svn info" ); + } + } + catch ( ScmException e ) + { + throw new ScmRepositoryException( "An error occurred while trying to svn info", e ); + } + } if ( result.messages.size() > 0 ) { throw new ScmRepositoryException( "The scm url is invalid.", result.messages ); } + return result.repository; } + private boolean checkWorkingDirectoryUrl() + { + return Boolean.getBoolean( CHECK_WORKING_DIRECTORY_URL ); + } + + private String findUrlInfoItem( InfoScmResult infoScmResult ) + { + for ( InfoItem infoItem : infoScmResult.getInfoItems() ) + { + if ( infoItem.getURL() != null ) + { + getLogger().debug( "URL found: " + infoItem.getURL() ); + return infoItem.getURL(); + } + } + return null; + } + /** * {@inheritDoc} */