924 rev = '.' |
924 rev = '.' |
925 if 'startrev' in args: |
925 if 'startrev' in args: |
926 revs = getset(repo, fullreposet(repo), args['startrev']) |
926 revs = getset(repo, fullreposet(repo), args['startrev']) |
927 if len(revs) != 1: |
927 if len(revs) != 1: |
928 raise error.ParseError( |
928 raise error.ParseError( |
|
929 # i18n: "followlines" is a keyword |
929 _("followlines expects exactly one revision")) |
930 _("followlines expects exactly one revision")) |
930 rev = revs.last() |
931 rev = revs.last() |
931 |
932 |
932 pat = getstring(args['file'], _("followlines requires a pattern")) |
933 pat = getstring(args['file'], _("followlines requires a pattern")) |
933 if not matchmod.patkind(pat): |
934 if not matchmod.patkind(pat): |
934 fname = pathutil.canonpath(repo.root, repo.getcwd(), pat) |
935 fname = pathutil.canonpath(repo.root, repo.getcwd(), pat) |
935 else: |
936 else: |
936 m = matchmod.match(repo.root, repo.getcwd(), [pat], ctx=repo[rev]) |
937 m = matchmod.match(repo.root, repo.getcwd(), [pat], ctx=repo[rev]) |
937 files = [f for f in repo[rev] if m(f)] |
938 files = [f for f in repo[rev] if m(f)] |
938 if len(files) != 1: |
939 if len(files) != 1: |
|
940 # i18n: "followlines" is a keyword |
939 raise error.ParseError(_("followlines expects exactly one file")) |
941 raise error.ParseError(_("followlines expects exactly one file")) |
940 fname = files[0] |
942 fname = files[0] |
941 |
943 |
|
944 # i18n: "followlines" is a keyword |
942 lr = getrange(args['lines'][0], _("followlines expects a line range")) |
945 lr = getrange(args['lines'][0], _("followlines expects a line range")) |
943 fromline, toline = [getinteger(a, _("line range bounds must be integers")) |
946 fromline, toline = [getinteger(a, _("line range bounds must be integers")) |
944 for a in lr] |
947 for a in lr] |
945 fromline, toline = util.processlinerange(fromline, toline) |
948 fromline, toline = util.processlinerange(fromline, toline) |
946 |
949 |
947 fctx = repo[rev].filectx(fname) |
950 fctx = repo[rev].filectx(fname) |
948 descend = False |
951 descend = False |
949 if 'descend' in args: |
952 if 'descend' in args: |
950 descend = getboolean(args['descend'], |
953 descend = getboolean(args['descend'], |
951 _("'descend' argument must be a boolean")) |
954 # i18n: "descend" is a keyword |
|
955 _("descend argument must be a boolean")) |
952 if descend: |
956 if descend: |
953 rs = generatorset( |
957 rs = generatorset( |
954 (c.rev() for c, _linerange |
958 (c.rev() for c, _linerange |
955 in context.blockdescendants(fctx, fromline, toline)), |
959 in context.blockdescendants(fctx, fromline, toline)), |
956 iterasc=True) |
960 iterasc=True) |