You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by pb...@apache.org on 2009/12/12 05:43:34 UTC
svn commit: r889890 - in /subversion/branches/1.6.x-r889840: ./ CHANGES
STATUS subversion/include/private/svn_mergeinfo_private.h
subversion/include/svn_mergeinfo.h subversion/libsvn_subr/mergeinfo.c
subversion/tests/libsvn_subr/mergeinfo-test.c
Author: pburba
Date: Sat Dec 12 04:43:33 2009
New Revision: 889890
URL: http://svn.apache.org/viewvc?rev=889890&view=rev
Log:
Merge r889840 from ^/subversion/trunk.
Resolve some very minor text conflicts in mergeinfo.c due to differing local
variable names.
Modified:
subversion/branches/1.6.x-r889840/ (props changed)
subversion/branches/1.6.x-r889840/CHANGES (props changed)
subversion/branches/1.6.x-r889840/STATUS
subversion/branches/1.6.x-r889840/subversion/include/private/svn_mergeinfo_private.h
subversion/branches/1.6.x-r889840/subversion/include/svn_mergeinfo.h
subversion/branches/1.6.x-r889840/subversion/libsvn_subr/mergeinfo.c
subversion/branches/1.6.x-r889840/subversion/tests/libsvn_subr/mergeinfo-test.c
Propchange: subversion/branches/1.6.x-r889840/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Dec 12 04:43:33 2009
@@ -1,50 +1,49 @@
+/subversion/branches/1.5.x-r30215:870312
+/subversion/branches/1.6.x-UNC-paths:876471-876545
+/subversion/branches/1.6.x-dirent-basename:876130-876262
/subversion/branches/1.6.x-future-proof:880259-884209
-/subversion/trunk:879688,880274-880275,880474,881905,886164,886197
-subversion/branches/1.5.x-r30215:870312
-subversion/branches/1.6.x-UNC-paths:876471-876545
-subversion/branches/1.6.x-dirent-basename:876130-876262
-subversion/branches/1.6.x-issue3443:878597-879480
-subversion/branches/1.6.x-no-svn_uri:876360-876415
-subversion/branches/1.6.x-r36178:877876-877884
-subversion/branches/1.6.x-r36252:876328-876788
-subversion/branches/1.6.x-r37622:877699-877993
-subversion/branches/1.6.x-r37627:877704-877928
-subversion/branches/1.6.x-r37857:877932-877936
-subversion/branches/1.6.x-r37953:879809-880071
-subversion/branches/1.6.x-r37988:878063-878897
-subversion/branches/1.6.x-r38000:879083-879767
-subversion/branches/1.6.x-r38222:878299-878891
-subversion/branches/1.6.x-r38572:878661-878666
-subversion/branches/1.6.x-r38799:878880-878917
-subversion/branches/1.6.x-r38927:879002-879176
-subversion/branches/1.6.x-r39557:879668-879907
-subversion/branches/1.6.x-r39887:880024-880066
-subversion/branches/bdb-reverse-deltas:872050-872529
-subversion/branches/diff-callbacks3:870059-870761
-subversion/branches/dont-save-plaintext-passwords-by-default:870728-871118
-subversion/branches/double-delete:870511-872970
-subversion/branches/file-externals:871779-873302
-subversion/branches/fs-rep-sharing:869036-873803
-subversion/branches/fsfs-pack:873717-874575
-subversion/branches/gnome-keyring:870558-871410
-subversion/branches/in-memory-cache:869829-871452
-subversion/branches/issue-2843-dev:871432-874179
-subversion/branches/issue-3000:871713,871716-871719,871721-871726,871728,871734
-subversion/branches/issue-3067-deleted-subtrees:873375-874084
-subversion/branches/issue-3148-dev:875193-875204
-subversion/branches/issue-3220-dev:872210-872226
-subversion/branches/issue-3334-dirs:875156-875867
-subversion/branches/kwallet:870785-871314
-subversion/branches/log-g-performance:870941-871032
-subversion/branches/merge-skips-obstructions:874525-874615
-subversion/branches/reintegrate-improvements:873853-874164
-subversion/branches/svn-mergeinfo-enhancements:870119-870195,870197-870288
-subversion/branches/svnpatch-diff:871905,871986
-subversion/branches/svnserve-logging:869828-870893
-subversion/branches/tc-issue-3334:874697-874773
-subversion/branches/tc-merge-notify:874017-874062
-subversion/branches/tc-resolve:874191-874239
-subversion/branches/tc_url_rev:874351-874483
-subversion/branches/tree-conflicts:868291-873154
-subversion/branches/tree-conflicts-notify:873926-874008
-subversion/trunk:875965,875968,876004,876012,876017,876019,876022,876024,876041-876042,876048,876051,876055-876056,876059,876083,876091,876097,876101,876109,876123-876125,876129,876132,876138,876160,876167,876180,876185,876205,876223-876225,876230,876233,876252,876256,876283,876287,876312,876326-876327,876330,876366,876372,876374,876376,876383,876386,876442,876456-876457,876462-876464,876467,876469,876480,876486,876495-876497,876516-876518,876524,876526,876583,876601,876614,876628,876633,876641,876659,876687,876689,876705,876715,876726,876760,876763,876794,876804,876815-876816,876821,876825,876837,876840-876841,876843,876849,876857-876858,876873,876890,876897,876905,876908,876925,876931,876934,876948-876949,876953,876987,876993,877011,877028-877029,877038,877119,877127,877146,877157,877191,877195,877211,877230,877234,877237,877243,877249,877259,877261,877304,877319,877407,877437,877441-877442,877453,877459,877472,877544,877553,877565,877568,877573,877593,877601,877612,877667
,877681,877692,877696,877701,877720,877730,877784,877793,877797,877809,877815,877819,877821,877842,877848,877853,877867,877869,877873,877901,877909,877916,877931,877942,877953,877964,877968,877970,877981-877982,878005,878013,878015,878020,878046,878053,878062,878074,878080,878089,878091,878093,878095,878127,878129,878131,878142,878173-878176,878240,878242,878255,878272,878279,878296-878297,878303,878335,878338,878353,878364,878367-878368,878385,878462,878484,878491,878498,878532,878595,878646,878659,878673,878682-878683,878690-878691,878693,878723,878760-878761,878873,878875,878877,878879,878905,878915,878924-878925,878946,878949,878955,878960,878970,878981,879001,879033,879056,879074,879076,879081-879082,879105,879126,879148,879170,879198-879199,879201,879271,879293,879357,879375-879376,879403,879631,879635-879636,879709-879711,879747,879954,879961,880082,880095,880105,880162,880226
+/subversion/branches/1.6.x-issue3443:878597-879480
+/subversion/branches/1.6.x-no-svn_uri:876360-876415
+/subversion/branches/1.6.x-r36178:877876-877884
+/subversion/branches/1.6.x-r36252:876328-876788
+/subversion/branches/1.6.x-r37622:877699-877993
+/subversion/branches/1.6.x-r37627:877704-877928
+/subversion/branches/1.6.x-r37857:877932-877936
+/subversion/branches/1.6.x-r37953:879809-880071
+/subversion/branches/1.6.x-r37988:878063-878897
+/subversion/branches/1.6.x-r38000:879083-879767
+/subversion/branches/1.6.x-r38222:878299-878891
+/subversion/branches/1.6.x-r38572:878661-878666
+/subversion/branches/1.6.x-r38799:878880-878917
+/subversion/branches/1.6.x-r38927:879002-879176
+/subversion/branches/1.6.x-r39557:879668-879907
+/subversion/branches/1.6.x-r39887:880024-880066
+/subversion/branches/bdb-reverse-deltas:872050-872529
+/subversion/branches/diff-callbacks3:870059-870761
+/subversion/branches/dont-save-plaintext-passwords-by-default:870728-871118
+/subversion/branches/double-delete:870511-872970
+/subversion/branches/file-externals:871779-873302
+/subversion/branches/fs-rep-sharing:869036-873803
+/subversion/branches/fsfs-pack:873717-874575
+/subversion/branches/gnome-keyring:870558-871410
+/subversion/branches/in-memory-cache:869829-871452
+/subversion/branches/issue-2843-dev:871432-874179
+/subversion/branches/issue-3000:871713,871716-871719,871721-871726,871728,871734
+/subversion/branches/issue-3067-deleted-subtrees:873375-874084
+/subversion/branches/issue-3148-dev:875193-875204
+/subversion/branches/issue-3220-dev:872210-872226
+/subversion/branches/issue-3334-dirs:875156-875867
+/subversion/branches/kwallet:870785-871314
+/subversion/branches/log-g-performance:870941-871032
+/subversion/branches/merge-skips-obstructions:874525-874615
+/subversion/branches/reintegrate-improvements:873853-874164
+/subversion/branches/svn-mergeinfo-enhancements:870119-870195,870197-870288
+/subversion/branches/svnpatch-diff:871905,871986
+/subversion/branches/svnserve-logging:869828-870893
+/subversion/branches/tc-issue-3334:874697-874773
+/subversion/branches/tc-merge-notify:874017-874062
+/subversion/branches/tc-resolve:874191-874239
+/subversion/branches/tc_url_rev:874351-874483
+/subversion/branches/tree-conflicts:868291-873154
+/subversion/branches/tree-conflicts-notify:873926-874008
+/subversion/trunk:875965,875968,876004,876012,876017,876019,876022,876024,876041-876042,876048,876051,876055-876056,876059,876083,876091,876097,876101,876109,876123-876125,876129,876132,876138,876160,876167,876180,876185,876205,876223-876225,876230,876233,876252,876256,876283,876287,876312,876326-876327,876330,876366,876372,876374,876376,876383,876386,876442,876456-876457,876462-876464,876467,876469,876480,876486,876495-876497,876516-876518,876524,876526,876583,876601,876614,876628,876633,876641,876659,876687,876689,876705,876715,876726,876760,876763,876794,876804,876815-876816,876821,876825,876837,876840-876841,876843,876849,876857-876858,876873,876890,876897,876905,876908,876925,876931,876934,876948-876949,876953,876987,876993,877011,877028-877029,877038,877119,877127,877146,877157,877191,877195,877211,877230,877234,877237,877243,877249,877259,877261,877304,877319,877407,877437,877441-877442,877453,877459,877472,877544,877553,877565,877568,877573,877593,877601,877612,87766
7,877681,877692,877696,877701,877720,877730,877784,877793,877797,877809,877815,877819,877821,877842,877848,877853,877867,877869,877873,877901,877909,877916,877931,877942,877953,877964,877968,877970,877981-877982,878005,878013,878015,878020,878046,878053,878062,878074,878080,878089,878091,878093,878095,878127,878129,878131,878142,878173-878176,878240,878242,878255,878272,878279,878296-878297,878303,878335,878338,878353,878364,878367-878368,878385,878462,878484,878491,878498,878532,878595,878646,878659,878673,878682-878683,878690-878691,878693,878723,878760-878761,878873,878875,878877,878879,878905,878915,878924-878925,878946,878949,878955,878960,878970,878981,879001,879033,879056,879074,879076,879081-879082,879105,879126,879148,879170,879198-879199,879201,879271,879293,879357,879375-879376,879403,879631,879635-879636,879688,879709-879711,879747,879954,879961,880082,880095,880105,880162,880226,880274-880275,880474,881905,886164,886197,889840
Propchange: subversion/branches/1.6.x-r889840/CHANGES
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Dec 12 04:43:33 2009
@@ -1,50 +1,49 @@
+/subversion/branches/1.5.x-r30215/CHANGES:870312
+/subversion/branches/1.6.x-UNC-paths/CHANGES:876471-876545
+/subversion/branches/1.6.x-dirent-basename/CHANGES:876130-876262
/subversion/branches/1.6.x-future-proof/CHANGES:880259-884209
-/subversion/trunk/CHANGES:879688,880274-880275,880474,881905,886164,886197
-subversion/branches/1.5.x-r30215/CHANGES:870312
-subversion/branches/1.6.x-UNC-paths/CHANGES:876471-876545
-subversion/branches/1.6.x-dirent-basename/CHANGES:876130-876262
-subversion/branches/1.6.x-issue3443/CHANGES:878597-879480
-subversion/branches/1.6.x-no-svn_uri/CHANGES:876360-876415
-subversion/branches/1.6.x-r36178/CHANGES:877876-877884
-subversion/branches/1.6.x-r36252/CHANGES:876328-876788
-subversion/branches/1.6.x-r37622/CHANGES:877699-877993
-subversion/branches/1.6.x-r37627/CHANGES:877704-877928
-subversion/branches/1.6.x-r37857/CHANGES:877932-877936
-subversion/branches/1.6.x-r37953/CHANGES:879809-880071
-subversion/branches/1.6.x-r37988/CHANGES:878063-878897
-subversion/branches/1.6.x-r38000/CHANGES:879083-879767
-subversion/branches/1.6.x-r38222/CHANGES:878299-878891
-subversion/branches/1.6.x-r38572/CHANGES:878661-878666
-subversion/branches/1.6.x-r38799/CHANGES:878880-878917
-subversion/branches/1.6.x-r38927/CHANGES:879002-879176
-subversion/branches/1.6.x-r39557/CHANGES:879668-879907
-subversion/branches/1.6.x-r39887/CHANGES:880024-880066
-subversion/branches/bdb-reverse-deltas/CHANGES:872050-872529
-subversion/branches/diff-callbacks3/CHANGES:870059-870761
-subversion/branches/dont-save-plaintext-passwords-by-default/CHANGES:870728-871118
-subversion/branches/double-delete/CHANGES:870511-872970
-subversion/branches/file-externals/CHANGES:871779-873302
-subversion/branches/fs-rep-sharing/CHANGES:869036-873803
-subversion/branches/fsfs-pack/CHANGES:873717-874575
-subversion/branches/gnome-keyring/CHANGES:870558-871410
-subversion/branches/in-memory-cache/CHANGES:869829-871452
-subversion/branches/issue-2843-dev/CHANGES:871432-874179
-subversion/branches/issue-3000/CHANGES:871713,871716-871719,871721-871726,871728,871734
-subversion/branches/issue-3067-deleted-subtrees/CHANGES:873375-874084
-subversion/branches/issue-3148-dev/CHANGES:875193-875204
-subversion/branches/issue-3220-dev/CHANGES:872210-872226
-subversion/branches/issue-3334-dirs/CHANGES:875156-875867
-subversion/branches/kwallet/CHANGES:870785-871314
-subversion/branches/log-g-performance/CHANGES:870941-871032
-subversion/branches/merge-skips-obstructions/CHANGES:874525-874615
-subversion/branches/reintegrate-improvements/CHANGES:873853-874164
-subversion/branches/svn-mergeinfo-enhancements/CHANGES:870119-870195,870197-870288
-subversion/branches/svnpatch-diff/CHANGES:871905,871986
-subversion/branches/svnserve-logging/CHANGES:869828-870893
-subversion/branches/tc-issue-3334/CHANGES:874697-874773
-subversion/branches/tc-merge-notify/CHANGES:874017-874062
-subversion/branches/tc-resolve/CHANGES:874191-874239
-subversion/branches/tc_url_rev/CHANGES:874351-874483
-subversion/branches/tree-conflicts/CHANGES:868291-873154
-subversion/branches/tree-conflicts-notify/CHANGES:873926-874008
-subversion/trunk/CHANGES:836421-841355,875962-880126,880162,880226
+/subversion/branches/1.6.x-issue3443/CHANGES:878597-879480
+/subversion/branches/1.6.x-no-svn_uri/CHANGES:876360-876415
+/subversion/branches/1.6.x-r36178/CHANGES:877876-877884
+/subversion/branches/1.6.x-r36252/CHANGES:876328-876788
+/subversion/branches/1.6.x-r37622/CHANGES:877699-877993
+/subversion/branches/1.6.x-r37627/CHANGES:877704-877928
+/subversion/branches/1.6.x-r37857/CHANGES:877932-877936
+/subversion/branches/1.6.x-r37953/CHANGES:879809-880071
+/subversion/branches/1.6.x-r37988/CHANGES:878063-878897
+/subversion/branches/1.6.x-r38000/CHANGES:879083-879767
+/subversion/branches/1.6.x-r38222/CHANGES:878299-878891
+/subversion/branches/1.6.x-r38572/CHANGES:878661-878666
+/subversion/branches/1.6.x-r38799/CHANGES:878880-878917
+/subversion/branches/1.6.x-r38927/CHANGES:879002-879176
+/subversion/branches/1.6.x-r39557/CHANGES:879668-879907
+/subversion/branches/1.6.x-r39887/CHANGES:880024-880066
+/subversion/branches/bdb-reverse-deltas/CHANGES:872050-872529
+/subversion/branches/diff-callbacks3/CHANGES:870059-870761
+/subversion/branches/dont-save-plaintext-passwords-by-default/CHANGES:870728-871118
+/subversion/branches/double-delete/CHANGES:870511-872970
+/subversion/branches/file-externals/CHANGES:871779-873302
+/subversion/branches/fs-rep-sharing/CHANGES:869036-873803
+/subversion/branches/fsfs-pack/CHANGES:873717-874575
+/subversion/branches/gnome-keyring/CHANGES:870558-871410
+/subversion/branches/in-memory-cache/CHANGES:869829-871452
+/subversion/branches/issue-2843-dev/CHANGES:871432-874179
+/subversion/branches/issue-3000/CHANGES:871713,871716-871719,871721-871726,871728,871734
+/subversion/branches/issue-3067-deleted-subtrees/CHANGES:873375-874084
+/subversion/branches/issue-3148-dev/CHANGES:875193-875204
+/subversion/branches/issue-3220-dev/CHANGES:872210-872226
+/subversion/branches/issue-3334-dirs/CHANGES:875156-875867
+/subversion/branches/kwallet/CHANGES:870785-871314
+/subversion/branches/log-g-performance/CHANGES:870941-871032
+/subversion/branches/merge-skips-obstructions/CHANGES:874525-874615
+/subversion/branches/reintegrate-improvements/CHANGES:873853-874164
+/subversion/branches/svn-mergeinfo-enhancements/CHANGES:870119-870195,870197-870288
+/subversion/branches/svnpatch-diff/CHANGES:871905,871986
+/subversion/branches/svnserve-logging/CHANGES:869828-870893
+/subversion/branches/tc-issue-3334/CHANGES:874697-874773
+/subversion/branches/tc-merge-notify/CHANGES:874017-874062
+/subversion/branches/tc-resolve/CHANGES:874191-874239
+/subversion/branches/tc_url_rev/CHANGES:874351-874483
+/subversion/branches/tree-conflicts/CHANGES:868291-873154
+/subversion/branches/tree-conflicts-notify/CHANGES:873926-874008
+/subversion/trunk/CHANGES:836421-841355,875962-880126,880162,880226,880274-880275,880474,881905,886164,886197,889840
Modified: subversion/branches/1.6.x-r889840/STATUS
URL: http://svn.apache.org/viewvc/subversion/branches/1.6.x-r889840/STATUS?rev=889890&r1=889889&r2=889890&view=diff
==============================================================================
--- subversion/branches/1.6.x-r889840/STATUS (original)
+++ subversion/branches/1.6.x-r889840/STATUS Sat Dec 12 04:43:33 2009
@@ -161,14 +161,16 @@
Votes:
+1: stsp
- * r888979, r889081
- Make 'svnadmin load --parent-dir PATH' smart enough to know to prepend a
- leading slash onto PATH when using it as a prefix for fixed-up mergeinfo.
+ * r889840
+ When producing svn_mergeinfo_t from string representations, or vice-versa,
+ tolerate relative merge source paths, but convert such paths to absolute
+ paths in the resulting string/mergeinfo.
Justification:
- This bug is the reason why all the mergeinfo in our project
- history at the moment is syntactically invalid.
+ This prevents any syntactically invalid mergeinfo created by issue #3547
+ from breaking just about everything that uses mergeinfo, see http://
+ mail-archives.apache.org/mod_mbox/subversion-dev/200912.mbox/browser.
Votes:
- +1: cmpilato, stylesen
+ +1: pburba
Veto-blocked changes:
@@ -205,3 +207,12 @@
Approved changes:
=================
+
+ * r888979, r889081
+ Make 'svnadmin load --parent-dir PATH' smart enough to know to prepend a
+ leading slash onto PATH when using it as a prefix for fixed-up mergeinfo.
+ Justification:
+ This bug is the reason why all the mergeinfo in our project
+ history at the moment is syntactically invalid.
+ Votes:
+ +1: cmpilato, stylesen, pburba
Modified: subversion/branches/1.6.x-r889840/subversion/include/private/svn_mergeinfo_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/1.6.x-r889840/subversion/include/private/svn_mergeinfo_private.h?rev=889890&r1=889889&r2=889890&view=diff
==============================================================================
--- subversion/branches/1.6.x-r889840/subversion/include/private/svn_mergeinfo_private.h (original)
+++ subversion/branches/1.6.x-r889840/subversion/include/private/svn_mergeinfo_private.h Sat Dec 12 04:43:33 2009
@@ -87,7 +87,10 @@
appropriate newline terminated string. If KEY_PREFIX is not NULL then
prepend KEY_PREFIX to each key (path) in *OUTPUT. if VAL_PREFIX is not
NULL then prepend VAL_PREFIX to each merge source:rangelist line in
- *OUTPUT. */
+ *OUTPUT.
+
+ Any relative merge source paths in the mergeinfo in CATALOG are converted
+ to absolute paths in *OUTPUT. */
svn_error_t *
svn_mergeinfo__catalog_to_formatted_string(svn_string_t **output,
svn_mergeinfo_catalog_t catalog,
@@ -99,7 +102,10 @@
Unlike svn_mergeinfo_to_string(), NULL MERGEINFO is tolerated and results
in *OUTPUT set to "\n". If SVN_DEBUG is true, then NULL or empty MERGEINFO
causes *OUTPUT to be set to an appropriate newline terminated string. If
- PREFIX is not NULL then prepend PREFIX to each line in *OUTPUT. */
+ PREFIX is not NULL then prepend PREFIX to each line in *OUTPUT.
+
+ Any relative merge source paths in MERGEINFO are converted to absolute
+ paths in *OUTPUT.*/
svn_error_t *
svn_mergeinfo__to_formatted_string(svn_string_t **output,
svn_mergeinfo_t mergeinfo,
Modified: subversion/branches/1.6.x-r889840/subversion/include/svn_mergeinfo.h
URL: http://svn.apache.org/viewvc/subversion/branches/1.6.x-r889840/subversion/include/svn_mergeinfo.h?rev=889890&r1=889889&r2=889890&view=diff
==============================================================================
--- subversion/branches/1.6.x-r889840/subversion/include/svn_mergeinfo.h (original)
+++ subversion/branches/1.6.x-r889840/subversion/include/svn_mergeinfo.h Sat Dec 12 04:43:33 2009
@@ -152,6 +152,9 @@
* inheritability are also allowed, but will be combined into a single
* range when placed into @a *mergeinfo.
*
+ * @a input may contain relative merge source paths, but these are
+ * converted to absolute paths in @a *mergeinfo.
+ *
* @since New in 1.5.
*/
svn_error_t *
@@ -363,6 +366,9 @@
* mergeinfo in *OUTPUT. If INPUT contains no elements, return the
* empty string.
*
+ * @a mergeinput may contain relative merge source paths, but these are
+ * converted to absolute paths in @a *output.
+ *
* @since New in 1.5.
*/
svn_error_t *
Modified: subversion/branches/1.6.x-r889840/subversion/libsvn_subr/mergeinfo.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.6.x-r889840/subversion/libsvn_subr/mergeinfo.c?rev=889890&r1=889889&r2=889890&view=diff
==============================================================================
--- subversion/branches/1.6.x-r889840/subversion/libsvn_subr/mergeinfo.c (original)
+++ subversion/branches/1.6.x-r889840/subversion/libsvn_subr/mergeinfo.c Sat Dec 12 04:43:33 2009
@@ -66,8 +66,10 @@
/* pathname -> PATHNAME */
static svn_error_t *
-parse_pathname(const char **input, const char *end,
- svn_stringbuf_t **pathname, apr_pool_t *pool)
+parse_pathname(const char **input,
+ const char *end,
+ svn_stringbuf_t **pathname,
+ apr_pool_t *pool)
{
const char *curr = *input;
const char *last_colon = NULL;
@@ -89,7 +91,18 @@
return svn_error_create(SVN_ERR_MERGEINFO_PARSE_ERROR, NULL,
_("No pathname preceding ':'"));
- *pathname = svn_stringbuf_ncreate(*input, last_colon - *input, pool);
+ /* Tolerate relative repository paths, but convert them to absolute. */
+ if (**input == '/')
+ {
+ *pathname = svn_stringbuf_ncreate(*input, last_colon - *input, pool);
+ }
+ else
+ {
+ const char *repos_rel_path = apr_pstrndup(pool, *input,
+ last_colon - *input);
+ *pathname = svn_stringbuf_createf(pool, "/%s", repos_rel_path);
+ }
+
*input = last_colon;
return SVN_NO_ERROR;
@@ -487,6 +500,7 @@
apr_pool_t *pool)
{
svn_stringbuf_t *pathname;
+ apr_array_header_t *existing_rangelist;
apr_array_header_t *revlist = apr_array_make(pool, 1,
sizeof(svn_merge_range_t *));
@@ -559,6 +573,17 @@
lastrange = APR_ARRAY_IDX(revlist, i, svn_merge_range_t *);
}
}
+
+ /* Handle any funky mergeinfo with relative merge source paths that
+ might exist due to issue #3547. It's possible that this issue allowed
+ the creation of mergeinfo with path keys that differ only by a
+ leading slash, e.g. "trunk:4033\n/trunk:4039-4995". In the event
+ we encounter this we merge the rangelists together under a single
+ absolute path key. */
+ if (existing_rangelist = apr_hash_get(hash, pathname->data,
+ APR_HASH_KEY_STRING))
+ svn_rangelist_merge(&revlist, existing_rangelist, pool);
+
apr_hash_set(hash, pathname->data, APR_HASH_KEY_STRING, revlist);
return SVN_NO_ERROR;
@@ -1235,7 +1260,9 @@
/* Converts a mergeinfo INPUT to an unparsed mergeinfo in OUTPUT. If PREFIX
is not NULL then prepend PREFIX to each line in OUTPUT. If INPUT contains
- no elements, return the empty string.
+ no elements, return the empty string. If INPUT contains any merge source
+ path keys that are relative then convert these to absolute paths in
+ *OUTPUT.
*/
static svn_error_t *
mergeinfo_to_stringbuf(svn_stringbuf_t **output,
@@ -1257,11 +1284,13 @@
svn_string_t *revlist;
SVN_ERR(svn_rangelist_to_string(&revlist, elt.value, pool));
- svn_stringbuf_appendcstr(*output,
- apr_psprintf(pool, "%s%s:%s",
- prefix ? prefix : "",
- (const char *) elt.key,
- revlist->data));
+ svn_stringbuf_appendcstr(
+ *output,
+ apr_psprintf(pool, "%s%s%s:%s",
+ prefix ? prefix : "",
+ *((const char *) elt.key) == '/' ? "" : "/",
+ (const char *) elt.key,
+ revlist->data));
if (i < sorted->nelts - 1)
svn_stringbuf_appendcstr(*output, "\n");
}
Modified: subversion/branches/1.6.x-r889840/subversion/tests/libsvn_subr/mergeinfo-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.6.x-r889840/subversion/tests/libsvn_subr/mergeinfo-test.c?rev=889890&r1=889889&r2=889890&view=diff
==============================================================================
--- subversion/branches/1.6.x-r889840/subversion/tests/libsvn_subr/mergeinfo-test.c (original)
+++ subversion/branches/1.6.x-r889840/subversion/tests/libsvn_subr/mergeinfo-test.c Sat Dec 12 04:43:33 2009
@@ -149,9 +149,12 @@
"/trunk",
"/trunk",
"/branch",
- "patch-common::netasq-bpf.c",
- "patch-common_netasq-bpf.c:",
- ":patch:common:netasq:bpf.c",
+
+ /* svn_mergeinfo_parse converts relative merge soure paths to absolute. */
+ "/patch-common::netasq-bpf.c",
+ "/patch-common_netasq-bpf.c:",
+ "/:patch:common:netasq:bpf.c",
+
"/trunk",
"/trunk",
"/trunk",
@@ -1115,6 +1118,22 @@
if (svn_string_compare(expected, output) != TRUE)
return fail(pool, "Mergeinfo string not what we expected");
+ /* Manually construct some mergeinfo with relative path
+ merge source keys. These should be tolerated as input
+ to svn_mergeinfo_to_string(), but the resulting svn_string_t
+ should have absolute keys. */
+ info2 = apr_hash_make(pool);
+ apr_hash_set(info2, "fred",
+ APR_HASH_KEY_STRING,
+ apr_hash_get(info1, "/fred", APR_HASH_KEY_STRING));
+ apr_hash_set(info2, "trunk",
+ APR_HASH_KEY_STRING,
+ apr_hash_get(info1, "/trunk", APR_HASH_KEY_STRING));
+ SVN_ERR(svn_mergeinfo_to_string(&output, info2, pool));
+
+ if (svn_string_compare(expected, output) != TRUE)
+ return fail(pool, "Mergeinfo string not what we expected");
+
return SVN_NO_ERROR;
}