On 1/21/2015 10:41 AM, Philip Martin wrote:
> Cory Riddell <c...@codeware.com> writes:
>
>> On 1/20/2015 9:32 AM, Cory Riddell wrote:
>>> I'm trying to use hotcopy to create a backup of my repositories on a
>>> network drive. When I run the hotcopy command, most of the repository
>>> copies, then I get an error:
>>>
>>> E:\>svnadmin hotcopy E:\MyRepo \\Diskstation\svn\MyRepo
>>> svnadmin: E720002: Can't remove file
>>> '\\diskstation\svn\MyRepo\db\rev-prop-atomics.shm': The system cannot
>>> find the file specified.
>> I've been looking at the source code for this and I think I see what'
>> generating the error:
>>
>> In named_atomic.c, around line 515, is this code:
>>
>> svn_error_t *
>> svn_atomic_namespace__cleanup(const char *name,
>>                               apr_pool_t *pool)
>> {
>>   const char *shm_name, *lock_name;
>>
>>   /* file names used for the specified namespace */
>>   shm_name = apr_pstrcat(pool, name, SHM_NAME_SUFFIX, NULL);
>>   lock_name = apr_pstrcat(pool, name, MUTEX_NAME_SUFFIX, NULL);
>>
>>   /* remove these files if they exist */
>>   SVN_ERR(svn_io_remove_file2(shm_name, TRUE, pool));
>>   SVN_ERR(svn_io_remove_file2(lock_name, TRUE, pool));
>>
>>   return SVN_NO_ERROR;
>> }
>>
>> In the line "SVN_ERR(svn_io_remove_file2(shm_name, TRUE, pool));", the
>> TRUE parameter is supposed to suppress file not found errors yet that's
>> the error I'm getting, isn't it?
> Yes, it should.  It's failing because it's getting error 720002 and that
> is not an error the code recognises.  I don't recognise it either.  What
> sort of network drive is producing that error?
>

720002 is an APR error that should be caught with APR_STATUS_IS_ENOENT.
This is defined in apr_errno.h as:
Snippet
#define APR_STATUS_IS_ENOENT(s)         ((s) == APR_ENOENT \
|| (s) == APR_OS_START_SYSERR + ERROR_FILE_NOT_FOUND \
|| (s) == APR_OS_START_SYSERR + ERROR_PATH_NOT_FOUND \
|| (s) == APR_OS_START_SYSERR + ERROR_OPEN_FAILED \
|| (s) == APR_OS_START_SYSERR + ERROR_NO_MORE_FILES)

and on my machine:

APR_ENOENT = 2
APR_OS_START_SYSERR = 720000
ERROR_FILE_NOT_FOUND = 2
ERROR_PATH_NOT_FOUND = 3
ERROR_OPEN_FAILED = 110
ERROR_NO_MORE_FILES = 18

So 720002 is APR_OS_START_SYSERR + APR_ENOENT.

Cory




Reply via email to