On Fri, Nov 6, 2009 at 10:39 AM, Daniel Näslund <daniel_at_longitudo.com> wrote:
> Replace svn_path_join() since there are conflicting definitions of a
> * subversion/libsvn_client/mergeinfo.c
> (svn_client__adjust_mergeinfo_source_paths): Replace svn_path_join()
> with svn_dirent_join(). The base is a key in svn_mergeinfo_t.
> (svn_client__get_wc_mergeinfo): Replace svn_path_join() with
> svn_relpath_join(). The base is created with svn_dirent_basename()
> that returns a relative path.
> (svn_client_mergeinfo_get_merged): Replace svn_path_join() with
> svn_uri_join(). We want to create full urls of svn_mergeinfo_t keys.
> Patch by: Daniel Näslund <daniel_at_longitudo.com>
> Some background: In subversion/include/svn_mergeinfo.h svn_mergeinfo_t
> is just a typedef for a apr_hash_t. The keys are described like this:
> * (c) @c svn_mergeinfo_t, called "mergeinfo". A hash mapping merge
> * source paths (@c const char *, starting with slashes) to
> * non-empty rangelist arrays. A @c NULL hash is used to represent
> * no mergeinfo and an empty hash is used to represent empty
> * mergeinfo.
> I'm assuming that means a dirent.
It's a path fragment. In this case, the path is relative to the
repository root. While you may be able to use it as a local file
system path in some situations, it's really a URL fragment.
> If the keys in svn_mergeinfo_t is a dirent then in
> svn_client_mergeinfo_get_merged() we create an url from a dirent.
> svn_dirent_uri.h says:
> * When translating between local paths (dirents) and uris code should
> * always go via the relative path format.
> * E.g.
> * - by truncating a parent portion from a path with svn_*_skip_ancestor(),
> * - or by converting portions to basenames and then joining to existing paths.
> But in svn_wc__node_get_base_rev() we just skip the leading '/' in the
> join. It's shorter and easier to understand than using
> svn_dirent_skip_ancestor() and svn_dirent_basename. So I let it stay
> that way.
Received on 2009-11-06 22:58:08 CET