Files
chromium_depot_tools/tests/scm_mock.py
Robert Iannucci 10d7ebda04 [scm_mock] Remove unused config parameter.
R=ayatane, yiwzhang

Change-Id: I843a967249d9f1f967c94af91f98c3885b319d01
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/5763524
Reviewed-by: Yiwei Zhang <yiwzhang@google.com>
Reviewed-by: Allen Li <ayatane@chromium.org>
Commit-Queue: Robbie Iannucci <iannucci@chromium.org>
2024-08-09 00:52:09 +00:00

56 lines
1.7 KiB
Python

# Copyright (c) 2024 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from __future__ import annotations
import os
import sys
import threading
from unittest import mock
import unittest
# This is to be able to import scm from the root of the repo.
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
import scm
def GIT(test: unittest.TestCase,
branchref: str | None = None):
"""Installs fakes/mocks for scm.GIT so that:
* GetBranch will just return a fake branchname starting with the value of
branchref.
* git_new_branch.create_new_branch will be mocked to update the value
returned by GetBranch.
NOTE: The dependency on git_new_branch.create_new_branch seems pretty
circular - this functionality should probably move to scm.GIT?
"""
# TODO - add `system_config` - this will be configuration which exists at
# the 'system installation' level and is immutable.
_branchref = [branchref or 'refs/heads/main']
global_lock = threading.Lock()
global_state = {}
def _newBranch(branchref):
_branchref[0] = branchref
patches: list[mock._patch] = [
mock.patch('scm.GIT._new_config_state',
side_effect=lambda _: scm.GitConfigStateTest(
global_lock, global_state)),
mock.patch('scm.GIT.GetBranchRef', side_effect=lambda _: _branchref[0]),
mock.patch('git_new_branch.create_new_branch', side_effect=_newBranch)
]
for p in patches:
p.start()
test.addCleanup(p.stop)
test.addCleanup(scm.GIT.drop_config_cache)