Stefan Kueng wrote:
> A few more thought, mostly for the next release:
> 
> * svn_client_shelf_save_new_version3 takes two callback functions, but 
> they both have the same type. So why not just change that API to take 
> one callback but provide a 'failed' flag instead?

Could do! I suppose that would mean less boilerplate code for you (the client) 
to write.

> * when a shelve operation fails, we have to remove the version with 
> svn_client_shelf_delete_newer_versions. But if there are no more 
> versions left, the shelf itself is not removed. So while testing I ended 
> up with several empty shelves. I'm now using 
> svn_client_shelf_get_all_versions to count how many versions are left 
> and if there are none I'm calling svn_client_shelf_delete. I think 
> svn_client_shelf_delete_newer_versions should do that automatically. 
> Unless of course there's a reason why empty shelves can exist?

I'm not entirely happy with the current relationship between a "shelf" object 
as a container of "shelf version" objects. At the moment a "shelf version" can 
only exist as a child of a "shelf". It is intentional that you can have a shelf 
that has no versions. It can still have a log message. (The user might want to 
name their shelf and write their log message before they start coding, for 
example, but that isn't a compelling use case.)

I am considering partly inverting the relationship so a single-version shelf 
would be the primary object and a series-of-versions (for checkpointing and 
rollback) would be a higher level object that is a collection of single-version 
shelf objects. What do you think?

> * maybe this one can make it into 1.11: the doc comments don't mention 
> that the version numbers are 1 based, not 0 based. [...]

Thanks. I'll add it.

> * some thoughts [...] you first have to open/create the shelf, save the new 
> version and close the shelf. [...] I would expect one API call [like]
> svn_client_shelf(shelveName, wcPath, logMsg, depth, keeplocal);
> and it would do everything automatically.

I agree access to a higher level API would be useful, and I'll make a mental 
note to add that.

At the same time I think it's essential that clients do have access to the 
lower-level building blocks of the operation, in order to build more 
interesting and different variants from what I implemented for the command-line 
client.

So I would like to provide two levels of API. You won't then have to user the 
lower-level APIs if you don't want to, but any third-party who wants to 
innovate on the idea will then have the tools to do so.

> in case you're interested, here are screenshots of the shelve and 
> unshelve dialog I did in TSVN:
> https://svn.osdn.net/svnroot/tortoisesvn/trunk/doc/images/en/Shelve.png
> https://svn.osdn.net/svnroot/tortoisesvn/trunk/doc/images/en/Unshelve.png

Thanks for sharing those!

-- 
- Julian

Reply via email to