On 08/23/2013 04:37 PM, Branko Čibej wrote:
On 23.08.2013 16:06, Andrew Reedick wrote:

-----Original Message-----
From: Laszlo Kishalmi [mailto:lkisha...@ovi.com]
Sent: Thursday, August 22, 2013 5:15 PM
To: users@subversion.apache.org
Subject: Feature Req: sorthand urls for branches/tags in CLI



Implementation ideas:
        We put a specific property on project1 folder let's call it
        svn:branches for now. Here we could describe the layout of
        branches and tags for that part of repository. E.g.:
        a) Using prefixes:
                /
                /branches/
                /tags/
        b) Using some custom mapping/lists:
                trunk
                branches/*
                tags/*
        c) Using regexp captures:
                (trunk)
                branches/(\w+)
                tags/(\w+)
        Having this info, the path where this property is set, the name
        of the branch and the current path relative to wc root it is
        possible to construct a repository URL to be used.

As far as I currently see there would be no change required on server
side.

Subversion doesn't have branches.  I'd rather see branches as first class objects before 
we hack out a "-b" option.  It's still an interesting idea, though.

What happens when the svn:branches property gets merged or copied?  It's an 
edge case, but it could cause an amusing amount of chaos if svn:branches gets 
copied around or merged unexpectedly.
What is the behavior when you are in an externals?  Do you respect the 
svn:branches in the externals, or do you work from the local repo's 
svn:branches, or neither?

Overall, I'm not sure it would save a significant amount of typing.  If you have a standard 
trunk/branches/tags repo structure, then you're not saving a lot by using "-b foo" in 
place of "^/branches/foo".  Having to set 'svn:branches' for repos with non-standard 
trunk/branches/tags trees is a bit inconvenient and would discourage use.

Actually I find the idea of having a single propery to define project
layout totally wrong. What if, at a later date, you change the project
structure? Who is responsible for updating the property? How do you keep
it in sync with reality? How do you detect that it's out of sync?

Those are just a few considerations that have to be addressed, and
frankly I don't think there's any sane way of addressing them. This is
like the svn:externals mess all over again.


Well as subversion has no branches. My idea was just make URL references shorter with just some thought on "what if branches were (maybe first class) citizens". So the chosen naming of potions and property was misleading.

How these would look like:

 1. Ditch -b (--branch) form the original proposal and rename
    svn:branches as svn:url-search-roots (or somethin similar/better).
    Using ^[name] for URL would just attempt to match an URL in some
    (later defined) ways. As of error handling:
    svn:externals: If there is an easy way to determine if the user is
        sitting in a directory which belongs to svn:externals we just
        inform the user that this is not supported.

    Name collisions: Just say the user that the name is ambiguous ^/
        addressing still can be used.

    Syncing issues: Sync the content of the property shall be done
        manually. If the team has arranged something and the
        (later defined) matcher is not completely dumb, then it
        would be a rare thing. Otherwise the user become unlucky
        just say that to the user and ^/ addressing still can
        be used.

    Branching/Copying: As this property would be used at project level
        and inherited from there. Regarding normal use cases this shall
        shall be no issue. However I admit that if someone uses this
        property on lower levels overriding the inherited one, then it
        could cause nasty things. In order to prevent that we could just
        allow only one svn:url-search-roots definition (inherited or
        not) per every path on the repository.

    Merge/Conflicts: On normal use cases this shall not happen.
        Otherwise just treat the property as any other. The user might
        get unlucky again ^/ addressing still can be used.

 2. Start to think how can branches be (first class) citizens in
    Subversion. ^[branch] could be user there as well.

It would be much safer IMO if the root of each branch were identified by
a property instead. For example: we could introduce an svn:branch
property that can be set only on directories. The presence of such a
property tells the client and server that the directory is a branch and
should be treated specially. The property could not be manipulated
directly via propset or propedit, but only through branch-specific
commands; for example:

   * svn mkdir --branch
     Creates a new directory with the svn:branch property set, with an
     empty value
     Example: svn mkdir --branch http://host/repo/trunk
   * svn copy
     If the source is a branch, the target also becomes a branch. The
     value of the target's svn:branch property is the path@revision of
     the source (thus, the client and server can easily recognize related
     branches and branch points). Using property inheritance, client and
     server can enforce constraints on allowed branching (e.g., forbid
     branching into a copy of the source branch)
   * svn move
     Can implement restrictions upon where branches can be moved to,
     similar to "svn copy"
   * svn diff, svn merge, svn switch
     These commands could make use of a (new) shorthand syntax to
     identify branches, based on their (base)name and the presence of the
     svn:branch property.


We actually had quite a fight^Winteresting discussion about this at the
Berlin hackathon this year.

-- Brane

Reply via email to