mirror of
https://gerrit.googlesource.com/git-repo
synced 2026-05-09 20:39:47 +00:00
551087cd98
We've started duplicating code among test modules. Start a common utils module to hold that, and migrate over TempGitTree to start. Change-Id: I10b2abd133535c90fbda4d6686602d7e5861d875 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/559041 Tested-by: Mike Frysinger <vapier@google.com> Commit-Queue: Mike Frysinger <vapier@google.com> Reviewed-by: Gavin Mak <gavinmak@google.com>
54 lines
1.8 KiB
Python
54 lines
1.8 KiB
Python
# Copyright (C) 2026 The Android Open Source Project
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
"""Various utility code used by tests.
|
|
|
|
If you want to write a per-test fixture, see conftest.py instead.
|
|
"""
|
|
|
|
import contextlib
|
|
from pathlib import Path
|
|
import subprocess
|
|
import tempfile
|
|
from typing import Union
|
|
|
|
import git_command
|
|
|
|
|
|
def init_git_tree(path: Union[str, Path]) -> None:
|
|
"""Initialize `path` as a new git repo."""
|
|
with contextlib.ExitStack() as stack:
|
|
# Tests need to assume, that main is default branch at init,
|
|
# which is not supported in config until 2.28.
|
|
cmd = ["git", "init"]
|
|
if git_command.git_require((2, 28, 0)):
|
|
cmd += ["--initial-branch=main"]
|
|
else:
|
|
# Use template dir for init.
|
|
templatedir = stack.enter_context(
|
|
tempfile.mkdtemp(prefix="git-template")
|
|
)
|
|
(Path(templatedir) / "HEAD").write_text("ref: refs/heads/main\n")
|
|
cmd += ["--template", templatedir]
|
|
cmd += [path]
|
|
subprocess.run(cmd, check=True)
|
|
|
|
|
|
@contextlib.contextmanager
|
|
def TempGitTree():
|
|
"""Create a new empty git checkout for testing."""
|
|
with tempfile.TemporaryDirectory(prefix="repo-tests") as tempdir:
|
|
init_git_tree(tempdir)
|
|
yield tempdir
|