RE: svn commit: r39399 - trunk/subversion/libsvn_wc
Bert Huijben <[email protected]>
| Newsgroups | gmane.comp.version-control.subversion.rapidsvn.devel,gmane.comp.version-control.subversion.svn |
|---|---|
| Message-ID | <00ac01ca398c$00bd96b0$0238c410$__5346.90802819586$1253407722$gmane$org@nl> |
> -----Original Message----- > From: Hyrum K. Wright [mailto:[email protected]] > Sent: donderdag 17 september 2009 16:58 > To: svn-lmwclWVctOZK/[email protected] > Subject: svn commit: r39399 - trunk/subversion/libsvn_wc > > Author: hwright > Date: Thu Sep 17 07:57:56 2009 > New Revision: 39399 > > Log: > * subversion/libsvn_wc/copy.c > (copy_dir_administratively): Remove an access baton by switching to > svn_wc__entry_modify2(). > > Modified: > trunk/subversion/libsvn_wc/copy.c > > Modified: trunk/subversion/libsvn_wc/copy.c > URL: > http://svn.collab.net/viewvc/svn/trunk/subversion/libsvn_wc/copy.c?path > rev=39399&r1=39398&r2=39399 > ======================================================================= > ======= > --- trunk/subversion/libsvn_wc/copy.c Thu Sep 17 07:49:15 2009 > (r39398) > +++ trunk/subversion/libsvn_wc/copy.c Thu Sep 17 07:57:56 2009 > (r39399) > @@ -733,7 +733,6 @@ copy_dir_administratively(svn_wc_context > apr_pool_t *scratch_pool) > { > const svn_wc_entry_t *src_entry; > - svn_wc_adm_access_t *adm_access; > svn_wc__db_t *db = wc_ctx->db; > > /* Sanity check 1: You cannot make a copy of something that's not > @@ -772,9 +771,6 @@ copy_dir_administratively(svn_wc_context > scratch_pool)); > > /* We've got some post-copy cleanup to do now. */ > - SVN_ERR(svn_wc__adm_open_in_context(&adm_access, wc_ctx, > dst_abspath, TRUE, > - -1, cancel_func, cancel_baton, > - scratch_pool)); > SVN_ERR(post_copy_cleanup(db, > dst_abspath, > scratch_pool)); > @@ -802,9 +798,9 @@ copy_dir_administratively(svn_wc_context > will cause svn_wc_add4() below to fail. Set the URL to > the > URL of the first copy for now to prevent this. */ > tmp_entry.url = apr_pstrdup(scratch_pool, copyfrom_url); > - SVN_ERR(svn_wc__entry_modify(adm_access, NULL, /* This Dir */ > - &tmp_entry, > - SVN_WC__ENTRY_MODIFY_URL, > scratch_pool)); > + SVN_ERR(svn_wc__entry_modify2(db, dst_abspath, svn_node_dir, > FALSE, > + &tmp_entry, > SVN_WC__ENTRY_MODIFY_URL, > + scratch_pool)); This deletes all entries in the wc database where dst_abspath lives without obtaining a write lock and then writes the in memory hash back. The outer access baton must still live until the entire operation is wrapped in some kind of transaction. I like that svn_wc__entry_modify2() doesn't need an access baton in its argument list, but it should still verify a write lock anyway. (Which is still handled by an access baton now). Only new operations that handle their own transactions in another way can avoid the lock. But in most cases they still need a lock because they can be reverted by another entry based operation that reads the entries before the transaction and writes them after the transaction. Bert ------------------------------------------------------ http://subversion.tigris.org/ds/viewMessage.do?dsForumId=495&dsMessageId=2396944