diff options
author | Michael Trier <mtrier@gmail.com> | 2008-05-30 21:01:44 -0400 |
---|---|---|
committer | Michael Trier <mtrier@gmail.com> | 2008-05-30 21:01:44 -0400 |
commit | 233e3ffe0ef35dbabe49340ba567499690dcc166 (patch) | |
tree | 289bb04b3a806a20fe5b7b831a4643e2fcfd0190 /lib/git/head.py | |
parent | 7b675bf555e89e708f1b8f79bd90796dd395837b (diff) | |
download | gitpython-233e3ffe0ef35dbabe49340ba567499690dcc166.tar.gz |
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.
Diffstat (limited to 'lib/git/head.py')
-rw-r--r-- | lib/git/head.py | 107 |
1 files changed, 107 insertions, 0 deletions
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 + <GitPython.Commit "1c09f116cbc2cb4100fb6935bb162daa4723f455"> + + >>> 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_/]+ + <null byte> + 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 '<GitPython.Head "%s">' % self.name |