omni: hack roomservice to allow adding remove-project entries
adding override attribute in a repostory in dependencies
will add a remove-project manifest entry before the
real project entry
{
"remote": "omnirom",
"override": "android_frameworks_native",
"repository": "android_frameworks_native",
"target_path": "frameworks/native",
"revision": "android-9.0"
}
<remove-project name=android_frameworks_native />
<project name=android_frameworks_native path=frameworks/native remote=omnirom revision=android-9.0 />
Change-Id: Iea8f5486a50441487777bbb650ba4fe2b107d7ff
diff --git a/build/tools/roomservice.py b/build/tools/roomservice.py
index 8f3641f..60fccd0 100755
--- a/build/tools/roomservice.py
+++ b/build/tools/roomservice.py
@@ -113,6 +113,22 @@
yield project
+def iterate_manifests_remove_project():
+ files = []
+ for file in os.listdir(local_manifest_dir):
+ if file.endswith(".xml"):
+ files.append(os.path.join(local_manifest_dir, file))
+ files.append('.repo/manifest.xml')
+ for file in files:
+ try:
+ man = ES.parse(file)
+ man = man.getroot()
+ except (IOError, ES.ParseError):
+ print("WARNING: error while parsing %s" % file)
+ else:
+ for project in man.findall("remove-project"):
+ yield project
+
def check_project_exists(url, revision, path):
for project in iterate_manifests():
if project.get("name") == url \
@@ -122,6 +138,12 @@
return False
+def check_remove_project_exists(url):
+ for project in iterate_manifests_remove_project():
+ if project.get("name") == url:
+ return True
+ return False
+
def check_target_exists(directory):
return os.path.isdir(directory)
@@ -160,6 +182,17 @@
})
return project
+def create_remove_project(url):
+ remove_project_exists = check_remove_project_exists(url)
+
+ if remove_project_exists:
+ return None
+
+ project = ES.Element("remove-project",
+ attrib={
+ "name": url
+ })
+ return project
def append_to_manifest(project):
try:
@@ -259,6 +292,15 @@
target_path = dependency.get("target_path")
revision = dependency.get("revision", default_rev)
remote = dependency.get("remote", default_rem)
+ override = dependency.get("override", None)
+
+ if override is not None:
+ #print("found override in ", repository)
+ project = create_remove_project(repository)
+ if project is not None:
+ manifest = append_to_manifest(project)
+ #print(ES.tostring(manifest).decode())
+ write_to_manifest(manifest)
# not adding an organization should default to android_team
# only apply this to github