[PATCH 03 of 10 stable] largefiles: adopt remotestore._getfile to batched statlfile
Mads Kiilerich
mads at kiilerich.com
Thu Jan 24 23:17:02 CST 2013
# HG changeset patch
# User Mads Kiilerich <madski at unity3d.com>
# Date 1359090858 -3600
# Branch stable
# Node ID 7d7317f017caeeada0501bbf18bc8f9bc6b15650
# Parent d956326990d42e04627d0d8077380c6f69921132
largefiles: adopt remotestore._getfile to batched statlfile
9e1616307c4c introduced batching of statlfile, but not all codepaths got
converted.
_getfile gave _stat garbage and got garbage back. The garbage didn't match the
expected error codes and was thus interpreted as success. It could thus end up
trying to fetch a largefile that didn't exist.
Instead we now pass _stat valid input and handle both correct and invalid
output correctly.
diff --git a/hgext/largefiles/remotestore.py b/hgext/largefiles/remotestore.py
--- a/hgext/largefiles/remotestore.py
+++ b/hgext/largefiles/remotestore.py
@@ -48,11 +48,14 @@
def _getfile(self, tmpfile, filename, hash):
# quit if the largefile isn't there
- stat = self._stat(hash)
+ stat = self._stat([hash])[hash]
if stat == 1:
raise util.Abort(_('remotestore: largefile %s is invalid') % hash)
elif stat == 2:
raise util.Abort(_('remotestore: largefile %s is missing') % hash)
+ elif stat != 0:
+ raise RuntimeError('error getting file: unexpected response from '
+ 'statlfile (%r)' % stat)
try:
length, infile = self._get(hash)
diff --git a/tests/test-largefiles.t b/tests/test-largefiles.t
--- a/tests/test-largefiles.t
+++ b/tests/test-largefiles.t
@@ -1600,9 +1600,8 @@
try again and expect error
$ hg -R http-clone up
getting changed largefiles
- error getting id 02a439e5c31c526465ab1a0ca1f431f76b827b90 from url http://localhost:$HGPORT2/ for file f1: HTTP Error 500: Internal Server Error
- 0 largefiles updated, 0 removed
- 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ abort: remotestore: largefile 02a439e5c31c526465ab1a0ca1f431f76b827b90 is missing
+ [255]
$ rm -rf empty http-clone http-clone-usercache
More information about the Mercurial-devel
mailing list