Commit 6dfdc77e authored by Joshua Pawlicki's avatar Joshua Pawlicki Committed by Commit Bot

Updater: Make build deterministic.

Bug: 1071965
Change-Id: I68ab432d4a0835e15cbca2467c507316ce4dcdf0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2154740
Auto-Submit: Joshua Pawlicki <waffles@chromium.org>
Commit-Queue: Sorin Jianu <sorin@chromium.org>
Reviewed-by: default avatarSorin Jianu <sorin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#760189}
parent f6bb6b2b
......@@ -2,6 +2,7 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//build/timestamp.gni")
import("//chrome/process_version_rc_template.gni")
import("//testing/test.gni")
......@@ -76,6 +77,8 @@ template("generate_installer") {
"--setup_runtime_deps",
rebase_path(updater_runtime_deps, root_build_dir),
"--output_name=updater",
"--timestamp",
build_timestamp,
# Optional argument for verbose archiving output.
#"--verbose",
......
......@@ -52,13 +52,15 @@ def CompressUsingLZMA(build_dir, compressed_file, input_file, verbose):
RunSystemCommand(cmd, verbose)
def CopyAllFilesToStagingDir(config, staging_dir, build_dir):
def CopyAllFilesToStagingDir(config, staging_dir, build_dir, timestamp):
"""Copies the files required for installer archive.
"""
CopySectionFilesToStagingDir(config, 'GENERAL', staging_dir, build_dir)
CopySectionFilesToStagingDir(config, 'GENERAL', staging_dir, build_dir,
timestamp)
def CopySectionFilesToStagingDir(config, section, staging_dir, src_dir):
def CopySectionFilesToStagingDir(config, section, staging_dir, src_dir,
timestamp):
"""Copies installer archive files specified in section from src_dir to
staging_dir. This method reads section from config and copies all the
files specified from src_dir to staging dir.
......@@ -75,6 +77,8 @@ def CopySectionFilesToStagingDir(config, section, staging_dir, src_dir):
if not os.path.exists(dst_path):
g_archive_inputs.append(src_path)
shutil.copy(src_path, dst_dir)
os.utime(dst_path, (os.stat(dst_path).st_atime, timestamp))
os.utime(dst_dir, (os.stat(dst_dir).st_atime, timestamp))
def GetLZMAExec(build_dir):
if sys.platform == 'win32':
......@@ -123,7 +127,7 @@ def RunSystemCommand(cmd, verbose):
"Command output:\n%s" %
(e.cmd, e.returncode, e.output))
def CreateArchiveFile(options, staging_dir):
def CreateArchiveFile(options, staging_dir, timestamp):
"""Creates a new installer archive file after deleting any existing old file.
"""
# First create an uncompressed archive file for the current build (updater.7z)
......@@ -199,6 +203,7 @@ def CreateArchiveFile(options, staging_dir):
compressed_archive_file = options.output_name + COMPRESSED_ARCHIVE_SUFFIX
compressed_archive_file_path = os.path.join(options.output_dir,
compressed_archive_file)
os.utime(archive_file, (os.stat(archive_file).st_atime, timestamp))
CompressUsingLZMA(options.build_dir, compressed_archive_file_path,
archive_file, options.verbose)
......@@ -265,14 +270,15 @@ def main(options):
staging_dir = MakeStagingDirectory(options.staging_dir)
# Copy the files from the build dir.
CopyAllFilesToStagingDir(config, staging_dir, options.build_dir)
CopyAllFilesToStagingDir(config, staging_dir, options.build_dir,
options.timestamp)
if options.component_build == '1':
DoComponentBuildTasks(staging_dir, options.build_dir,
options.setup_runtime_deps)
# Name of the archive file built (for example - updater.7z)
archive_file = CreateArchiveFile(options, staging_dir)
archive_file = CreateArchiveFile(options, staging_dir, options.timestamp)
CreateResourceInputFile(options.output_dir,
archive_file, options.resource_file_path,
options.component_build == '1', staging_dir)
......@@ -309,6 +315,10 @@ def _ParseOptions():
'used to get a list of DLLs to archive in a component build.')
parser.add_option('-v', '--verbose', action='store_true', dest='verbose',
default=False)
parser.add_option(
'--timestamp',
type='int',
help='Timestamp to set archive entry modified times to.')
options, _ = parser.parse_args()
if not options.build_dir:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment