001 package org.apache.maven.scm.plugin;
002
003 import java.io.File;
004
005 import org.apache.maven.plugin.MojoExecutionException;
006 import org.apache.maven.scm.ScmException;
007 import org.apache.maven.scm.ScmFileSet;
008 import org.apache.maven.scm.command.status.StatusScmResult;
009 import org.apache.maven.scm.repository.ScmRepository;
010
011 /*
012 * Licensed to the Apache Software Foundation (ASF) under one
013 * or more contributor license agreements. See the NOTICE file
014 * distributed with this work for additional information
015 * regarding copyright ownership. The ASF licenses this file
016 * to you under the Apache License, Version 2.0 (the
017 * "License"); you may not use this file except in compliance
018 * with the License. You may obtain a copy of the License at
019 *
020 * http://www.apache.org/licenses/LICENSE-2.0
021 *
022 * Unless required by applicable law or agreed to in writing,
023 * software distributed under the License is distributed on an
024 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
025 * KIND, either express or implied. See the License for the
026 * specific language governing permissions and limitations
027 * under the License.
028 */
029
030 /**
031 * This mojo will fail the build if there is any local modifications
032 * @goal check-local-modification
033 * @author Olivier Lamy
034 * @since 1.2
035 */
036 public class CheckLocalModificationsMojo
037 extends AbstractScmMojo
038 {
039
040 /**
041 * Custom error message
042 *
043 * @parameter expression="${scm.checkLocalModification.errorMessage}"
044 * default-value="The build will stop as there is local modifications";
045 */
046 private String errorMessage;
047
048 /**
049 * Custom error message
050 *
051 * @parameter expression="${scm.checkLocalModification.skip}" default-value="false";
052 */
053 private boolean skip;
054
055 /**
056 * current directory
057 *
058 * @parameter default-value="${basedir}";
059 * @readonly
060 */
061 private File baseDirectory;
062
063 public void execute()
064 throws MojoExecutionException
065 {
066 if ( skip )
067 {
068 getLog().info( "check-local-modification execution has been skipped" );
069 return;
070 }
071 super.execute();
072
073 StatusScmResult result = null;
074
075 try
076 {
077 ScmRepository repository = getScmRepository();
078 result = getScmManager().status( repository, new ScmFileSet( baseDirectory ) );
079 }
080 catch ( ScmException e )
081 {
082 throw new MojoExecutionException( e.getMessage(), e );
083 }
084
085 if ( !result.isSuccess() )
086 {
087 throw new MojoExecutionException( "Unable to check for local modifications :" + result.getProviderMessage() );
088 }
089
090 if ( !result.getChangedFiles().isEmpty() )
091 {
092 getLog().error( errorMessage );
093 throw new MojoExecutionException( errorMessage );
094 }
095
096 }
097
098 }