'svn merge' error reporting
Simple bugs, and enhancements to error reporting.
- This error needs a higher-level message:
$ svn merge -r1181882:1177606 ^/trunk /.../subversion/svn/util.c:913: (apr_err=160013) /.../subversion/libsvn_client/merge.c:11057: (apr_err=160013) /.../subversion/libsvn_client/merge.c:11011: (apr_err=160013) /.../subversion/libsvn_client/merge.c:11011: (apr_err=160013) /.../subversion/libsvn_client/merge.c:10959: (apr_err=160013) /.../subversion/libsvn_client/merge.c:6532: (apr_err=160013) /.../subversion/libsvn_client/ra.c:611: (apr_err=160013) /.../subversion/libsvn_ra_serf/getlocationsegments.c:247: (apr_err=160013) /.../subversion/libsvn_ra_serf/util.c:2462: (apr_err=160013) svn: E160013: '/repos/asf/!svn/bc/1182329/trunk' path not found
- The message about recording mergeinfo at the end of a catch-up merge seems to report the wrong starting revision:
$ svn merge ^/subversion/trunk --- Merging r1182861 through r1186071 into '.': U Makefile.in [...] --- Recording mergeinfo for merge of r1177607 through r1186071 into '.': U . $ svn pg -rBASE svn:mergeinfo | grep trunk /subversion/trunk:1177607-1182860 $ svn pg svn:mergeinfo | grep trunk /subversion/trunk:1177607-1186071
- The short description of '--ignore-ancestry' should mention that it disables merge tracking. The help for the 'merge' command already does, right at the end of a very long description.
$ svn help merge [...] The --ignore-ancestry option prevents merge tracking and thus ignores mergeinfo, neither considering it nor recording it. Valid options: [...] --ignore-ancestry : ignore ancestry when calculating merges
- Inconsistent interpretation of merge source when given as a WC path. It looks for the working-version path in the copy-from rev.
$ svn cp ../subversion-p/COMMITTERS@1100000 ../subversion-p/tools/f A tools/f $ svn merge tools/f svn: E160013: '/repos/asf/!svn/rvr/1100000/subversion/trunk/tools/f' path not foundOptions:
- Refuse to use the working version of a WC tree with local mods. When there are no local mods, the working version is the same as the base version so it doesn't matter that the user implicitly specifies the working version while we require the base version.
- Follow the specified working version properly and use the working version (including its local mods) as the upper limit.
- [Bad] Look for the copied-from path in the copied-from rev and use that as the upper limit.
- [Bad] Use the base version rather than the working version of the specified path, even though the user implicitly referred to the working version.
- Simple merge command (with or without --ignore-ancestry) tries to merge from own branch. Should refuse.
$ svn merge COMMITTERS $ svn merge subversion/svn_private_config.hw svn: E160013: '/repos/asf/!svn/rvr/850153/subversion/trunk/subversion/svn_private_config.hw' path not found $ svn merge --ignore-ancestry COMMITTERS --- Merging r842828 through r1190217 into 'COMMITTERS': G COMMITTERS $ svn merge --ignore-ancestry subversion/svn_private_config.hw Conflict discovered in '/home/julianfoad/src/subversion-d/subversion/svn_private_config.hw'. Select: [...]: mf --- Merging r838469 through r850123 into 'subversion/svn_private_config.hw': UG subversion/svn_private_config.hw $ svn st COMMITTERS subversion/svn_private_config.hw
- Simple merge command with a WC source path selects a target path that is not ".". The help says the default target is ".".
$ svn merge --ignore-ancestry ../subversion-g/COMMITTERS --- Merging r842828 through r1177606 into '/home/julianfoad/src/subversion-g/COMMITTERS': [...]
- Sync merge with --ignore-ancestry does not make sense. Should not be allowed.
$ svn merge --ignore-ancestry ^/subversion/trunk --- Merging r836421 through r1195874 into '.':
- Bad parsing of a local path argument '.' with a peg revision specifier. (Not specific to merge, presumably.)
$ svn merge .@COMMITTED .@PREV . svn: E125001: '@COMMITTED' is just a peg revision. Maybe try '@COMMITTED@' instead?
- A merge source specified as a local path with a peg revision is not handled, and the error message is unhelpful.
$ svn merge subversion@COMMITTED subversion@PREV subversion svn: E195000: A path under version control is needed for this operation
Elsewhere error reporting
* Commit to an out-of-date DAV mirror:
svn: Commit failed (details follow): svn: The specified baseline is not the latest baseline, so it may not be checked out.
* err && ! err->apr_err
Generated by mod_dav_svn:
svn: E000000: A reported revision is higher than the current repository HEAD revision. Perhaps the repository is out of date with respect to the master repository?