mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Gaetan Boismal
11.21.2015 a722e8fa43118b71bf80cfc8d3d354a0bb0b2c75
OPENDJ-1749 Add plugin to check svn:eol-style

This plugin replaces the check which was done in the ant build.
3 files added
222 ■■■■■ changed files
opendj-svn-property-check-maven-plugin/pom.xml 66 ●●●●● patch | view | raw | blame | history
opendj-svn-property-check-maven-plugin/src/main/java/org/forgerock/maven/CheckSVNPropertyMojo.java 127 ●●●●● patch | view | raw | blame | history
opendj-svn-property-check-maven-plugin/src/main/java/org/forgerock/maven/package-info.java 29 ●●●●● patch | view | raw | blame | history
opendj-svn-property-check-maven-plugin/pom.xml
New file
@@ -0,0 +1,66 @@
<?xml version="1.0"?>
<!--
 ! CDDL HEADER START
 !
 ! The contents of this file are subject to the terms of the
 ! Common Development and Distribution License, Version 1.0 only
 ! (the "License").  You may not use this file except in compliance
 ! with the License.
 !
 ! You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
 ! or http://forgerock.org/license/CDDLv1.0.html.
 ! See the License for the specific language governing permissions
 ! and limitations under the License.
 !
 ! When distributing Covered Code, include this CDDL HEADER in each
 ! file and include the License file at legal-notices/CDDLv1_0.txt.
 ! If applicable, add the following below this CDDL HEADER, with the
 ! fields enclosed by brackets "[]" replaced with your own identifying
 ! information:
 !      Portions Copyright [yyyy] [name of copyright owner]
 !
 ! CDDL HEADER END
 !
 !      Copyright 2015 ForgeRock AS
 !
 -->
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
  xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
     <artifactId>opendj-project</artifactId>
     <groupId>org.forgerock.opendj</groupId>
     <version>3.0.0-SNAPSHOT</version>
  </parent>
  <artifactId>opendj-svn-property-check-maven-plugin</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <name>Check SVN property maven plugin</name>
  <description>
    Checks ForgeRock source file copyrights.
  </description>
  <packaging>maven-plugin</packaging>
  <properties>
    <mavenVersion>3.0.4</mavenVersion>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.twdata.maven</groupId>
      <artifactId>mojo-executor</artifactId>
      <version>2.2.0</version>
    </dependency>
    <dependency>
      <groupId>org.tmatesoft.svnkit</groupId>
      <artifactId>svnkit</artifactId>
      <version>1.8.5</version>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.plugin-tools</groupId>
      <artifactId>maven-plugin-annotations</artifactId>
      <version>3.4</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>
</project>
opendj-svn-property-check-maven-plugin/src/main/java/org/forgerock/maven/CheckSVNPropertyMojo.java
New file
@@ -0,0 +1,127 @@
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
 * or http://forgerock.org/license/CDDLv1.0.html.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at legal-notices/CDDLv1_0.txt.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information:
 *      Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 *
 *      Copyright 2015 ForgeRock AS
 */
package org.forgerock.maven;
import java.io.File;
import java.util.LinkedList;
import java.util.List;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;
import org.tmatesoft.svn.core.SVNDepth;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.wc.ISVNStatusHandler;
import org.tmatesoft.svn.core.wc.SVNClientManager;
import org.tmatesoft.svn.core.wc.SVNPropertyData;
import org.tmatesoft.svn.core.wc.SVNRevision;
/**
 * This be used to make sure that the file has the correct "svn:eol-style"
 * property value.
 */
@Mojo(name = "check-svn-property", defaultPhase = LifecyclePhase.VALIDATE)
public class CheckSVNPropertyMojo extends AbstractMojo implements ISVNStatusHandler {
    /** The Maven Project. */
    @Parameter(property = "project", required = true, readonly = true)
    private MavenProject project;
    /** The path to the root of the Subversion workspace to check. */
    @Parameter(required = true, defaultValue = "${basedir}")
    private String svnWorkspaceRoot;
    @Parameter(required = true)
    private String svnPropertyName;
    @Parameter(required = true)
    private String svnPropertyExpectedValue;
    /**
     * The name of the system property that may be used to prevent eol-style
     * problems from failing the build.
     */
    @Parameter(property = "ignoreSvnPropertyCheckErrors", required = true, defaultValue = "false")
    private boolean ignoreErrors;
    /** The overall SVN Client Manager. */
    private final SVNClientManager svnClientManager = SVNClientManager.newInstance();
    private final List<String> errorFilePaths = new LinkedList<String>();
    /** {@inheritDoc} **/
    public void execute() throws MojoExecutionException, MojoFailureException {
        try {
            svnClientManager.getStatusClient().doStatus(new File(svnWorkspaceRoot), SVNRevision.WORKING,
                    SVNDepth.INFINITY, false, false, false, false, this, null);
        } catch (Exception e) {
            throw new MojoExecutionException("Encountered an error while examining subversion status: "
                    + e.getMessage() + "No further checks will be performed.", e);
        }
        if (!errorFilePaths.isEmpty()) {
            getLog().warn(" Potential " + svnPropertyName + " updates needed " + "for the following files:");
            for (String filename : errorFilePaths) {
                getLog().warn("     " + filename);
            }
            if (!ignoreErrors) {
                throw new MojoExecutionException("Fix " + svnPropertyName + " problems before proceeding, or "
                        + "use '-DignoreSvnPropertyCheckErrors=true' to ignore these warnings warnings.");
            }
        }
    }
    /**
     * Examines the provided status item to determine whether the associated
     * file is acceptable.
     *
     * @param status
     *            The SVN status information for the file of interest.
     */
    public void handleStatus(org.tmatesoft.svn.core.wc.SVNStatus status) throws SVNException {
        File changedFile = status.getFile();
        ;
        if (!changedFile.exists() || !changedFile.isFile()) {
            return;
        }
        try {
            SVNPropertyData propertyData = SVNClientManager.newInstance().getWCClient()
                    .doGetProperty(changedFile, svnPropertyName, SVNRevision.BASE, SVNRevision.WORKING);
            if (propertyData == null || !svnPropertyExpectedValue.equals(propertyData.getValue().getString())) {
                errorFilePaths.add(changedFile.getPath());
            }
        } catch (SVNException se) {
            // This could happen if the file isn't under version control.
            getLog().warn("Impossible to check svn:eol-style for the file " + changedFile.getAbsolutePath()
                            + " you might need to add it to svn.");
        }
    }
}
opendj-svn-property-check-maven-plugin/src/main/java/org/forgerock/maven/package-info.java
New file
@@ -0,0 +1,29 @@
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
 * or http://forgerock.org/license/CDDLv1.0.html.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at legal-notices/CDDLv1_0.txt.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information:
 *      Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 *
 *
 *      Copyright 2015 ForgeRock AS.
 */
/** Classes implementing the maven plugin to check svn properties on tracked source files. */
package org.forgerock.maven;