Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(255)

Unified Diff: third_party/mojo/src/mojo/public/tools/mojom_fetcher/pylib/fetcher/repository.py

Issue 1058033002: NOT TO COMMITTED: Update mojo sdk to rev 0018e6a91b75bcb941c867f8a7aa1753c3b53a13 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/mojo/src/mojo/public/tools/mojom_fetcher/pylib/fetcher/repository.py
diff --git a/third_party/mojo/src/mojo/public/tools/mojom_fetcher/pylib/fetcher/repository.py b/third_party/mojo/src/mojo/public/tools/mojom_fetcher/pylib/fetcher/repository.py
new file mode 100644
index 0000000000000000000000000000000000000000..dde99b244f158663f37c180337c96c205fc84bb4
--- /dev/null
+++ b/third_party/mojo/src/mojo/public/tools/mojom_fetcher/pylib/fetcher/repository.py
@@ -0,0 +1,88 @@
+# Copyright 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import os
+
+from fetcher.dependency import Dependency
+from mojom.parse.parser import Parse
+
+
+class Repository(object):
+ """Repository represents a code repository on the local disc."""
+ def __init__(self, root_dir, external_dir):
+ """root_dir represents the root of the repository;
+ external_dir is the relative path of the external directory within the
+ repository (so, relative to root_dir)
+ """
+ self._root_dir = os.path.normpath(root_dir)
+ self._external_dir = external_dir
+
+ def get_repo_root_directory(self):
+ return self._root_dir
+
+ def get_external_directory(self):
+ return os.path.join(self._root_dir, self._external_dir)
+
+ def _os_walk(self, root_directory):
+ # This method is included for dependency injection
+ return os.walk(root_directory)
+
+ def _open(self, filename):
+ # This method is included for dependency injection
+ return open(filename)
+
+ def _get_all_mojom_in_directory(self, root_directory):
+ mojoms = []
+ for dirname, _, files in self._os_walk(root_directory):
+ for f in files:
+ if f.endswith(".mojom"):
+ mojoms.append(os.path.join(dirname,f))
+ return mojoms
+
+ def _resolve_dependencies(self, dependencies, mojoms):
+ """Resolve dependencies between discovered mojoms, so we know which are the
+ missing ones."""
+ missing = []
+ for dependency in dependencies:
+ found = False
+ for search_path in dependency.get_search_path_for_dependency():
+ if os.path.normpath(
+ os.path.join(search_path,
+ dependency.get_imported())) in mojoms:
+ found = True
+ break
+ if not found:
+ missing.append(dependency)
+ return missing
+
+ def get_missing_dependencies(self):
+ """get_missing_dependencies returns a set of dependencies that are required
+ by mojoms in this repository but not available.
+ """
+ # Update the list of available mojoms in this repository.
+ mojoms = set(self._get_all_mojom_in_directory(self._root_dir))
+
+ # Find all declared dependencies
+ needed_deps = set([])
+ for mojom in mojoms:
+ with self._open(mojom) as f:
+ source = f.read()
+ tree = Parse(source, mojom)
+ for dep in tree.import_list:
+ needed_deps.add(Dependency(self, dep.filename, dep.import_filename))
+
+ missing_deps = self._resolve_dependencies(needed_deps, mojoms)
+
+ return missing_deps
+
+ def get_external_urls(self):
+ """Get all external mojom files in this repository, by urls (without
+ scheme)."""
+ mojoms = set(self._get_all_mojom_in_directory(
+ self.get_external_directory()))
+ urls = []
+ for mojom in mojoms:
+ urls.append(os.path.relpath(mojom, self.get_external_directory()))
+ return urls
+

Powered by Google App Engine
This is Rietveld 408576698