コード例 #1
0
ファイル: ignore.py プロジェクト: zivzone/dvc
    def _update_sub_repo(self, path):
        from dvc.repo import Repo

        if path == self.root_dir:
            return

        dvc_dir = os.path.join(path, Repo.DVC_DIR)
        if not os.path.exists(dvc_dir):
            return

        root, dname = os.path.split(path)
        self._ignored_subrepos[root] = self._ignored_subrepos.get(
            root, set()
        ) | {dname}
        pattern_info = PatternInfo(f"/{dname}/", f"in sub_repo:{dname}")
        new_pattern = DvcIgnorePatterns([pattern_info], root)
        old_pattern = self.ignores_trie_tree.longest_prefix(root).value
        if old_pattern:
            self.ignores_trie_tree[root] = DvcIgnorePatterns(
                *merge_patterns(
                    old_pattern.pattern_list,
                    old_pattern.dirname,
                    new_pattern.pattern_list,
                    new_pattern.dirname,
                )
            )
        else:
            self.ignores_trie_tree[root] = new_pattern
コード例 #2
0
    def _update_sub_repo(self, path, ignore_trie: Trie):
        from dvc.repo import Repo

        if path == self.root_dir:
            return

        dvc_dir = self.fs.path.join(path, Repo.DVC_DIR)
        if not self.fs.exists(dvc_dir):
            return

        root, dname = self.fs.path.split(path)
        key = self._get_key(root)
        pattern_info = PatternInfo(f"/{dname}/", f"in sub_repo:{dname}")
        new_pattern = DvcIgnorePatterns([pattern_info], root, self.fs.sep)
        old_pattern = ignore_trie.longest_prefix(key).value
        if old_pattern:
            plist, prefix = merge_patterns(
                self.fs.path.flavour,
                old_pattern.pattern_list,
                old_pattern.dirname,
                new_pattern.pattern_list,
                new_pattern.dirname,
            )
            ignore_trie[key] = DvcIgnorePatterns(plist, prefix, self.fs.sep)
        else:
            ignore_trie[key] = new_pattern
コード例 #3
0
ファイル: ignore.py プロジェクト: jhhuh/dvc
    def from_file(cls, path, fs, name):
        assert fs.path.isabs(path)
        dirname = fs.path.normpath(fs.path.dirname(path))
        with fs.open(path, encoding="utf-8") as fobj:
            path_spec_lines = [
                PatternInfo(line, f"{name}:{line_no + 1}:{line}") for line_no,
                line in enumerate(map(str.strip, fobj.readlines()))
                if line and not (line.strip().startswith("#"))
            ]

        return cls(path_spec_lines, dirname, fs.sep)
コード例 #4
0
    def from_files(cls, ignore_file_path, fs):
        assert os.path.isabs(ignore_file_path)
        dirname = os.path.normpath(os.path.dirname(ignore_file_path))
        ignore_file_rel_path = os.path.relpath(ignore_file_path, fs.fs_root)
        with fs.open(ignore_file_path, encoding="utf-8") as fobj:
            path_spec_lines = [
                PatternInfo(
                    line,
                    "{}:{}:{}".format(ignore_file_rel_path, line_no + 1, line),
                ) for line_no, line in enumerate(
                    map(str.strip, fobj.readlines()))
                if line and not (line.strip().startswith("#"))
            ]

        return cls(path_spec_lines, dirname)
コード例 #5
0
ファイル: ignore.py プロジェクト: vijay120/dvc
    def __init__(self, pattern_list, dirname):
        if pattern_list:
            if isinstance(pattern_list[0], str):
                pattern_list = [
                    PatternInfo(pattern, "") for pattern in pattern_list
                ]

        self.pattern_list = pattern_list
        self.dirname = dirname
        self.prefix = self.dirname + os.sep

        self.regex_pattern_list = [
            GitWildMatchPattern.pattern_to_regex(pattern_info.patterns)
            for pattern_info in pattern_list
        ]

        self.ignore_spec = [(ignore,
                             re.compile("|".join(item[0] for item in group)))
                            for ignore, group in groupby(
                                self.regex_pattern_list, lambda x: x[1])
                            if ignore is not None]
コード例 #6
0
 def _update_sub_repo(self, root, dirs):
     for d in dirs:
         if self._is_dvc_repo(root, d):
             self._ignored_subrepos[root] = self._ignored_subrepos.get(
                 root, set()
             ) | {d}
             pattern_info = PatternInfo(
                 f"/{d}/", "in sub_repo:{}".format(d)
             )
             new_pattern = DvcIgnorePatterns([pattern_info], root)
             old_pattern = self.ignores_trie_tree.longest_prefix(root).value
             if old_pattern:
                 self.ignores_trie_tree[root] = DvcIgnorePatterns(
                     *merge_patterns(
                         old_pattern.pattern_list,
                         old_pattern.dirname,
                         new_pattern.pattern_list,
                         new_pattern.dirname,
                     )
                 )
             else:
                 self.ignores_trie_tree[root] = new_pattern
コード例 #7
0
def _to_pattern_info_list(str_list: List):
    return [PatternInfo(a, "") for a in str_list]
コード例 #8
0
def test_dvcignore_pattern_change_dir(tmp_dir, patterns, dirname, changed):
    assert _change_dirname(dirname, [PatternInfo(patterns, "")],
                           "/") == [PatternInfo(changed, "")]