151 spec = format(includepats, excludepats) |
151 spec = format(includepats, excludepats) |
152 if repo.shared(): |
152 if repo.shared(): |
153 repo = share._getsrcrepo(repo) |
153 repo = share._getsrcrepo(repo) |
154 repo.vfs.write(FILENAME, spec) |
154 repo.vfs.write(FILENAME, spec) |
155 |
155 |
156 def restrictpatterns(req_includes, req_excludes, repo_includes, repo_excludes, |
156 def restrictpatterns(req_includes, req_excludes, repo_includes, repo_excludes): |
157 invalid_includes=None): |
|
158 r""" Restricts the patterns according to repo settings, |
157 r""" Restricts the patterns according to repo settings, |
159 results in a logical AND operation |
158 results in a logical AND operation |
160 |
159 |
161 :param req_includes: requested includes |
160 :param req_includes: requested includes |
162 :param req_excludes: requested excludes |
161 :param req_excludes: requested excludes |
163 :param repo_includes: repo includes |
162 :param repo_includes: repo includes |
164 :param repo_excludes: repo excludes |
163 :param repo_excludes: repo excludes |
165 :param invalid_includes: an array to collect invalid includes |
164 :return: include patterns, exclude patterns, and invalid include patterns. |
166 :return: include and exclude patterns |
|
167 |
165 |
168 >>> restrictpatterns({'f1','f2'}, {}, ['f1'], []) |
166 >>> restrictpatterns({'f1','f2'}, {}, ['f1'], []) |
169 (set(['f1']), {}) |
167 (set(['f1']), {}, []) |
170 >>> restrictpatterns({'f1'}, {}, ['f1','f2'], []) |
168 >>> restrictpatterns({'f1'}, {}, ['f1','f2'], []) |
171 (set(['f1']), {}) |
169 (set(['f1']), {}, []) |
172 >>> restrictpatterns({'f1/fc1', 'f3/fc3'}, {}, ['f1','f2'], []) |
170 >>> restrictpatterns({'f1/fc1', 'f3/fc3'}, {}, ['f1','f2'], []) |
173 (set(['f1/fc1']), {}) |
171 (set(['f1/fc1']), {}, []) |
174 >>> restrictpatterns({'f1_fc1'}, {}, ['f1','f2'], []) |
172 >>> restrictpatterns({'f1_fc1'}, {}, ['f1','f2'], []) |
175 ([], set(['path:.'])) |
173 ([], set(['path:.']), []) |
176 >>> restrictpatterns({'f1/../f2/fc2'}, {}, ['f1','f2'], []) |
174 >>> restrictpatterns({'f1/../f2/fc2'}, {}, ['f1','f2'], []) |
177 (set(['f2/fc2']), {}) |
175 (set(['f2/fc2']), {}, []) |
178 >>> restrictpatterns({'f1/../f3/fc3'}, {}, ['f1','f2'], []) |
176 >>> restrictpatterns({'f1/../f3/fc3'}, {}, ['f1','f2'], []) |
179 ([], set(['path:.'])) |
177 ([], set(['path:.']), []) |
180 >>> restrictpatterns({'f1/$non_exitent_var'}, {}, ['f1','f2'], []) |
178 >>> restrictpatterns({'f1/$non_exitent_var'}, {}, ['f1','f2'], []) |
181 (set(['f1/$non_exitent_var']), {}) |
179 (set(['f1/$non_exitent_var']), {}, []) |
182 """ |
180 """ |
183 res_excludes = set(req_excludes) |
181 res_excludes = set(req_excludes) |
184 res_excludes.update(repo_excludes) |
182 res_excludes.update(repo_excludes) |
|
183 invalid_includes = [] |
185 if not req_includes: |
184 if not req_includes: |
186 res_includes = set(repo_includes) |
185 res_includes = set(repo_includes) |
187 elif 'path:.' not in repo_includes: |
186 elif 'path:.' not in repo_includes: |
188 res_includes = [] |
187 res_includes = [] |
189 for req_include in req_includes: |
188 for req_include in req_includes: |