From 233e3ffe0ef35dbabe49340ba567499690dcc166 Mon Sep 17 00:00:00 2001 From: Michael Trier Date: Fri, 30 May 2008 21:01:44 -0400 Subject: renamed git_python to git. Removed pop_key and replaced with dict.pop. Fixed up tests so they pass except for stderr test. Modified version information retrieval. --- lib/git/head.py | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 lib/git/head.py (limited to 'lib/git/head.py') diff --git a/lib/git/head.py b/lib/git/head.py new file mode 100644 index 00000000..58191fd8 --- /dev/null +++ b/lib/git/head.py @@ -0,0 +1,107 @@ +import commit + +class Head(object): + """ + A Head is a named reference to a Commit. Every Head instance contains a name + and a Commit object. + + Examples:: + + >>> repo = Repo("/path/to/repo") + >>> head = repo.heads[0] + + >>> head.name + 'master' + + >>> head.commit + + + >>> head.commit.id + '1c09f116cbc2cb4100fb6935bb162daa4723f455' + """ + + def __init__(self, name, commit): + """ + Instantiate a new Head + + `name` + is the name of the head + + `commit` + is the Commit that the head points to + + Returns + GitPython.Head + """ + self.name = name + self.commit = commit + + @classmethod + def find_all(cls, repo, **kwargs): + """ + Find all Heads + + `repo` + is the Repo + + `kwargs` + is a dict of options + + Returns + GitPython.Head[] + """ + + options = {'sort': "committerdate", + 'format': "%(refname)%00%(objectname)"} + options.update(kwargs) + + output = repo.git.for_each_ref("refs/heads", **options) + return cls.list_from_string(repo, output) + + @classmethod + def list_from_string(cls, repo, text): + """ + Parse out head information into an array of baked head objects + + ``repo`` + is the Repo + ``text`` + is the text output from the git command + + Returns + GitPython.Head[] + """ + heads = [] + + for line in text.splitlines(): + heads.append(cls.from_string(repo, line)) + + return heads + + @classmethod + def from_string(cls, repo, line): + """ + Create a new Head instance from the given string. + + ``repo`` + is the Repo + + ``line`` + is the formatted head information + + Format + name: [a-zA-Z_/]+ + + id: [0-9A-Fa-f]{40} + + Returns + GitPython.Head + """ + print line + full_name, ids = line.split("\x00") + name = full_name.split("/")[-1] + c = commit.Commit(repo, **{'id': ids}) + return Head(name, c) + + def __repr__(self): + return '' % self.name -- cgit v1.2.1