Hi Stefan^2,

Hi Stefan,

First of all, thank you for the detailed feedback! It is very helpful.

I spent the last two weeks refactoring and reworking the tool. The main changes:
* explicit --verbose mode, much quieter without it
* progress output
* only one common 'normalize' sub-command; actions selected by options
* 'analyze' and the new 'remove-branches' sub-command use the same code
  as 'normalize' and should therefore be consistent
* faster processing with large number of branches and / or high latency networks
I was following ur commits on the mailing list and just tried out the latest version. Great work there. The changes done make this tool so much more usable compared to the old version. I also sent you the regenerated logs (based on the same branch/rev I used for the old tool) just in case comparing the different outputs is useful to you.

One small note: While I do understand the reasoning for the different default switches for analyze/normalize, initially I was surprised a bit that while normalize only ran with --remove-redundant, analyze created the output for --remove-redundant/--combine-ranges/--remove-obsoletes. I would have expected that both commands consistently use the --remove-redundant option only, unless specified.

I must also admit that the old 'normalize' command has a flaw that would result
in the removal of sub-tree mergeinfo that was NOT redundant. The 'analyze'
output was correct, though, and the problem only manifested when sub-tree
mergeinfo could be completely removed. To check whether you have been affected,
do the following:

* c/o the revision before any m/i changes were committed.
* run the latest tool 'normalize --remove-redundant --remove-obsoletes'
* run 'svn pg svn:mergeinfo -R /path/to/working/copy --xml | grep "path= " '
  to get a list of nodes that still have mergeinfo on them
* run the same 'svn pg ...' command on the committed changes produced by
  the old tool
* compare the output, looking for m/i that only the old tool removed
* if need be, manually fix them
Thanks for letting me know. I ran the tests and verified I didn't run into this issue here.

    Also it'd be good to add a more automated "one-step" command to
    simplify the usage even further. So a user/admin could simply
    start the tool (for instance svn-mergeinfo-normalizer
    clean-up-mergeinfo [path] -drop-obsolete-branches) which would
    more or less equal running the tool several times in the following
    sequence:
    svn-mergeinfo-normalizer.exe clear-obsoletes [path]
    svn-mergeinfo-normalizer.exe normalize [path]
    svn-mergeinfo-normalizer.exe combine-ranges [path]
    svn-mergeinfo-normalizer.exe analyse [path] -stats

    (where I'd envision the -stats param for the analyse command would
    print out a summary of how many remaining mergeinfos could not be
    normalized (if any) and pointing the user to run the full analysis
    step to get a more detailed output).


Try the new command structure and options. Is that roughly what you had in mind?
Absolutely. Feels right to me (with the addition of the note mentioned above).

    For the long term I hope that the functionality provided by this
    tool would become obsolete and the issues for which you have to
    use this tool are dealt with directly in the SVN core so these
    would not surface at all anymore (aka: no need to normalize
    mergeinfos manually).

Newer releases of SVN try to elide sub-tree mergeinfo as they go.
However, they can't be as thourough as this tool (for performance
reasons) and will not "fix" old mergeinfo. The one thing that it will
probably never do is remove mergeinfo for deleted branches because
that is a potentially destructive operation and only o.k. if you never
want to merge from those deleted branches again (99.9% of users).
Fully agreed with the dropping of branch-mergeinfos (in the current merge(info) design of SVN). Maybe an interim solution which might be worth considering is integrating the other part of the normalizer's tool functionality into the SVN-cleanup-command to some extend (or integrate it into the svn-command somehow). At least that way it would be easier accessible to a broader audience and also be more likely be integrated in 3rd-party tools (like TSVN, etc.).

    The other thing might be to add some stat-output to normalize /
    combine-ranges / clear-obsoletes to report how many mergeinfo
    entries could be normalized, or how many obsolete paths were removed.
    Since the commands can take a few minutes to run, some kind of
    "progress output" might also be useful, so the user knows the
    process did not deadlock or ran into an endless loop.


There is progress info now while the log gets downloaded and for the
'normalize' command processing when not in --verbose mode.
I also see the processing info when running normalize -v. Honestly I find this quite useful, but if u intended it to be not that way, then I guess I've to report it's bugged here (in this case voting for keeping the bug though :) ).

Btw. Your idea to add a command to specify which branches are to be dropped when running the remove-obsoletes command: This is actually something I'd also use once it's available. :-) So looking forward to it being added.

Once more: thanks all your work.

Regards,
Stefan

Reply via email to