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] + +