Hi,

On 17 November 2010 05:35, Michael Hope <michael.hope@linaro.org> wrote:
> 1. How easy is it to frequently merge in SVN?  It used to be terrible
> as you had to manually track the merges.  These days can you do a 'svn
> merge trunk' and have it just work?

I asked Mike Meissner to answer this question. Mike is very experienced in GCC and GCC SVN branch management. I am attaching his reply.

Ira


I sent this recently to ppc64-toolchain@linux.ibm.com on how to use
svnmerge to manage branches:

This script (also ~meissner/meissner/bin.sh/svnmerge) is what I use to
update svn directories, such as ibm-gcc-4_5-branch.  I think I originally got it
from Ben E. and it may be in the contrib directory.

Typically the way I start a branch, such as my normal power7-meissner
branch, I do the following:
   $ export TRUNK="svn+ssh://@gcc.gnu.org/svn/gcc/trunk"
   $ export BNAME="power7-meissner"
   $ export BRANCH="svn+ssh://@gcc.gnu.org/svn/gcc/branches/ibm/$BNAME"
   $ export SRC="$HOME/fsf-src"
   $ svn delete -m"delete old branch" $BRANCH
   $ svn copy -m"Clone new branch" $TRUNK $BRANCH
   $ cd $SRC
   $ svn co $BRANCH
   $ cd $BNAME
   $ svnmerge init
   $ svn update                # this is sometimes needed
   $ svn commit -m'Create svnmerge init info'
   $ export REV="xxxx"         # substitute subversion id for xxxxx
   $ echo "power7-meissner branch, based on $REV." > gcc/REVISION
   $ touch gcc/ChangeLog.power7
   $ <edit gcc/ChangeLog.power to create initial contents>
   $ svn add gcc/ChangeLog.power gcc/REVISION
   $ svn commit -m'Add REVISION to branch'

In particular, creating GCC/REVISION allows you to tell what subversion
revision the source is based against.  You can find the information via:
                $ svn propget svnmerge-integrated

but it is a lot easier if you have a compiler tree to do gcc -v.  After you
do a propget, you will need to do a svn update.

In this case, I use gcc/ChangeLog.power7 to hold the ChangeLog entries
local to  the branch.  That way I can see a summary of the changes, but not pollute
the normal ChangeLog files.

To do merges, you need to make sure that all local changes are checked into
the branch.  Then do:
   $ cd $SRC/$BNAME
   $ svnmerge merge
   $ <edit gcc/REVISION and ChangeLog.power7 to indicate merge>
   $ <test merged files, if satisified, check them in>
   $ export REV="xxxx"         # substitute subversion id for xxxxx
   $ svn update                # just in case
   $ svn commit -m"Update to subversion id $REV"

Now, to create a patch file do, make sure the files are checked in:
    $ cd $SRC/$BNAME
    $ export PATCHFILE="$HOME/patches/mypatch.patch01"
    $ <make ChangeLog entries in $PATCHFILE>
    $ svn diff --old $TRUNK --new . -r $REV >> $PATCHFILE
    $ <delete ChangeLog.power7, REVISION, property changes from $PATCHFILE>
    $ submit patch

To see if there are changes to be merge in:
    $ svnmerge avail

For example on the ibm-gcc-4_5-branch, the following changes are available
to be merged in: 164657-166510 when I originally wrote this message on the 9th
of November, and Peter has subsequently updated the merge.

I put the folliwng in ~/.subversion/config to provide my own diff command:
   ### Set diff-cmd to the absolute path of your 'diff' program.
   ###   This will override the compile-time default, which is to use
   ###   Subversion's internal diff implementation.
   diff-cmd = /home/meissner/bin.sh/svndiff

Every so often, I find svnmerge misses, for example in deleting
directories.
It is helpful to do a diff from the mainline every so often to make sure
you  are not missing newly created files or still are keeping older files or
just missed a change.

I'll include svndiff for the smarter svndiff command and mrm-changelog.el
that looks for the ChangeLog.<name> files I use in different branches.  Feel
free to contact me to clarify some stuff.

--
Michael Meissner, IBM
5 Technology Place Drive, M/S 2757, Westford, MA 01886-3141, USA
meissner@linux.vnet.ibm.com              fax +1 (978) 399-6899
(See attached file: svnmerge)(See attached file: svndiff)(See attached
file: mrm-changelog.el)