897 # to 'glob'. At most one 'r:' and 'd:' argument can be passed. |
897 # to 'glob'. At most one 'r:' and 'd:' argument can be passed. |
898 |
898 |
899 # i18n: "_matchfiles" is a keyword |
899 # i18n: "_matchfiles" is a keyword |
900 l = getargs(x, 1, -1, _("_matchfiles requires at least one argument")) |
900 l = getargs(x, 1, -1, _("_matchfiles requires at least one argument")) |
901 pats, inc, exc = [], [], [] |
901 pats, inc, exc = [], [], [] |
902 hasset = False |
|
903 rev, default = None, None |
902 rev, default = None, None |
904 for arg in l: |
903 for arg in l: |
905 # i18n: "_matchfiles" is a keyword |
904 # i18n: "_matchfiles" is a keyword |
906 s = getstring(arg, _("_matchfiles requires string arguments")) |
905 s = getstring(arg, _("_matchfiles requires string arguments")) |
907 prefix, value = s[:2], s[2:] |
906 prefix, value = s[:2], s[2:] |
924 'default mode')) |
923 'default mode')) |
925 default = value |
924 default = value |
926 else: |
925 else: |
927 # i18n: "_matchfiles" is a keyword |
926 # i18n: "_matchfiles" is a keyword |
928 raise error.ParseError(_('invalid _matchfiles prefix: %s') % prefix) |
927 raise error.ParseError(_('invalid _matchfiles prefix: %s') % prefix) |
929 if not hasset and matchmod.patkind(value) == 'set': |
|
930 hasset = True |
|
931 if not default: |
928 if not default: |
932 default = 'glob' |
929 default = 'glob' |
933 |
930 |
|
931 m = matchmod.match(repo.root, repo.getcwd(), pats, include=inc, |
|
932 exclude=exc, ctx=repo[rev], default=default) |
|
933 |
934 def matches(x): |
934 def matches(x): |
935 m = None |
935 for f in repo[x].files(): |
936 c = repo[x] |
|
937 if not m or (hasset and rev is None): |
|
938 ctx = c |
|
939 if rev is not None: |
|
940 ctx = repo[rev or None] |
|
941 m = matchmod.match(repo.root, repo.getcwd(), pats, include=inc, |
|
942 exclude=exc, ctx=ctx, default=default) |
|
943 for f in c.files(): |
|
944 if m(f): |
936 if m(f): |
945 return True |
937 return True |
946 return False |
938 return False |
947 |
939 |
948 return subset.filter(matches) |
940 return subset.filter(matches) |