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