################################################################################
#       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 release
candidates from the common source code maintained in DBCP's svn trunk.

0.  Prepare and validate changes, testing with JDK 1.4 and 1.5 using Ant
    and the code in trunk.   

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

3.  Regenerate download_dbcp.xml using the commons-build plugin:
    mvn commons:download-page

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

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

6.  Check in all changes to trunk; re-run tests.

    Now we create a branch which will be used to set up the JDBC3
    version of the code. This can be done in two different ways:
    
7a. Create the branch directly in SVN:

    [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/trunk \
    https://svn.apache.org/repos/asf/commons/proper/dbcp/branches/DBCP_1_3_x_BRANCH

8a. Check out the branch into a local workspace:

    svn co https://svn.apache.org/repos/asf/commons/proper/dbcp/branches/DBCP_1_3_x_BRANCH
    
    Alternatively:
    
7b.  Check out DBCP fully - i.e., trunk, branches, tags.  

8b.  From the top level of the checkout, execute
    svn cp trunk branches/DBCP_1_3_x_BRANCH
    svn commit -m "Created 1.3.x compatibility release branch."
    (where x is the final digit of the new release number)

    Whichever method was chosen above, continue as follows:

9.  From the 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

10. From the 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."

11a. Create release tags directly in SVN.

    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/trunk \
        https://svn.apache.org/repos/asf/commons/proper/dbcp/tags/DBCP_1_4_x_RCy

11b. Create release tags from workspace.  From the top-level dbcp directory
    svn cp branches/DBCP_1_3_x_BRANCH tags/DBCP_1_3_x_RCy  (where x is dot level, y is RC number)
    svn cp trunk tags/DBCP_1_4_x_RCy
    svn commit -m "Tagging 1.3.x RCy" tags/DBCP_1_3_x_RCy
    svn commit -m "Tagging 1.4.x RCy" tags/DBCP_1_4_x_RCy

12. From a fresh checkout of the DBCP_1_4_x_RCy tag, using JDK 1.6 execute
    mvn -Prc install

13. From a fresh checkout of the DBCP_1_3_x_RCy tag using JDK 1.5,
    mvn -Prc install

14. Collect the maven released artifacts from the 1.3.x/1.4.x dbcp directories
    in your local repo and the tarballs/zips from the /target directories
    in trunk and the 1.3 branch.

