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

Unified Diff: services/catalog/public/tools/generate_manifest.py

Issue 2645973006: [Service Manager] Get rid of dynamic service discovery (Closed)
Patch Set: . Created 3 years, 11 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
« no previous file with comments | « services/catalog/public/tools/catalog.gni ('k') | services/catalog/reader.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: services/catalog/public/tools/generate_manifest.py
diff --git a/services/catalog/public/tools/generate_manifest.py b/services/catalog/public/tools/generate_manifest.py
index 20ec8f41436cbdd1c57146ae00c61caad92dc048..316ee687936dc6c3eb4ddaa2e3800bbaf20c8ac1 100755
--- a/services/catalog/public/tools/generate_manifest.py
+++ b/services/catalog/public/tools/generate_manifest.py
@@ -43,11 +43,30 @@ def AddServiceEntryToCatalog(services, name, entry):
services[name] = entry
+def SanityCheckCatalog(catalog):
+ """Ensures any given service name appears only once within the catalog."""
+ known_services = set()
+
+ def has_no_dupes(root):
+ if "name" in root:
+ name = root["name"]
+ if name in known_services:
+ raise ValueError("Duplicate catalog entry found for service: %s" % name)
+ known_services.add(name)
+
+ if "services" not in root:
+ return True
+
+ return all(has_no_dupes(service) for service in root["services"])
+
+ return all(has_no_dupes(service["manifest"])
+ for service in catalog["services"].itervalues())
+
+
def main():
parser = argparse.ArgumentParser(
description="Generates a Service Manager catalog manifest.")
parser.add_argument("--output")
- parser.add_argument("--packages-dir")
parser.add_argument("--pretty", action="store_true")
parser.add_argument("--embedded-services", nargs="+",
dest="embedded_services", default=[])
@@ -59,8 +78,8 @@ def main():
dest="executable_override_specs", default=[])
args, _ = parser.parse_known_args()
- if args.output is None or args.packages_dir is None:
- raise Exception("--output and --packages-dir required")
+ if args.output is None:
+ raise Exception("--output required")
services = {}
for subcatalog_path in args.included_catalogs:
@@ -73,16 +92,15 @@ def main():
service_name, exe_path = override_spec.split(":", 1)
executable_overrides[service_name] = exe_path
- for name in args.embedded_services:
- manifest_path = os.path.join(args.packages_dir, name, "manifest.json")
+ for manifest_path in args.embedded_services:
service_name, manifest = ParseManifest(manifest_path)
entry = { "embedded": True, "manifest": manifest }
AddServiceEntryToCatalog(services, service_name, entry)
- for name in args.standalone_services:
- manifest_path = os.path.join(args.packages_dir, name, "manifest.json")
+ for manifest_path in args.standalone_services:
service_name, manifest = ParseManifest(manifest_path)
- entry = { "embedded": False, "manifest": ParseJSONFile(manifest_path) }
+ entry = { "embedded": False, "manifest": manifest }
+ name = manifest["name"]
if name in executable_overrides:
entry["executable"] = executable_overrides[name]
AddServiceEntryToCatalog(services, service_name, entry)
@@ -91,6 +109,10 @@ def main():
with open(args.output, 'w') as output_file:
json.dump(catalog, output_file, indent=2 if args.pretty else -1)
+ # NOTE: We do the sanity check and possible failure *after* outputting the
+ # catalog manifest so it's easier to inspect erroneous output.
+ SanityCheckCatalog(catalog);
+
return 0
if __name__ == "__main__":
« no previous file with comments | « services/catalog/public/tools/catalog.gni ('k') | services/catalog/reader.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698