The main problem here is somehow the repository got to a state where
the client thinks it is up to date, but is missing a directory in the
entries file and in the working copy.
I am still tracking down how this happened in the first place....
This is the same state as when you do a svn co -N (except svn puts all
subdirectories in this state).
The second problem is the difference between the way the svn works, and the
api.
"UI" is a folder neither in the working copy nor the entries file.
C:\projects\Testdb\Prospero\Local Assets>svn up
At revision 272.
C:\projects\Testdb\Prospero\Local Assets>svn up "UI"
A UI
A UI\XBox
A UI\XBox\Textures
Updated to revision 272.
If I make the equivalent call to svn up "UI" using svn_client_update2, I
just get 'svn_wc_notify_skip' in the notification callback. Nothing gets
updated.
Here is a snippet of code...
----------------------------------------
svn_opt_revision_t revision;
revision.kind=svn_opt_revision_unspecified;
apr_array_header_t* pPathsToUpdate = apr_array_make(mpMemoryPool, 1,
sizeof(const char*));
APR_ARRAY_PUSH(pPathsToUpdate, const char*) = absolutePathToUpdate.c_str();
// this is 'C:\projects\Testdb\Prospero\Local Assets\UI' in the prev example
apr_array_header_t* pRetrievedRevisionNumbers;
svnCheck(
svn_client_update2(
&pRetrievedRevisionNumbers,
pPathsToUpdate,
&revision,
true, //recurse
false, // ignore_externals
mpClientContext,
mpMemoryPool
)
);
-------------
my notification callback
-------------
void ClSubversion::defaultNotifyFunc(void *baton, const svn_wc_notify_t
*notify, apr_pool_t *pool)
{
ClSubversion* const pSvn = reinterpret_cast<ClSubversion*>(baton);
NotifyInfo info;
info.lockState = (notify->lock_state ==
svn_wc_notify_lock_state_locked) ? true :false;
info.makeReadOnly = false;
info.action = (ClSubversion::NotifyAction)notify->action;
switch (notify->action)
{
case svn_wc_notify_skip:
info.operation = " Skipping a path. " ;
break;
....
-----Original Message-----
From: rooneg@gmail.com [mailto:rooneg@gmail.com]On Behalf Of Garrett
Rooney
Sent: Wednesday, March 15, 2006 9:16 PM
To: Byron Whitlock
Cc: dev@subversion.tigris.org
Subject: Re: svn_client_update2 doesn't update directories. svn up does
?????
On 3/15/06, Byron Whitlock <bwhitlock@stormfront.com> wrote:
> I have an MFC client written to the 1.2.3 API. We are using a vanilla
1.3.0
> server.
> We have a huge 30GB+ repository shared by about 50 users.
>
> It appears the svn_client_update2 function isn't always updating
directories
> that exist in the repository.
>
> I add a directory "foo" to the root of the repository and commit it.
> On another machine when I do "svn up foo", I can see the new "foo"
directory
> being added.
> However when I make the svn_client_update call, all I get is "Skipped a
> path" from the notification callback.
>
> If I try to update the parent directory with svn_client_update2, I don't
> get any notification at all (Svn up works okay). It's like Subversion
> doesn't even know about the newly added directory.
>
> I can reproduce this on my machine by
> 1) removing the "foo" from the entries file and
> 2) deleteing the "foo" directory from the locally copy.
> svn up consistently brings the directory back, but svn_client_update2 does
> not.
>
>
> When I trace thru the subversion code, I see svn_client__update_internal
> returning SVN_ERR_WC_NOT_DIRECTORY.
>
> I've experimented with everything I can think of and I am at a loss.
> Can someone shed some light on this problem?
You're going to have to be rather more specific, showing us some
example code that reproduces the problem would be a good start.
> This seems like it may be related to the "svn co -N " bug (#695 i think)
Fron your current description I can't see how you would reach that
conclusion. Are you actually using nonrecursive checkouts?
-garrett
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Fri Mar 17 00:00:05 2006