 ------
 Patch Multiple Files from Multiple Directories
 ------
 John Casey
 Jesse McConnell
 ------
 22 June 2007
 ------

~~ 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.

~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/doxia/references/apt-format.html

Patch Multiple Files from Multiple Directories

  The Patch Plugin can be configured to apply sets of patches from multiple directories.
  In the example below, the plugin is setup to apply all the patches in a <<<bugfix>>> directory with 
  optimization (will not reapply the same patch) and also from an <<<enhancement>>> directory.  This 
  scenario might crop up if you don't have commit access to a project's source yet need to apply 
  bugfix and enhancement patches.  The two different patch source directories are shown purely as 
  an example of what can be configured.

+--------
<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-patch-plugin</artifactId>
        <version>1.0</version>
        <configuration>
          <targetDirectory>${moduleDirectory}</targetDirectory>
          <skipApplication>false</skipApplication>
        </configuration>
        <executions>
          <execution>
            <id>bugfix-patches</id>
            <configuration>
              <patchDirectory>src/main/patches/bugfix</patchDirectory>
              <patchTrackingFile>${project.build.directory}/optimization-files/bugfix/patches-applied.txt</patchTrackingFile>
              <naturalOrderProcessing>true</naturalOrderProcessing>
            </configuration>
            <phase>process-sources</phase>
            <goals>
              <goal>apply</goal>
            </goals>
          </execution>
          <execution>
            <id>enhancement-patches</id>
            <configuration>
              <patchDirectory>src/main/patches/enhancement</patchDirectory>
              <patchTrackingFile>${project.build.directory}/optimization-files/enhancement/patches-applied.txt</patchTrackingFile>
              <naturalOrderProcessing>true</naturalOrderProcessing>
            </configuration>
            <phase>process-sources</phase>
            <goals>
              <goal>apply</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
    [...]
  </build>
  [...]
</project>
+---------
