You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@ofbiz.apache.org by Mike <mz...@gmail.com> on 2011/03/17 08:19:51 UTC

How to setup a simple ofbiz vendor branch

----------------------------------
SETUP A SIMPLE OFBIZ VENDOR BRANCH
----------------------------------

I went through the pain of setting up a "vendor branch" of ofbiz, so I
thought I'd share it with the community.  The supplied instructions in the
wiki seemed confusing, and didn't go into detail.  Since I'm into
automation, my script (svn_local.sh) allows the following:

Keep a local copy of ofbiz (trunk|0904|1004), allow it to be modified, but
at the same time have the ability to receive upstream updates from the
Apache Ofbiz SVN server, and merge them into your own local copy.  For the
most part, this works automatically.

The attached ofbiz_vendor_branch.tar.gz has the script.

To clarify, I'm not a subversion expert, so my setup is ultra simple,
anonymous read/write, no password, etc.  My svn server is safely behind a
firewall, so I'm not worried about multi users, passwords, hackers, etc.
 This works for me because I'm a one man show.  Your requirements are
probably different.

To get started, we need to keep local copies of the following:

http://svn.apache.org/repos/asf/ofbiz/trunk  --or--
http://svn.apache.org/repos/asf/ofbiz/branches/release09.04  --or--
http://svn.apache.org/repos/asf/ofbiz/branches/release10.04  --or-- all
three!

These are always kept up to date via "svn update", and are kept in
/opt/ofbiz.svn.

The script (svn_local.sh) allows all three (or more in the future) branches
to be tracked.  For me, the best branch for deployment is trunk, because it
seems to be the most stable, and gets more attention from the developers.
 For the purpose of this setup, I'm just going focus on trunk, but tracking
0904 or 1004 (or all three) is as easy as tweaking a variable (in
svn_local.sh).

The Apache and Local versions are kept in /opt/ofbiz.svn, and are named:

/opt/ofbiz.svn/asf.ofbiz.0904
/opt/ofbiz.svn/asf.ofbiz.1004
/opt/ofbiz.svn/asf.ofbiz.trunk

The "local" copies are called.
/opt/ofbiz.svn/opt.ofbiz.0904
/opt/ofbiz.svn/opt.ofbiz.1004
/opt/ofbiz.svn/opt.ofbiz.trunk

NOTE: Regarding this path (/opt/ofbiz.svn).  For simplicity, use the same
path (at least initially).  The script resides in the "/opt/ofbiz.svn/bin"
directory, and will always place the above checked out directories one level
above the script (in /opt/ofbiz.svn).

Also, this script runs on an Ubuntu host, I've never tried to run this on
windows.  However, It might work under cygwin.

Internally (within the local SVN repository), the directories are organized
like this:

ofbiz/
ofbiz/asf/
ofbiz/asf/ofbiz.1004
ofbiz/asf/ofbiz.trunk
ofbiz/opt/
ofbiz/opt/ofbiz.1004
ofbiz/opt/ofbiz.trunk

NOTE: If you already have an SVN repository, then I'd fully analyze/test
this process (on a separate machine) to see if it "fits" into your local SVN
repository w/o clobbering your own stuff.  If you have "ofbiz" at the top of
your SVN tree (like above), then there may be issues.  You have been warned!

These directories are strictly used to track changes to the local
repositories.  Your actual names (when you check out a working copy) could
be different.  In my case, when I check out the working local copy, I place
it in /opt/ofbiz.[version], and this is where I actually fire up ofbiz from
(later).

You could tweak these names, but this will require hacking the script, and
it is not recommended, at least until you understand how it works.

The attached tar file contains the following items:

# tar ztvf ofbiz_vendor_branch.tar.gz
drwxr-xr-x root/root         0 2011-03-16 10:38 opt/ofbiz.svn/bin/
-rwxr-xr-x root/root      6478 2011-03-16 09:36
opt/ofbiz.svn/bin/svn_local.sh
-rw-r--r-- root/root      9630 2009-05-12 10:25
opt/ofbiz.svn/bin/svn_load_dirs.README
-rw-r--r-- root/root      7201 2011-03-16 10:12 opt/ofbiz.svn/bin/config
-rw-r--r-- root/root      7201 2011-03-16 10:12 opt/ofbiz.svn/bin/README
-rwxr-xr-x root/root     67335 2010-08-27 18:50 opt/ofbiz.svn/bin/
svn_load_dirs.pl
-rwxr-xr-x root/root       436 2010-09-06 11:36 opt/ofbiz.svn/bin/svnserv
#

Here are the contents:
--------------------------------------------------------------
/opt/ofbiz.svn/bin/svnserv (used to fire up the SVN daemon)
/opt/ofbiz.svn/bin/svn_load_dirs.pl (NOT written by me)
/opt/ofbiz.svn/bin/svn_local.sh (MY script, that automates all)
/opt/ofbiz.svn/bin/config (SVN client config file, discussed later)
/opt/ofbiz.svn/bin/README (These docs)
--------------------------------------------------------------

NOTE: The svn_load_dirs.pl (part of Apache) is a perl script which magically
merges the various repositories.  This one works for me, so I provided it.
 It DOES require various perl modules that must be satisfied so it properly
works.

To get started, you will need your own SVN repository.  Here are the steps.

--------------------------------------------------------------
STEP 1) Create your own local SVN repository
--------------------------------------------------------------
# mkdir -p /var/svn/repos
# svnadmin create /var/svn/repos

I suggest you use /var/svn/repos, it will make it easier, and my script uses
it (later).

--------------------------------------------------------------
STEP 2) Tweak SVN for anonymous read-write
--------------------------------------------------------------
# vi /var/svn/repos/conf/svnserv.conf

[general]
anon-access = write
auth-access = write
password-db = passwd

Copy /opt/ofbiz.svn/bin/svnserv into /etc/init.d (unless you don't already
have one), and fire up the svnserv init script.  You may have to tweak it
(works for Ubuntu).

# cp /opt/ofbiz.svn/bin/svnserv /etc/init.d
# /etc/init.d/svnserv start

Make sure it's running.

/# ps -efww|grep svn
root      6436     1  0 18:47 ?        00:00:00 svnserve -d -r
/var/svn/repos

