Hi,
I also think I found a (to the other described problem most likely
distinct) issue.
The problem occurs in a file deep in the folder structure.
Let's say it' occurs with a file located in :
Repo/trunk/A/B/C/D/E/filename.exe
When I check-out trunk let's say on G:\test and do an update on that
directory, after the failure, the working copy is locked and I have to
do an SVN cleanup before I can run another update.
However, when I do an update directly on G:\test\A\B\C\D\E, the working
directory is not locked after the error occurred.
Regards,
Stefan
Hi,
sry for the belated answer. It took me a while before I had some time
to investigate that issue deeper.
Following investigations were done with TSVN 1.8.5 (Subversion 1.8.8)
and Server is now running Visual SVN 2.7.3 (based on SVN 1.8.5).
I traced the issue down to obvious problems with a certain directory
in the
repository. Ignoring/Skipping that directory and the check-out as
well as the
update operation work fine.
Looking into the .svn/tmp-directory I do see a single existing file:
trz2A87.tmp but obviously there's no trace of the mentioned
svn-E78ED003 file.
Can you possibly come up with a reproduction recipe that doesn't
require access
to your repo (unless of course your repo is publicly accessible)?
I hope to be able to try that out later today. But no promises.
The errors you're getting are coming from the run_file_install() step
of the
workqueue processor. It's rather hard to understand what's going
just from the
error messages. Based on what you're saying it seems like the temp
file we're
trying to move into place doesn't exist. Since looking at the code
we try to
install the file, and then trap a ENOENT error from the rename call.
When the
rename call fails with ENOENT we try to create the destination
directory.
Which fails and thus you see the errors.
Right above the code generating the error it creates and writes the
temp file.
So I would expect to be seeing an error message from that if the
file isn't
being created.
I debugged the code directly and didn't run into the breakpoint I set
in run_file_install().
The code-path which returns the error seems to be somewhere else in my
case (or did I get u wrong here).
From what I can tell, it goes like this:
[...]
- svn_wc__db_pristine_install()
- calls: svn_io_file_rename()
- calls: svn_io_file_rename()
- calls: apr_file_rename(from_path_apr, to_path_apr, pool);
- calls: if (MoveFileExW(wfrompath, wtopath,
MOVEFILE_REPLACE_EXISTING || MOVEFILE_COPY_ALLOWED))
That one returns a status code of 720,002. If I'm reading the
APR-macros correctly, that corresponds to a window system error of 2 -
which according to MSDN means: ERROR_FILE_NOT_FOUND.
Setting a breakpoint right before that Move-call in apr_file_rename
suggests it's trying to move the following file:
G:\Egosoft\X4\Source\.svn\tmp\svn-C5D6631B
to
G:\Egosoft\X4\Source\.svn\pristine\00\0077903324a83da0419971daeb632ff51529d320.svn-base
Looking at the .svn/tmp-directory I do see that a file with the
expected file contents was created, but is named differently:
trz5B5.tmp
From that point, it's obvious that the move-call would fail, since the
given filename seems to differ from that on the disk.
Taking ur statement into account I assume that SVN tries to actually
put a differently named file into that folder and somehow that one
seems to get mangled on my system to a different filename.
If so, I could try to debug the code a bit further. Would u have the
function for me I'd investigate to trace down where the temp-file
would be created?
One question I do have is have you done anything unusual with how
your file
system is setup? The .svn/tmp directory needs to be on the same file
system as
the rest of the working copy since we're doing atomic renames to put
files into
place.
There's nothing special from the file system set-up point of view. The
drive is a simple local partition on an IDE drive. There are no
symlinks or somesuch in place. File system is NTFS. The issue is
reproducible on two different machines, both running Avast Antivirus.
I don't know much about the set-up on the other machine, but I would
expect it's somehow the same.
we recently started getting this error when trying to update or
check-out a
repository.
Weird thing is that the issue only occurs when we try to
check-out/update the
thing externally (meaning via VPN).
So same machine, same working copy doesn't work over the VPN but does
without a
VPN? Is the working copy perhaps on a network filesystem?
No, sry, wasn't clear enough. We didn't test whether it's at all
related to a VPN-connection. We can't atm test it without a VPN
connection to test whether it's at all related to that. I'll try to do
a local set-up of a working copy to see whether it's reproducible in
that environment too. Can't tell atm when I got the time to get it
done, but might have a few minutes left today. Let's see.
Regards,
Stefan