kopia lustrzana https://github.com/jupyterhub/repo2docker
				
				
				
			
		
			
				
	
	
		
			94 wiersze
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			94 wiersze
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
| from pathlib import Path
 | |
| import subprocess
 | |
| from tempfile import TemporaryDirectory
 | |
| import sys
 | |
| 
 | |
| import pytest
 | |
| 
 | |
| from repo2docker.contentproviders import Mercurial
 | |
| 
 | |
| 
 | |
| skipif_py35 = pytest.mark.skipif(
 | |
|     sys.version_info < (3, 6), reason="requires python3.6"
 | |
| )
 | |
| 
 | |
| 
 | |
| def _add_content_to_hg(repo_dir):
 | |
|     """Add content to file 'test' in hg repository and commit."""
 | |
|     # use append mode so this can be called multiple times
 | |
|     with open(Path(repo_dir) / "test", "a") as f:
 | |
|         f.write("Hello")
 | |
| 
 | |
|     subprocess.check_call(["hg", "add", "test"], cwd=repo_dir)
 | |
|     subprocess.check_call(["hg", "commit", "-m", "Test commit"], cwd=repo_dir)
 | |
| 
 | |
| 
 | |
| def _get_sha1(repo_dir):
 | |
|     """Get repository's current commit SHA1."""
 | |
|     sha1 = subprocess.Popen(
 | |
|         ["hg", "identify"], stdout=subprocess.PIPE, cwd=repo_dir
 | |
|     )
 | |
|     return sha1.stdout.read().decode().strip()
 | |
| 
 | |
| 
 | |
| @pytest.fixture()
 | |
| def hg_repo():
 | |
|     """
 | |
|     Make a dummy git repo in which user can perform git operations
 | |
| 
 | |
|     Should be used as a contextmanager, it will delete directory when done
 | |
|     """
 | |
|     with TemporaryDirectory() as gitdir:
 | |
|         subprocess.check_call(["hg", "init"], cwd=gitdir)
 | |
|         yield gitdir
 | |
| 
 | |
| 
 | |
| @pytest.fixture()
 | |
| def hg_repo_with_content(hg_repo):
 | |
|     """Create a hg repository with content"""
 | |
|     _add_content_to_hg(hg_repo)
 | |
|     sha1 = _get_sha1(hg_repo)
 | |
| 
 | |
|     yield hg_repo, sha1
 | |
| 
 | |
| 
 | |
| @skipif_py35
 | |
| def test_detect_mercurial(hg_repo_with_content, repo_with_content):
 | |
|     mercurial = Mercurial()
 | |
|     assert mercurial.detect("this-is-not-a-directory") is None
 | |
|     assert mercurial.detect("https://github.com/jupyterhub/repo2docker") is None
 | |
| 
 | |
|     git_repo = repo_with_content[0]
 | |
|     assert mercurial.detect(git_repo) is None
 | |
| 
 | |
|     hg_repo = hg_repo_with_content[0]
 | |
|     assert mercurial.detect(hg_repo) == {"repo": hg_repo, "ref": None}
 | |
| 
 | |
| 
 | |
| @skipif_py35
 | |
| def test_clone(hg_repo_with_content):
 | |
|     """Test simple hg clone to a target dir"""
 | |
|     upstream, sha1 = hg_repo_with_content
 | |
| 
 | |
|     with TemporaryDirectory() as clone_dir:
 | |
|         spec = {"repo": upstream}
 | |
|         mercurial = Mercurial()
 | |
|         for _ in mercurial.fetch(spec, clone_dir):
 | |
|             pass
 | |
|         assert (Path(clone_dir) / "test").exists()
 | |
| 
 | |
|         assert mercurial.content_id == sha1[:7]
 | |
| 
 | |
| 
 | |
| @skipif_py35
 | |
| def test_bad_ref(hg_repo_with_content):
 | |
|     """
 | |
|     Test trying to checkout a ref that doesn't exist
 | |
|     """
 | |
|     upstream, sha1 = hg_repo_with_content
 | |
|     with TemporaryDirectory() as clone_dir:
 | |
|         spec = {"repo": upstream, "ref": "does-not-exist"}
 | |
|         with pytest.raises(ValueError):
 | |
|             for _ in Mercurial().fetch(spec, clone_dir):
 | |
|                 pass
 |