mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-11-04 02:09:05 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			83 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
	
		
			1.8 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 subprocess import CalledProcessError
 | 
						|
 | 
						|
import mozunit
 | 
						|
import pytest
 | 
						|
 | 
						|
from mozversioncontrol import get_repository_object
 | 
						|
 | 
						|
STEPS = {
 | 
						|
    "hg": [
 | 
						|
        """
 | 
						|
        echo "bar" >> bar
 | 
						|
        echo "baz" > foo
 | 
						|
        hg commit -m "second commit"
 | 
						|
        """,
 | 
						|
        """
 | 
						|
        echo "foobar" > foo
 | 
						|
        """,
 | 
						|
    ],
 | 
						|
    "git": [
 | 
						|
        """
 | 
						|
        echo "bar" >> bar
 | 
						|
        echo "baz" > foo
 | 
						|
        git add *
 | 
						|
        git commit -m "second commit"
 | 
						|
        """,
 | 
						|
        """
 | 
						|
        echo "foobar" > foo
 | 
						|
        """,
 | 
						|
    ],
 | 
						|
    "jj": [
 | 
						|
        """
 | 
						|
        echo "bar" >> bar
 | 
						|
        echo "baz" > foo
 | 
						|
        jj commit -m "second commit"
 | 
						|
        """,
 | 
						|
        """
 | 
						|
        echo "foobar" > foo
 | 
						|
        """,
 | 
						|
    ],
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
def test_update(repo):
 | 
						|
    vcs = get_repository_object(repo.dir)
 | 
						|
    rev0 = vcs.head_ref
 | 
						|
 | 
						|
    # Create a commit with modified `foo` and `bar`.
 | 
						|
    repo.execute_next_step()
 | 
						|
    rev1 = vcs.head_ref
 | 
						|
    assert rev0 != rev1
 | 
						|
 | 
						|
    if repo.vcs == "hg":
 | 
						|
        vcs.update(".~1")
 | 
						|
    elif repo.vcs == "git":
 | 
						|
        vcs.update("HEAD~1")
 | 
						|
    elif repo.vcs == "jj":
 | 
						|
        vcs.edit("@-")
 | 
						|
    assert vcs.head_ref == rev0
 | 
						|
 | 
						|
    if repo.vcs != "jj":
 | 
						|
        vcs.update(rev1)
 | 
						|
    else:
 | 
						|
        vcs.update(rev0)
 | 
						|
        rev1 = vcs.head_ref
 | 
						|
    assert vcs.head_ref == rev1
 | 
						|
 | 
						|
    # Modify `foo` and update. Should fail with dirty working directory.
 | 
						|
    repo.execute_next_step()
 | 
						|
    if repo.vcs != "jj":
 | 
						|
        with pytest.raises(CalledProcessError):
 | 
						|
            vcs.update(rev0)
 | 
						|
        assert vcs.head_ref == rev1
 | 
						|
    else:
 | 
						|
        # jj doesn't have a "dirty working directory".
 | 
						|
        pass
 | 
						|
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    mozunit.main()
 |