On Fri, Jun 28, 2013 at 12:52 AM, Daniel Shahaf <danie...@apache.org> wrote:
>...
> In second thought, this just moves the problem: the wc layer would want to 
> call
> add_symlink() during a commit.
>
> But I'd like to avoid the ambiguity still: either add_symlink() or
> add_file(svn:special=yes), not both; either add_blockdev() or add_special(),
> not both.  Not sure how we can avoid this...

My decision in Ev2 was to surface the direct types, and work with them
as long as possible (*). When you hit a compatibility barrier, then
you transform.

Something I learned a long while ago from Guido was to avoid:

foo(arg=False)
foo(arg=True)

def foo(arg):
  if arg:
    one_thing()
  else:
    other_thing()

The argument shouldn't exist. Just have fooFalse() and fooTrue().

In that vein, wc_db and Ev2 avoid the add(kind=KIND) form, as the args
and underlying work are different for each KIND. The arguments are:
<props,content,checksum> vs <props,children> vs <props,target>. (and
don't forget add_absent!)

I would continue to push a per-kind API, which collapses to
svn:special when it hits the FS. Or one day the FS will directly
handle the various node kinds. Or svn:special over http/svn, with the
collapse within RA. Or ...

Cheers,
-g

(*) kinda like we're doing with moves, fwiw

Reply via email to