Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: New repo structure for trunk

GOAL: draft for a quick start guide to set up a simple strategy that allows you to maintain a customized version of OFBiz under SVN revision control and synchronized with the standard OFBiz SVN

...

.

Info
  • This strategy is a simple implementation of the Vendor Branch Pattern; for more details about Vendor Branches refer to the "Version Control with Subversion" manual

...

Overview: The plan is

This is only a draft, I'm testing this strategy right now and I'm not an SVN expert so... your feedback is really welcome!!!

Details: let's say I need to develop a customized version of OFBiz called customofbiz, but I we want to stay up to date with the official OFBiz development. I'll We will target to do the update once every month .
First of all I'll get OFBiz from svn but it can be done at any point in time.

  1. Get OFBiz from the official Apache SVN server (let's say

...

  1. r482800 - this in no way suggests that revision is good, bad or otherwise it's just a number);
  2. Import it into the local SVN repository as the ofbiz project;

...

  1. and tag it as ofbiz

...

  1. r482800;

...

  1. Use it as the base for my customofbiz project

...

  1. making changes as needed to do the customisation.
  2. Next month get the latest OFBiz revision, let's say

...

  1. r483333, from the official

...

  1. Apache SVN and

...

  1. update the local ofbiz project in

...

  1. the local repository with it (also adding a tag to it, for example ofbiz

...

  1. r483333)

...

  1. .
  2. Finally do a merge between ofbiz

...

  1. r482800, ofbiz

...

  1. r483333 and my working copy (containing the up to date customofbiz project)

...

  1. , resolve the conflicts and commit everything to

...

  1. the local customofbiz.

...

Repository structure

Here is the local repository structure I'll to maintain:
ofbiz
ofbiz/current ---> this will contain the latest official OFbiz OFBiz release
ofbiz/ofbiz-<revnumA> ---> these are the monthly tags for the official OFbiz OFBiz release (e.g. ofbiz-5000r482800, ofbiz-5100r483333, etc...)
ofbiz/ofbiz-<revnumB>
...
ofbiz/ofbiz-<revnumN>

customofbiz
customofbiz/trunk ---> this is the trunk of the customofbiz project (initially it will be the same of as ofbiz <revnumA>)

...

How to set up an SVN repository and start the svn service

  • Initialization of an empty repository

    Code Block
    
    svnadmin create ./svn-repos
    
  • Edit the ./svn-repos/conf/svnserve.conf file
  • Edit the ./svn-repos/conf/passwd file
  • Start the service

    Code Block
    
    svnserve --daemon --root ./svn-repos
    

Import Apache OFBiz for the first time and create the customofbiz project

  • We get

    Get the revision or latest

    official revision of OFBiz (r5000)

    version of OFBiz you will be starting from for this sample its r482800:

    Code Block
    
    svn export http://svn.ofbizapache.org/repos/svnasf/ofbiz/ofbiz-framework/trunk ./tmpdir/ofbiz-5000r482800
    
  • We import

    Import it as the ofbiz project in the repository

    Code Block
    
    svn import -m "Import OFBiz 5000r482800" ./tmpdir/ofbiz-5000r482800 svn://localhost/ofbiz/current
    
    Tip: the .svnversion/conf file should be equals to the standard ofbiz file except for the svn:keywords properties that should completely removed to avoid merging problems later on
  • We make

    Make a tag for ofbiz

    5000

    r482800

    Code Block
    
    svn copy -m "Tag 5000r482800 vendor drop" svn://localhost/ofbiz/current svn://localhost/ofbiz/ofbiz-5000r482800
    
  • We create

    Create the "ofbizcustom" project (initially it's a copy of the OFBiz

    5000

    r482800 tag)

    Code Block
    
    svn mkdir -m "" svn://localhost/customofbiz
    svn copy -m "OfbizCustom is initially built over the ofbiz-5000r482800 tag" svn://localhost/ofbiz/ofbiz-5000r482800 svn://localhost/customofbiz/trunk
    

...

Working with the customofbiz project

  • We checkout

    Checkout the trunk of customofbiz

    Code Block
    
    svn co svn://localhost/customofbiz/trunk ./tmpdir/customofbiz
    
  • We make local Make changes to customofbiz and then we commit the new revisions to the local repository etc...

How to synch customofbiz with ofbiz every month

  • Every month we get a new OFBiz revision (in this example, we get revision

    5100

    r483333)

    Code Block
    
    svn export http://svn.ofbizapache.org/repos/svnasf/ofbiz/trunk ./tmpdir/ofbiz-5100r483333
    
  • And we update our

    Update the current version of

    the

    "ofbiz" project in

    our

    the local svn repository and

    we

    automatically create

    also

    a tag (

    5100

    r483333, see the -t argument)

    Code Block
    
    ./svn_load_dirs.pl -t ofbiz-5100r483333 svn://localhost/ofbiz current ./tmpdir/ofbiz-5100r483333
    



    question: are the svn properties that need to be applied to new files correctly retrieved from the .svnversion/conf file?
    answer: probably not; you have to setup a config file (as described at the bottom of this page) and pass it to the svn_load_dirs.pl script with the -p argument.

  • We have to synch customofbiz, that was based on the ofbiz-

    5000

    r482800 tag, with the new ofbiz tag ofbiz-

    5100

    r483333; we do this in

    our

    a working copy, not directly in the repository (before doing this, make sure that your working directory is up to date "svn up" and has no local changes

    and it is updated

    "svn st").

    Code Block
    
    svn merge svn://localhost/ofbiz/ofbiz-5000r482800 svn://localhost/ofbiz/ofbiz-5100r483333 ./tmpdir/customofbiz
    
  • Fix Conflicts are possible and you will need to fix those in your local copy all the conflictsworking folder, test and then commit your the changes.
  • It is also a good idea to tag the new customofbiz revision.

    Code Block
    
    svn copy -m "OfbizCustom is initially built over the OFBiz 5000r482800 tag" svn://localhost/customofbiz/trunk svn://localhost/customofbiz/customofbiz-5100r483333
    
  • Continuing with the example, let's say that one month later,

    I

    you want to export a new OFBiz release (

    5200

    r486422) and import it with (svn_load_dir.pl) in the ofbiz/current and as a new tag ofbiz-

    5200; I'll use

    r486422; Use the following command to perform the merge (thanks to Kenneth Porter for the tip):

    Code Block
    
    svn merge svn://localhost/ofbiz/ofbiz-5100r483333 svn://localhost/ofbiz/ofbiz-5200r486422 ./tmpdir/customofbiz
    

...

Tip: export a local svn rather than direct from the OFBiz SVN server

Taking a complete snapshot from the live SVN server every merge can be a long job and place additional load on those servers. The export process describe above can also be done from a locally held OFBiz version that you update using standard "svn up" command.

  • First time round do a clean checkout to a local folder "ofbiz_clean"

    Code Block
    
    svn co httpshttp://svn.ofbizapache.org/repos/svnasf/ofbiz/trunk ofbiz_clean
    
  • Next export the local "ofbiz_clean" rather than the OFBiz SVN server

    Code Block
    
    svn export ofbiz_clean ./tmpdir/ofbiz-5000r482800
    
  • Then you follow on with the instructions above to import and merge until you come to your next update at which point you

    Code Block
    
    svn up ofbiz_clean
    
  • and then again export the local copy

    Code Block
    
    svn export ofbiz_clean ./tmpdir/ofbiz-5100r483333