Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Latest commit

 

History

History
History
79 lines (62 loc) · 2.74 KB

File metadata and controls

79 lines (62 loc) · 2.74 KB
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# This module is part of GitPython and is released under the
# 3-Clause BSD License: https://opensource.org/license/bsd-3-clause/
"""Module implementing a remote object allowing easy access to git remotes."""
__all__ = ["RemoteReference"]
import os
from git.util import join_path
from .head import Head
# typing ------------------------------------------------------------------
from typing import Any, Iterator, NoReturn, TYPE_CHECKING, Union
from git.types import PathLike
if TYPE_CHECKING:
from git.remote import Remote
from git.repo import Repo
# ------------------------------------------------------------------------------
class RemoteReference(Head):
"""A reference pointing to a remote head."""
_common_path_default = Head._remote_common_path_default
@classmethod
def iter_items(
cls,
repo: "Repo",
common_path: Union[PathLike, None] = None,
remote: Union["Remote", None] = None,
*args: Any,
**kwargs: Any,
) -> Iterator["RemoteReference"]:
"""Iterate remote references, and if given, constrain them to the given remote."""
common_path = common_path or cls._common_path_default
if remote is not None:
common_path = join_path(common_path, str(remote))
# END handle remote constraint
# super is Reference
return super().iter_items(repo, common_path)
# The Head implementation of delete also accepts strs, but this implementation does
# not. mypy doesn't have a way of representing tightening the types of arguments in
# subclasses and recommends Any or "type: ignore".
# (See: https://github.com/python/typing/issues/241)
@classmethod
def delete(cls, repo: "Repo", *refs: "RemoteReference", **kwargs: Any) -> None: # type: ignore[override]
"""Delete the given remote references.
:note:
`kwargs` are given for comparability with the base class method as we
should not narrow the signature.
"""
repo.git.branch("-d", "-r", *refs)
# The official deletion method will ignore remote symbolic refs - these are
# generally ignored in the refs/ folder. We don't though and delete remainders
# manually.
for ref in refs:
try:
os.remove(os.path.join(repo.common_dir, ref.path))
except OSError:
pass
try:
os.remove(os.path.join(repo.git_dir, ref.path))
except OSError:
pass
# END for each ref
@classmethod
def create(cls, *args: Any, **kwargs: Any) -> NoReturn:
"""Raise :exc:`TypeError`. Defined so the ``create`` method is disabled."""
raise TypeError("Cannot explicitly create remote references")
Morty Proxy This is a proxified and sanitized view of the page, visit original site.