YETUS-162 rename "latest" docs to "in-progress" to reflect their non-release 
status.

Signed-off-by: Allen Wittenauer <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/yetus/repo
Commit: http://git-wip-us.apache.org/repos/asf/yetus/commit/87014f42
Tree: http://git-wip-us.apache.org/repos/asf/yetus/tree/87014f42
Diff: http://git-wip-us.apache.org/repos/asf/yetus/diff/87014f42

Branch: refs/heads/master
Commit: 87014f42ab6f24062e2bbe3d112b9a19e1c72a48
Parents: bae1ae0
Author: Sean Busbey <[email protected]>
Authored: Sun Nov 1 10:33:41 2015 -0600
Committer: Allen Wittenauer <[email protected]>
Committed: Mon Nov 16 20:53:36 2015 -0800

----------------------------------------------------------------------
 asf-site-src/source/_header.md.erb              |   2 +-
 .../source/documentation/in-progress.html.md    |  34 +++
 .../in-progress/precommit-advanced.md           | 243 +++++++++++++++++
 .../in-progress/precommit-architecture.md       | 107 ++++++++
 .../in-progress/precommit-basic.md              | 268 +++++++++++++++++++
 .../in-progress/precommit-bugsystems.md         |  87 ++++++
 .../in-progress/precommit-buildtools.md         | 131 +++++++++
 .../in-progress/precommit-glossary.md           |  42 +++
 .../in-progress/precommit-patchnames.md         |  37 +++
 .../in-progress/precommit-smart-apply-patch.md  |  51 ++++
 .../in-progress/precommit-testformats.md        |  35 +++
 .../in-progress/releasedocmaker.md              | 134 ++++++++++
 .../source/documentation/latest.html.md         |  34 ---
 .../documentation/latest/precommit-advanced.md  | 243 -----------------
 .../latest/precommit-architecture.md            | 107 --------
 .../documentation/latest/precommit-basic.md     | 268 -------------------
 .../latest/precommit-bugsystems.md              |  87 ------
 .../latest/precommit-buildtools.md              | 131 ---------
 .../documentation/latest/precommit-glossary.md  |  42 ---
 .../latest/precommit-patchnames.md              |  37 ---
 .../latest/precommit-smart-apply-patch.md       |  51 ----
 .../latest/precommit-testformats.md             |  35 ---
 .../documentation/latest/releasedocmaker.md     | 134 ----------
 23 files changed, 1170 insertions(+), 1170 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/yetus/blob/87014f42/asf-site-src/source/_header.md.erb
----------------------------------------------------------------------
diff --git a/asf-site-src/source/_header.md.erb 
b/asf-site-src/source/_header.md.erb
index 8298072..8b1b13c 100644
--- a/asf-site-src/source/_header.md.erb
+++ b/asf-site-src/source/_header.md.erb
@@ -33,7 +33,7 @@
         <div class="navbar-collapse collapse">
             <ul class="nav navbar-nav">
                 <li><a href="/downloads/">Downloads</a>
-                <li><a href="/documentation/latest/">Documentation</a>
+                <li><a href="/documentation/in-progress/">Documentation</a>
                 </li>
                 <li class="dropdown">
                     <a class="dropdown-toggle" data-toggle="dropdown" 
href="#">Get Involved <span class="caret"></span></a>

http://git-wip-us.apache.org/repos/asf/yetus/blob/87014f42/asf-site-src/source/documentation/in-progress.html.md
----------------------------------------------------------------------
diff --git a/asf-site-src/source/documentation/in-progress.html.md 
b/asf-site-src/source/documentation/in-progress.html.md
new file mode 100644
index 0000000..bd61a3c
--- /dev/null
+++ b/asf-site-src/source/documentation/in-progress.html.md
@@ -0,0 +1,34 @@
+<!---
+  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.
+-->
+
+# Yetus Precommit
+
+The Yetus Precommit Patch Tester allows projects to codify their patch 
acceptance criteria and then evaluate incoming contributions prior to review by 
a committer.
+
+* Take a quick look at [our glossary of terms](precommit-glossary) to ensure 
you are familiar with the ASF and Maven jargon we'll use as terminology 
specific to this project.
+* For an overview of Yetus' philosophy on testing contributions and how 
evaluation is performed, see our [overview](precommit-architecture).
+* To get started on your project, including an explanation of what we'll 
expect in a runtime environment and what optional utilities we'll leverage, 
read through the [basic usage guide](precommit-basic).
+* If your project has advanced requirements such as module relationships not 
expressed in Maven, special profiles, or a need on os-specific prerequisites 
not managed by Maven then you'll need to use our [advanced usage 
guide](precommit-advanced).
+
+There is also documentation on [build systems](precommit-buildtools), [bug 
systems](precommit-bugsystems) and [test formats](precommit-testformats).
+
+# Yetus Release Doc Maker
+
+The Release Documentation Maker allows projects to generate nicely formated 
Markdown Changelogs and Release Notes based upon JIRA. You can view that
+documenation [here](releasedocmaker).

