################################################################################
#       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.
################################################################################
This document describes the process used to produce DBCP 1.3.x/1.4.x/1.5.x release
candidates from the common source code maintained in DBCP's DBCP_1_5_x branch.

0.  Prepare and validate changes, testing with JDK 1.4, 1.5, 1.6 and 1.7 using Ant
    and the code in DBCP_1_5_x. The ant build in DBCP_1_5_x/build.xml should
    pickup the jdk version and filter sources accordingly.

1.  Change the version numbers in pom.xml, build.xml,
    pom-1.3.xml, pom-1.4.xml, build-1.3.xml and build-1.4.xml to the
    new .x version.

2.  Modify the main DBCP web page to include links to the new versions and
    also modify the download page to include the new versions.

3.  Regenerate RELEASE_NOTES.txt
    mvn changes:announcement-generate
    mv target/announcement/dbcp-release-notes.vm RELEASE-NOTES.txt
    The formatting may need some tweaking. Check RELEASE-Notes.txt
    in.

4.  Test artifact generation from trunk:
    mvn -Prc install
    Inspect the 1.5.x tarballs in /target and the maven artifacts in 
    your local maven repo.  Fix any problems.

5.  Check in all changes to DBCP_1_5_x; re-run tests.

6.  Now we create branches which will be used to set up the 1.3.x and 1.4.x
    versions of the code.

    [If necessary, delete any existing such branch first]
    
    svn copy -m "Create 1.3.x compatibility release branch." \
    https://svn.apache.org/repos/asf/commons/proper/dbcp/branches/DBCP_1_5_x \
    https://svn.apache.org/repos/asf/commons/proper/dbcp/branches/DBCP_1_3_x_BRANCH
    
    svn copy -m "Create 1.4.x compatibility release branch." \
    https://svn.apache.org/repos/asf/commons/proper/dbcp/branches/DBCP_1_5_x \
    https://svn.apache.org/repos/asf/commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH

7.  Check out the branches into a local workspace:

    svn co https://svn.apache.org/repos/asf/commons/proper/dbcp/branches/DBCP_1_3_x_BRANCH
    svn co https://svn.apache.org/repos/asf/commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH
    
8.  Modify build files in the branches:
    From DBCP_1_3_x_BRANCH
    svn rm pom.xml
    svn rm build.xml
    svn rm findbugs-exclude-filter.xml
    svn mv build-1.3.xml build.xml
    svn mv pom-1.3.xml pom.xml
    
    From DBCP_1_4_x_BRANCH
    svn rm pom.xml
    svn rm build.xml
    svn rm findbugs-exclude-filter.xml
    svn mv build-1.4.xml build.xml
    svn mv pom-1.4.xml pom.xml

9.  Filter the sources in the compatibility branches
    From DBCP_1_3_x_BRANCH, using JDK 1.4 or 1.5
    cp build.properties.sample build.properties (make sure all referenced jars exist)
    ant filter-sources
    ant clean test
    mvn clean site
    svn commit -m "Filtered sources to remove JDBC 4+ methods."
    
    From DBCP_1_4_x_BRANCH, using JDK 1.6
    cp build.properties.sample build.properties (make sure all referenced jars exist)
    ant filter-sources
    ant clean test
    mvn clean site
    svn commit -m "Filtered sources to remove JDBC 4.1 methods."

10. Create release tags:

    svn cp -m "Tagging 1.3.x RCy" \
        https://svn.apache.org/repos/asf/commons/proper/dbcp/branches/DBCP_1_3_x_BRANCH \
        https://svn.apache.org/repos/asf/commons/proper/dbcp/tags/DBCP_1_3_x_RCy
    (where x is dot level, y is RC number)
    svn cp -m "Tagging 1.4.x RCy" \
        https://svn.apache.org/repos/asf/commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH \
        https://svn.apache.org/repos/asf/commons/proper/dbcp/tags/DBCP_1_4_x_RCy
    svn cp -m "Tagging 1.5.x RCy" \
        https://svn.apache.org/repos/asf/commons/proper/dbcp/branches/DBCP_1_5_x_BRANCH \
        https://svn.apache.org/repos/asf/commons/proper/dbcp/tags/DBCP_1_5_x_RCy

11. Create RC artifacts:

    From a fresh checkout of the DBCP_1_5_x_RCy tag, using JDK 1.7 execute
    mvn -Prc install
    
    From a fresh checkout of the DBCP_1_4_x_RCy tag using JDK 1.6,
    mvn -Prc install
    
    From a fresh checkout of the DBCP_1_3_x_RCy tag using JDK 1.5,
    mvn -Prc install   
    

12. Collect the maven released artifacts from the 1.3.x/1.4.x/1.5.x dbcp directories
    in your local repo and the tarballs/zips from the /target directories in the branches.

