JBoss JavaEE Specs Git Migration

    Note: This work is now complete, and is kept here for reference purposes only.


    Background Info

     

    Current localtion in svn:

     

    https://svn.jboss.org/repos/jbossas/projects/specs/

    http://anonsvn.jboss.org/repos/jbossas/projects/specs/

     

    Each spec project has it's own trunk directory under "trunk".  Tags for all specs releases are under the "tags" directory and use the name "<project-name>-<version>"

     

    For example the trunk for the EJB 3.1 spec is located here:

    https://svn.jboss.org/repos/jbossas/projects/specs/trunk/jboss-ejb-api_3.1_spec/

     

    And the tag for the 1.0.0.Final release is here:

    https://svn.jboss.org/repos/jbossas/projects/specs/tags/jboss-ejb-api_3.1_spec-1.0.0.Final/

     

    Git repositories do not normally contain more than one project, and tags can only be applied to an entire repository (not to a single path in the repository like svn).  So the specs projects should be divided into a separate git repository for each spec version.

     

    The git-svn tool can be used to migrate an svn repository to git, however, there are some limitations regarding how git-svn converts svn tags into git tags.  There is no simple way to select only certain tags from the svn "tags" directory to be imported into Git tags.  So the tag conversion should be done manually.

     

    Current Status

    Create Git Repo - A Git repository needs to be created and pushed to Github

    Needs Tags - The history has been pushed to github, but the tags still need to be created

    Complete - The migration is complete

    Will Not Migrate - The project will not be migrated to git

    ? - Requires some discussion before migration

     

    Spec
    StatusNotes
    jboss-annotations-api_1.1_specComplete

    jboss-connector-api_1.5_specCompleteMerged with con 1.6
    jboss-connector-api_1.6_specComplete
    jboss-ejb-api_3.0_specCompleteMerged with ejb 3.1
    jboss-ejb-api_3.1_specComplete
    jboss-el-api_2.2_specComplete
    jboss-interceptors-api_1.1_specComplete
    jboss-j2eemgmt-api_1.1_specComplete
    jboss-jacc-api_1.1_specCompleteMerged with jacc 1.4
    jboss-jacc-api_1.4_specComplete
    jboss-jad-api_1.2_specComplete
    jboss-jaspi-api_1.0_specComplete
    jboss-javaee-6.0Complete
    jboss-javaee-web-6.0Complete
    jboss-javaee6-specs-bomCompleteMerged with jboss-javaee-6.0
    jboss-javaee6-web-specs-bomWill Not Migrate
    jboss-jaxb-api_2.2_specComplete
    jboss-jaxr-api_1.0_specComplete
    jboss-jaxrpc-api_1.1_specComplete
    jboss-jaxrs-api_1.1_specComplete
    jboss-jaxws-api_2.2_specComplete
    jboss-jms-api_1.1_specComplete
    jboss-jsf-api_2.0_specComplete
    jboss-jsp-api_2.2_specComplete
    jboss-jstl-api_1.2_specComplete
    jboss-rmi-api_1.0_specComplete
    jboss-saaj-api_1.3_specComplete
    jboss-servlet-api_3.0_specComplete
    jboss-specs-parentWill Not Migrate
    jboss-transaction-api_1.1_specComplete

     

    Migration Process

     

    Setup

    Create a local authors file containing a list of the svn authors and their associated email addresses.  The contents of the file can be found in docspace (https://docspace.corp.redhat.com/docs/DOC-43448) .  The file can be saved as svn_authors.txt.  Then configure git to use this as the default authors file.

     

    git config --global svn.authorsfile=~/svn_authors.txt
    

     

    During the next step, you may find that some userids are missing.  This file contains some additional user ids:

    https://svn.jboss.org/repos/jbossas/trunk/build/docs/copyright.txt

     

     

    Step 1 - Choose a project

    Choose a spec project to migrate.  For example, the JBoss Annotations API 1.1.  Change to the directory where you want the new git repository, then use git-svn clone to pull the trunk history from svn.  Use the based URL for the jbossas svn repo, and a relative path to the project trunk directory.  Note, this step might take several hours.

     

    cd ~/projects/jboss-specs
    git svn clone --trunk projects/specs/trunk/jboss-annotations-api_1.1_spec/ http://anonsvn.jboss.org/repos/jbossas jboss-annotations-api_1.1_spec
    

     

    Step 2 - Create the git tags

    This is a somewhat manual process because git tags work differently than svn tags.

    For each tag in svn, get the rev id of the commit on which the tag is based.  This normally means the commit immediately before the tag commit.

    svn log -l 2 http://anonsvn.jboss.org/repos/jbossas/projects/specs/tags/jboss-annotations-api_1.1_spec-1.0.0.Beta1/
    

     

    Find the git commit which contains the svn rev id.

    git log --grep 101915
    

     

    Create a git tag with the appropriate version on that commit.

    git tag -a "1.0.0.Beta1" -m "1.0.0.Beta1" b6d1210101b3ab104ea435d0b4b5a397263c07a5
    

     

    The tag message can just be the version string.

    Repeat these steps for each svn tag.

     

    When all the tags have been created in the new git repo, review the history using "gitk" and see that it looks correct.

     

    Step 3 - Publish the new repo

    Push the repo to github

     

    git push --tags origin master