http://git-wip-us.apache.org/repos/asf/yetus/blob/87014f42/asf-site-src/source/documentation/in-progress/precommit-advanced.md
----------------------------------------------------------------------
diff --git 
a/asf-site-src/source/documentation/in-progress/precommit-advanced.md 
b/asf-site-src/source/documentation/in-progress/precommit-advanced.md
new file mode 100644
index 0000000..638f7d2
--- /dev/null
+++ b/asf-site-src/source/documentation/in-progress/precommit-advanced.md
@@ -0,0 +1,243 @@
+<!---
+  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.
+-->
+
+test-patch
+==========
+
+* [Docker Support](#Docker_Support)
+* [Plug-ins](#Plug-ins)
+* [Personalities](#Personalities)
+* [Important Variables](#Important_Variables)
+
+# Docker Support
+
+By default, test-patch runs in the same shell where it was launched.  It can 
alternatively use Docker to launch itself into a container.  This is 
particularly useful if running under a QA environment that does not provide all 
the necessary binaries. For example, if the patch requires a newer version of 
Java.
+
+The `--docker` parameter tells test-patch to run in Docker mode. The 
`--dockerfile` parameter allows one to provide a custom Dockerfile. The 
Dockerfile should contain all of the necessary binaries and tooling needed to 
run the test.  However be aware that test-patch will copy this file and append 
its necessary hooks to re-launch itself prior to executing docker.
+
+NOTE: If you are using Boot2Docker, you must use directories under /Users 
(OSX) or C:\Users (Windows) as the base and patchprocess directories (specified 
by the --basedir and --patch-dir options respectively), because automatically 
mountable directories are limited to them. See [the Docker 
documentation](https://docs.docker.com/userguide/dockervolumes/#mount-a-host-directory-as-a-data-volume).
+
+Dockerfile images will be named with a test-patch prefix and suffix with 
either a date or a git commit hash. By using this information, test-patch will 
automatically manage broken/stale container images that are hanging around if 
it is run in --jenkins mode.  In this way, if Docker fails to build the image, 
the disk space should eventually be cleaned and returned back to the system.
+
+
+# Plug-ins
+
+test-patch allows one to add to its basic feature set via plug-ins.  There is 
a directory called test-patch.d off of the directory where test-patch.sh lives. 
 Inside this directory one may place some bash shell fragments that, if setup 
with proper functions, will allow for test-patch to call it as necessary.  
Different plug-ins have specific functions for that particular functionality.  
In this document, the common functions available to all/most plug-ins are 
covered.  Test plugins are covered below. See other documentation for pertinent 
information for the other plug-in types.
+
+## Common Plug-in Functions
+
+Every plug-in must have one line in order to be recognized, usually an 'add' 
statement.  Test plug-ins, for example, have this statement:
+
+```bash
+add_test_type <pluginname>
+```
+
+This function call registers the `pluginname` so that test-patch knows that it 
exists.  Plug-in names must be unique across all the different plug-in types.  
Additionally, the 'all' plug-in is reserved.  The `pluginname` also acts as the 
key to the custom functions that you can define. For example:
+
+```bash
+function pluginname_filefilter
+```
+
+defines the filefilter for the `pluginname` plug-in.
+
+Similarly, there are other functions that may be defined during the test-patch 
run:
+
+    HINT: It is recommended to make the pluginname relatively small, 10 
characters at the most.  Otherwise, the ASCII output table may be skewed.
+
+* pluginname\_initialize
+    - After argument parsing and prior to any other work, the initialize step 
allows a plug-in to do any precursor work, set internal defaults, etc.
+
+* pluginname\_usage
+    - executed when the help message is displayed. This is used to display the 
plug-in specific options for the user.
+
+* pluginname\_parse\_args
+    - executed prior to any other above functions except for 
pluginname\_usage. This is useful for parsing the arguments passed from the 
user and setting up the execution environment.
+
+* pluginname\_precheck
+    - executed prior to the patch being applied but after the git repository 
is setup.  Returning a fail status here will exit test-patch.
+
+* pluginname\_precompile
+    - executed prior to the compilation part of the lifecycle. This is useful 
for doing setup work required by the compilation process.
+
+* pluginname\_compile
+    - executed immediately after the actual compilation. This is step is 
intended to be used to verify the results and add extra checking of the compile 
phase and it's stdout/stderr.
+
+* pluginname\_postcompile
+    - This step happens after the compile phase.
+
+* pluginname\_rebuild
+    - Any non-unit tests that require the source to be rebuilt in a 
destructive way should be run here.
+
+
+## Plug-in Importation
+
+Plug-ins are imported from several key directories:
+
+* core.d is an internal-to-Yetus directory that first loads the basic Yetus 
library, followed by the common routines used by all of the precommit shell 
code.  This order is dictated by prefixing the plug-in files with a number.  
Other files in this directory are loaded in shell collated order.
+
+* personality contains bundled personalities for various projects.  These will 
be imported individually based upon either a project name or if specifically 
identified with the `--personality` flag.
+
+* test-patch.d contains all of the optional, bundled plug-ins.  These are 
imported last and in shell collated order.
+
+If the `--skip-system-plugins` flag is passed, then only core.d is imported.
+
+## Test Plug-ins
+
+Plug-ins geared towards independent tests are registed via:
+
+
+```bash
+add_test_type <pluginname>
+```
+
++ pluginname\_filefilter
+    - executed while determine which files trigger which tests.  This function 
should use `add_test pluginname` to add the plug-in to the test list.
+
+* pluginname\_tests
+    - executed after the unit tests have completed.
+
+
+# Personalities
+
+## Configuring for Other Projects
+
+It is impossible for any general framework to be predictive about what types 
of special rules any given project may have, especially when it comes to 
ordering and Maven profiles.  In order to direct test-patch to do the correct 
action, a project `personality` should be added that enacts these custom rules.
+
+A personality consists of two functions. One that determines which test types 
to run and another that allows a project to dictate ordering rules, flags, and 
profiles on a per-module, per-test run.
+
+There can be only **one** of each personality function defined.
+
+## Global Definitions
+
+Globals for personalities should be defined in the `personality_globals` 
function.  This function is called *after* the other plug-ins have been 
imported.  This allows one to configure any settings for plug-ins that have 
been imported safely:
+
+```bash
+funciton personality_globals
+{
+  PATCH_BRANCH_DEFAULT=master
+  GITHUB_REPO="apache/yetus"
+}
+```
+
+## Test Determination
+
+The `personality_file_tests` function determines which tests to turn on based 
upon the file name.  It is relatively simple.  For example, to turn on a full 
suite of tests for Java files:
+
+```bash
+function personality_file_tests
+{
+  local filename=$1
+
+  if [[ ${filename} =~ \.java$ ]]; then
+    add_test findbugs
+    add_test javac
+    add_test javadoc
+    add_test mvninstall
+    add_test unit
+  fi
+
+}
+```
+
+The `add_test` function is used to activate the standard tests.  Additional 
plug-ins (such as checkstyle), will get queried on their own.
+
+## Module & Profile Determination
+
+Once the tests are determined, it is now time to pick which 
[modules](precommit-glossary.md#genericoutside-definitions) should get used.  
That's the job of the `personality_modules` function.
+
+```bash
+function personality_modules
+{
+
+    clear_personality_queue
+
+...
+
+    personality_enqueue_module <module> <flags>
+
+}
+```
+
+It takes exactly two parameters `repostatus` and `testtype`.
+
+The `repostatus` parameter tells the `personality` function exactly what state 
the source repository is in.  It can only be in one of two states:  `branch` or 
`patch`.  `branch` means the patch has not been applied.  The `patch` state is 
after the patch has been applied.
+
+The `testtype` state tells the personality exactly which test is about to be 
executed.
+
+In order to communicate back to test-patch, there are two functions for the 
personality to use.
+
+The first is `clear_personality_queue`. This removes the previous test's 
configuration so that a new module queue may be built. Custom 
`personality_modules` will almost always want to do this as the first action.
+
+The second is `personality_enqueue_module`.  This function takes two 
parameters.  The first parameter is the name of the module to add to this 
test's queue.  The second parameter is an option list of additional flags to 
pass to Maven when processing it. `personality_enqueue_module` may be called as 
many times as necessary for your project.
+
+    NOTE: A module name of . signifies the root of the repository.
+
+For example, let's say your project uses a special configuration to skip unit 
tests (-DskipTests).  Running unit tests during a javadoc build isn't very 
useful and wastes a lot of time. We can write a simple personality check to 
disable the unit tests:
+
+```bash
+function personality_modules
+{
+    local repostatus=$1
+    local testtype=$2
+
+    if [[ ${testtype} == 'javadoc' ]]; then
+        personality_enqueue_module . -DskipTests
+        return
+    fi
+    ...
+
+```
+
+This function will tell test-patch that when the javadoc test is being run, do 
the documentation build at the base of the source repository and make sure the 
-DskipTests flag is passed to our build tool.
+
+## Enabling Plug-ins
+
+Personalities can set the base list of plug-ins to enable and disable for 
their project via the `personality_plugins` function. Just call it with the 
same pattern as the `--plugins` command line option:
+
+```bash
+personality_plugins "all,-checkstyle,-findbugs,-asflicense"
+```
+
+This list is used if the user does not provide a list of plug-ins.
+
+# Important Variables
+
+There are a handful of extremely important system variables that make life 
easier for personality and plug-in writers.  Other variables may be provided by 
individual plug-ins.  Check their development documentation for more 
information.
+
+* BUILD\_NATIVE will be set to true if the system has requested that 
non-JVM-based code be built (e.g., JNI or other compiled C code). Under 
Jenkins, this is always true.
+
+* BUILDTOOL specifies which tool is currently being used to drive compilation. 
 Additionally, many build tools define xyz\_ARGS to pass on to the build tool 
command line. (e.g., MAVEN\_ARGS if maven is in use).  Projects may set this in 
their personality.  NOTE: today, only one build tool at a time is supported.  
This may change in the future.
+
+* CHANGED\_FILES is a list of all files that appear to be added, deleted, or 
modified in the patch.
+
+* CHANGED\_MODULES is a list of all modules that house all of the 
CHANGED\_FILES.  Be aware that the root of the source tree is reported as '.'.
+
+* GITHUB\_REPO is to help test-patch when talking to Github.  If test-patch is 
given just a number on the command line, it will default to using this repo to 
determine the pull request.
+
+* HOW\_TO\_CONTRIBUTE should be a URL that points to a project's on-boarding 
documentation for new users. Currently, it is used to suggest a review of patch 
naming guidelines. Since this should be project specific information, it is 
useful to set in a project's personality.
+
+* JIRA\_ISSUE\_RE is to help test-patch when talking to JIRA.  It helps 
determine if the given project is appropriate for the given JIRA issue.
+
+* MODULE and other MODULE\_\* are arrays that contain which modules, the 
status, etc, to be operated upon. These should be treated as read-only by 
plug-ins.
+
+* PATCH\_BRANCH\_DEFAULT is the name of the branch in the git repo that is 
considered the master.  This is useful to set in personalities.
+
+* PATCH\_DIR is the name of the temporary directory that houses test-patch 
artifacts (such as logs and the patch file itself)
+
+* TEST\_PARALLEL if parallel unit tests have been requested. Project 
personalities are responsible for actually enabling or ignoring the request. 
TEST\_THREADS is the number of threads that have been requested to run in 
parallel.

http://git-wip-us.apache.org/repos/asf/yetus/blob/87014f42/asf-site-src/source/documentation/in-progress/precommit-architecture.md
----------------------------------------------------------------------
diff --git 
a/asf-site-src/source/documentation/in-progress/precommit-architecture.md 
b/asf-site-src/source/documentation/in-progress/precommit-architecture.md
new file mode 100644
index 0000000..33aed6b
--- /dev/null
+++ b/asf-site-src/source/documentation/in-progress/precommit-architecture.md
@@ -0,0 +1,107 @@
+<!---
+  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.
+-->
+
+# Some Philosophy
+
+* Everyone's time is valuable.  The quicker contributors can get feedback and 
iterate, the more likely and faster their contribution will get checked in.  A 
committer should be able to focus on the core issues of a contribution rather 
than details that can be determined automatically.
+
+* Precommit checks should be fast.  There is no value in testing parts of the 
source tree that are not immediately impacted by a change.  Unit testing is the 
target. They are not a replacement for full builds or integration tests.
+
+* Many open source projects have a desire to have this capability.  Why not 
generalize a solution?
+
+* In many build systems (especially with maven), a modular design has been 
picked.  Why not leverage that design to make checks faster?
+
+* Projects that use the same language will, with a high degree of certainty, 
benefit from the same types of checks.
+
+* Portability matters.  Tooling should be as operating system and language 
agnostic as possible.
+
+# Phases
+
+test-patch works effectively under several different phases:
+
+## Initialize
+
+This is where test-patch configures and validates the environment.  Some 
things done in this phase:
+
+* Defaults
+* Parameter handling
+* Importing plug-ins and personalities
+* Docker container launching
+* Re-exec support
+* Patch file downloading
+* git repository management (fresh pull, branch switching, etc)
+
+## Precheck
+
+Checks done here are *fatal*.
+
+This acts as a verification of all of the setup parts and is the final place 
to short-cut the full test cycle.  The most significant built-in check done 
here is verifying the patch file is a valid.
+
+## Patch File Tests
+
+Tests that only require the patch file are run.  Note that the repository is 
still from the initial checkout!
+
+## Compile Cycle (Branch)
+
+When compilation must be done, we follow these five steps:
+
+* The list of modules that require analysis is built.
+* A precompile step to set things up for the actual compile
+* The actual compile
+* A postcompile to do analysis on the output of that compile phase
+* A rebuild phase to run tests that require recompiles
+
+The first time this is done is with the pristine checkout.  This is called the 
"branch compile".  For this pass, this is where the 'before' work is handled.  
Some things that typically get checked in this phase:
+
+* The first pass of files and modules that will get patched
+* Validation and information gathering of the source tree pre-patch
+* javadoc, scaladoc, etc
+
+## Distribution Clean
+
+This step is to wipe the repository clean back to a pristine state such that 
the previous cycle will not impact the next cycle.
+
+## Patch Application
+
+The patch gets applied.
+
+## Compile Cycle (Patch)
+
+Now that the patch has been applied the steps to compile we outlined in the 
compilation (branch) phase are repeated but with the patch applied. This is 
where a lot of 'after' checks are performed.
+
+## Unit Tests
+
+Since unit tests are generally the slowest part of the precommit process, they 
are run last.  At this point, all the prerequisites to running them should be 
in place and ready to go.
+
+## Reporting
+
+Finally, the results are reported to the screen and, optionally, to JIRA 
and/or whatever bug system has been configured.
+
+# Test Flow
+
+The basic workflow for many of the sub-items in individual phases are:
+
+1. print a header, so the end user knows that something is happening
+1. verify if the test is needed.  If so, continue on.  Otherwise, return 
success and let the next part of the phase execute.
+1. Ask the personality about what modules and what flags should get used
+1. Execute maven (or some other build tool) in the given modules with the 
given flags. Log the output and record the time and result code.
+1. Do any extra work as appropriate (diffs, counts, etc) and either accept the 
status and message given by the maven run or change the vote, message, log 
file, etc, based upon this extra work.
+1. Add the outcome(s) to the report generator
+
+As one can see, the modules list is one of the key inputs into what actually 
gets executed.  As a result, projects must full flexibility in either adding, 
modifying, or even removing modules from the test list.  If a personality 
removes the entire list of modules, then that test should just be ignored.

http://git-wip-us.apache.org/repos/asf/yetus/blob/87014f42/asf-site-src/source/documentation/in-progress/precommit-basic.md
----------------------------------------------------------------------
diff --git a/asf-site-src/source/documentation/in-progress/precommit-basic.md 
b/asf-site-src/source/documentation/in-progress/precommit-basic.md
new file mode 100644
index 0000000..f508047
--- /dev/null
+++ b/asf-site-src/source/documentation/in-progress/precommit-basic.md
@@ -0,0 +1,268 @@
+<!---
+  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.
+-->
+
+test-patch
+==========
+
+* [Purpose](#Purpose)
+* [Pre-requisites](#Pre-requisites)
+* [Basic Usage](#Basic_Usage)
+* [Build Tool](#Build_Tool)
+* [Providing Patch Files](#Providing_Patch_Files)
+* [Project-Specific Capabilities](#Project-Specific_Capabilities)
+* [MultiJDK](#MultiJDK)
+* [Docker](#Docker)
+
+# Purpose
+
+As part of Apache Hadoop's commit process, all patches to the source base go 
through a precommit test that does some (relatively) light checking to make 
sure the proposed change does not break unit tests and/or passes some other 
prerequisites such as code formatting guidelines.  This is meant as a 
preliminary check for committers so that the basic patch is in a known state 
and for contributors to know if they have followed the project's guidelines.  
This check, called test-patch, along with a helper program, called 
smart-apply-patch, may also be used by individual developers to verify a patch 
prior to sending to the Apache Hadoop QA systems.
+
+Other projects have adopted a similar methodology after seeing great success 
in the Apache Hadoop model.  Some have even gone as far as forking Apache 
Hadoop's precommit code and modifying it to meet their project's needs.
+
+One of the key facets of Apache Yetus is to bring together all of these forks 
under a common code base to help software development
+as a whole.
+
+
+# Pre-requisites
+
+test-patch and smart-apply-patch are written in bash for maximum portability.  
As such, it mostly assumes the locations of commands to be in the file path. 
However, in many cases, this assumption may be overridden via command line 
options.
+
+For Solaris and Solaris-like operating systems, the default location for the 
POSIX binaries is in /usr/xpg4/bin and the default location for the GNU 
binaries is /usr/gnu/bin.
+
+## Base Requirements
+
+test-patch requires these installed components to execute:
+
+* A project with a supported build tool (ant, gradle, maven, ...)
+* git-based project (and git 1.7.3 or higher installed)
+* bash v3.2 or higher
+* GNU diff
+* GNU patch
+* POSIX awk
+* POSIX grep
+* POSIX sed
+* [curl](http://curl.haxx.se/) command
+* file command
+
+## Optional Requirements
+
+Features are plug-in based and enabled either individually or collectively on 
the command line. From there, these are activated based upon tool availability, 
the languages being tested, etc.  The external dependencies of plug-ins may 
have different licensing requirements than Apache Yetus.
+
+Bug Systems:
+
+* [GitHub](https://github.com/)-based issue tracking
+* [JIRA](https://www.atlassian.com/software/jira)-based issue tracking
+
+Unit Test Formats:
+
+* [JUnit](http://junit.org/)
+* [TAP](https://testanything.org/)
+
+Language Support, Licensing, and more:
+
+* [Apache Creadur Rat](http://creadur.apache.org/rat/) entries in build system
+* [checkstyle](http://checkstyle.sourceforge.net/) entries in build system 
(ant and maven only)
+* [FindBugs](http://findbugs.sourceforge.net/) entries in build system and 3.x 
executables
+* [Perl::Critic](http://perlcritic.com/) installed
+* [pylint](http://www.pylint.org/) installed
+* [rubocop](http://batsov.com/rubocop/) installed
+* [ruby-lint](https://github.com/YorickPeterse/ruby-lint) installed
+* [shellcheck](https://github.com/koalaman/shellcheck) installed, preferably 
0.3.6 or higher
+
+# Basic Usage
+
+The first step for a successful deployment is determining which 
features/plug-ins to enable:
+
+```bash
+$ test-patch.sh --list-plugins
+```
+
+This option will list all of the available plug-ins that are installed in the 
default location.  From this list, the specific plug-ins can be enabled:
+
+```bash
+$ test-patch.sh --plugins="ant,maven,shellcheck,xml" <other options>
+```
+
+As a short-cut, every plug-in may be enabled via the special 'all' type:
+
+```bash
+$ test-patch.sh --plugins="all" <other options>
+```
+
+`--plugins` also allows some basic "arithmetic":
+
+```bash
+$ test-patch.sh --plugins="all,-checkstyle,-findbugs" <other options>
+```
+
+This will enable all plug-ins for potential usage, except for checkstyle and 
findbugs.
+
+**NOTE: The examples in this section will assume that the necessary 
`--plugins` option has been set on the command line as appropriate for your 
particular installation.**
+
+This command will execute basic patch testing against a patch file stored in 
"filename":
+
+```bash
+$ cd <your repo>
+$ test-patch.sh --dirty-workspace --project=projectname <filename>
+```
+
+The `--dirty-workspace` flag tells test-patch that the repository is not clean 
and it is ok to continue.  By default, unit tests are not run since they may 
take a significant amount of time.
+
+To do turn them on, we need to provide the --run-tests option:
+
+
+```bash
+$ cd <your repo>
+$ test-patch.sh --dirty-workspace --run-tests <filename>
+```
+
+This is the same command, but now runs the unit tests.
+
+A typical configuration is to have two repositories.  One with the code you 
are working on and another, clean repository.  This means you can:
+
+```bash
+$ cd <workrepo>
+$ git diff master > /tmp/patchfile
+$ cd ../<testrepo>
+$ test-patch.sh --basedir=<testrepo> --resetrepo /tmp/patchfile
+```
+
+We used two new options here.  --basedir sets the location of the repository 
to use for testing.  --resetrepo tells test patch that it can go into 
**destructive** mode.  Destructive mode will wipe out any changes made to that 
repository, so use it with care!
+
+After the tests have run, there is a directory that contains all of the 
test-patch related artifacts.  This is generally referred to as the 
patchprocess directory.  By default, test-patch tries to make something off of 
/tmp to contain this content.  Using the `--patch-dir` option, one can specify 
exactly which directory to use.  This is helpful for automated precommit 
testing so that Jenkins or other automated workflow system knows where to look 
to gather up the output.
+
+For example:
+
+```bash
+$ test-patch.sh --jenkins --patch-dir=${WORKSPACE}/patchprocess 
--basedir=${WORKSPACE}/source ${WORKSPACE}/patchfile
+```
+
+... will trigger test-patch to run in fully automated Jenkins mode, using 
${WORKSPACE}/patchprocess as its scratch space, ${WORKSPACE}/source as the 
source repository, and ${WORKSPACE}/patchfile as the name of the patch to test 
against.
+
+# Build Tool
+
+Out of the box, test-patch is built to use maven.  But what if the project is 
built using something else, such as ant?
+
+```bash
+$ test-patch.sh (other options) --build-tool=ant
+```
+
+will tell test-patch to use ant instead of maven to drive the project.
+
+# Providing Patch Files
+
+## JIRA
+
+It is a fairly common practice within the Apache community to use Apache's 
JIRA instance to store potential patches.  As a result, test-patch supports 
providing just a JIRA issue number.  test-patch will find the *last* 
attachment, download it, then process it.
+
+For example:
+
+```bash
+$ test-patch.sh (other options) HADOOP-9905
+```
+
+... will process the patch file associated with this JIRA issue.
+
+If the Apache JIRA system is not in use, then override options may be provided 
on the command line to point to a different JIRA instance.
+
+```bash
+$ test-patch.sh --jira-issue-re='^PROJECT-[0-9]+$' 
--jira-base-url='https://example.com/jira' PROJECT-90
+```
+
+... will process the patch file attached to PROJECT-90 on the JIRA instance 
located on the example.com server.
+
+## GITHUB
+
+test-patch has some basic support for Github.  test-patch supports many forms 
of providing pull requests to work on:
+
+```bash
+$ test-patch.sh --github-repo=apache/pig 99
+```
+
+or
+
+```bash
+$ test-patch.sh https://github.com/apache/pig/pulls/99
+```
+
+or
+
+```bash
+$ test-patch.sh https://github.com/apache/pig/pulls/99.patch
+```
+
+... will process PR #99 on the apache/pig repo.
+
+## Generic URLs
+
+Luckily, test-patch supports  provide ways to provide unified diffs via URLs.
+
+For example:
+
+```bash
+$ test-patch.sh (other options) https://example.com/webserver/file.patch
+```
+
+... will download and process the file.patch from the example.com webserver.
+
+# Project-specific Capabilities
+
+Due to the extensible nature of the system, test-patch allows for projects to 
define project-specific rules which we call personalities.  (How to build those 
rules is covered elsewhere.) There are two ways to specify which personality to 
use:
+
+## Direct Method
+
+```bash
+$ test-patch.sh (other options) --personality=(filename)
+```
+
+This tells test-patch to use the personality in the given file.
+
+## Project Method
+
+However, test-patch can detect if it is a personality that is in its 
"personality" directory based upon the project name:
+
+```bash
+$ test-patch.sh (other options) --project=(project)
+```
+
+# MultiJDK
+
+For many projects, it is useful to test Java code against multiple versions of 
JDKs at the same time.  test-patch can do this with the --multijdkdirs option:
+
+```bash
+$ test-patch.sh (other options) --multijdkdirs="/j/d/k/1,/j/d/k/2"
+```
+
+Not all Java tests support this mode, but those that do will now run their 
tests with all of the given versions of Java consecutively (e.g., javac--the 
Java compliation test).  Tests that do not support MultiJDK mode (e.g., 
checkstyle, mvn install) will use JAVA\_HOME.
+
+NOTE: JAVA\_HOME is always appended to the list of JDKs in MultiJDK mode.  If 
JAVA\_HOME is in the list, it will be moved to the end.
+
+# Docker
+
+test-patch also has a mode to utilize Docker:
+
+```bash
+$ test-patch.sh (other options) --docker
+```
+
+This will do some preliminary setup and then re-execute itself inside a Docker 
container.  For more information on how to provide a custom Dockerfile, see the 
advanced guide.
+
+## In Closing
+
+test-patch has many other features and command line options for the basic 
user.  Many of these are self-explanatory.  To see the list of options, run 
test-patch.sh without any options or with --help.

http://git-wip-us.apache.org/repos/asf/yetus/blob/87014f42/asf-site-src/source/documentation/in-progress/precommit-bugsystems.md
----------------------------------------------------------------------
diff --git 
a/asf-site-src/source/documentation/in-progress/precommit-bugsystems.md 
b/asf-site-src/source/documentation/in-progress/precommit-bugsystems.md
new file mode 100644
index 0000000..95bf1de
--- /dev/null
+++ b/asf-site-src/source/documentation/in-progress/precommit-bugsystems.md
@@ -0,0 +1,87 @@
+<!---
+  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.
+-->
+
+Bug System Support
+==================
+
+test-patch has the ability to support multiple bug systems.  Bug tools have 
some extra hooks to fetch patches, line-level reporting, and posting a final 
report. Every bug system plug-in must have one line in order to be recognized:
+
+```bash
+add_bugsystem <pluginname>
+```
+
+* pluginname\_locate\_patch
+
+    - Given input from the user, download the patch if possible.
+
+* pluginname\_determine\_branch
+
+    - Using any heuristics available, return the branch to process, if 
possible.
+
+* pluginname\_determine\_issue
+
+    - Using any heuristics available, set the issue, bug number, etc, for this 
bug system, if possible.  This is typically used to fill in supplementary 
information in the final output table.
+
+* pluginname\_write\_comment
+
+    - Given text input, write this output to the bug system as a comment.  
NOTE: It is the bug system's responsibility to format appropriately.
+
+* pluginname\_linecomments
+
+    - This function allows for the system to write specific comments on 
specific lines if the bug system supports code review comments.
+
+* pluginname\_finalreport
+
+    - Write the final result table to the bug system.
+
+# Bugzilla Specific
+
+Currently, Bugzilla support is read-only.  To use it, the Bug ID must be 
preferenced with 'BZ:'.  For example:
+
+```bash
+$ test-patch.sh (other options) BZ:4
+```
+
+... will pull down Bugzilla ID #4.
+
+Using the `--bugzilla-base-url` on the command line or BUGZILLA\_BASE\_URL in 
a project's personality will define the location of the Bugzilla instance.  By 
default, it is https://bz.apache.org/bugzilla .
+
+# GitHub Specific
+
+GitHub supports the full range of functionality, including putting comments on 
individual lines.  Be aware, however, that test-patch.sh will require that 
GitHub PRs be fully rebased (i.e., a single commit) in many circumstances.
+
+By default, the GitHub plug-in assumes that https://github.com is the base URL 
for GitHub.  Enterprise users may override this with the `--github-base-url` 
for the normal web user interface and `--github-api-url` for the API URL.  
Personalities may use GITHUB\_API\_URL and GITHUB\_BASE\_URL.
+
+The specific repository on GitHub is defined with either `--github-repo` on 
the command line or GITHUB\_REPO in a personality.  It should take the form of 
"user/repo".
+
+In order to comment on issues or, depending upon the security setup of the 
repo, authentication credentials.  The GitHub plug-in supports two types:
+
+  * Token-based:  `--github-token` or GITHUB\_TOKEN
+
+  * Username/password: `--github-user`/ GITHUB\_USER , `--github-password` / 
GITHUB\_PASSWD
+
+Pull requests that are made off of a specific branch will switch the test repo 
to that branch, if permitted.  If the pull request references a JIRA issue that 
matches the given JIRA issue regexp in the Subject, the JIRA plug-in will also 
be invoked as needed.
+
+# JIRA Specific
+
+JIRA support allows both patch downloads and summary writes.  It also supports 
branch detection-based upon the name of the attached patch file.
+
+JIRA issues are invoked by matching the command line option to a specific 
regular expression as given by the `--jira-issue-re` option or via the 
JIRA\_ISSUE\_RE personality variable.  By default, the plug-in uses 
https://issues.apache.org/jira as the JIRA instance to use.  However that may 
be overwritten via the `--jira-base-url` option or personalities may define via 
JIRA\_URL.
+
+In order to write information on the issue, JIRA requires username and 
password authentication using the `--jira-user`/`--jira-password` options or 
the JIRA\_USER and JIRA\_PASSWORD variables in a personality.

http://git-wip-us.apache.org/repos/asf/yetus/blob/87014f42/asf-site-src/source/documentation/in-progress/precommit-buildtools.md
----------------------------------------------------------------------
diff --git 
a/asf-site-src/source/documentation/in-progress/precommit-buildtools.md 
b/asf-site-src/source/documentation/in-progress/precommit-buildtools.md
new file mode 100644
index 0000000..923bb86
--- /dev/null
+++ b/asf-site-src/source/documentation/in-progress/precommit-buildtools.md
@@ -0,0 +1,131 @@
+<!---
+  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.
+-->
+
+Build Tool Support
+===================
+
+test-patch has the ability to support multiple build tools.  Build tool 
plug-ins have some extra hooks to do source and object maintenance at key 
points. Every build tool plug-in must have one line in order to be recognized:
+
+```bash
+add_build_tool <pluginname>
+```
+
+# Global Variables
+
+* BUILDTOOLCWD
+
+    - If the build tool does not always run from the ${BASEDIR} and instead 
needs to change the current working directory to work on a specific module, 
then set this to true.  The default is false.
+
+* UNSUPPORTED\_TEST
+
+    - If pluginname\_modules\_worker is given a test type that is not 
supported by the build system, set UNSUPPORTED\_TEST=true.  If it is supported, 
set UNSUPPORTED\_TEST=false.
+
+For example, the gradle build tool does not have a standard way to execute 
checkstyle. So when checkstyle is requested, gradle\_modules\_worker sets 
UNSUPPORTED\_TEST to true and returns out of the routine.
+
+# Required Functions
+
+* pluginname\_buildfile
+
+    - This should be an echo of the file that controls the build system.  This 
is used for module determination. If the build system wishes to disable module 
determination, it should echo with no args.
+
+* pluginname\_executor
+
+    - This should be an echo of how to run the build tool, any extra 
arguments, etc.
+
+* pluginname\_modules\_worker
+
+    - Input is the branch and the test being run.  This should call 
`modules_workers` with the generic parts to run that test on the build system.  
For example, if it is convention to use 'test' to trigger 'unit' tests, then 
`module_workers` should be called with 'test' appended onto its normal 
parameters.
+
+* pluginname\_builtin_personality\_modules
+
+    - Default method to determine how to enqueue modules for processing.  Note 
that personalities may override this function.
+
+* pluginname\_builtin_personality\_file\_tests
+
+    - Default method to determine which tests to trigger.  Note that 
personalities may override this function.
+
+# Optional Functions
+
+* pluginname\_postapply\_install
+
+    - After the install step, this allows the build tool plug-in to do extra 
work.
+
+* pluginname\_parse\_args
+
+    - executed prior to any other above functions except for 
pluginname\_usage. This is useful for parsing the arguments passed from the 
user and setting up the execution environment.
+
+* pluginname\_initialize
+
+    - After argument parsing and prior to any other work, the initialize step 
allows a plug-in to do any precursor work, set internal defaults, etc.
+
+* pluginname\_count\_(test)\_probs
+
+    - Certain language test plug-ins require assistance from the build tool to 
count problems in the compile log due to some tools having custom handling for 
those languages.  The test plug-in name should be in the (test) part of the 
function name.
+
+* pluginname\_docker\_support
+
+    - If this build tool requires extra settings on the `docker run` command 
line, this function should be defined and write those options into a file 
called `${PATCH_DIR}/buildtool-docker-params.txt`.  This is particularly useful 
for things like mounting volumes for repository caches.
+
+       **WARNING**: Be aware that directories that do not exist MAY be created 
by root by Docker itself under certain conditions.  It is HIGHLY recommend that 
`pluginname_initialize` be used to create the necessary directories prior to be 
used in the `docker run` command.
+
+# Ant Specific
+
+## Command Arguments
+
+test-patch always passes -noinput to Ant.  This forces ant to be 
non-interactive.
+
+## Docker Mode
+
+In Docker mode, the `${HOME}/.ivy2` directory is shared amongst all 
invocations.
+
+# Gradle Specific
+
+The gradle plug-in always rebuilds the gradlew file and uses gradlew as the 
method to execute commands.
+
+In Docker mode, the `${HOME}/.gradle` directory is shared amongst all 
invocations.
+
+# Maven Specific
+
+## Command Arguments
+
+test-patch always passes --batch-mode to maven to force it into 
non-interactive mode.  Additionally, some tests will also force -fae in order 
to get all of messages/errors during that mode. Some tests are executed with 
-DskipTests.  Additional arguments should be handled via the personality.
+
+##  Per-instance Repositories
+
+Under many common configurations, maven (as of 3.3.3 and lower) may not 
properly handle being executed by multiple processes simultaneously, especially 
given that some tests require the `mvn install` command to be used.
+
+To assist, `test-patch` supports a `--mvn-custom-repo` option to set the 
`-Dmaven.repo.local` value to a per-instance repository directory keyed to the 
project and branch being used for the test.  If the `--jenkins` flag is also 
passed, the instance will be tied to the Jenkins `${EXECUTOR_NUMBER}` value.  
Otherwise, the instance value will be randomly generated via `${RANDOM}`.  If 
the repository has not been used in 30 days, it will be automatically deleted 
when any test run for that project (regardless of branch!).
+
+By default, `test-patch` uses `${HOME}/yetus-m2` as the base directory to 
store these custom maven repositories.  That location may be changed via the 
`--mvn-custom-repos-dir` option.
+
+The location of the `settings.xml` may be changed via the `--mvn-settings` 
option.
+
+## Docker Mode
+
+In Docker mode, `${HOME}/.m2` is shared amongst all invocations.  If 
`--mvn-custom-repos` is used, all of `--mvn-custom-repos-dir` is shared with 
all invocations.  The per-instance directory will be calculated and configured 
after Docker has launched.
+
+## Test Profile
+
+By default, test-patch will pass -Ptest-patch to Maven. This will allow you to 
configure special actions that should only happen when running underneath 
test-patch.
+
+## Custom Maven Tests
+
+* Maven will trigger a maven install as part of the precompile.
+* Maven will test eclipse integration as part of the postcompile.
+* If src/site is modified, maven site tests are executed.

http://git-wip-us.apache.org/repos/asf/yetus/blob/87014f42/asf-site-src/source/documentation/in-progress/precommit-glossary.md
----------------------------------------------------------------------
diff --git 
a/asf-site-src/source/documentation/in-progress/precommit-glossary.md 
b/asf-site-src/source/documentation/in-progress/precommit-glossary.md
new file mode 100644
index 0000000..acf5b23
--- /dev/null
+++ b/asf-site-src/source/documentation/in-progress/precommit-glossary.md
@@ -0,0 +1,42 @@
+<!---
+  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.
+-->
+
+# Glossary
+
+## Generic/outside definitions:
+
+Apache's [new contributor 
documentation](https://community.apache.org/contributors/) and Maven's 
[glossary](https://maven.apache.org/glossary.html) are great places to start if 
you are new to Apache or Maven.
+
+* Module
+
+  Almost the same meaning as "sub-project" on Maven.
+
+## test-patch specific
+
+* Personality
+
+  A chunk of shell code that tells test-patch this particular project's needs 
and special requirements
+
+* Plug-ins
+
+  Shell code snippets that define new, not built-in test types.
+
+* Precommit
+
+  An automated process that verifies a patch is "good" prior to a committer 
looking at it.

http://git-wip-us.apache.org/repos/asf/yetus/blob/87014f42/asf-site-src/source/documentation/in-progress/precommit-patchnames.md
----------------------------------------------------------------------
diff --git 
a/asf-site-src/source/documentation/in-progress/precommit-patchnames.md 
b/asf-site-src/source/documentation/in-progress/precommit-patchnames.md
new file mode 100644
index 0000000..f976b0b
--- /dev/null
+++ b/asf-site-src/source/documentation/in-progress/precommit-patchnames.md
@@ -0,0 +1,37 @@
+<!---
+  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 use Apache Yetus to process your patch. It supports the following patterns 
and
+procedures for patch file names:
+
+JIRA:
+
+If JIRA support is configured, attach the patch to the given ISSUE and
+click 'Submit Patch'.  The patch file should be named one of:
+
+  * ISSUE.patch
+  * ISSUE.###.patch
+  * ISSUE.branch.###.patch
+  * ISSUE-branch-###.patch
+  * ISSUE.##.branch.patch
+  * ISSUE-branch.##.patch
+
+If Github support is also configured, a comment that contains a link to a Pull 
Request's
+patch file (e.g., https://github.com/user/repo/pull/1.patch) will pull the 
patch from
+the given Github PR.

http://git-wip-us.apache.org/repos/asf/yetus/blob/87014f42/asf-site-src/source/documentation/in-progress/precommit-smart-apply-patch.md
----------------------------------------------------------------------
diff --git 
a/asf-site-src/source/documentation/in-progress/precommit-smart-apply-patch.md 
b/asf-site-src/source/documentation/in-progress/precommit-smart-apply-patch.md
new file mode 100644
index 0000000..74dc0c3
--- /dev/null
+++ 
b/asf-site-src/source/documentation/in-progress/precommit-smart-apply-patch.md
@@ -0,0 +1,51 @@
+<!---
+  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.
+-->
+
+smart-apply-patch
+=================
+
+`smart-apply-patch` is a command to help apply patches easily.  It uses the 
same plug-ins and many of the same options as test-patch.  This means that it 
can, for example, fetch patches from JIRA and apply them to a local source tree.
+
+# Usage
+
+Its simpliest form is used when a patch is stored in a local file:
+
+```bash
+$ smart-apply-patch patch
+```
+
+This will cause the command to run through various ways to verify and then 
apply the patch to the current repo, including deducing a patch level.
+
+Perhaps you just want to see if the patch even applies without changing your 
local repo.  The `--dry-run` option will just test for applicability:
+
+```bash
+$ smart-apply-patch --dry-run patch
+```
+
+For committers of projects, there is a special mode:
+
+```bash
+$ smart-apply-patch --committer patch
+```
+
+that in addition to applying the patch will also attempt to:
+
+* use `--whitespace=fix` mode
+* add all newly created files in the repo
+* use `--signoff` and commit the change via git-am

http://git-wip-us.apache.org/repos/asf/yetus/blob/87014f42/asf-site-src/source/documentation/in-progress/precommit-testformats.md
----------------------------------------------------------------------
diff --git 
a/asf-site-src/source/documentation/in-progress/precommit-testformats.md 
b/asf-site-src/source/documentation/in-progress/precommit-testformats.md
new file mode 100644
index 0000000..41dbb11
--- /dev/null
+++ b/asf-site-src/source/documentation/in-progress/precommit-testformats.md
@@ -0,0 +1,35 @@
+<!---
+  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.
+-->
+
+Test Format Support
+==================
+
+test-patch has the ability to support multiple test formats. Test formats have 
some extra hooks to process the output of test tools and write the results to 
some tables. Every test format plug-in must have one line in order to be 
recognized:
+
+```bash
+add_test_format <pluginname>
+```
+
+* pluginname\_process\_tests
+
+    - Given a path to the log file and tested module name, parse that file and 
store the test result into global variables and/or files.
+
+* pluginname\_finalize\_results
+
+    - Using the results stored by pluginname\_process\_tests, write them to 
the test result table and/or the footer table for reporting.

http://git-wip-us.apache.org/repos/asf/yetus/blob/87014f42/asf-site-src/source/documentation/in-progress/releasedocmaker.md
----------------------------------------------------------------------
diff --git a/asf-site-src/source/documentation/in-progress/releasedocmaker.md 
b/asf-site-src/source/documentation/in-progress/releasedocmaker.md
new file mode 100644
index 0000000..2a5f0cd
--- /dev/null
+++ b/asf-site-src/source/documentation/in-progress/releasedocmaker.md
@@ -0,0 +1,134 @@
+<!---
+  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.
+-->
+
+releasedocmaker
+===============
+
+* [Purpose](#Purpose)
+* [Basic Usage](#Basic_Usage)
+* [Changing the Header](#Changing_the_Header)
+* [Multiple Versions](#Multiple_Versions)
+* [Unreleased Dates](#Unreleased_Dates)
+* [Lint Mode](#Lint_Mode)
+* [Index Mode](#Index_Mode)
+
+# Purpose
+
+Building changelog information in a form that is human digestible but still 
containing as much useful information is difficult.  Many attempts over the 
years have resulted in a variety of methods that projects use to solve this 
problem:
+
+* JIRA-generated release notes from the "Release Notes" button
+* Manually modified CHANGES file
+* Processing git log information
+
+All of these methods have their pros and cons.  Some have issues with 
accuracy.  Some have issues with lack of details. None of these methods seem to 
cover all of the needs of many projects and are full of potential pitfalls.
+
+In order to solve these problems, releasedocmaker was written to automatically 
generate a changelog and release notes by querying Apache's JIRA instance.
+
+# Basic Usage
+
+Minimally, the name of the JIRA project and a version registered in JIRA must 
be provided:
+
+```bash
+$ releasedocmaker.py --project (project) --version (version)
+```
+
+This will query Apache JIRA, generating two files in a directory named after 
the given version in an extended markdown format which can be processed by both 
mvn site and GitHub.
+
+* CHANGES.(version).md
+
+This is similar to the JIRA "Release Notes" button but is in tabular format 
and includes the priority, component, reporter, and contributor fields.  It 
also highlights Incompatible Changes so that readers know what to look out for 
when upgrading. The top of the file also includes the date that the version was 
marked as released in JIRA.
+
+
+* RELEASENOTES.(version).md
+
+If your JIRA project supports the release note field, this will contain any 
JIRA mentioned in the CHANGES log that is either an incompatible change or has 
a release note associated with it.  If your JIRA project does not support the 
release notes field, this will be the description field.
+
+For example, to build the release documentation for HBase v1.2.0...
+
+```bash
+$ releasedocmaker.py --project HBASE --version 1.2.0
+```
+
+... will create a 1.2.0 directory and inside that directory will be 
CHANGES.1.2.0.md and RELEASENOTES.1.2.0.md .
+
+By default, release notes are expected to be in plain text.  However, you can 
write them in markdown if you include a header at the top of your release note:
+
+```xml
+<!-- markdown -->
+remaining text
+```
+
+# Changing the Header
+
+By default, it will use a header that matches the project name.  But that is 
kind of ugly and the case may be wrong.  Luckily, the title can be changed:
+
+```bash
+$ releasedocmaker.py --project HBASE --version 1.2.0 --projecttitle "Apache 
HBase"
+```
+
+Now instead of "HBASE", it will use "Apache HBASE" for some titles and headers.
+
+# Multiple Versions
+
+The script can also generate multiple versions at once, by
+
+```bash
+$ releasedocmaker.py --project HBASE --version 1.0.0 --version 1.2.0
+```
+
+This will create the files for versions 1.0.0 and versions 1.2.0 in their own 
directories.
+
+But what if the version numbers are not known?  releasedocmaker can also 
generate version data based upon ranges:
+
+```bash
+$ releasedocmaker.py --project HBASE --version 1.0.0 --version 1.2.0 --range
+```
+
+In this form, releasedocmaker will query JIRA, discover all versions that 
alphabetically appear to be between 1.0.0 and 1.2.0, inclusive, and generate 
all of the relative release documents.  This is especially useful when 
bootstrapping an existing project.
+
+# Unreleased Dates
+
+For released versions, releasedocmaker will pull the date of the release from 
JIRA.  However, for unreleased versions it marks the release as "Unreleased". 
This can be inconvenient when actually building a release and wanting to 
include it inside the source package.
+
+The --usetoday option can be used to signify that instead of using Unreleased, 
releasedocmaker should use today's date.
+
+```bash
+$ releasedocmaker.py --project HBASE --version 1.0.0 --usetoday
+```
+
+After using this option and release, don't forget to change JIRA's release 
date to match!
+
+# Lint Mode
+
+In order to ensure proper formatting while using mvn site, releasedocmaker 
puts in periods (.) for fields that are empty or unassigned.  This can be 
unsightly and not proper for any given project.  There are also other things, 
such as missing release notes for incompatible changes, that are less than 
desirable.
+
+In order to help release managers from having to scan through potentially 
large documents, releasedocmaker features a lint mode, triggered via --lint:
+
+```bash
+$ releasedocmaker.py --project HBASE --version 1.0.0 --lint
+```
+
+This will do the normal JIRA querying, looking for items it considers 
problematic.  It will print the information to the screen and then exit with 
either success or failure, depending upon if any issues were discovered.
+
+# Index Mode
+
+There is basic support for an autoindexer.  It will create two files that 
contain links to all directories that have a major.minor.micro-style version 
numbering system, where all fields are numeric.
+
+  * index.md: a file suitable for conversion to HTML via mvn site
+  * README.md: a file suitable for display on Github and other Markdown 
rendering websites

http://git-wip-us.apache.org/repos/asf/yetus/blob/87014f42/asf-site-src/source/documentation/latest.html.md
----------------------------------------------------------------------
diff --git a/asf-site-src/source/documentation/latest.html.md 
b/asf-site-src/source/documentation/latest.html.md
deleted file mode 100644
index bd61a3c..0000000
--- a/asf-site-src/source/documentation/latest.html.md
+++ /dev/null
@@ -1,34 +0,0 @@
-<!---
-  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.
--->
-
-# Yetus Precommit
-
-The Yetus Precommit Patch Tester allows projects to codify their patch 
acceptance criteria and then evaluate incoming contributions prior to review by 
a committer.
-
-* Take a quick look at [our glossary of terms](precommit-glossary) to ensure 
you are familiar with the ASF and Maven jargon we'll use as terminology 
specific to this project.
-* For an overview of Yetus' philosophy on testing contributions and how 
evaluation is performed, see our [overview](precommit-architecture).
-* To get started on your project, including an explanation of what we'll 
expect in a runtime environment and what optional utilities we'll leverage, 
read through the [basic usage guide](precommit-basic).
-* If your project has advanced requirements such as module relationships not 
expressed in Maven, special profiles, or a need on os-specific prerequisites 
not managed by Maven then you'll need to use our [advanced usage 
guide](precommit-advanced).
-
-There is also documentation on [build systems](precommit-buildtools), [bug 
systems](precommit-bugsystems) and [test formats](precommit-testformats).
-
-# Yetus Release Doc Maker
-
-The Release Documentation Maker allows projects to generate nicely formated 
Markdown Changelogs and Release Notes based upon JIRA. You can view that
-documenation [here](releasedocmaker).

http://git-wip-us.apache.org/repos/asf/yetus/blob/87014f42/asf-site-src/source/documentation/latest/precommit-advanced.md
----------------------------------------------------------------------
diff --git a/asf-site-src/source/documentation/latest/precommit-advanced.md 
b/asf-site-src/source/documentation/latest/precommit-advanced.md
deleted file mode 100644
index 638f7d2..0000000
--- a/asf-site-src/source/documentation/latest/precommit-advanced.md
+++ /dev/null
@@ -1,243 +0,0 @@
-<!---
-  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.
--->
-
-test-patch
-==========
-
-* [Docker Support](#Docker_Support)
-* [Plug-ins](#Plug-ins)
-* [Personalities](#Personalities)
-* [Important Variables](#Important_Variables)
-
-# Docker Support
-
-By default, test-patch runs in the same shell where it was launched.  It can 
alternatively use Docker to launch itself into a container.  This is 
particularly useful if running under a QA environment that does not provide all 
the necessary binaries. For example, if the patch requires a newer version of 
Java.
-
-The `--docker` parameter tells test-patch to run in Docker mode. The 
`--dockerfile` parameter allows one to provide a custom Dockerfile. The 
Dockerfile should contain all of the necessary binaries and tooling needed to 
run the test.  However be aware that test-patch will copy this file and append 
its necessary hooks to re-launch itself prior to executing docker.
-
-NOTE: If you are using Boot2Docker, you must use directories under /Users 
(OSX) or C:\Users (Windows) as the base and patchprocess directories (specified 
by the --basedir and --patch-dir options respectively), because automatically 
mountable directories are limited to them. See [the Docker 
documentation](https://docs.docker.com/userguide/dockervolumes/#mount-a-host-directory-as-a-data-volume).
-
-Dockerfile images will be named with a test-patch prefix and suffix with 
either a date or a git commit hash. By using this information, test-patch will 
automatically manage broken/stale container images that are hanging around if 
it is run in --jenkins mode.  In this way, if Docker fails to build the image, 
the disk space should eventually be cleaned and returned back to the system.
-
-
-# Plug-ins
-
-test-patch allows one to add to its basic feature set via plug-ins.  There is 
a directory called test-patch.d off of the directory where test-patch.sh lives. 
 Inside this directory one may place some bash shell fragments that, if setup 
with proper functions, will allow for test-patch to call it as necessary.  
Different plug-ins have specific functions for that particular functionality.  
In this document, the common functions available to all/most plug-ins are 
covered.  Test plugins are covered below. See other documentation for pertinent 
information for the other plug-in types.
-
-## Common Plug-in Functions
-
-Every plug-in must have one line in order to be recognized, usually an 'add' 
statement.  Test plug-ins, for example, have this statement:
-
-```bash
-add_test_type <pluginname>
-```
-
-This function call registers the `pluginname` so that test-patch knows that it 
exists.  Plug-in names must be unique across all the different plug-in types.  
Additionally, the 'all' plug-in is reserved.  The `pluginname` also acts as the 
key to the custom functions that you can define. For example:
-
-```bash
-function pluginname_filefilter
-```
-
-defines the filefilter for the `pluginname` plug-in.
-
-Similarly, there are other functions that may be defined during the test-patch 
run:
-
-    HINT: It is recommended to make the pluginname relatively small, 10 
characters at the most.  Otherwise, the ASCII output table may be skewed.
-
-* pluginname\_initialize
-    - After argument parsing and prior to any other work, the initialize step 
allows a plug-in to do any precursor work, set internal defaults, etc.
-
-* pluginname\_usage
-    - executed when the help message is displayed. This is used to display the 
plug-in specific options for the user.
-
-* pluginname\_parse\_args
-    - executed prior to any other above functions except for 
pluginname\_usage. This is useful for parsing the arguments passed from the 
user and setting up the execution environment.
-
-* pluginname\_precheck
-    - executed prior to the patch being applied but after the git repository 
is setup.  Returning a fail status here will exit test-patch.
-
-* pluginname\_precompile
-    - executed prior to the compilation part of the lifecycle. This is useful 
for doing setup work required by the compilation process.
-
-* pluginname\_compile
-    - executed immediately after the actual compilation. This is step is 
intended to be used to verify the results and add extra checking of the compile 
phase and it's stdout/stderr.
-
-* pluginname\_postcompile
-    - This step happens after the compile phase.
-
-* pluginname\_rebuild
-    - Any non-unit tests that require the source to be rebuilt in a 
destructive way should be run here.
-
-
-## Plug-in Importation
-
-Plug-ins are imported from several key directories:
-
-* core.d is an internal-to-Yetus directory that first loads the basic Yetus 
library, followed by the common routines used by all of the precommit shell 
code.  This order is dictated by prefixing the plug-in files with a number.  
Other files in this directory are loaded in shell collated order.
-
-* personality contains bundled personalities for various projects.  These will 
be imported individually based upon either a project name or if specifically 
identified with the `--personality` flag.
-
-* test-patch.d contains all of the optional, bundled plug-ins.  These are 
imported last and in shell collated order.
-
-If the `--skip-system-plugins` flag is passed, then only core.d is imported.
-
-## Test Plug-ins
-
-Plug-ins geared towards independent tests are registed via:
-
-
-```bash
-add_test_type <pluginname>
-```
-
-+ pluginname\_filefilter
-    - executed while determine which files trigger which tests.  This function 
should use `add_test pluginname` to add the plug-in to the test list.
-
-* pluginname\_tests
-    - executed after the unit tests have completed.
-
-
-# Personalities
-
-## Configuring for Other Projects
-
-It is impossible for any general framework to be predictive about what types 
of special rules any given project may have, especially when it comes to 
ordering and Maven profiles.  In order to direct test-patch to do the correct 
action, a project `personality` should be added that enacts these custom rules.
-
-A personality consists of two functions. One that determines which test types 
to run and another that allows a project to dictate ordering rules, flags, and 
profiles on a per-module, per-test run.
-
-There can be only **one** of each personality function defined.
-
-## Global Definitions
-
-Globals for personalities should be defined in the `personality_globals` 
function.  This function is called *after* the other plug-ins have been 
imported.  This allows one to configure any settings for plug-ins that have 
been imported safely:
-
-```bash
-funciton personality_globals
-{
-  PATCH_BRANCH_DEFAULT=master
-  GITHUB_REPO="apache/yetus"
-}
-```
-
-## Test Determination
-
-The `personality_file_tests` function determines which tests to turn on based 
upon the file name.  It is relatively simple.  For example, to turn on a full 
suite of tests for Java files:
-
-```bash
-function personality_file_tests
-{
-  local filename=$1
-
-  if [[ ${filename} =~ \.java$ ]]; then
-    add_test findbugs
-    add_test javac
-    add_test javadoc
-    add_test mvninstall
-    add_test unit
-  fi
-
-}
-```
-
-The `add_test` function is used to activate the standard tests.  Additional 
plug-ins (such as checkstyle), will get queried on their own.
-
-## Module & Profile Determination
-
-Once the tests are determined, it is now time to pick which 
[modules](precommit-glossary.md#genericoutside-definitions) should get used.  
That's the job of the `personality_modules` function.
-
-```bash
-function personality_modules
-{
-
-    clear_personality_queue
-
-...
-
-    personality_enqueue_module <module> <flags>
-
-}
-```
-
-It takes exactly two parameters `repostatus` and `testtype`.
-
-The `repostatus` parameter tells the `personality` function exactly what state 
the source repository is in.  It can only be in one of two states:  `branch` or 
`patch`.  `branch` means the patch has not been applied.  The `patch` state is 
after the patch has been applied.
-
-The `testtype` state tells the personality exactly which test is about to be 
executed.
-
-In order to communicate back to test-patch, there are two functions for the 
personality to use.
-
-The first is `clear_personality_queue`. This removes the previous test's 
configuration so that a new module queue may be built. Custom 
`personality_modules` will almost always want to do this as the first action.
-
-The second is `personality_enqueue_module`.  This function takes two 
parameters.  The first parameter is the name of the module to add to this 
test's queue.  The second parameter is an option list of additional flags to 
pass to Maven when processing it. `personality_enqueue_module` may be called as 
many times as necessary for your project.
-
-    NOTE: A module name of . signifies the root of the repository.
-
-For example, let's say your project uses a special configuration to skip unit 
tests (-DskipTests).  Running unit tests during a javadoc build isn't very 
useful and wastes a lot of time. We can write a simple personality check to 
disable the unit tests:
-
-```bash
-function personality_modules
-{
-    local repostatus=$1
-    local testtype=$2
-
-    if [[ ${testtype} == 'javadoc' ]]; then
-        personality_enqueue_module . -DskipTests
-        return
-    fi
-    ...
-
-```
-
-This function will tell test-patch that when the javadoc test is being run, do 
the documentation build at the base of the source repository and make sure the 
-DskipTests flag is passed to our build tool.
-
-## Enabling Plug-ins
-
-Personalities can set the base list of plug-ins to enable and disable for 
their project via the `personality_plugins` function. Just call it with the 
same pattern as the `--plugins` command line option:
-
-```bash
-personality_plugins "all,-checkstyle,-findbugs,-asflicense"
-```
-
-This list is used if the user does not provide a list of plug-ins.
-
-# Important Variables
-
-There are a handful of extremely important system variables that make life 
easier for personality and plug-in writers.  Other variables may be provided by 
individual plug-ins.  Check their development documentation for more 
information.
-
-* BUILD\_NATIVE will be set to true if the system has requested that 
non-JVM-based code be built (e.g., JNI or other compiled C code). Under 
Jenkins, this is always true.
-
-* BUILDTOOL specifies which tool is currently being used to drive compilation. 
 Additionally, many build tools define xyz\_ARGS to pass on to the build tool 
command line. (e.g., MAVEN\_ARGS if maven is in use).  Projects may set this in 
their personality.  NOTE: today, only one build tool at a time is supported.  
This may change in the future.
-
-* CHANGED\_FILES is a list of all files that appear to be added, deleted, or 
modified in the patch.
-
-* CHANGED\_MODULES is a list of all modules that house all of the 
CHANGED\_FILES.  Be aware that the root of the source tree is reported as '.'.
-
-* GITHUB\_REPO is to help test-patch when talking to Github.  If test-patch is 
given just a number on the command line, it will default to using this repo to 
determine the pull request.
-
-* HOW\_TO\_CONTRIBUTE should be a URL that points to a project's on-boarding 
documentation for new users. Currently, it is used to suggest a review of patch 
naming guidelines. Since this should be project specific information, it is 
useful to set in a project's personality.
-
-* JIRA\_ISSUE\_RE is to help test-patch when talking to JIRA.  It helps 
determine if the given project is appropriate for the given JIRA issue.
-
-* MODULE and other MODULE\_\* are arrays that contain which modules, the 
status, etc, to be operated upon. These should be treated as read-only by 
plug-ins.
-
-* PATCH\_BRANCH\_DEFAULT is the name of the branch in the git repo that is 
considered the master.  This is useful to set in personalities.
-
-* PATCH\_DIR is the name of the temporary directory that houses test-patch 
artifacts (such as logs and the patch file itself)
-
-* TEST\_PARALLEL if parallel unit tests have been requested. Project 
personalities are responsible for actually enabling or ignoring the request. 
TEST\_THREADS is the number of threads that have been requested to run in 
parallel.

http://git-wip-us.apache.org/repos/asf/yetus/blob/87014f42/asf-site-src/source/documentation/latest/precommit-architecture.md
----------------------------------------------------------------------
diff --git a/asf-site-src/source/documentation/latest/precommit-architecture.md 
b/asf-site-src/source/documentation/latest/precommit-architecture.md
deleted file mode 100644
index 33aed6b..0000000
--- a/asf-site-src/source/documentation/latest/precommit-architecture.md
+++ /dev/null
@@ -1,107 +0,0 @@
-<!---
-  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.
--->
-
-# Some Philosophy
-
-* Everyone's time is valuable.  The quicker contributors can get feedback and 
iterate, the more likely and faster their contribution will get checked in.  A 
committer should be able to focus on the core issues of a contribution rather 
than details that can be determined automatically.
-
-* Precommit checks should be fast.  There is no value in testing parts of the 
source tree that are not immediately impacted by a change.  Unit testing is the 
target. They are not a replacement for full builds or integration tests.
-
-* Many open source projects have a desire to have this capability.  Why not 
generalize a solution?
-
-* In many build systems (especially with maven), a modular design has been 
picked.  Why not leverage that design to make checks faster?
-
-* Projects that use the same language will, with a high degree of certainty, 
benefit from the same types of checks.
-
-* Portability matters.  Tooling should be as operating system and language 
agnostic as possible.
-
-# Phases
-
-test-patch works effectively under several different phases:
-
-## Initialize
-
-This is where test-patch configures and validates the environment.  Some 
things done in this phase:
-
-* Defaults
-* Parameter handling
-* Importing plug-ins and personalities
-* Docker container launching
-* Re-exec support
-* Patch file downloading
-* git repository management (fresh pull, branch switching, etc)
-
-## Precheck
-
-Checks done here are *fatal*.
-
-This acts as a verification of all of the setup parts and is the final place 
to short-cut the full test cycle.  The most significant built-in check done 
here is verifying the patch file is a valid.
-
-## Patch File Tests
-
-Tests that only require the patch file are run.  Note that the repository is 
still from the initial checkout!
-
-## Compile Cycle (Branch)
-
-When compilation must be done, we follow these five steps:
-
-* The list of modules that require analysis is built.
-* A precompile step to set things up for the actual compile
-* The actual compile
-* A postcompile to do analysis on the output of that compile phase
-* A rebuild phase to run tests that require recompiles
-
-The first time this is done is with the pristine checkout.  This is called the 
"branch compile".  For this pass, this is where the 'before' work is handled.  
Some things that typically get checked in this phase:
-
-* The first pass of files and modules that will get patched
-* Validation and information gathering of the source tree pre-patch
-* javadoc, scaladoc, etc
-
-## Distribution Clean
-
-This step is to wipe the repository clean back to a pristine state such that 
the previous cycle will not impact the next cycle.
-
-## Patch Application
-
-The patch gets applied.
-
-## Compile Cycle (Patch)
-
-Now that the patch has been applied the steps to compile we outlined in the 
compilation (branch) phase are repeated but with the patch applied. This is 
where a lot of 'after' checks are performed.
-
-## Unit Tests
-
-Since unit tests are generally the slowest part of the precommit process, they 
are run last.  At this point, all the prerequisites to running them should be 
in place and ready to go.
-
-## Reporting
-
-Finally, the results are reported to the screen and, optionally, to JIRA 
and/or whatever bug system has been configured.
-
-# Test Flow
-
-The basic workflow for many of the sub-items in individual phases are:
-
-1. print a header, so the end user knows that something is happening
-1. verify if the test is needed.  If so, continue on.  Otherwise, return 
success and let the next part of the phase execute.
-1. Ask the personality about what modules and what flags should get used
-1. Execute maven (or some other build tool) in the given modules with the 
given flags. Log the output and record the time and result code.
-1. Do any extra work as appropriate (diffs, counts, etc) and either accept the 
status and message given by the maven run or change the vote, message, log 
file, etc, based upon this extra work.
-1. Add the outcome(s) to the report generator
-
-As one can see, the modules list is one of the key inputs into what actually 
gets executed.  As a result, projects must full flexibility in either adding, 
modifying, or even removing modules from the test list.  If a personality 
removes the entire list of modules, then that test should just be ignored.

Reply via email to