Search code examples
mercurialwebdavtortoisehgapache2.2hgsubversion

cannot push changes to repository on webDAV


Today i've tried to push changes into our shared repository hosted on an apache(2.2.x) running webdav(over HTTPS). The repository in the dav-directory is a clone of my working directory. Option NoUpdate is enabled. Both Repositories are initiated.

To move on I mapped the dav-directory/repositoy as network drive and set the repository to push to "y:/" When I try to push from Workbench the exception "aborted, ret 255" is thrown.

% hg --repository C:\wamp\www\ommon push y:
pushing to y:
searching for changes
abort: Y:\.hg/store/journal: The system cannot find the file specified
[command returned code 255 Thu Jun 20 12:08:28 2013]

Pushing from commandline throws:

pushing to y:\
searching for changes
abort: y:\.hg/store/journal: The system cannot find the file specified
Exception AttributeError: "'transaction' object has no attribute 'file'" in 
<bound method transaction.__del__ of <mercurial.transaction.transaction object>>

I tried to alter the path to directory since the side-swapped dividers are looking strange to me. But it did not succeed.

Further information: I'm not using hgweb or any cgi-script based version.

EDIT Multiple google entries in reference to the issue left me with the idea that pushing changes to a repository provided by webDAV is not entirely possible. Further I have to use hgWeb to resolve that.

But why do I have to? My idea is that webDAV is capable of writing. Since i mapped the directory as a network drive - mercurial should be able to push changes on to the webserver likewise it does to a local directory.

Can someone confirm this?


Solution

  • Windows WebDAV support can be shaky. It's very possible that because of mercurial's likely advanced file-system operations, the OS does something incorrectly, or something apache's mod_dav cannot cope with.

    It's also possible that something simpler is wrong, like apache blocking access to paths starting with a ..

    You may be able to find something in your apache log, but I would recommend not doing this and use a true mercurial server instead.