mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-11-04 10:18:41 +02:00 
			
		
		
		
	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
		
			
				
	
	
		
			82 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			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()
 |