cros_generate_os_release: fill several generic os-release fields

With this change the script will add the following fields in the
/etc/os-release: NAME, ID, HOME_URL, VERSION, VERSION_ID, BUILD_ID.
All of them are only added if they are not already set during
image build.

BUG=b:27841076
TEST=cros_generate_os_release_unittest

Change-Id: I23af1fa83c8ffd09dbf58d0ed19e4c2b2c0ae9db
Reviewed-on: https://chromium-review.googlesource.com/342485
Commit-Ready: Andrey Ulanov <andreyu@google.com>
Tested-by: Andrey Ulanov <andreyu@google.com>
Reviewed-by: Mike Frysinger <vapier@chromium.org>
diff --git a/scripts/cros_generate_os_release.py b/scripts/cros_generate_os_release.py
index 0214666..8ab6697 100644
--- a/scripts/cros_generate_os_release.py
+++ b/scripts/cros_generate_os_release.py
@@ -13,11 +13,13 @@
 from chromite.lib import osutils
 
 
-def GenerateOsRelease(root):
+def GenerateOsRelease(root, default_params=None):
   """Adds contents of /etc/os-release.d into /etc/os-release
 
   Args:
     root: path to the root directory where os-release should be genereated.
+    default_params: a dict of os-release parameters that should be added
+      if not already set.
   """
   os_release_path = os.path.join(root, 'etc', 'os-release')
   os_released_path = os.path.join(root, 'etc', 'os-release.d')
@@ -48,16 +50,34 @@
     mapping[key] = osutils.ReadFile(os.path.join(os_released_path,
                                                  filepath)).strip('\n')
 
+  if default_params:
+    for key, value in default_params.iteritems():
+      mapping.setdefault(key, value)
+
   osrelease_content = '\n'.join([k + '=' + mapping[k] for k in mapping])
   osrelease_content += '\n'
   osutils.WriteFile(os_release_path, osrelease_content)
 
-
 def main(argv):
   parser = commandline.ArgumentParser(description=__doc__)
   parser.add_argument('--root', type='path', required=True,
                       help='sysroot of the board')
+  parser.add_argument('--version', help='The image version string.')
+  parser.add_argument('--build_id', help='The image build ID string.')
   options = parser.parse_args(argv)
   options.Freeze()
 
-  GenerateOsRelease(options.root)
+  default_params = {
+      'NAME': 'Chromium OS',
+      'ID': 'chromiumos',
+      'HOME_URL': 'https://www.chromium.org/chromium-os',
+      'BUG_REPORT_URL': 'https://crbug.com/new',
+  }
+
+  if options.version:
+    default_params['VERSION'] = options.version
+    default_params['VERSION_ID'] = options.version
+  if options.build_id:
+    default_params['BUILD_ID'] = options.build_id
+
+  GenerateOsRelease(options.root, default_params)