| Index: third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/manifest/vcs.py
|
| diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/manifest/vcs.py b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/manifest/vcs.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..010bce81a9cc57827e9bb7a51cd1d19454ce7971
|
| --- /dev/null
|
| +++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/manifest/vcs.py
|
| @@ -0,0 +1,91 @@
|
| +import os
|
| +import subprocess
|
| +
|
| +from .sourcefile import SourceFile
|
| +
|
| +
|
| +class Git(object):
|
| + def __init__(self, repo_root, url_base):
|
| + self.root = os.path.abspath(repo_root)
|
| + self.git = Git.get_func(repo_root)
|
| + self.url_base = url_base
|
| +
|
| + @staticmethod
|
| + def get_func(repo_path):
|
| + def git(cmd, *args):
|
| + full_cmd = ["git", cmd] + list(args)
|
| + return subprocess.check_output(full_cmd, cwd=repo_path, stderr=subprocess.STDOUT)
|
| + return git
|
| +
|
| + @classmethod
|
| + def for_path(cls, path, url_base):
|
| + git = Git.get_func(path)
|
| + try:
|
| + return cls(git("rev-parse", "--show-toplevel").rstrip(), url_base)
|
| + except subprocess.CalledProcessError:
|
| + return None
|
| +
|
| + def _local_changes(self):
|
| + changes = {}
|
| + cmd = ["status", "-z", "--ignore-submodules=all"]
|
| + data = self.git(*cmd)
|
| +
|
| + if data == "":
|
| + return changes
|
| +
|
| + rename_data = None
|
| + for entry in data.split("\0")[:-1]:
|
| + if rename_data is not None:
|
| + status, rel_path = entry.split(" ")
|
| + if status[0] == "R":
|
| + rename_data = (rel_path, status)
|
| + else:
|
| + changes[rel_path] = (status, None)
|
| + else:
|
| + rel_path = entry
|
| + changes[rel_path] = rename_data
|
| + rename_data = None
|
| + return changes
|
| +
|
| + def _show_file(self, path):
|
| + path = os.path.relpath(os.path.abspath(path), self.root)
|
| + return self.git("show", "HEAD:%s" % path)
|
| +
|
| + def __iter__(self):
|
| + cmd = ["ls-tree", "-r", "-z", "--name-only", "HEAD"]
|
| + local_changes = self._local_changes()
|
| + for rel_path in self.git(*cmd).split("\0")[:-1]:
|
| + if not os.path.isdir(os.path.join(self.root, rel_path)):
|
| + if rel_path in local_changes:
|
| + contents = self._show_file(rel_path)
|
| + else:
|
| + contents = None
|
| + yield SourceFile(self.root,
|
| + rel_path,
|
| + self.url_base,
|
| + contents=contents)
|
| +
|
| +
|
| +class FileSystem(object):
|
| + def __init__(self, root, url_base):
|
| + self.root = root
|
| + self.url_base = url_base
|
| + from gitignore import gitignore
|
| + self.path_filter = gitignore.PathFilter(self.root)
|
| +
|
| + def __iter__(self):
|
| + is_root = True
|
| + for dir_path, dir_names, filenames in os.walk(self.root):
|
| + rel_root = os.path.relpath(dir_path, self.root)
|
| +
|
| + if is_root:
|
| + dir_names[:] = [item for item in dir_names if item not in
|
| + ["tools", "resources", ".git"]]
|
| + is_root = False
|
| +
|
| + for filename in filenames:
|
| + rel_path = os.path.join(rel_root, filename)
|
| + if self.path_filter(rel_path):
|
| + yield SourceFile(self.root,
|
| + rel_path,
|
| + self.url_base)
|
|
|