Hi Phil,
Well, my patch was slightly different (attached) but works, at least
until I get:
N... 0 mjh/.google/gadgets/ggl-host-socket
16:30:54.213 ci__nondir[commit.c:489] invalid/unknown file type 0140755
Segmentation fault
But back to FUSE for a moment...
Note that you actually get an EACCES not an EPERM here.
I have a (probably bad) reputation for designing in too much
flexibility, but I would have the user able to configure what they would
want fsvs to do with each event, so a config file with a syntax like:
permission_denied: log, continue
etc., would cover all likely eventualities (!).
Mark.
P.Marek wrote:
> Hello Mark!
>
>
>> I stopped using fsvs back in the days of 1.1.12 or so because one of the
>> systems on which I was using it acquired a .gvfs FUSE mount point in
>> user home directories.
>>
> ...
>
>> This is despite every permutation of "ignore" I can think of:
>>
> ...
>
>> So I've tried again with 1.1.17, and the problem still persists.
>> Looking at the code, the lstat in question will always cause a stop on
>> permission denied.
>> I was wondering if anyone has a neat workaround for this problem?
>>
> Does this (untested) patch help you?
> It should cause files that return EPERM on lstat to be ignored.
>
> I'm not sure whether I should do that for FSVS globally; but in your use-case
> it might
> help.
>
>
> Regards,
>
> Phil
>
>
------------------------------------------------------
http://fsvs.tigris.org/ds/viewMessage.do?dsForumId=3928&dsMessageId=2352924
To unsubscribe from this discussion, e-mail:
[[email protected]].
--- fsvs-1.1.17/src/direnum.c 2008-10-02 18:41:42.000000000 +0100
+++ fsvs-1.1.17-mjh/src/direnum.c 2009-05-22 16:12:16.000000000 +0100
@@ -583,17 +583,26 @@
{
sts=this->by_inode[i];
sts->parent=this;
sts->repos_rev=SVN_INVALID_REVNUM;
- status=hlp__lstat(sts->name, &(sts->st));
- if (status == ENOENT)
+ status = hlp__lstat(sts->name, &(sts->st));
+ switch(status)
{
+ case 0:
+ break;
+
+ case ENOENT:
STOPIF( wa__warn(WRN__LOCAL_VANISHED, status,
"Entry \"%s\" not found anymore!", sts->name), NULL);
sts->to_be_ignored=1;
- }
- else
- STOPIF( status, "lstat(%s)", sts->name);
+ break;
+ case EACCES:
+ sts->to_be_ignored=1;
+ break;
+
+ default:
+ STOPIF( status, "lstat(%s)", sts->name);
+ }
/* New entries get that set, because they're "updated". */
sts->updated_mode=sts->st.mode;
}