928 _(b'cannot follow file not in parent revision: "%s"') % fname |
928 _(b'cannot follow file not in parent revision: "%s"') % fname |
929 ) |
929 ) |
930 fctx = wctx.filectx(fname) |
930 fctx = wctx.filectx(fname) |
931 for fctx, linerange in dagop.blockancestors(fctx, fromline, toline): |
931 for fctx, linerange in dagop.blockancestors(fctx, fromline, toline): |
932 rev = fctx.introrev() |
932 rev = fctx.introrev() |
|
933 if rev is None: |
|
934 rev = wdirrev |
933 if rev not in userrevs: |
935 if rev not in userrevs: |
934 continue |
936 continue |
935 linerangesbyrev.setdefault(rev, {}).setdefault( |
937 linerangesbyrev.setdefault(rev, {}).setdefault( |
936 fctx.path(), [] |
938 fctx.path(), [] |
937 ).append(linerange) |
939 ).append(linerange) |
938 |
940 |
939 def nofilterhunksfn(fctx, hunks): |
941 def nofilterhunksfn(fctx, hunks): |
940 return hunks |
942 return hunks |
941 |
943 |
942 def hunksfilter(ctx): |
944 def hunksfilter(ctx): |
943 fctxlineranges = linerangesbyrev.get(ctx.rev()) |
945 fctxlineranges = linerangesbyrev.get(scmutil.intrev(ctx)) |
944 if fctxlineranges is None: |
946 if fctxlineranges is None: |
945 return nofilterhunksfn |
947 return nofilterhunksfn |
946 |
948 |
947 def filterfn(fctx, hunks): |
949 def filterfn(fctx, hunks): |
948 lineranges = fctxlineranges.get(fctx.path()) |
950 lineranges = fctxlineranges.get(fctx.path()) |
958 yield hunk |
960 yield hunk |
959 |
961 |
960 return filterfn |
962 return filterfn |
961 |
963 |
962 def filematcher(ctx): |
964 def filematcher(ctx): |
963 files = list(linerangesbyrev.get(ctx.rev(), [])) |
965 files = list(linerangesbyrev.get(scmutil.intrev(ctx), [])) |
964 return scmutil.matchfiles(repo, files) |
966 return scmutil.matchfiles(repo, files) |
965 |
967 |
966 revs = sorted(linerangesbyrev, reverse=True) |
968 revs = sorted(linerangesbyrev, reverse=True) |
967 |
969 |
968 differ = changesetdiffer() |
970 differ = changesetdiffer() |