annotate cutils/util/fnmatch.py @ 308:652870b20f9e

treesum: Implement --accept-treesum: trust a treesum-file for a directory checksum
author Franz Glasner <fzglas.hg@dom66.de>
date Sat, 08 Mar 2025 04:49:06 +0100
parents 6c212e407524
children f5f54b9c3552
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
300
1fc117f5f9a1 treesum: Implement --include/--exclude commandline parsing for file name inclusion and exclusion.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
1fc117f5f9a1 treesum: Implement --include/--exclude commandline parsing for file name inclusion and exclusion.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2 # :-
1fc117f5f9a1 treesum: Implement --include/--exclude commandline parsing for file name inclusion and exclusion.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3 # :Copyright: (c) 2020-2025 Franz Glasner
1fc117f5f9a1 treesum: Implement --include/--exclude commandline parsing for file name inclusion and exclusion.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4 # :License: BSD-3-Clause
1fc117f5f9a1 treesum: Implement --include/--exclude commandline parsing for file name inclusion and exclusion.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5 # :-
1fc117f5f9a1 treesum: Implement --include/--exclude commandline parsing for file name inclusion and exclusion.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6 r"""File name matching.
1fc117f5f9a1 treesum: Implement --include/--exclude commandline parsing for file name inclusion and exclusion.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7
1fc117f5f9a1 treesum: Implement --include/--exclude commandline parsing for file name inclusion and exclusion.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8 """
1fc117f5f9a1 treesum: Implement --include/--exclude commandline parsing for file name inclusion and exclusion.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9
1fc117f5f9a1 treesum: Implement --include/--exclude commandline parsing for file name inclusion and exclusion.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10 from __future__ import print_function, absolute_import
1fc117f5f9a1 treesum: Implement --include/--exclude commandline parsing for file name inclusion and exclusion.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11
1fc117f5f9a1 treesum: Implement --include/--exclude commandline parsing for file name inclusion and exclusion.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12
302
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
13 __all__ = ["FnMatcher"]
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
14
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
15
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
16 import re
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
17
308
652870b20f9e treesum: Implement --accept-treesum: trust a treesum-file for a directory checksum
Franz Glasner <fzglas.hg@dom66.de>
parents: 305
diff changeset
18 from . import PY2
302
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
19 from . import glob
300
1fc117f5f9a1 treesum: Implement --include/--exclude commandline parsing for file name inclusion and exclusion.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20
1fc117f5f9a1 treesum: Implement --include/--exclude commandline parsing for file name inclusion and exclusion.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21
1fc117f5f9a1 treesum: Implement --include/--exclude commandline parsing for file name inclusion and exclusion.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22 HELP_DESCRIPTION = """\
1fc117f5f9a1 treesum: Implement --include/--exclude commandline parsing for file name inclusion and exclusion.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23 PATTERNs
1fc117f5f9a1 treesum: Implement --include/--exclude commandline parsing for file name inclusion and exclusion.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24 ========
1fc117f5f9a1 treesum: Implement --include/--exclude commandline parsing for file name inclusion and exclusion.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25
1fc117f5f9a1 treesum: Implement --include/--exclude commandline parsing for file name inclusion and exclusion.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
26 glob: case-sensitive, anchored at the begin and end
1fc117f5f9a1 treesum: Implement --include/--exclude commandline parsing for file name inclusion and exclusion.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
27 iglob: case-insensitive variant of "glob"
1fc117f5f9a1 treesum: Implement --include/--exclude commandline parsing for file name inclusion and exclusion.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
28 re: regular expression
1fc117f5f9a1 treesum: Implement --include/--exclude commandline parsing for file name inclusion and exclusion.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
29 path: plain text example (rooted), can be a file or a directory or a prefix
1fc117f5f9a1 treesum: Implement --include/--exclude commandline parsing for file name inclusion and exclusion.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
30 thereof
302
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
31 fullpath: exactly a single full path (file or directory), relative to the
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
32 root of the tree
300
1fc117f5f9a1 treesum: Implement --include/--exclude commandline parsing for file name inclusion and exclusion.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
33
1fc117f5f9a1 treesum: Implement --include/--exclude commandline parsing for file name inclusion and exclusion.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
34 """
302
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
35
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
36
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
37 def glob_factory(pattern):
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
38
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
39 cpat = re.compile(
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
40 # automatically anchored
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
41 "\\A{}\\Z".format(glob.glob_to_regexp(pattern)),
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
42 re.DOTALL)
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
43
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
44 def _glob_matcher(s):
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
45 return cpat.search(s) is not None
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
46
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
47 return _glob_matcher
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
48
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
49
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
50 def iglob_factory(pattern):
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
51
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
52 cpat = re.compile(
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
53 # automatically anchored
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
54 "\\A{}\\Z".format(glob.glob_to_regexp(pattern)),
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
55 re.DOTALL | re.IGNORECASE)
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
56
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
57 def _iglob_matcher(s):
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
58 return cpat.search(s) is not None
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
59
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
60 return _iglob_matcher
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
61
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
62
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
63 def re_factory(pattern):
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
64
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
65 cpat = re.compile(pattern, re.DOTALL)
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
66
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
67 def _re_matcher(s):
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
68 return cpat.search(s) is not None
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
69
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
70 return _re_matcher
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
71
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
72
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
73 def path_factory(pattern):
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
74
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
75 def _path_matcher(s):
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
76 return s.startswith(pattern)
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
77
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
78 return _path_matcher
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
79
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
80
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
81 def fullpath_factory(pattern):
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
82
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
83 def _fullpath_matcher(s):
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
84 return s == pattern
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
85
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
86 return _fullpath_matcher
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
87
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
88
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
89 class FnMatcher(object):
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
90
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
91 _registry = {
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
92 "glob": glob_factory,
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
93 "iglob": iglob_factory,
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
94 "re": re_factory,
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
95 "path": path_factory,
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
96 "fullpath": fullpath_factory,
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
97 }
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
98
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
99 def __init__(self, matchers):
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
100 super(FnMatcher, self).__init__()
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
101 self._matchers = matchers
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
102
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
103 @classmethod
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
104 def build_from_commandline_patterns(klass, filter_definitions):
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
105 matchers = []
304
dc1f08937621 FIX: fnmatch: handle None fnmatch filter definitions
Franz Glasner <fzglas.hg@dom66.de>
parents: 302
diff changeset
106 if filter_definitions:
dc1f08937621 FIX: fnmatch: handle None fnmatch filter definitions
Franz Glasner <fzglas.hg@dom66.de>
parents: 302
diff changeset
107 for action, kpattern in filter_definitions:
308
652870b20f9e treesum: Implement --accept-treesum: trust a treesum-file for a directory checksum
Franz Glasner <fzglas.hg@dom66.de>
parents: 305
diff changeset
108 assert action in ("include", "exclude", "accept-treesum")
304
dc1f08937621 FIX: fnmatch: handle None fnmatch filter definitions
Franz Glasner <fzglas.hg@dom66.de>
parents: 302
diff changeset
109 kind, sep, pattern = kpattern.partition(':')
dc1f08937621 FIX: fnmatch: handle None fnmatch filter definitions
Franz Glasner <fzglas.hg@dom66.de>
parents: 302
diff changeset
110 if not sep:
dc1f08937621 FIX: fnmatch: handle None fnmatch filter definitions
Franz Glasner <fzglas.hg@dom66.de>
parents: 302
diff changeset
111 # use the default
dc1f08937621 FIX: fnmatch: handle None fnmatch filter definitions
Franz Glasner <fzglas.hg@dom66.de>
parents: 302
diff changeset
112 kind = "glob"
dc1f08937621 FIX: fnmatch: handle None fnmatch filter definitions
Franz Glasner <fzglas.hg@dom66.de>
parents: 302
diff changeset
113 pattern = kpattern
dc1f08937621 FIX: fnmatch: handle None fnmatch filter definitions
Franz Glasner <fzglas.hg@dom66.de>
parents: 302
diff changeset
114 factory = klass._registry.get(kind, None)
dc1f08937621 FIX: fnmatch: handle None fnmatch filter definitions
Franz Glasner <fzglas.hg@dom66.de>
parents: 302
diff changeset
115 if not factory:
dc1f08937621 FIX: fnmatch: handle None fnmatch filter definitions
Franz Glasner <fzglas.hg@dom66.de>
parents: 302
diff changeset
116 raise RuntimeError("unknown pattern kind: {}".format(kind))
dc1f08937621 FIX: fnmatch: handle None fnmatch filter definitions
Franz Glasner <fzglas.hg@dom66.de>
parents: 302
diff changeset
117 matchers.append((action, kind, factory(pattern), pattern))
302
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
118 return klass(matchers)
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
119
308
652870b20f9e treesum: Implement --accept-treesum: trust a treesum-file for a directory checksum
Franz Glasner <fzglas.hg@dom66.de>
parents: 305
diff changeset
120 def shall_visit(self, fn, default=True):
652870b20f9e treesum: Implement --accept-treesum: trust a treesum-file for a directory checksum
Franz Glasner <fzglas.hg@dom66.de>
parents: 305
diff changeset
121 visit = default
302
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
122 for action, kind, matcher, orig_pattern in self._matchers:
308
652870b20f9e treesum: Implement --accept-treesum: trust a treesum-file for a directory checksum
Franz Glasner <fzglas.hg@dom66.de>
parents: 305
diff changeset
123 if matcher(fn):
302
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
124 if action == "include":
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
125 visit = True
308
652870b20f9e treesum: Implement --accept-treesum: trust a treesum-file for a directory checksum
Franz Glasner <fzglas.hg@dom66.de>
parents: 305
diff changeset
126 elif action in ("exclude", "accept-treesum"):
302
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
127 visit = False
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
128 else:
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
129 raise RuntimeError("unknown action: {}".format(action))
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
130 return visit
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
131
308
652870b20f9e treesum: Implement --accept-treesum: trust a treesum-file for a directory checksum
Franz Glasner <fzglas.hg@dom66.de>
parents: 305
diff changeset
132 def shall_accept_treesum(self, fn, default=False):
652870b20f9e treesum: Implement --accept-treesum: trust a treesum-file for a directory checksum
Franz Glasner <fzglas.hg@dom66.de>
parents: 305
diff changeset
133 accept = default
652870b20f9e treesum: Implement --accept-treesum: trust a treesum-file for a directory checksum
Franz Glasner <fzglas.hg@dom66.de>
parents: 305
diff changeset
134 for action, kind, matcher, orig_pattern in self._matchers:
652870b20f9e treesum: Implement --accept-treesum: trust a treesum-file for a directory checksum
Franz Glasner <fzglas.hg@dom66.de>
parents: 305
diff changeset
135 if action == "accept-treesum":
652870b20f9e treesum: Implement --accept-treesum: trust a treesum-file for a directory checksum
Franz Glasner <fzglas.hg@dom66.de>
parents: 305
diff changeset
136 if matcher(fn):
652870b20f9e treesum: Implement --accept-treesum: trust a treesum-file for a directory checksum
Franz Glasner <fzglas.hg@dom66.de>
parents: 305
diff changeset
137 accept = True
652870b20f9e treesum: Implement --accept-treesum: trust a treesum-file for a directory checksum
Franz Glasner <fzglas.hg@dom66.de>
parents: 305
diff changeset
138 elif action in ("include", "exclude"):
652870b20f9e treesum: Implement --accept-treesum: trust a treesum-file for a directory checksum
Franz Glasner <fzglas.hg@dom66.de>
parents: 305
diff changeset
139 pass
652870b20f9e treesum: Implement --accept-treesum: trust a treesum-file for a directory checksum
Franz Glasner <fzglas.hg@dom66.de>
parents: 305
diff changeset
140 else:
652870b20f9e treesum: Implement --accept-treesum: trust a treesum-file for a directory checksum
Franz Glasner <fzglas.hg@dom66.de>
parents: 305
diff changeset
141 raise RuntimeError("unknown action: {}".format(action))
652870b20f9e treesum: Implement --accept-treesum: trust a treesum-file for a directory checksum
Franz Glasner <fzglas.hg@dom66.de>
parents: 305
diff changeset
142 return accept
652870b20f9e treesum: Implement --accept-treesum: trust a treesum-file for a directory checksum
Franz Glasner <fzglas.hg@dom66.de>
parents: 305
diff changeset
143
302
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
144 def definitions(self):
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
145 for action, kind, matcher, orig_pattern in self._matchers:
bf88323d6bf7 treesum: Implement --exclude/--include.
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
146 yield (action, kind, orig_pattern)
308
652870b20f9e treesum: Implement --accept-treesum: trust a treesum-file for a directory checksum
Franz Glasner <fzglas.hg@dom66.de>
parents: 305
diff changeset
147
652870b20f9e treesum: Implement --accept-treesum: trust a treesum-file for a directory checksum
Franz Glasner <fzglas.hg@dom66.de>
parents: 305
diff changeset
148 def __bool__(self):
652870b20f9e treesum: Implement --accept-treesum: trust a treesum-file for a directory checksum
Franz Glasner <fzglas.hg@dom66.de>
parents: 305
diff changeset
149 return bool(self._matchers)
652870b20f9e treesum: Implement --accept-treesum: trust a treesum-file for a directory checksum
Franz Glasner <fzglas.hg@dom66.de>
parents: 305
diff changeset
150
652870b20f9e treesum: Implement --accept-treesum: trust a treesum-file for a directory checksum
Franz Glasner <fzglas.hg@dom66.de>
parents: 305
diff changeset
151 if PY2:
652870b20f9e treesum: Implement --accept-treesum: trust a treesum-file for a directory checksum
Franz Glasner <fzglas.hg@dom66.de>
parents: 305
diff changeset
152 __nonzero__ = __bool__