gecko-dev/python/mozversioncontrol/test/test_commit.py
ahochheiden 55089cab2f Bug 1872242 - Change how the last segment of milestone_winversion is generated to improve uniqueness r=firefox-build-system-reviewers,glandium
The previous implementation used days since Jan 1 2000 for the last
16-bit segment. This was not unique enough and caused issues with
Antivirus software if two different channels were built on the same day.

The new approach uses hours since the last milestone bump and uses the
VCS to determine how long ago that was relative to the build time. This
means it will always reset when a new cycle begins, but still be unique
since the digits in the first 3 segments have incremented.

We also now use two of the 16-bits to encode the channel (nightly, beta,
ESR, and release). So two channels built within the same hour will still
be unique.

Using only 14-bits to store the 'hours since version bump', we have
about ~682 days from a version bump before we reach the maximum value we
can store. If a build is done after that point, the segment value will
always be the maximum value for that channel.

Differential Revision: https://phabricator.services.mozilla.com/D200989
2024-05-15 16:00:33 +00:00

82 lines
2.2 KiB
Python

# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
from datetime import datetime
from pathlib import Path
import mozunit
from mozversioncontrol import get_repository_object
STEPS = {
"hg": [
"""
echo "bar" >> bar
echo "baz" > foo
""",
],
"git": [
"""
echo "bar" >> bar
echo "baz" > foo
""",
],
}
def test_commit(repo):
vcs = get_repository_object(repo.dir)
assert vcs.working_directory_clean()
# Modify both foo and bar
repo.execute_next_step()
assert not vcs.working_directory_clean()
date_string = "2017-07-14 02:40:00 +0000"
# Commit just bar
vcs.commit(
message="Modify bar\n\nbut not baz",
author="Testing McTesterson <test@example.org>",
date=date_string,
paths=["bar"],
)
original_date = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S %z")
date_from_vcs = vcs.get_last_modified_time_for_file(Path("bar"))
assert original_date == date_from_vcs
# We only committed bar, so foo is still keeping the working dir dirty
assert not vcs.working_directory_clean()
if repo.vcs == "git":
log_cmd = ["log", "-1", "--format=%an,%ae,%aD,%B"]
patch_cmd = ["log", "-1", "-p"]
else:
log_cmd = [
"log",
"-l",
"1",
"-T",
"{person(author)},{email(author)},{date|rfc822date},{desc}",
]
patch_cmd = ["log", "-l", "1", "-p"]
# Verify commit metadata (we rstrip to normalize trivial git/hg differences)
log = vcs._run(*log_cmd).rstrip()
assert log == (
"Testing McTesterson,test@example.org,Fri, 14 "
"Jul 2017 02:40:00 +0000,Modify bar\n\nbut not baz"
)
# Verify only the intended file was added to the commit
patch = vcs._run(*patch_cmd)
diffs = [line for line in patch.splitlines() if "diff --git" in line]
assert len(diffs) == 1
assert diffs[0] == "diff --git a/bar b/bar"
if __name__ == "__main__":
mozunit.main()