diff options
Diffstat (limited to 'git/refs/remote.py')
-rw-r--r-- | git/refs/remote.py | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/git/refs/remote.py b/git/refs/remote.py index 04d0d5dd..bfe80e62 100644 --- a/git/refs/remote.py +++ b/git/refs/remote.py @@ -1,5 +1,9 @@ import os -from gitdb.ref.remote import RemoteReference as GitDB_RemoteReference +from headref import Head +from gitdb.util import ( + join, + join_path + ) __all__ = ["RemoteReference"] @@ -8,6 +12,41 @@ class RemoteReference(GitDB_RemoteReference): """Represents a reference pointing to a remote head.""" __slots__ = tuple() + _common_path_default = "refs/remotes" + + + @classmethod + def iter_items(cls, repo, common_path = None, remote=None): + """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 + return super(RemoteReference, cls).iter_items(repo, common_path) + + @property + def remote_name(self): + """ + :return: + Name of the remote we are a reference of, such as 'origin' for a reference + named 'origin/master'""" + tokens = self.path.split('/') + # /refs/remotes/<remote name>/<branch_name> + return tokens[2] + + @property + def remote_head(self): + """:return: Name of the remote head itself, i.e. master. + :note: The returned name is usually not qualified enough to uniquely identify + a branch""" + tokens = self.path.split('/') + return '/'.join(tokens[3:]) + + @classmethod + def create(cls, *args, **kwargs): + """Used to disable this method""" + raise TypeError("Cannot explicitly create remote references") + @classmethod def delete(cls, repo, *refs, **kwargs): """Delete the given remote references. |