Hi Hyrum, On Thu, Nov 19, 2009 at 10:08 PM, Joe Swatosh <joe.swat...@gmail.com> wrote: > On Thu, Nov 19, 2009 at 9:25 AM, <hwri...@apache.org> wrote: >> Author: hwright >> Date: Thu Nov 19 17:25:48 2009 >> New Revision: 882209 >> >> URL: http://svn.apache.org/viewvc?rev=882209&view=rev >> Log: >> When acquiring and releasing wc write locks, use the parent path for unknown >> kinds in the working copy. Update 'add --parents' to ensure we release >> working >> copy locks on error. >> >> * subversion/libsvn_wc/lock.c >> (svn_wc__acquire_write_lock, svn_wc__release_write_lock): Look at the parent >> path if the kind is anything but a directory, rather than only for files. >> >> * subversion/libsvn_client/add.c >> (svn_client_add4): Make sure we release the lock if we encounter an error >> while adding parents. >> >> Modified: >> subversion/trunk/subversion/libsvn_client/add.c >> subversion/trunk/subversion/libsvn_wc/lock.c >> >> Modified: subversion/trunk/subversion/libsvn_client/add.c >> URL: >> http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/add.c?rev=882209&r1=882208&r2=882209&view=diff >> ============================================================================== >> --- subversion/trunk/subversion/libsvn_client/add.c (original) >> +++ subversion/trunk/subversion/libsvn_client/add.c Thu Nov 19 17:25:48 2009 >> @@ -602,7 +602,17 @@ >> apr_pool_t *subpool; >> >> subpool = svn_pool_create(pool); >> - SVN_ERR(add_parent_dirs(ctx, parent_abspath, subpool)); >> + err = add_parent_dirs(ctx, parent_abspath, subpool); >> + >> + /* We need to be sure we release our working copy locks if we bump >> + into a situation where we couldn't add the parents. */ >> + if (err) >> + return svn_error_return( >> + svn_error_compose_create( >> + err, >> + svn_wc__release_write_lock(ctx->wc_ctx, >> parent_abspath, >> + pool))); >> + >> svn_pool_destroy(subpool); >> } >> >> >> Modified: subversion/trunk/subversion/libsvn_wc/lock.c >> URL: >> http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/lock.c?rev=882209&r1=882208&r2=882209&view=diff >> ============================================================================== >> --- subversion/trunk/subversion/libsvn_wc/lock.c (original) >> +++ subversion/trunk/subversion/libsvn_wc/lock.c Thu Nov 19 17:25:48 2009 >> @@ -1757,7 +1757,7 @@ >> >> SVN_ERR(svn_wc__db_read_kind(&kind, wc_ctx->db, local_abspath, TRUE, >> scratch_pool)); >> - if (kind == svn_wc__db_kind_file) >> + if (kind != svn_wc__db_kind_dir) >> local_abspath = svn_dirent_dirname(local_abspath, scratch_pool); >> >> /* The current lock paradigm is that each directory holds a lock for >> itself, >> @@ -1804,7 +1804,7 @@ >> >> SVN_ERR(svn_wc__db_read_kind(&kind, wc_ctx->db, local_abspath, TRUE, >> scratch_pool)); >> - if (kind == svn_wc__db_kind_file) >> + if (kind != svn_wc__db_kind_dir) >> local_abspath = svn_dirent_dirname(local_abspath, scratch_pool); >> >> /* We need to recursively remove locks (see comment in >> >> >> > > > Hi Hyrum, > > This commit started the Ruby bindings failing. I think I can > reproduce with the command line (edited transcript): > > $svnadmin create repo > > $md wc > > $svn co file:///repo wc > Checked out revision 0. > > $svn mkdir --parents wc\parent\child > A wc\parent > A wc\parent\child > > $svn ci wc -m"XX" > svn: Working copy 'wc' locked > svn: constraint failed > svn: columns wc_id, local_dir_relpath are not unique > svn: run 'svn cleanup' to remove locks (type 'svn help cleanup' for details) > > > > That is the same error that the bindings are getting, and it seems > like something that ought to work. Please let me know if I'm > mistaken. > > Thanks > -- > Joe >
Still happening at r885331. (unedited transcript below). I added another commit to show that it is only with the --parents qualifier that the problem is hit. X:\>svnadmin create X:\repo X:\>md X:\wc X:\>svn co file:///X:/repo X:\wc Checked out revision 0. X:\>svn mkdir X:\wc\parent A wc\parent X:\>svn mkdir X:\wc\parent\child A wc\parent\child X:\>svn ci X:\wc -m"One" Adding wc\parent Adding wc\parent\child Committed revision 1. X:\>svn mkdir --parents X:\wc\parentX\child A wc\parentX A wc\parentX\child X:\>svn ci X:\wc -m"Two" svn: Working copy 'X:\wc' locked svn: constraint failed svn: columns wc_id, local_dir_relpath are not unique svn: run 'svn cleanup' to remove locks (type 'svn help cleanup' for details) Shouldn't this work? Thanks -- Joe