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 Change-Id: Iba9b61d9779d93e86d9bead2286f945f8d51ab1d
This commit is contained in:
parent
b302cdf6a4
commit
9a32636759
2 changed files with 8 additions and 0 deletions
|
@ -88,6 +88,8 @@ def override_optional_props(prop_list, allow_dup=False):
|
|||
if len(overriding_props) > 1:
|
||||
# duplicated props are allowed when the all have the same value
|
||||
if all(overriding_props[0].value == p.value for p in overriding_props):
|
||||
for p in optional_props:
|
||||
p.delete("overridden by %s" % str(overriding_props[0]))
|
||||
continue
|
||||
# or if dup is explicitly allowed for compat reason
|
||||
if allow_dup:
|
||||
|
|
|
@ -221,11 +221,17 @@ class PropListTestcase(unittest.TestCase):
|
|||
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
|
||||
|
|
Loading…
Reference in a new issue