--------------------------------------------------------------
STEP 3) Copy the client config to the proper location.
--------------------------------------------------------------
NOTE:  The svn client config needs to be copied to the home directory of the
user who runs the svn command.  In this case, probably
/root/.subversion/config  --or-- place it in (again Ubuntu)
/etc/subversion/config, which would make it available to all users on that
machine.  Also, if you plan on running ofbiz on a different machine, then
you need to make sure this 'config' file is on all machines.  so:

# cp /opt/ofbiz.svn/bin/config /root/.subversion/config --or--
# cp /opt/ofbiz.svn/bin/config /etc/subversion/config

--------------------------------------------------------------
STEP 4) Create a "svn" DNS entry for your local domain (optional)
--------------------------------------------------------------
If you have your own local area network and your own DNS server, it is good
practice to create a "svn" host, which is an alias to the host where the
local SVN repository exists.  For instance, if your local domain is "
internal.net", create "svn.internal.net", which points to the real host.

--------------------------------------------------------------
STEP 5) Untar the attached tar file from the root directory
--------------------------------------------------------------
# cd /
# tar zxvf /root/download/ofbiz_vendor_branch.tar.gz

--------------------------------------------------------------
STEP 6) Configure the script (choose trunk/branches)
--------------------------------------------------------------
# cd /opt/ofbiz.svn/bin
# vi svn_local.sh

Set the variables ofbiz_versions and local_svnserv.

Variable: ofbiz_versions

All three Ofbiz versions (NOT recommended)
ofbiz_versions="trunk:trunk branches/release10.04:1004
branches/release09.04:0904"

Trunk+1004 (also not really recommended)
ofbiz_versions="trunk:trunk branches/release10.04:1004"

Just Trunk:
ofbiz_versions="trunk:trunk"

Just 1004:
ofbiz_versions="branches/release10.04:1004"

The item on the right side of the colon will be used to create the name of
the directory entry.  For instance, you check out the branch
"branches/release10.04" and it create a directory called "opt.ofbiz.1004".

If you choose to track multiple branches (not recommended), then your local
SVN server will get pretty fat (and slow).  Beware.

Variable: local_svnserv

local_svnserv="svn://svn.internal.net"
#local_svnserv="svn://svn"
#local_svnserv="file:///var/svn/repos"

Choose the way you want to access you own local repository.  If you followed
the above directions, then you already have the svnserv daemon running. The
first one is using the DNS name (so is the second, but there is an
/etc/resolv.conf that has "search internal.net" defined).  This is really
the recommended way of accessing a local SVN server.  You can then check out
the code from ANY machine on your local area network.  If you are running on
just a single machine, then you COULD use the "file:///..." method, which is
fast (and least flexible).

--------------------------------------------------------------
STEP 7) Run the svn_load_dirs.pl utility to make sure it works
--------------------------------------------------------------
# cd /opt/ofbiz.svn/bin
# ./svn_load_dirs.pl

Look for any perl modules missing, and satisfy the requirements.  You should
get the help syntax of the script.

On Ubuntu, you can do a bunch of "apt-get install ITEM" to satisfy the perl
module, or you could use the CPAN method, which consists of a bunch of:

perl -MCPAN -e "install Digest::MD5"

Statements until the script is happy.  Don't attempt STEP 8 until
svn_load_dirs.pl is happy.

ALSO:  Check svn_load_dirs.pl and verify line 32:

my $svn = '/usr/bin/svn';

Points to the correct svn binary (above is Ubuntu).

# vi svn_load_dirs.pl

--------------------------------------------------------------
STEP 8) Run svn_local.sh in "init" mode
--------------------------------------------------------------
NOTE:  Don't forget STEP 3 (svn client "config") or you'll have problems
with the next step.

# cd /opt/ofbiz.svn/bin
# ./svn_local.sh init
[lots of output]

NOTE:  This is only done ONCE (with "init"), to initially populate the
repository.

The script is in debug mode (during init) in case any problems occur.

--------------------------------------------------------------
STEP 9) Checkout the "local" (running) branch of the ofbiz repository you
want
--------------------------------------------------------------
Decide where you want to run ofbiz.  /opt always works for me.

# trunk example
# cd /opt
# svn co svn://SVN_SERVER/ofbiz/opt/ofbiz.trunk/trunk/ ofbiz.trunk --or--
# svn co file:///var/svn/repos/ofbiz/opt/ofbiz.trunk/trunk/ ofbiz.trunk

NOTE:  The right argument is the directory that will be created.  You can
name it
anything you want.  I recommend ofbiz.[trunk|branch] to match SVN.

# 10.04 example
# cd /opt
# svn co svn://SVN_SERVER/ofbiz/opt/ofbiz.1004/trunk/ ofbiz.1004 --or--
# svn co file:///var/svn/repos/ofbiz/opt/ofbiz.1004/trunk/ ofbiz.1004
....
A    ofbiz.trunk/ivy.xml
A    ofbiz.trunk/startofbizBoth.bat
A    ofbiz.trunk/KEYS
A    ofbiz.trunk/rc.ofbiz
A    ofbiz.trunk/startofbizPos.bat
Checked out revision 11.
#

Notice that even for 1004, you still checkout the "trunk" of the local 1004
repository

--------------------------------------------------------------
STEP 10) Check things out, test, etc.
--------------------------------------------------------------
Change directory, and run "svn info" You should see a low revision #, like
11.

# cd /opt/ofbiz.trunk; svn info; svn log

The "Last Changed Rev:" is probably r11.  The log should show "Initial
import...."

--------------------------------------------------------------
STEP 11) Change something, commit changes to your local repository
--------------------------------------------------------------
# cd /opt/ofbiz.trunk/hot-deploy
# mkdir newapp
# svn add newapp
A       newapp
# svn commit
--------------------------------------------------------------
This is a newapp in hot-deploy
--This line, and those below, will be ignored--

A    hot-deploy/newapp
--------------------------------------------------------------
Adding         hot-deploy/newapp

Committed revision 12.

--------------------------------------------------------------
STEP 12)  Run updates from Apache OFBIZ, and "merge" changes into your local
repo.
--------------------------------------------------------------
Sometime later, after the developers tweaked something in trunk, run the
following:

# cd /opt/ofbiz.svn/bin
# ./svn_local.sh

