view release on metacpan or search on metacpan
src/subversion/subversion/bindings/swig/include/proxy_apr.swg view on Meta::CPAN
* Each object has an _is_valid member, and stores a weakref to its parent
* pool's _is_valid, and when that weakref is broken _mark_weakpool_invalid()
* gets called in order to mark the object as invalid.
*
* You can destroy a pool in three ways:
* pool.destroy()
* pool.clear()
* pool.__del__()
*
* Each of the above functions destroys the pool's _is_valid member, setting
* off a cascade of callback functions that set all the child objects that were
* created in the pool to invalid.
*
* If a SWIG object is created from a memory pool, the Python wrapper should
* store a full reference to the memory pool and a weakreference to _is_valid.
* When you try to access the SWIG object, the Python wrapper will check the
* _is_valid weakref to ensure that the pool has not been destroyed (see
* proxy.swg to read the implementation details).
*
* This lets us gracefully throw an exception if you try to use an object
* that was allocated out of a pool that was cleared, rather than crashing
src/subversion/subversion/libsvn_client/merge.c view on Meta::CPAN
{
*out_rangelist = apr_array_make(result_pool, 0,
sizeof(svn_merge_range_t *));
}
return SVN_NO_ERROR;
}
/* Helper for fix_deleted_subtree_ranges(). Like fix_deleted_subtree_ranges()
this function should only be called when honoring mergeinfo.
CHILD, PARENT, REVISION1, REVISION2, and RA_SESSION are all cascaded from
fix_deleted_subtree_ranges() -- see that function for more information on
each.
If PARENT is not the merge target then PARENT must have already have been
processed by this function as a child. Specifically, this means that
PARENT->REMAINING_RANGES must already be populated -- it can be an empty
rangelist but cannot be NULL.
PRIMARY_URL is the merge source url of CHILD at the younger of REVISION1
and REVISION2.
src/subversion/subversion/libsvn_client/merge.c view on Meta::CPAN
}
/* Make a lasting copy of CHILD->REMAINING_RANGES using POOL. */
child->remaining_ranges = svn_rangelist_dup(child->remaining_ranges,
result_pool);
return SVN_NO_ERROR;
}
/* Helper for do_directory_merge().
SOURCE is cascaded from the argument of the same name in
do_directory_merge(). TARGET is the merge target. RA_SESSION is the
session for the younger of SOURCE->loc1 and SOURCE->loc2.
Adjust the subtrees in CHILDREN_WITH_MERGEINFO so that we don't
later try to describe invalid paths in drive_merge_report_editor().
This function is just a thin wrapper around
adjust_deleted_subtree_ranges(), which see for further details.
SCRATCH_POOL is used for all temporary allocations. Changes to
CHILDREN_WITH_MERGEINFO are allocated in RESULT_POOL.
src/subversion/subversion/libsvn_client/merge.c view on Meta::CPAN
result_pool));
}
} /*if (implicit_mergeinfo) */
return SVN_NO_ERROR;
}
/* Helper for ensure_implicit_mergeinfo().
PARENT, CHILD, REVISION1, REVISION2 and CTX
are all cascaded from the arguments of the same names in
ensure_implicit_mergeinfo(). PARENT and CHILD must both exist, i.e.
this function should never be called where CHILD is the merge target.
If PARENT->IMPLICIT_MERGEINFO is NULL, obtain it from the server.
Set CHILD->IMPLICIT_MERGEINFO to the mergeinfo inherited from
PARENT->IMPLICIT_MERGEINFO. CHILD->IMPLICIT_MERGEINFO is allocated
in RESULT_POOL.
RA_SESSION is an RA session open to the repository that contains CHILD.
src/subversion/subversion/libsvn_client/merge.c view on Meta::CPAN
If we have deferred obtaining CHILD->IMPLICIT_MERGEINFO, then get
it now, allocating it in RESULT_POOL. If CHILD_INHERITS_PARENT is true
then set CHILD->IMPLICIT_MERGEINFO to the mergeinfo inherited from
PARENT->IMPLICIT_MERGEINFO, otherwise contact the repository. Use
SCRATCH_POOL for all temporary allocations.
RA_SESSION is an RA session open to the repository that contains CHILD.
It may be temporarily reparented by this function.
PARENT, CHILD, REVISION1, REVISION2 and
CTX are all cascaded from the arguments of the same name in
filter_merged_revisions() and the same conditions for that function
hold here. */
static svn_error_t *
ensure_implicit_mergeinfo(svn_client__merge_path_t *parent,
svn_client__merge_path_t *child,
svn_boolean_t child_inherits_parent,
svn_revnum_t revision1,
svn_revnum_t revision2,
svn_ra_session_t *ra_session,
svn_client_ctx_t *ctx,
src/subversion/subversion/libsvn_client/merge.c view on Meta::CPAN
return SVN_NO_ERROR;
}
/* Helper for do_file_merge and do_directory_merge (by way of
populate_remaining_ranges() for the latter).
Determine what portions of SOURCE have already
been merged to CHILD->ABSPATH and populate CHILD->REMAINING_RANGES with
the ranges that still need merging.
SOURCE and CTX are all cascaded from the caller's arguments of the same
names. Note that this means SOURCE adheres to the requirements noted in
`MERGEINFO MERGE SOURCE NORMALIZATION'.
CHILD represents a working copy path which is the merge target or one of
the target's subtrees. If not NULL, PARENT is CHILD's nearest path-wise
ancestor - see 'THE CHILDREN_WITH_MERGEINFO ARRAY'. TARGET_MERGEINFO is
the working mergeinfo on CHILD.
RA_SESSION is the session for the younger of SOURCE->loc1 and
SOURCE->loc2.
src/subversion/subversion/libsvn_client/merge.c view on Meta::CPAN
"path's own future history; try "
"updating first"));
}
}
return SVN_NO_ERROR;
}
/* Helper for populate_remaining_ranges().
SOURCE is cascaded from the arguments of the same name in
populate_remaining_ranges().
Note: The following comments assume a forward merge, i.e.
SOURCE->loc1->rev < SOURCE->loc2->rev. If this is a reverse merge then
all the following comments still apply, but with SOURCE->loc1 switched
with SOURCE->loc2.
Like populate_remaining_ranges(), SOURCE must adhere to the restrictions
documented in 'MERGEINFO MERGE SOURCE NORMALIZATION'. These restrictions
allow for a *single* gap in SOURCE, GAP_REV1:GAP_REV2 exclusive:inclusive
src/subversion/subversion/libsvn_client/merge.c view on Meta::CPAN
}
/* Helper for record_mergeinfo_for_dir_merge().
Record override mergeinfo on any paths skipped during a merge.
Set empty mergeinfo on each path in MERGE_B->SKIPPED_ABSPATHS so the path
does not incorrectly inherit mergeinfo that will later be describing
the merge.
MERGEINFO_PATH and MERGE_B are cascaded from
arguments of the same name in the caller.
IS_ROLLBACK is true if the caller is recording a reverse merge and false
otherwise. RANGELIST is the set of revisions being merged from
MERGEINFO_PATH to MERGE_B->target. */
static svn_error_t *
record_skips_in_mergeinfo(const char *mergeinfo_path,
const svn_rangelist_t *rangelist,
svn_boolean_t is_rollback,
merge_cmd_baton_t *merge_b,
src/subversion/subversion/libsvn_client/merge.c view on Meta::CPAN
&& svn_dirent_is_ancestor(target_wcpath, child->abspath))
{
svn_sort__array_delete(children_with_mergeinfo, i--, 1);
}
}
}
/* Helper for do_directory_merge() to handle the case where a merge editor
drive removes explicit mergeinfo from a subtree of the merge target.
MERGE_B is cascaded from the argument of the same name in
do_directory_merge(). For each path (if any) in
MERGE_B->PATHS_WITH_DELETED_MERGEINFO remove that path from
CHILDREN_WITH_MERGEINFO.
The one exception is for the merge target itself,
MERGE_B->target->abspath, this must always be present in
CHILDREN_WITH_MERGEINFO so this is never removed by this
function. */
static void
remove_children_with_deleted_mergeinfo(merge_cmd_baton_t *merge_b,
src/subversion/subversion/libsvn_client/merge.c view on Meta::CPAN
b) The range's end field is SOURCE->rev2.
2) Among all the ranges that meet condition 'b' the youngest start
revision must equal SOURCE->rev1.
Note: If the first svn_merge_range_t * element of some subtree child's
remaining_ranges array is the same as the first range of that child's
nearest path-wise ancestor, then the subtree child *will not* be described
to the reporter.
DEPTH, NOTIFY_B, and MERGE_B are cascaded from do_directory_merge(), see
that function for more info.
MERGE_B->ra_session1 and MERGE_B->ra_session2 are RA sessions open to any
URL in the repository of SOURCE; they may be temporarily reparented within
this function.
If SOURCE->ancestral is set, then SOURCE->loc1 must be a
historical ancestor of SOURCE->loc2, or vice-versa (see
`MERGEINFO MERGE SOURCE NORMALIZATION' for more requirements around
SOURCE in this case).
src/subversion/subversion/libsvn_client/merge.c view on Meta::CPAN
svn_sort__bsearch_lower_bound(&insert_element, children_with_mergeinfo,
compare_merge_path_t_as_paths);
new_element = svn_client__merge_path_dup(insert_element, pool);
svn_sort__array_insert(&new_element, children_with_mergeinfo, insert_index);
}
/* Helper for get_mergeinfo_paths().
CHILDREN_WITH_MERGEINFO, DEPTH, and POOL are
all cascaded from the arguments of the same name to get_mergeinfo_paths().
TARGET is the merge target.
*CHILD is the element in in CHILDREN_WITH_MERGEINFO that
get_mergeinfo_paths() is iterating over and *CURR_INDEX is index for
*CHILD.
If CHILD->ABSPATH is equal to MERGE_CMD_BATON->target->abspath do nothing.
Else if CHILD->ABSPATH is switched or absent then make sure its immediate
(as opposed to nearest) parent in CHILDREN_WITH_MERGEINFO is marked as
src/subversion/subversion/libsvn_client/merge.c view on Meta::CPAN
Store the svn_client__merge_path_t *'s in *CHILDREN_WITH_MERGEINFO in
depth-first order based on the svn_client__merge_path_t *s path member as
sorted by svn_path_compare_paths(). Set the remaining_ranges field of each
element to NULL.
Note: Since the walk is rooted at TARGET->abspath, the
latter is guaranteed to be in *CHILDREN_WITH_MERGEINFO and due to the
depth-first ordering it is guaranteed to be the first element in
*CHILDREN_WITH_MERGEINFO.
MERGE_CMD_BATON is cascaded from the argument of the same name in
do_directory_merge().
*/
static svn_error_t *
get_mergeinfo_paths(apr_array_header_t *children_with_mergeinfo,
const merge_target_t *target,
svn_depth_t depth,
svn_boolean_t dry_run,
svn_boolean_t same_repos,
svn_client_ctx_t *ctx,
apr_pool_t *result_pool,
src/subversion/subversion/libsvn_client/merge.c view on Meta::CPAN
svn_pool_destroy(iterpool);
return SVN_NO_ERROR;
}
/* Helper for do_directory_merge() to handle the case where a merge editor
drive adds explicit mergeinfo to a path which didn't have any explicit
mergeinfo previously.
MERGE_B is cascaded from the argument of the same
name in do_directory_merge(). Should be called only after
do_directory_merge() has called populate_remaining_ranges() and populated
the remaining_ranges field of each child in
CHILDREN_WITH_MERGEINFO (i.e. the remaining_ranges fields can be
empty but never NULL).
If MERGE_B->DRY_RUN is true do nothing, if it is false then
for each path (if any) in MERGE_B->PATHS_WITH_NEW_MERGEINFO merge that
path's inherited mergeinfo (if any) with its working explicit mergeinfo
and set that as the path's new explicit mergeinfo. Then add an
src/subversion/subversion/libsvn_client/merge.c view on Meta::CPAN
|| path_is_subtree(local_abspath, merge_b->added_abspaths, pool)
|| path_is_subtree(local_abspath, merge_b->tree_conflicted_abspaths,
pool));
}
/* Helper for do_directory_merge() when performing mergeinfo unaware merges.
Merge the SOURCE diff into TARGET_DIR_WCPATH.
SOURCE, DEPTH, NOTIFY_B, and MERGE_B
are all cascaded from do_directory_merge's arguments of the same names.
CONFLICT_REPORT is as documented for do_directory_merge().
NOTE: This is a very thin wrapper around drive_merge_report_editor() and
exists only to populate CHILDREN_WITH_MERGEINFO with the single element
expected during mergeinfo unaware merges.
*/
static svn_error_t *
do_mergeinfo_unaware_dir_merge(single_range_conflict_report_t **conflict_report,
const merge_source_t *source,
src/subversion/subversion/libsvn_client/merge.c view on Meta::CPAN
For each svn_client__merge_path_t CHILD in CHILDREN_WITH_MERGEINFO,
set CHILD->RECORD_MERGEINFO and CHILD->RECORD_NONINHERITABLE to true
if the subtree needs mergeinfo to describe the merge and if that
mergeinfo should be non-inheritable respectively.
If OPERATIVE_MERGE is true, then the merge being described is operative
as per subtree_touched_by_merge(). OPERATIVE_MERGE is false otherwise.
MERGED_RANGE, MERGEINFO_FSPATH, DEPTH, NOTIFY_B, and MERGE_B are all
cascaded from record_mergeinfo_for_dir_merge's arguments of the same
names.
SCRATCH_POOL is used for temporary allocations.
*/
static svn_error_t *
flag_subtrees_needing_mergeinfo(svn_boolean_t operative_merge,
const svn_merge_range_t *merged_range,
apr_array_header_t *children_with_mergeinfo,
const char *mergeinfo_fspath,
svn_depth_t depth,
src/subversion/subversion/libsvn_client/merge.c view on Meta::CPAN
'THE CHILDREN_WITH_MERGEINFO ARRAY'. Obviously this should only
be called if recording mergeinfo -- see doc string for RECORD_MERGEINFO().
If RESULT_CATALOG is not NULL, then don't record the new mergeinfo on the
WC, but instead record it in RESULT_CATALOG, where the keys are absolute
working copy paths and the values are the new mergeinfos for each.
Allocate additions to RESULT_CATALOG in pool which RESULT_CATALOG was
created in.
DEPTH, NOTIFY_B, MERGE_B, and SQUELCH_MERGEINFO_NOTIFICATIONS are all
cascaded from do_directory_merge's arguments of the same names.
SCRATCH_POOL is used for temporary allocations.
*/
static svn_error_t *
record_mergeinfo_for_dir_merge(svn_mergeinfo_catalog_t result_catalog,
const svn_merge_range_t *merged_range,
const char *mergeinfo_fspath,
apr_array_header_t *children_with_mergeinfo,
svn_depth_t depth,
svn_boolean_t squelch_mergeinfo_notifications,
src/subversion/subversion/libsvn_client/merge.c view on Meta::CPAN
/* Helper for do_directory_merge().
Record mergeinfo describing a merge of
MERGED_RANGE->START:MERGED_RANGE->END from the repository relative path
MERGEINFO_FSPATH to each path in ADDED_ABSPATHS which has explicit
mergeinfo or is the immediate child of a parent with explicit
non-inheritable mergeinfo.
DEPTH, MERGE_B, and SQUELCH_MERGEINFO_NOTIFICATIONS, are
cascaded from do_directory_merge's arguments of the same names.
Note: This is intended to support forward merges only, i.e.
MERGED_RANGE->START must be older than MERGED_RANGE->END.
*/
static svn_error_t *
record_mergeinfo_for_added_subtrees(
svn_merge_range_t *merged_range,
const char *mergeinfo_fspath,
svn_depth_t depth,
svn_boolean_t squelch_mergeinfo_notifications,
src/subversion/subversion/libsvn_client/merge.c view on Meta::CPAN
if (!log_entry_rev_required)
SVN_ERR(rangelist_merge_revision(log_gap_baton->merged_ranges,
revision,
log_gap_baton->pool));
return SVN_NO_ERROR;
}
/* Helper for do_directory_merge().
SOURCE is cascaded from the argument of the same name in
do_directory_merge(). TARGET is the merge target. RA_SESSION is the
session for SOURCE->loc2.
Find all the ranges required by subtrees in
CHILDREN_WITH_MERGEINFO that are *not* required by
TARGET->abspath (i.e. CHILDREN_WITH_MERGEINFO[0]). If such
ranges exist, then find any subset of ranges which, if merged, would be
inoperative. Finally, if any inoperative ranges are found then remove
these ranges from all of the subtree's REMAINING_RANGES.
src/subversion/subversion/tests/cmdline/svntest/factory.py view on Meta::CPAN
# "Shell" command handlers:
def switch(self, line):
"Given one input line, delegates to the appropriate sub-functions."
args = shlex.split(line)
if len(args) < 1:
return ""
first = args[0]
# This is just an if-cascade. Feel free to change that.
if first == 'svn':
second = args[1]
if second == 'add':
return self.cmd_svn(args[1:], False, self.keep_args_of)
if second in ['changelist', 'cl']:
keep_count = 2
if '--remove' in args: