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 2011/04/20 23:51:55 UTC
svn commit: r1095528 - in /subversion/branches/1.6.x-issue3650: ./
subversion/libsvn_repos/log.c
Author: pburba
Date: Wed Apr 20 21:51:55 2011
New Revision: 1095528
URL: http://svn.apache.org/viewvc?rev=1095528&view=rev
Log:
On the 1.6.x-issue3650 branch: Merge r1081255 from trunk.
* src-branch-1.6.x-WCNG
Mergeinfo changes only.
* subversion/tests/cmdline/log_tests.py
Resolve some minor text conflicts.
Modified:
subversion/branches/1.6.x-issue3650/ (props changed)
subversion/branches/1.6.x-issue3650/subversion/libsvn_repos/log.c
Propchange: subversion/branches/1.6.x-issue3650/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Apr 20 21:51:55 2011
@@ -104,4 +104,4 @@
/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,876032,876041-876042,876048,876051,876055-876056,876059,876083,876091,876097,876101,876104,876109,876123-876125,876129,876132,876138,876160,876167,876175,876180,876185,876205,876223-876225,876230,876233,876245,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-876615,876628,876633,876641,876645,876659,876687,876689,876705,876715,876726,876760,876763,876794,876804,876815-876816,876821,876825,876837,876840-876841,876843,876849,876857-876858,876862,876873,876890,876897,876905,876908,876925,876931,876934,876948-876949,876953,876987,876993,877011,877014,877016,877028-877029,877038,877119,877127,877146,877157,877191,877195,877203,877211,877230,877234,877237,877243,877249,877259,877261,877304,877319,877407,877437,877441-877442,877453,87745
9,877472,877544,877553,877565,877568,877573,877593,877595,877597,877601,877612,877665,877667,877681,877692,877696,877701,877720,877730,877784,877793,877797,877809,877814-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,878216,878240,878242,878255,878269,878272,878279,878296-878297,878303,878321,878335,878338,878341,878343,878353,878364,878367-878368,878385,878399,878423,878426,878447,878462,878484,878491,878498,878532,878595,878646,878659,878673,878682-878683,878690-878691,878693,878723,878760-878761,878873,878875,878877,878879,878905,878910-878911,878915-878916,878924-878925,878946,878949,878955,878960,878970,878981,879001,879033,879056,879074,879076,879081-879082,879093,879105,879126,879148,879170,879198-879199,879201,879271,879293,879357,879375-879376,
879403,879631,879635-879636,879688,879709-879711,879747,879902,879916,879954,879961,879966,879971,880082,880095,880105,880146,880162,880226,880274-880275,880370,880450,880461,880474,880525-880526,880552,881905,884842,886164,886197,888715,888979,889081,889840,891672,892050,892085,895514,895653,896522,896915,898048,898963,899826,899828,900797,901304,901752,902093,902467,904301,904394,904594,905303,905326,906256,906305,906587,907644,908980-908981,917640,918211,922516,923389,923391,926151,926167,927323,927328,931209,931211,931392,931568,932942,933299,934599,934603,935631,935992,935996,937610,939375-939376,944635,945350,946355,946767,947006,948512,948916,949307,950931,950933,951753,952992,953317,955369,957507,958024,959004,959760,961055,961970,964167,964349,964767,965405,965469,965508,979045,979429,980811,981449,981921,984565,984928,984931,991534,996884,997026,997070,997457,997466,997471,997474,1000038,1000060,1000607,1000612,1001009,1002094,1005446,1022675,1024269,1027957,102810
8,1031165,1031186,1032808,1033166,1033290,1033665,1033685,1033921,1034557,1035745,1036534,1038792,1039040,1041438,1051632,1051638,1051744-1051745,1051751,1053185,1053208,1058269,1058722,1064839,1068988,1070912,1071239,1071307,1072953,1076730,1076759,1078954
+/subversion/trunk:875965,875968,876004,876012,876017,876019,876022,876024,876032,876041-876042,876048,876051,876055-876056,876059,876083,876091,876097,876101,876104,876109,876123-876125,876129,876132,876138,876160,876167,876175,876180,876185,876205,876223-876225,876230,876233,876245,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-876615,876628,876633,876641,876645,876659,876687,876689,876705,876715,876726,876760,876763,876794,876804,876815-876816,876821,876825,876837,876840-876841,876843,876849,876857-876858,876862,876873,876890,876897,876905,876908,876925,876931,876934,876948-876949,876953,876987,876993,877011,877014,877016,877028-877029,877038,877119,877127,877146,877157,877191,877195,877203,877211,877230,877234,877237,877243,877249,877259,877261,877304,877319,877407,877437,877441-877442,877453,87745
9,877472,877544,877553,877565,877568,877573,877593,877595,877597,877601,877612,877665,877667,877681,877692,877696,877701,877720,877730,877784,877793,877797,877809,877814-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,878216,878240,878242,878255,878269,878272,878279,878296-878297,878303,878321,878335,878338,878341,878343,878353,878364,878367-878368,878385,878399,878423,878426,878447,878462,878484,878491,878498,878532,878595,878646,878659,878673,878682-878683,878690-878691,878693,878723,878760-878761,878873,878875,878877,878879,878905,878910-878911,878915-878916,878924-878925,878946,878949,878955,878960,878970,878981,879001,879033,879056,879074,879076,879081-879082,879093,879105,879126,879148,879170,879198-879199,879201,879271,879293,879357,879375-879376,
879403,879631,879635-879636,879688,879709-879711,879747,879902,879916,879954,879961,879966,879971,880082,880095,880105,880146,880162,880226,880274-880275,880370,880450,880461,880474,880525-880526,880552,881905,884842,886164,886197,888715,888979,889081,889840,891672,892050,892085,895514,895653,896522,896915,898048,898963,899826,899828,900797,901304,901752,902093,902467,904301,904394,904594,905303,905326,906256,906305,906587,907644,908980-908981,917640,918211,922516,923389,923391,926151,926167,927323,927328,931209,931211,931392,931568,932942,933299,934599,934603,935631,935992,935996,937610,939375-939376,944635,945350,946355,946767,947006,948512,948916,949307,950931,950933,951753,952992,953317,955369,957507,958024,959004,959760,961055,961970,964167,964349,964767,965405,965469,965508,979045,979429,980811,981449,981921,984565,984928,984931,991534,996884,997026,997070,997457,997466,997471,997474,1000038,1000060,1000607,1000612,1001009,1002094,1005446,1022675,1024269,1027957,102810
8,1031165,1031186,1032808,1033166,1033290,1033665,1033685,1033921,1034557,1035745,1036534,1038792,1039040,1041438,1051632,1051638,1051744-1051745,1051751,1053185,1053208,1058269,1058722,1064839,1068988,1070912,1071239,1071307,1072953,1076730,1076759,1078954,1081255
Modified: subversion/branches/1.6.x-issue3650/subversion/libsvn_repos/log.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.6.x-issue3650/subversion/libsvn_repos/log.c?rev=1095528&r1=1095527&r2=1095528&view=diff
==============================================================================
--- subversion/branches/1.6.x-issue3650/subversion/libsvn_repos/log.c (original)
+++ subversion/branches/1.6.x-issue3650/subversion/libsvn_repos/log.c Wed Apr 20 21:51:55 2011
@@ -996,15 +996,21 @@ fill_log_entry(svn_log_entry_t *log_entr
If REVPROPS is NULL, retrieve all revprops; else, retrieve only the
revprops named in the array (i.e. retrieve none if the array is empty).
- LOG_TARGET_HISTORY_AS_MERGEINFO and HANDLING_MERGED_REVISIONS are as
- per the arguments of the same name to DO_LOGS. If
- HANDLING_MERGED_REVISIONS is true and *all* changed paths within REV are
+ LOG_TARGET_HISTORY_AS_MERGEINFO, HANDLING_MERGED_REVISION, and
+ NESTED_MERGES are as per the arguments of the same name to DO_LOGS. If
+ HANDLING_MERGED_REVISION is true and *all* changed paths within REV are
already represented in LOG_TARGET_HISTORY_AS_MERGEINFO, then don't send
- the log message for REV. */
+ the log message for REV.
+
+ If HANDLING_MERGED_REVISIONS is FALSE then ignore NESTED_MERGES. Otherwise
+ if NESTED_MERGES is not NULL and REV is contained in it, then don't send
+ the log for REV, otherwise send it normally and add REV to
+ NESTED_MERGES. */
static svn_error_t *
send_log(svn_revnum_t rev,
svn_fs_t *fs,
svn_mergeinfo_t log_target_history_as_mergeinfo,
+ apr_hash_t *nested_merges,
svn_boolean_t discover_changed_paths,
svn_boolean_t handling_merged_revision,
const apr_array_header_t *revprops,
@@ -1110,9 +1116,38 @@ send_log(svn_revnum_t rev,
/* Send the entry to the receiver, unless it is a redundant merged
revision. */
if (found_rev_of_interest)
- return (*receiver)(receiver_baton, log_entry, pool);
+ {
+ /* Is REV a merged revision we've already sent? */
+ if (nested_merges && handling_merged_revision)
+ {
+ svn_revnum_t *merged_rev = apr_hash_get(nested_merges, &rev,
+ sizeof(svn_revnum_t *));
+
+ if (merged_rev)
+ {
+ /* We already sent REV. */
+ return SVN_NO_ERROR;
+ }
+ else
+ {
+ /* NESTED_REVS needs to last across all the send_log, do_logs,
+ handle_merged_revisions() recursions, so use the pool it
+ was created in at the top of the recursion. */
+ apr_pool_t *hash_pool = apr_hash_pool_get(nested_merges);
+ svn_revnum_t *long_lived_rev = apr_palloc(hash_pool,
+ sizeof(svn_revnum_t));
+ *long_lived_rev = rev;
+ apr_hash_set(nested_merges, long_lived_rev,
+ sizeof(svn_revnum_t *), long_lived_rev);
+ }
+ }
+
+ return (*receiver)(receiver_baton, log_entry, pool);
+ }
else
- return SVN_NO_ERROR;
+ {
+ return SVN_NO_ERROR;
+ }
}
/* This controls how many history objects we keep open. For any targets
@@ -1443,6 +1478,7 @@ static svn_error_t *
do_logs(svn_fs_t *fs,
const apr_array_header_t *paths,
svn_mergeinfo_t log_target_history_as_mergeinfo,
+ apr_hash_t *nested_merges,
svn_revnum_t hist_start,
svn_revnum_t hist_end,
int limit,
@@ -1471,6 +1507,7 @@ static svn_error_t *
handle_merged_revisions(svn_revnum_t rev,
svn_fs_t *fs,
svn_mergeinfo_t log_target_history_as_mergeinfo,
+ apr_hash_t *nested_merges,
svn_mergeinfo_t mergeinfo,
svn_boolean_t discover_changed_paths,
svn_boolean_t strict_node_history,
@@ -1501,6 +1538,7 @@ handle_merged_revisions(svn_revnum_t rev
svn_pool_clear(iterpool);
SVN_ERR(do_logs(fs, pl_range->paths, log_target_history_as_mergeinfo,
+ nested_merges,
pl_range->range.start, pl_range->range.end, 0,
discover_changed_paths, strict_node_history,
TRUE, TRUE, TRUE, revprops, TRUE,
@@ -1530,12 +1568,21 @@ handle_merged_revisions(svn_revnum_t rev
merged revisions, see INCLUDE_MERGED_REVISIONS argument to
svn_repos_get_logs4().
- Other parameters are the same as svn_repos_get_logs4().
+ If NESTED_MERGES is not NULL then it is a hash of revisions (svn_revnum_t *
+ mapped to svn_revnum_t *) for logs that were previously sent. On the first
+ call to do_logs it should always be NULL. If INCLUDE_MERGED_REVISIONS is
+ TRUE, then NESTED_MERGES will be created on the first call to do_logs,
+ allocated in POOL. It is then shared across
+ do_logs()/send_logs()/handle_merge_revisions() recursions, see also the
+ argument of the same name in send_logs().
+
+ All other parameters are the same as svn_repos_get_logs4().
*/
static svn_error_t *
do_logs(svn_fs_t *fs,
const apr_array_header_t *paths,
svn_mergeinfo_t log_target_history_as_mergeinfo,
+ apr_hash_t *nested_merges,
svn_revnum_t hist_start,
svn_revnum_t hist_end,
int limit,
@@ -1553,6 +1600,7 @@ do_logs(svn_fs_t *fs,
apr_pool_t *pool)
{
apr_pool_t *iterpool;
+ apr_pool_t *subpool = NULL;
apr_array_header_t *revs = NULL;
apr_hash_t *rev_mergeinfo = NULL;
svn_revnum_t current;
@@ -1628,16 +1676,26 @@ do_logs(svn_fs_t *fs,
if (descending_order)
{
SVN_ERR(send_log(current, fs,
- log_target_history_as_mergeinfo,
+ log_target_history_as_mergeinfo, nested_merges,
discover_changed_paths,
handling_merged_revisions, revprops,
has_children, receiver, receiver_baton,
authz_read_func, authz_read_baton, iterpool));
- if (has_children)
+
+ if (has_children) /* Implies include_merged_revisions == TRUE */
{
+ if (!nested_merges)
+ {
+ /* We're at the start of the recursion stack, create a
+ single hash to be shared across all of the merged
+ recursions so we can track and squelch duplicates. */
+ subpool = svn_pool_create(pool);
+ nested_merges = apr_hash_make(subpool);
+ }
+
SVN_ERR(handle_merged_revisions(
current, fs,
- log_target_history_as_mergeinfo,
+ log_target_history_as_mergeinfo, nested_merges,
mergeinfo,
discover_changed_paths,
strict_node_history,
@@ -1674,6 +1732,12 @@ do_logs(svn_fs_t *fs,
}
svn_pool_destroy(iterpool);
+ if (subpool)
+ {
+ nested_merges = NULL;
+ svn_pool_destroy(subpool);
+ }
+
if (revs)
{
/* Work loop for processing the revisions we found since they wanted
@@ -1699,14 +1763,22 @@ do_logs(svn_fs_t *fs,
}
SVN_ERR(send_log(current, fs, log_target_history_as_mergeinfo,
+ nested_merges,
discover_changed_paths, handling_merged_revisions,
revprops, has_children,
receiver, receiver_baton, authz_read_func,
authz_read_baton, iterpool));
if (has_children)
{
+ if (!nested_merges)
+ {
+ subpool = svn_pool_create(pool);
+ nested_merges = apr_hash_make(subpool);
+ }
+
SVN_ERR(handle_merged_revisions(current, fs,
log_target_history_as_mergeinfo,
+ nested_merges,
mergeinfo,
discover_changed_paths,
strict_node_history, revprops,
@@ -1889,7 +1961,7 @@ svn_repos_get_logs4(svn_repos_t *repos,
if (descending_order)
rev = end - i;
- SVN_ERR(send_log(rev, fs, NULL, discover_changed_paths, FALSE,
+ SVN_ERR(send_log(rev, fs, NULL, NULL, discover_changed_paths, FALSE,
revprops, FALSE,
receiver, receiver_baton, authz_read_func,
authz_read_baton, iterpool));
@@ -1916,7 +1988,7 @@ svn_repos_get_logs4(svn_repos_t *repos,
svn_pool_destroy(subpool);
}
- return do_logs(repos->fs, paths, paths_history_mergeinfo, start, end,
+ return do_logs(repos->fs, paths, paths_history_mergeinfo, NULL, start, end,
limit, discover_changed_paths, strict_node_history,
include_merged_revisions, FALSE, FALSE, revprops,
descending_order, receiver, receiver_baton,