To solve the problem I need to understand the wc better. I'm writing
down how I think it works and then perhaps someone can correct me!
1). svn_wc_adm_access_t and svn_wc_context_t both has a pointer to a db.
I can create an adm_access from a wc_ctx by using this db.
2). The locking mechanism in adm_access determines if you can write to
the administrative area of the path or just read using the adm_access.
3). You can't open a adm_access to a file. It refers to a directory with
an administrative area (.svn).
4). The locking in adm_access is physically a file .svn/lock but in
wc_ctx it will be in the table LOCK in the db. Or is there two types of
locking? One in the wc and one in the repository? In libsvn_wc/README a
lock-token is described as an URL present if the entry is locked in the
5). In wc_ctx there is supposed to be only one administrative area
accessed through wc_ctx. There will be no need for wc locking then.
6). Locking is set at one time and should not be altered through the
lifetime of the adm_access.
7). There is no API available for libsvn_client for accessing an
existing adm_access baton by just knowing its path.
8). A lock held for a directory applies to all it's subdirectories.
9). The adm_access for the parent path of the file is sent to
merge_file_changed(). That is because... Actually, I don't know at all.
It feels like if I'm missing a big piece of the puzzle!
On Sun, Aug 23, 2009 at 08:45:14PM +0200, Daniel Näslund wrote:
> Just checking if I'm on the right track!
> I want to replace adm_access batons in the svn_wc_diff_callbacks4_t
> (file_changed) function. The file_changed callback in
> libsvn_client/merge.c is called from libsvn_client/repos_diff.c.
> My problem is with the locking. An adm_access baton is holding a
> write-lock to the target. I need to free that lock and regain it in
> The best thing would be if I could just get the existing adm_access
> baton for the path. If I were in libsvn_wc I could use
> svn_wc__adm_retrieve_internal2(). Any suggestions?
Received on 2009-08-24 09:07:54 CEST