# HG changeset patch # User Matt Harbison # Date 2012-10-14 18:44:08 # Node ID 0fc1ce271ee652df6c4a3ba774b890b2041ed23e # Parent c284085d17a87f7039e439b23485cdf0693a15f1 largefiles: fix a traceback in lfconvert if a largefile is missing (issue3519) The largefile may be missing for various reasons, including that a remote repository was cloned without the --all-largefiles option. Therefore, it seems reasonable to attempt to download the missing files and failing that, abort and indicate the affected file and revision so the user can manually fix the problem. diff --git a/hgext/largefiles/lfcommands.py b/hgext/largefiles/lfcommands.py --- a/hgext/largefiles/lfcommands.py +++ b/hgext/largefiles/lfcommands.py @@ -141,7 +141,17 @@ def _addchangeset(ui, rsrc, rdst, ctx, r hash = fctx.data().strip() path = lfutil.findfile(rsrc, hash) - ### TODO: What if the file is not cached? + + # If one file is missing, likely all files from this rev are + if path is None: + cachelfiles(ui, rsrc, ctx.node()) + path = lfutil.findfile(rsrc, hash) + + if path is None: + raise util.Abort( + _("missing largefile \'%s\' from revision %s") + % (f, node.hex(ctx.node()))) + data = '' fd = None try: diff --git a/tests/test-lfconvert.t b/tests/test-lfconvert.t --- a/tests/test-lfconvert.t +++ b/tests/test-lfconvert.t @@ -1,3 +1,5 @@ + $ USERCACHE="$TESTTMP/cache"; export USERCACHE + $ mkdir "${USERCACHE}" $ cat >> $HGRCPATH < [extensions] > largefiles = @@ -8,6 +10,7 @@ > minsize = 0.5 > patterns = **.other > **.dat + > usercache=${USERCACHE} > EOF "lfconvert" works @@ -270,3 +273,14 @@ round-trip: converting back to a normal pass $ cd .. + +Avoid a traceback if a largefile isn't available (issue3519) + + $ hg clone -U largefiles-repo issue3519 + $ rm "${USERCACHE}"/* + $ hg lfconvert --to-normal issue3519 normalized3519 + initializing destination normalized3519 + abort: missing largefile 'large' from revision d4892ec57ce212905215fad1d9018f56b99202ad + [255] + +