Handle the case when non-optional props have the same value

foo=true
foo=true
foo?=false

Consider the above case: Then the duplication of foo is allowed because
they have the same value (true). However, there was a bug that the
optional assirgnment foo?=false is left unmodified.

This fixes the bug by commenting such optional assignments.

Exempt-From-Owner-Approval: fixes a broken build

Bug: 117892318
Bug: 158735147
Test: atest test_post_process_props
Test: m out/target/product/vsoc_x86/vendor/build.prop for  cf_x86_auto

Exempt-From-Owner-Approval: cherry-pick from master

Merged-In: Iba9b61d9779d93e86d9bead2286f945f8d51ab1d
(cherry picked from commit 9a32636759822bfb04071c9e28b101e9714ce305)
Change-Id: Iba9b61d9779d93e86d9bead2286f945f8d51ab1d
diff --git a/tools/test_post_process_props.py b/tools/test_post_process_props.py
index 44fe957..12d52e5 100644
--- a/tools/test_post_process_props.py
+++ b/tools/test_post_process_props.py
@@ -221,11 +221,17 @@
       stderr_redirect = io.StringIO()
       with contextlib.redirect_stderr(stderr_redirect):
         props = PropList("hello")
+        optional_prop = props.get_props("foo")[2] # the last foo?=false one
 
         # we have duplicated foo=true and foo=true, but that's allowed
         # since they have the same value
         self.assertTrue(override_optional_props(props))
 
+        # foo?=false should be commented out
+        self.assertEqual("# Removed by post_process_props.py because " +
+                         "overridden by foo=true\n#foo?=false",
+                         str(optional_prop))
+
   def test_allowDuplicates(self):
     content = """
     # comment