If nothing changed, then you'll see:
--------------------------------------------------------------
NOTE: FOUND svn_load_dirs.pl in [/opt/ofbiz.svn/bin/svn_load_dirs.pl]
Remote ASF: http://svn.apache.org/repos/asf/ofbiz/trunk
Local  ASF: svn://svn/ofbiz/asf/ofbiz.trunk
Local  OFB: svn://svn/ofbiz/opt/ofbiz.trunk

http://svn.apache.org/repos/asf/ofbiz/trunk Revision: 1082281
Last Changed Revisions:  Last:1082281 Current:1082281
Repository revisions match
#
--------------------------------------------------------------
Otherwise, you'll lots of magical output that hopefully ends up with your
local svn repository opt.ofbiz.[trunk|branch] updated with fresh
patches/changes from Ofbiz being merged into your own changes being made
locally.

This works automatically for the most part, but on occasion you may have a
collision when you might have to accept/reject a merge option.

The script also creates directories like this:

/opt/ofbiz.svn/asf.ofbiz.trunk.1079456
/opt/ofbiz.svn/asf.ofbiz.trunk.1080107
/opt/ofbiz.svn/asf.ofbiz.trunk.1080776
/opt/ofbiz.svn/asf.ofbiz.trunk.1081185

Which are checked out versions of trunk.  These can be blown away if you
like, but I like them because I can do stuff like "diffing" between
revisions:

diff -r asf.ofbiz.trunk.1081444 asf.ofbiz.trunk.1081740

--------------------------------------------------------------
STEP 13) Update your local (running) copy of ofbiz with the latest changes.
--------------------------------------------------------------
Suppose you (like me) run the "running" version of ofbiz in
/opt/ofbiz.trunk, which you checked out in STEP 9.

You run the update/merge process:

# cd /opt/ofbiz.svn/bin
# ./svn_local.sh
[lots of output]

Even though you did the above steps, the copy you are running in
/opt/ofbiz.trunk is STILL running the old code.  You must also update your
running (checked out) code, like this:

# cd /opt/ofbiz.trunk
# svn update
....... update statements ............

/etc/init.d/ofbiz.trunk restart ... etc..

Thats it.  If you have problems initially creating the repository, make sure
you followed STEP #3.  You can always blow away the /var/svn/repos, and
re-init.

If any errors show up, you can always un-comment line #6 "set -x" to show
the debug steps.

If you already have a modified ofbiz directory that you want to merge into
this process, then that will be tricky, and a lot more work.  However, you
could probably do it like this:

Run the above procedure, checking out a new code branch (like in STEP 9).
 You then need to detect the changes between your existing, running code and
