Hi Stefan,
If you have a working build environment for Subversion,
you might have a look at this branch:
https://svn.apache.org/repos/asf/subversion/branches/svn-mergeinfo-normalizer
It provides a new tool that you might find useful:
./tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer
which allows you to analyse and reduce the mergeinfo in a
working copy.
It also tells you which mergeinfo cannot be elided and _why_.
svn-mergeinfo-normalizer analyse /path/to/working/copy
svn-mergeinfo-normalizer normalize /path/to/working/copy
svn-mergeinfo-normalizer analyse /path/to/working/copy
svn-mergeinfo-normalizer clear-obsoletes /path/to/working/copy
svn-mergeinfo-normalizer analyse /path/to/working/copy
svn-mergeinfo-normalizer combine-ranges /path/to/working/copy
svn-mergeinfo-normalizer analyse /path/to/working/copy
CAVEAT: This tool has not been reviewed and thoroughly tested.
You should only commit changes that you have verified to be
correct.
Please let us know what your results were.
[...]
I gave the normalizer a first run and using it I was able to
reduce our record of mergeinfos quite significantly without too
much manual work. So alltogether I'd consider this a really useful
tool.
I sent you the logs per PM so you can take a look at all the
details yourself (some of the information contained in the logs I
do not want to make publicly available on the mailing list and
it's quite some large logs (several MB)).
Those logs are really helpful. I've already found a number of
things that should be improved:
* Branches should always be sorted by name
* 'analyze' should also check whether obsolete branches can be elided.
The 'normalize' step already does this.
I already tested ur committed changes from yesterday and see that these
changes have been added. Looks quite good and especially the sorted
branches helps reviewing the analyse-output IMO.
[...]
Note that running normalize at the beginning, could not remove any
redundant mergeinfos at all, since there were always some
revisions missing. However running the following sequence of
commands first:
1. clear-obsoletes
2. combine-ranges
3. normalize
Then was able to remove a significant amount of redundant
mergeinfos (eliminating mergeinfos on over 100 files).
I guess that was due to 'clear-obsoletes' removing lots of old merges
from old branches where sub-tree mergeinfo could indeed not be elided.
Once the extended analyze output is available as described above,
you should be able to verify that hypothesis. That said, removing
obsolete branches first is certainly a very efficient workflow.
That's correct and I could confirm it with the new analyze output to
actually having been the case here (also sent u the full output so u can
confirm --- sample for such a case was this one in the logs:
XR/clean_source_branch/data/shaderfx/medium/XU_effects_layered_unlit2_new.fx
(note that the same applies to basically all files/records in
data/shaderfx/xxx so this applied to the majority of the cases)
[...]
There were still some remaining records. These I managed to get
rid of by manually merging the missing ranges.
There are also a few genuine sub-tree merges that look like a sync
with some vendor branch. Some might be replaced by svn:externals -
which comes with a few restrictions as well as benefits.
I'm aware of the possibility to use svn:externals for cases like these.
The reason we ended-up with not using svn:externals in the cases shown
in the logs is mostly historically.
I introduced SVN in our company when I started here around 2007/2008
(migrating from MS VSS) at which time we started with SVN 1.5. As you
most likely know way better than me, while the svn-externals
concept/support evolved significantly over the past years (and I'd call
it quite a stable and useful feature in the current versions), there
were several issues/bugs/limitations regarding svn-externals in 1.5/1.6/1.7.
Since we had to invest a lot of work resolving some of these, we
ended-up not using svn-externals in the cases here. Also like you state
urself there are certain advantages here, which in our case overweight
the disadvantages atm.
Regards,
Stefan