[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: [PATCH] Replace svn_path_join() in libsvn_client/mergeinfo.c

From: Daniel Rall <dlr_at_finemaltcoding.com>
Date: Fri, 6 Nov 2009 13:57:51 -0800

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
> path.
>
> * 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.
>
> /Daniel
>

------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2415274
Received on 2009-11-06 22:58:08 CET

This is an archived mail posted to the Subversion Dev mailing list.