aboutsummaryrefslogtreecommitdiff
path: root/git/refs/head.py
diff options
context:
space:
mode:
authorSebastian Thiel <byronimo@gmail.com>2011-04-07 12:14:04 +0200
committerSebastian Thiel <byronimo@gmail.com>2011-04-07 12:14:04 +0200
commite77d2d0ebb9487b696835f219e4a23a558462a55 (patch)
tree05e6d51374e2362b5e44783af631b316679b53c7 /git/refs/head.py
parent8af941618a851d190668602be3b6bede1544f1dc (diff)
downloadGitPython-e77d2d0ebb9487b696835f219e4a23a558462a55.tar.gz
GitPython-e77d2d0ebb9487b696835f219e4a23a558462a55.zip
Removed all parts of the reference implementation which doesn't require the git command. everything else was moved to GitDB. None of the tests is yet expected to run, although git-python should have less trouble getting the tests back up running than GitDB. plenty of code needs to be de-duplicated though in case of the tests, which will be some work
Diffstat (limited to 'git/refs/head.py')
-rw-r--r--git/refs/head.py102
1 files changed, 11 insertions, 91 deletions
diff --git a/git/refs/head.py b/git/refs/head.py
index d8729434..dec03551 100644
--- a/git/refs/head.py
+++ b/git/refs/head.py
@@ -1,33 +1,15 @@
-from symbolic import SymbolicReference
-from reference import Reference
-
-from git.config import SectionConstraint
-
-from git.util import join_path
+from gitdb.ref.head import HEAD as GitDB_HEAD
+from gitdb.ref.head import Head as GitDB_Head
from git.exc import GitCommandError
+from git.util import RepoAliasMixin
__all__ = ["HEAD", "Head"]
-
-class HEAD(SymbolicReference):
- """Special case of a Symbolic Reference as it represents the repository's
- HEAD reference."""
- _HEAD_NAME = 'HEAD'
- _ORIG_HEAD_NAME = 'ORIG_HEAD'
+class HEAD(GitDB_HEAD, RepoAliasMixin):
+ """Provides additional functionality using the git command"""
__slots__ = tuple()
-
- def __init__(self, repo, path=_HEAD_NAME):
- if path != self._HEAD_NAME:
- raise ValueError("HEAD instance must point to %r, got %r" % (self._HEAD_NAME, path))
- super(HEAD, self).__init__(repo, path)
-
- def orig_head(self):
- """
- :return: SymbolicReference pointing at the ORIG_HEAD, which is maintained
- to contain the previous value of HEAD"""
- return SymbolicReference(self.repo, self._ORIG_HEAD_NAME)
def reset(self, commit='HEAD', index=True, working_tree = False,
paths=None, **kwargs):
@@ -91,8 +73,10 @@ class HEAD(SymbolicReference):
return self
-class Head(Reference):
- """A Head is a named reference to a Commit. Every Head instance contains a name
+class Head(GitDB_Head, RepoAliasMixin):
+ """The GitPyhton Head implementation provides more git-command based features
+
+ A Head is a named reference to a Commit. Every Head instance contains a name
and a Commit object.
Examples::
@@ -108,6 +92,8 @@ class Head(Reference):
>>> head.commit.hexsha
'1c09f116cbc2cb4100fb6935bb162daa4723f455'"""
+ __slots__ = tuple()
+
_common_path_default = "refs/heads"
k_config_remote = "remote"
k_config_remote_ref = "merge" # branch to merge from remote
@@ -125,47 +111,7 @@ class Head(Reference):
flag = "-D"
repo.git.branch(flag, *heads)
- def set_tracking_branch(self, remote_reference):
- """
- Configure this branch to track the given remote reference. This will alter
- this branch's configuration accordingly.
-
- :param remote_reference: The remote reference to track or None to untrack
- any references
- :return: self"""
- if remote_reference is not None and not isinstance(remote_reference, RemoteReference):
- raise ValueError("Incorrect parameter type: %r" % remote_reference)
- # END handle type
-
- writer = self.config_writer()
- if remote_reference is None:
- writer.remove_option(self.k_config_remote)
- writer.remove_option(self.k_config_remote_ref)
- if len(writer.options()) == 0:
- writer.remove_section()
- # END handle remove section
- else:
- writer.set_value(self.k_config_remote, remote_reference.remote_name)
- writer.set_value(self.k_config_remote_ref, Head.to_full_path(remote_reference.remote_head))
- # END handle ref value
-
- return self
-
- def tracking_branch(self):
- """
- :return: The remote_reference we are tracking, or None if we are
- not a tracking branch"""
- reader = self.config_reader()
- if reader.has_option(self.k_config_remote) and reader.has_option(self.k_config_remote_ref):
- ref = Head(self.repo, Head.to_full_path(reader.get_value(self.k_config_remote_ref)))
- remote_refpath = RemoteReference.to_full_path(join_path(reader.get_value(self.k_config_remote), ref.name))
- return RemoteReference(self.repo, remote_refpath)
- # END handle have tracking branch
-
- # we are not a tracking branch
- return None
-
def rename(self, new_path, force=False):
"""Rename self to a new path
@@ -217,30 +163,4 @@ class Head(Reference):
self.repo.git.checkout(self, **kwargs)
return self.repo.active_branch
-
- #{ Configruation
-
- def _config_parser(self, read_only):
- if read_only:
- parser = self.repo.config_reader()
- else:
- parser = self.repo.config_writer()
- # END handle parser instance
-
- return SectionConstraint(parser, 'branch "%s"' % self.name)
-
- def config_reader(self):
- """
- :return: A configuration parser instance constrained to only read
- this instance's values"""
- return self._config_parser(read_only=True)
-
- def config_writer(self):
- """
- :return: A configuration writer instance with read-and write acccess
- to options of this head"""
- return self._config_parser(read_only=False)
-
- #} END configuration
-