copy each modified (or missing) file/directory (i.e., one by one into the
checked out directory (/opt/ofbiz.trunk).  Then, just:

# cd /opt/ofbiz.trunk
# svn commit

I hope this helps someone.  Good luck!!

Re: How to setup a simple ofbiz vendor branch

Posted by Mike <mz...@gmail.com>.
Done.  I hope someone gives it a try. I just ran it this morning, and
it detected the following changes (since last night) and merged then
into my local trunk:

# cd /opt/ofbiz.svn/bin
# ./svn_local.sh
[update output]
......
Updating opt.ofbiz.trunk
Merging Revisions:  Last:1082417 Current:1082582
--- Merging differences between repository URLs into 'opt.ofbiz.trunk':
U    opt.ofbiz.trunk/themes/tomahawk/webapp/tomahawk/css/help.css
U    opt.ofbiz.trunk/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java
U    opt.ofbiz.trunk/applications/accounting/data/AccountingTypeData.xml
U    opt.ofbiz.trunk/framework/sql/src/org/ofbiz/sql/Planner.java
Commiting Local Merged Revisions:  Last:1082417 Current:1082582
Sending        .
Sending        applications/accounting/data/AccountingTypeData.xml
Sending        applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java
Sending        framework/sql/src/org/ofbiz/sql/Planner.java
Sending        themes/tomahawk/webapp/tomahawk/css/help.css
Transmitting file data ....
Committed revision 338.

Easy.....

On Thu, Mar 17, 2011 at 12:46 AM, Jacques Le Roux <jl...@les7arts.com> wrote:
> Hi Mike,
>
> I did not verify anything, but could you please post your message as a comment in https://cwiki.apache.org/confluence/display/OFBIZ/SVN+Tips+-+svn_load_dirs+Vendor+Branch
> You can also put your attachment there
>
> Thanks
>
> Jacques
>  ----- Original Message -----
>  From: Mike
>  To: user@ofbiz.apache.org
>  Sent: Thursday, March 17, 2011 8:19 AM
>  Subject: How to setup a simple ofbiz vendor branch
>
>
>  ----------------------------------
>  SETUP A SIMPLE OFBIZ VENDOR BRANCH
>  ----------------------------------
>
>
>  I went through the pain of setting up a "vendor branch" of ofbiz, so I thought I'd share it with the community.  The supplied instructions in the wiki seemed confusing, and didn't go into detail.  Since I'm into automation, my script (svn_local.sh) allows the following:
>
>
>  Keep a local copy of ofbiz (trunk|0904|1004), allow it to be modified, but at the same time have the ability to receive upstream updates from the Apache Ofbiz SVN server, and merge them into your own local copy.  For the most part, this works automatically.
>
>
>  The attached ofbiz_vendor_branch.tar.gz has the script.
>
>
>  To clarify, I'm not a subversion expert, so my setup is ultra simple, anonymous read/write, no password, etc.  My svn server is safely behind a firewall, so I'm not worried about multi users, passwords, hackers, etc.  This works for me because I'm a one man show.  Your requirements are probably different.
>
>
>  To get started, we need to keep local copies of the following:
>
>
>  http://svn.apache.org/repos/asf/ofbiz/trunk  --or--
>  http://svn.apache.org/repos/asf/ofbiz/branches/release09.04  --or--
>  http://svn.apache.org/repos/asf/ofbiz/branches/release10.04  --or-- all three!
>
>
>  These are always kept up to date via "svn update", and are kept in /opt/ofbiz.svn.
>
>
>  The script (svn_local.sh) allows all three (or more in the future) branches to be tracked.  For me, the best branch for deployment is trunk, because it seems to be the most stable, and gets more attention from the developers.  For the purpose of this setup, I'm just going focus on trunk, but tracking 0904 or 1004 (or all three) is as easy as tweaking a variable (in svn_local.sh).
>
>
>  The Apache and Local versions are kept in /opt/ofbiz.svn, and are named:
>
>
>  /opt/ofbiz.svn/asf.ofbiz.0904
>  /opt/ofbiz.svn/asf.ofbiz.1004
>  /opt/ofbiz.svn/asf.ofbiz.trunk
>
>
>  The "local" copies are called.
>  /opt/ofbiz.svn/opt.ofbiz.0904
>  /opt/ofbiz.svn/opt.ofbiz.1004
>  /opt/ofbiz.svn/opt.ofbiz.trunk
>
>
>  NOTE: Regarding this path (/opt/ofbiz.svn).  For simplicity, use the same path (at least initially).  The script resides in the "/opt/ofbiz.svn/bin" directory, and will always place the above checked out directories one level above the script (in /opt/ofbiz.svn).
>
>
>  Also, this script runs on an Ubuntu host, I've never tried to run this on windows.  However, It might work under cygwin.
>
>
>  Internally (within the local SVN repository), the directories are organized like this:
>
>
>  ofbiz/
>  ofbiz/asf/
>  ofbiz/asf/ofbiz.1004
>  ofbiz/asf/ofbiz.trunk
>  ofbiz/opt/
>  ofbiz/opt/ofbiz.1004
>  ofbiz/opt/ofbiz.trunk
>
>
>  NOTE: If you already have an SVN repository, then I'd fully analyze/test this process (on a separate machine) to see if it "fits" into your local SVN repository w/o clobbering your own stuff.  If you have "ofbiz" at the top of your SVN tree (like above), then there may be issues.  You have been warned!
>
>
>  These directories are strictly used to track changes to the local repositories.  Your actual names (when you check out a working copy) could be different.  In my case, when I check out the working local copy, I place it in /opt/ofbiz.[version], and this is where I actually fire up ofbiz from (later).
>
>
>  You could tweak these names, but this will require hacking the script, and it is not recommended, at least until you understand how it works.
>
>
>  The attached tar file contains the following items:
>
>
>  # tar ztvf ofbiz_vendor_branch.tar.gz
>  drwxr-xr-x root/root         0 2011-03-16 10:38 opt/ofbiz.svn/bin/
>  -rwxr-xr-x root/root      6478 2011-03-16 09:36 opt/ofbiz.svn/bin/svn_local.sh
>  -rw-r--r-- root/root      9630 2009-05-12 10:25 opt/ofbiz.svn/bin/svn_load_dirs.README
>  -rw-r--r-- root/root      7201 2011-03-16 10:12 opt/ofbiz.svn/bin/config
>  -rw-r--r-- root/root      7201 2011-03-16 10:12 opt/ofbiz.svn/bin/README
>  -rwxr-xr-x root/root     67335 2010-08-27 18:50 opt/ofbiz.svn/bin/svn_load_dirs.pl
>  -rwxr-xr-x root/root       436 2010-09-06 11:36 opt/ofbiz.svn/bin/svnserv
>  #
>
>
>  Here are the contents:
>  --------------------------------------------------------------
>  /opt/ofbiz.svn/bin/svnserv (used to fire up the SVN daemon)
>  /opt/ofbiz.svn/bin/svn_load_dirs.pl (NOT written by me)
>  /opt/ofbiz.svn/bin/svn_local.sh (MY script, that automates all)
>  /opt/ofbiz.svn/bin/config (SVN client config file, discussed later)
>  /opt/ofbiz.svn/bin/README (These docs)
>  --------------------------------------------------------------
>
>
>  NOTE: The svn_load_dirs.pl (part of Apache) is a perl script which magically merges the various repositories.  This one works for me, so I provided it.  It DOES require various perl modules that must be satisfied so it properly works.
>
>
>  To get started, you will need your own SVN repository.  Here are the steps.
>
>
>  --------------------------------------------------------------
>  STEP 1) Create your own local SVN repository
>  --------------------------------------------------------------
>  # mkdir -p /var/svn/repos
>  # svnadmin create /var/svn/repos
>
>
>  I suggest you use /var/svn/repos, it will make it easier, and my script uses it (later).
>
>
>  --------------------------------------------------------------
>  STEP 2) Tweak SVN for anonymous read-write
>  --------------------------------------------------------------
>  # vi /var/svn/repos/conf/svnserv.conf
>
>
>  [general]
>  anon-access = write
>  auth-access = write
>  password-db = passwd
>
>
>  Copy /opt/ofbiz.svn/bin/svnserv into /etc/init.d (unless you don't already have one), and fire up the svnserv init script.  You may have to tweak it (works for Ubuntu).
>
>
>  # cp /opt/ofbiz.svn/bin/svnserv /etc/init.d
>  # /etc/init.d/svnserv start
>
>
>  Make sure it's running.
>
>
>  /# ps -efww|grep svn
>  root      6436     1  0 18:47 ?        00:00:00 svnserve -d -r /var/svn/repos
>
>
>  --------------------------------------------------------------
>  STEP 3) Copy the client config to the proper location.
>  --------------------------------------------------------------
>  NOTE:  The svn client config needs to be copied to the home directory of the user who runs the svn command.  In this case, probably /root/.subversion/config  --or-- place it in (again Ubuntu) /etc/subversion/config, which would make it available to all users on that machine.  Also, if you plan on running ofbiz on a different machine, then you need to make sure this 'config' file is on all machines.  so:
>
>
>  # cp /opt/ofbiz.svn/bin/config /root/.subversion/config --or--
>  # cp /opt/ofbiz.svn/bin/config /etc/subversion/config
>
>
>  --------------------------------------------------------------
>  STEP 4) Create a "svn" DNS entry for your local domain (optional)
>  --------------------------------------------------------------
>  If you have your own local area network and your own DNS server, it is good practice to create a "svn" host, which is an alias to the host where the local SVN repository exists.  For instance, if your local domain is "internal.net", create "svn.internal.net", which points to the real host.
>
>
>  --------------------------------------------------------------
>  STEP 5) Untar the attached tar file from the root directory
>  --------------------------------------------------------------
>  # cd /
>  # tar zxvf /root/download/ofbiz_vendor_branch.tar.gz
>
>
>  --------------------------------------------------------------
>  STEP 6) Configure the script (choose trunk/branches)
>  --------------------------------------------------------------
>  # cd /opt/ofbiz.svn/bin
>  # vi svn_local.sh
>
>
>  Set the variables ofbiz_versions and local_svnserv.
>
>
>  Variable: ofbiz_versions
>
>
>  All three Ofbiz versions (NOT recommended)
>  ofbiz_versions="trunk:trunk branches/release10.04:1004 branches/release09.04:0904"
>
>
>  Trunk+1004 (also not really recommended)
>  ofbiz_versions="trunk:trunk branches/release10.04:1004"
>
>
>  Just Trunk:
>  ofbiz_versions="trunk:trunk"
>
>
>  Just 1004:
>  ofbiz_versions="branches/release10.04:1004"
>
>
>  The item on the right side of the colon will be used to create the name of the directory entry.  For instance, you check out the branch "branches/release10.04" and it create a directory called "opt.ofbiz.1004".
>
>
>  If you choose to track multiple branches (not recommended), then your local SVN server will get pretty fat (and slow).  Beware.
>
>
>  Variable: local_svnserv
>
>
>  local_svnserv="svn://svn.internal.net"
>  #local_svnserv="svn://svn"
>  #local_svnserv="file:///var/svn/repos"
>
>
>  Choose the way you want to access you own local repository.  If you followed the above directions, then you already have the svnserv daemon running. The first one is using the DNS name (so is the second, but there is an /etc/resolv.conf that has "search internal.net" defined).  This is really the recommended way of accessing a local SVN server.  You can then check out the code from ANY machine on your local area network.  If you are running on just a single machine, then you COULD use the "file:///..." method, which is fast (and least flexible).
>
>
>  --------------------------------------------------------------
>  STEP 7) Run the svn_load_dirs.pl utility to make sure it works
>  --------------------------------------------------------------
>  # cd /opt/ofbiz.svn/bin
>  # ./svn_load_dirs.pl
>
>
>  Look for any perl modules missing, and satisfy the requirements.  You should get the help syntax of the script.
>
>
>  On Ubuntu, you can do a bunch of "apt-get install ITEM" to satisfy the perl module, or you could use the CPAN method, which consists of a bunch of:
>
>
>  perl -MCPAN -e "install Digest::MD5"
>
>
>  Statements until the script is happy.  Don't attempt STEP 8 until svn_load_dirs.pl is happy.
>
>
>  ALSO:  Check svn_load_dirs.pl and verify line 32:
>
>
>  my $svn = '/usr/bin/svn';
>
>
>  Points to the correct svn binary (above is Ubuntu).
>
>
>  # vi svn_load_dirs.pl
>
>
>  --------------------------------------------------------------
>  STEP 8) Run svn_local.sh in "init" mode
>  --------------------------------------------------------------
>  NOTE:  Don't forget STEP 3 (svn client "config") or you'll have problems with the next step.
>
>
>  # cd /opt/ofbiz.svn/bin
>  # ./svn_local.sh init
>  [lots of output]
>
>
>  NOTE:  This is only done ONCE (with "init"), to initially populate the repository.
>
>
>  The script is in debug mode (during init) in case any problems occur.
>
>
>  --------------------------------------------------------------
>  STEP 9) Checkout the "local" (running) branch of the ofbiz repository you want
>  --------------------------------------------------------------
>  Decide where you want to run ofbiz.  /opt always works for me.
>
>
>  # trunk example
>  # cd /opt
>  # svn co svn://SVN_SERVER/ofbiz/opt/ofbiz.trunk/trunk/ ofbiz.trunk --or--
>  # svn co file:///var/svn/repos/ofbiz/opt/ofbiz.trunk/trunk/ ofbiz.trunk
>
>
>  NOTE:  The right argument is the directory that will be created.  You can name it
>  anything you want.  I recommend ofbiz.[trunk|branch] to match SVN.
>
>
>  # 10.04 example
>  # cd /opt
>  # svn co svn://SVN_SERVER/ofbiz/opt/ofbiz.1004/trunk/ ofbiz.1004 --or--
>  # svn co file:///var/svn/repos/ofbiz/opt/ofbiz.1004/trunk/ ofbiz.1004
>  ....
>  A    ofbiz.trunk/ivy.xml
>  A    ofbiz.trunk/startofbizBoth.bat
>  A    ofbiz.trunk/KEYS
>  A    ofbiz.trunk/rc.ofbiz
>  A    ofbiz.trunk/startofbizPos.bat
>  Checked out revision 11.
>  #
>
>
>  Notice that even for 1004, you still checkout the "trunk" of the local 1004 repository
>
>
>  --------------------------------------------------------------
>  STEP 10) Check things out, test, etc.
>  --------------------------------------------------------------
>  Change directory, and run "svn info" You should see a low revision #, like 11.
>
>
>  # cd /opt/ofbiz.trunk; svn info; svn log
>
>
>  The "Last Changed Rev:" is probably r11.  The log should show "Initial import...."
>
>
>  --------------------------------------------------------------
>  STEP 11) Change something, commit changes to your local repository
>  --------------------------------------------------------------
>  # cd /opt/ofbiz.trunk/hot-deploy
>  # mkdir newapp
>  # svn add newapp
>  A       newapp
>  # svn commit
>  --------------------------------------------------------------
>  This is a newapp in hot-deploy
>  --This line, and those below, will be ignored--
>
>
>  A    hot-deploy/newapp
>  --------------------------------------------------------------
>  Adding         hot-deploy/newapp
>
>
>  Committed revision 12.
>
>
>  --------------------------------------------------------------
>  STEP 12)  Run updates from Apache OFBIZ, and "merge" changes into your local repo.
>  --------------------------------------------------------------
>  Sometime later, after the developers tweaked something in trunk, run the following:
>
>
>  # cd /opt/ofbiz.svn/bin
>  # ./svn_local.sh
>
>
>  If nothing changed, then you'll see:
>  --------------------------------------------------------------
>  NOTE: FOUND svn_load_dirs.pl in [/opt/ofbiz.svn/bin/svn_load_dirs.pl]
>  Remote ASF: http://svn.apache.org/repos/asf/ofbiz/trunk
>  Local  ASF: svn://svn/ofbiz/asf/ofbiz.trunk
>  Local  OFB: svn://svn/ofbiz/opt/ofbiz.trunk
>
>
>  http://svn.apache.org/repos/asf/ofbiz/trunk Revision: 1082281
>  Last Changed Revisions:  Last:1082281 Current:1082281
>  Repository revisions match
>  #
>  --------------------------------------------------------------
>  Otherwise, you'll lots of magical output that hopefully ends up with your local svn repository opt.ofbiz.[trunk|branch] updated with fresh patches/changes from Ofbiz being merged into your own changes being made locally.
>
>
>  This works automatically for the most part, but on occasion you may have a collision when you might have to accept/reject a merge option.
>
>
>  The script also creates directories like this:
>
>
>  /opt/ofbiz.svn/asf.ofbiz.trunk.1079456
>  /opt/ofbiz.svn/asf.ofbiz.trunk.1080107
>  /opt/ofbiz.svn/asf.ofbiz.trunk.1080776
>  /opt/ofbiz.svn/asf.ofbiz.trunk.1081185
>
>
>  Which are checked out versions of trunk.  These can be blown away if you like, but I like them because I can do stuff like "diffing" between revisions:
>
>
>  diff -r asf.ofbiz.trunk.1081444 asf.ofbiz.trunk.1081740
>
>
>  --------------------------------------------------------------
>  STEP 13) Update your local (running) copy of ofbiz with the latest changes.
>  --------------------------------------------------------------
>  Suppose you (like me) run the "running" version of ofbiz in /opt/ofbiz.trunk, which you checked out in STEP 9.
>
>
>  You run the update/merge process:
>
>
>  # cd /opt/ofbiz.svn/bin
>  # ./svn_local.sh
>  [lots of output]
>
>
>  Even though you did the above steps, the copy you are running in /opt/ofbiz.trunk is STILL running the old code.  You must also update your running (checked out) code, like this:
>
>
>  # cd /opt/ofbiz.trunk
>  # svn update
>  ....... update statements ............
>
>
>  /etc/init.d/ofbiz.trunk restart ... etc..
>
>
>  Thats it.  If you have problems initially creating the repository, make sure you followed STEP #3.  You can always blow away the /var/svn/repos, and re-init.
>
>
>  If any errors show up, you can always un-comment line #6 "set -x" to show the debug steps.
>
>
>  If you already have a modified ofbiz directory that you want to merge into this process, then that will be tricky, and a lot more work.  However, you could probably do it like this:
>
>
>  Run the above procedure, checking out a new code branch (like in STEP 9).  You then need to detect the changes between your existing, running code and copy each modified (or missing) file/directory (i.e., one by one into the checked out directory (/opt/ofbiz.trunk).  Then, just:
>
>
>  # cd /opt/ofbiz.trunk
>  # svn commit
>
>
>  I hope this helps someone.  Good luck!!
>
>

Re: How to setup a simple ofbiz vendor branch

Posted by Jacques Le Roux <jl...@les7arts.com>.
Hi Mike,

I did not verify anything, but could you please post your message as a comment in https://cwiki.apache.org/confluence/display/OFBIZ/SVN+Tips+-+svn_load_dirs+Vendor+Branch
You can also put your attachment there

Thanks

Jacques
  ----- Original Message ----- 
  From: Mike 
  To: user@ofbiz.apache.org 
  Sent: Thursday, March 17, 2011 8:19 AM
  Subject: How to setup a simple ofbiz vendor branch


  ----------------------------------
  SETUP A SIMPLE OFBIZ VENDOR BRANCH
  ----------------------------------


  I went through the pain of setting up a "vendor branch" of ofbiz, so I thought I'd share it with the community.  The supplied instructions in the wiki seemed confusing, and didn't go into detail.  Since I'm into automation, my script (svn_local.sh) allows the following:


  Keep a local copy of ofbiz (trunk|0904|1004), allow it to be modified, but at the same time have the ability to receive upstream updates from the Apache Ofbiz SVN server, and merge them into your own local copy.  For the most part, this works automatically.


  The attached ofbiz_vendor_branch.tar.gz has the script.


  To clarify, I'm not a subversion expert, so my setup is ultra simple, anonymous read/write, no password, etc.  My svn server is safely behind a firewall, so I'm not worried about multi users, passwords, hackers, etc.  This works for me because I'm a one man show.  Your requirements are probably different.


  To get started, we need to keep local copies of the following:


  http://svn.apache.org/repos/asf/ofbiz/trunk  --or--
  http://svn.apache.org/repos/asf/ofbiz/branches/release09.04  --or--
  http://svn.apache.org/repos/asf/ofbiz/branches/release10.04  --or-- all three!


  These are always kept up to date via "svn update", and are kept in /opt/ofbiz.svn.


  The script (svn_local.sh) allows all three (or more in the future) branches to be tracked.  For me, the best branch for deployment is trunk, because it seems to be the most stable, and gets more attention from the developers.  For the purpose of this setup, I'm just going focus on trunk, but tracking 0904 or 1004 (or all three) is as easy as tweaking a variable (in svn_local.sh).


  The Apache and Local versions are kept in /opt/ofbiz.svn, and are named:


  /opt/ofbiz.svn/asf.ofbiz.0904
  /opt/ofbiz.svn/asf.ofbiz.1004
  /opt/ofbiz.svn/asf.ofbiz.trunk


  The "local" copies are called.
  /opt/ofbiz.svn/opt.ofbiz.0904
  /opt/ofbiz.svn/opt.ofbiz.1004
  /opt/ofbiz.svn/opt.ofbiz.trunk


  NOTE: Regarding this path (/opt/ofbiz.svn).  For simplicity, use the same path (at least initially).  The script resides in the "/opt/ofbiz.svn/bin" directory, and will always place the above checked out directories one level above the script (in /opt/ofbiz.svn).


  Also, this script runs on an Ubuntu host, I've never tried to run this on windows.  However, It might work under cygwin.


  Internally (within the local SVN repository), the directories are organized like this:


  ofbiz/
  ofbiz/asf/
  ofbiz/asf/ofbiz.1004
  ofbiz/asf/ofbiz.trunk
  ofbiz/opt/
  ofbiz/opt/ofbiz.1004
  ofbiz/opt/ofbiz.trunk


  NOTE: If you already have an SVN repository, then I'd fully analyze/test this process (on a separate machine) to see if it "fits" into your local SVN repository w/o clobbering your own stuff.  If you have "ofbiz" at the top of your SVN tree (like above), then there may be issues.  You have been warned!


  These directories are strictly used to track changes to the local repositories.  Your actual names (when you check out a working copy) could be different.  In my case, when I check out the working local copy, I place it in /opt/ofbiz.[version], and this is where I actually fire up ofbiz from (later).


  You could tweak these names, but this will require hacking the script, and it is not recommended, at least until you understand how it works.


  The attached tar file contains the following items:


  # tar ztvf ofbiz_vendor_branch.tar.gz
  drwxr-xr-x root/root         0 2011-03-16 10:38 opt/ofbiz.svn/bin/
  -rwxr-xr-x root/root      6478 2011-03-16 09:36 opt/ofbiz.svn/bin/svn_local.sh
  -rw-r--r-- root/root      9630 2009-05-12 10:25 opt/ofbiz.svn/bin/svn_load_dirs.README
  -rw-r--r-- root/root      7201 2011-03-16 10:12 opt/ofbiz.svn/bin/config
  -rw-r--r-- root/root      7201 2011-03-16 10:12 opt/ofbiz.svn/bin/README
  -rwxr-xr-x root/root     67335 2010-08-27 18:50 opt/ofbiz.svn/bin/svn_load_dirs.pl
  -rwxr-xr-x root/root       436 2010-09-06 11:36 opt/ofbiz.svn/bin/svnserv
  #


  Here are the contents:
  --------------------------------------------------------------
  /opt/ofbiz.svn/bin/svnserv (used to fire up the SVN daemon)
  /opt/ofbiz.svn/bin/svn_load_dirs.pl (NOT written by me)
  /opt/ofbiz.svn/bin/svn_local.sh (MY script, that automates all)
  /opt/ofbiz.svn/bin/config (SVN client config file, discussed later)
  /opt/ofbiz.svn/bin/README (These docs)
  --------------------------------------------------------------


  NOTE: The svn_load_dirs.pl (part of Apache) is a perl script which magically merges the various repositories.  This one works for me, so I provided it.  It DOES require various perl modules that must be satisfied so it properly works.


  To get started, you will need your own SVN repository.  Here are the steps.


  --------------------------------------------------------------
  STEP 1) Create your own local SVN repository
  --------------------------------------------------------------
  # mkdir -p /var/svn/repos
  # svnadmin create /var/svn/repos


  I suggest you use /var/svn/repos, it will make it easier, and my script uses it (later).


  --------------------------------------------------------------
  STEP 2) Tweak SVN for anonymous read-write
  --------------------------------------------------------------
  # vi /var/svn/repos/conf/svnserv.conf


  [general]
  anon-access = write
  auth-access = write
  password-db = passwd


  Copy /opt/ofbiz.svn/bin/svnserv into /etc/init.d (unless you don't already have one), and fire up the svnserv init script.  You may have to tweak it (works for Ubuntu).


  # cp /opt/ofbiz.svn/bin/svnserv /etc/init.d
  # /etc/init.d/svnserv start


  Make sure it's running.


  /# ps -efww|grep svn
  root      6436     1  0 18:47 ?        00:00:00 svnserve -d -r /var/svn/repos


  --------------------------------------------------------------
  STEP 3) Copy the client config to the proper location.
  --------------------------------------------------------------
  NOTE:  The svn client config needs to be copied to the home directory of the user who runs the svn command.  In this case, probably /root/.subversion/config  --or-- place it in (again Ubuntu) /etc/subversion/config, which would make it available to all users on that machine.  Also, if you plan on running ofbiz on a different machine, then you need to make sure this 'config' file is on all machines.  so:


  # cp /opt/ofbiz.svn/bin/config /root/.subversion/config --or--
  # cp /opt/ofbiz.svn/bin/config /etc/subversion/config


  --------------------------------------------------------------
  STEP 4) Create a "svn" DNS entry for your local domain (optional)
  --------------------------------------------------------------
  If you have your own local area network and your own DNS server, it is good practice to create a "svn" host, which is an alias to the host where the local SVN repository exists.  For instance, if your local domain is "internal.net", create "svn.internal.net", which points to the real host.


  --------------------------------------------------------------
  STEP 5) Untar the attached tar file from the root directory
  --------------------------------------------------------------
  # cd /
  # tar zxvf /root/download/ofbiz_vendor_branch.tar.gz


  --------------------------------------------------------------
  STEP 6) Configure the script (choose trunk/branches)
  --------------------------------------------------------------
  # cd /opt/ofbiz.svn/bin
  # vi svn_local.sh


  Set the variables ofbiz_versions and local_svnserv.


  Variable: ofbiz_versions


  All three Ofbiz versions (NOT recommended)
  ofbiz_versions="trunk:trunk branches/release10.04:1004 branches/release09.04:0904"


  Trunk+1004 (also not really recommended)
  ofbiz_versions="trunk:trunk branches/release10.04:1004"


  Just Trunk:
  ofbiz_versions="trunk:trunk"


  Just 1004:
  ofbiz_versions="branches/release10.04:1004"


  The item on the right side of the colon will be used to create the name of the directory entry.  For instance, you check out the branch "branches/release10.04" and it create a directory called "opt.ofbiz.1004".


  If you choose to track multiple branches (not recommended), then your local SVN server will get pretty fat (and slow).  Beware.


  Variable: local_svnserv


  local_svnserv="svn://svn.internal.net"
  #local_svnserv="svn://svn"
  #local_svnserv="file:///var/svn/repos"


  Choose the way you want to access you own local repository.  If you followed the above directions, then you already have the svnserv daemon running. The first one is using the DNS name (so is the second, but there is an /etc/resolv.conf that has "search internal.net" defined).  This is really the recommended way of accessing a local SVN server.  You can then check out the code from ANY machine on your local area network.  If you are running on just a single machine, then you COULD use the "file:///..." method, which is fast (and least flexible).


  --------------------------------------------------------------
  STEP 7) Run the svn_load_dirs.pl utility to make sure it works
  --------------------------------------------------------------
  # cd /opt/ofbiz.svn/bin
  # ./svn_load_dirs.pl


  Look for any perl modules missing, and satisfy the requirements.  You should get the help syntax of the script.


  On Ubuntu, you can do a bunch of "apt-get install ITEM" to satisfy the perl module, or you could use the CPAN method, which consists of a bunch of:


  perl -MCPAN -e "install Digest::MD5"


  Statements until the script is happy.  Don't attempt STEP 8 until svn_load_dirs.pl is happy.


  ALSO:  Check svn_load_dirs.pl and verify line 32:


  my $svn = '/usr/bin/svn';


  Points to the correct svn binary (above is Ubuntu).


  # vi svn_load_dirs.pl


  --------------------------------------------------------------
  STEP 8) Run svn_local.sh in "init" mode
  --------------------------------------------------------------
  NOTE:  Don't forget STEP 3 (svn client "config") or you'll have problems with the next step.


  # cd /opt/ofbiz.svn/bin
  # ./svn_local.sh init
  [lots of output]


  NOTE:  This is only done ONCE (with "init"), to initially populate the repository.


  The script is in debug mode (during init) in case any problems occur.


  --------------------------------------------------------------
  STEP 9) Checkout the "local" (running) branch of the ofbiz repository you want
  --------------------------------------------------------------
  Decide where you want to run ofbiz.  /opt always works for me.


  # trunk example
  # cd /opt
  # svn co svn://SVN_SERVER/ofbiz/opt/ofbiz.trunk/trunk/ ofbiz.trunk --or--
  # svn co file:///var/svn/repos/ofbiz/opt/ofbiz.trunk/trunk/ ofbiz.trunk


  NOTE:  The right argument is the directory that will be created.  You can name it
  anything you want.  I recommend ofbiz.[trunk|branch] to match SVN.


  # 10.04 example
  # cd /opt
  # svn co svn://SVN_SERVER/ofbiz/opt/ofbiz.1004/trunk/ ofbiz.1004 --or--
  # svn co file:///var/svn/repos/ofbiz/opt/ofbiz.1004/trunk/ ofbiz.1004
  ....
  A    ofbiz.trunk/ivy.xml
  A    ofbiz.trunk/startofbizBoth.bat
  A    ofbiz.trunk/KEYS
  A    ofbiz.trunk/rc.ofbiz
  A    ofbiz.trunk/startofbizPos.bat
  Checked out revision 11.
  #


  Notice that even for 1004, you still checkout the "trunk" of the local 1004 repository


  --------------------------------------------------------------
  STEP 10) Check things out, test, etc.
  --------------------------------------------------------------
  Change directory, and run "svn info" You should see a low revision #, like 11.


  # cd /opt/ofbiz.trunk; svn info; svn log


  The "Last Changed Rev:" is probably r11.  The log should show "Initial import...."


  --------------------------------------------------------------
  STEP 11) Change something, commit changes to your local repository
  --------------------------------------------------------------
  # cd /opt/ofbiz.trunk/hot-deploy
  # mkdir newapp
  # svn add newapp
  A       newapp
  # svn commit
  --------------------------------------------------------------
  This is a newapp in hot-deploy
  --This line, and those below, will be ignored--


  A    hot-deploy/newapp
  --------------------------------------------------------------
  Adding         hot-deploy/newapp


  Committed revision 12.


  --------------------------------------------------------------
  STEP 12)  Run updates from Apache OFBIZ, and "merge" changes into your local repo.
  --------------------------------------------------------------
  Sometime later, after the developers tweaked something in trunk, run the following:


  # cd /opt/ofbiz.svn/bin
  # ./svn_local.sh


  If nothing changed, then you'll see:
  --------------------------------------------------------------
  NOTE: FOUND svn_load_dirs.pl in [/opt/ofbiz.svn/bin/svn_load_dirs.pl]
  Remote ASF: http://svn.apache.org/repos/asf/ofbiz/trunk
  Local  ASF: svn://svn/ofbiz/asf/ofbiz.trunk
  Local  OFB: svn://svn/ofbiz/opt/ofbiz.trunk


  http://svn.apache.org/repos/asf/ofbiz/trunk Revision: 1082281
  Last Changed Revisions:  Last:1082281 Current:1082281
  Repository revisions match
  #
  --------------------------------------------------------------
  Otherwise, you'll lots of magical output that hopefully ends up with your local svn repository opt.ofbiz.[trunk|branch] updated with fresh patches/changes from Ofbiz being merged into your own changes being made locally.


  This works automatically for the most part, but on occasion you may have a collision when you might have to accept/reject a merge option.


  The script also creates directories like this:


  /opt/ofbiz.svn/asf.ofbiz.trunk.1079456
  /opt/ofbiz.svn/asf.ofbiz.trunk.1080107
  /opt/ofbiz.svn/asf.ofbiz.trunk.1080776
  /opt/ofbiz.svn/asf.ofbiz.trunk.1081185


  Which are checked out versions of trunk.  These can be blown away if you like, but I like them because I can do stuff like "diffing" between revisions:


  diff -r asf.ofbiz.trunk.1081444 asf.ofbiz.trunk.1081740


  --------------------------------------------------------------
  STEP 13) Update your local (running) copy of ofbiz with the latest changes.
  --------------------------------------------------------------
  Suppose you (like me) run the "running" version of ofbiz in /opt/ofbiz.trunk, which you checked out in STEP 9.


  You run the update/merge process:


  # cd /opt/ofbiz.svn/bin
  # ./svn_local.sh
  [lots of output]


  Even though you did the above steps, the copy you are running in /opt/ofbiz.trunk is STILL running the old code.  You must also update your running (checked out) code, like this:


  # cd /opt/ofbiz.trunk
  # svn update
  ....... update statements ............


  /etc/init.d/ofbiz.trunk restart ... etc..


  Thats it.  If you have problems initially creating the repository, make sure you followed STEP #3.  You can always blow away the /var/svn/repos, and re-init.


  If any errors show up, you can always un-comment line #6 "set -x" to show the debug steps.


  If you already have a modified ofbiz directory that you want to merge into this process, then that will be tricky, and a lot more work.  However, you could probably do it like this:


  Run the above procedure, checking out a new code branch (like in STEP 9).  You then need to detect the changes between your existing, running code and copy each modified (or missing) file/directory (i.e., one by one into the checked out directory (/opt/ofbiz.trunk).  Then, just:


  # cd /opt/ofbiz.trunk
  # svn commit


  I hope this helps someone.  Good luck!!