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/tag.py | |
| parent | 7b675bf555e89e708f1b8f79bd90796dd395837b (diff) | |
| download | GitPython-233e3ffe0ef35dbabe49340ba567499690dcc166.tar.gz GitPython-233e3ffe0ef35dbabe49340ba567499690dcc166.zip | |
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/tag.py')
| -rw-r--r-- | lib/git/tag.py | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/lib/git/tag.py b/lib/git/tag.py new file mode 100644 index 00000000..fb119f76 --- /dev/null +++ b/lib/git/tag.py @@ -0,0 +1,85 @@ +from commit import Commit + +class Tag(object): + def __init__(self, name, commit): + """ + Instantiate a new Tag + + ``name`` + is the name of the head + + ``commit`` + is the Commit that the head points to + + Returns + ``GitPython.Tag`` + """ + self.name = name + self.commit = commit + + @classmethod + def find_all(cls, repo, **kwargs): + """ + Find all Tags + + ``repo`` + is the Repo + + ``kwargs`` + is a dict of options + + Returns + ``GitPython.Tag[]`` + """ + options = {'sort': "committerdate", + 'format': "%(refname)%00%(objectname)"} + options.update(**kwargs) + + output = repo.git.for_each_ref("refs/tags", **options) + return cls.list_from_string(repo, output) + + @classmethod + def list_from_string(cls, repo, text): + """ + Parse out tag information into an array of baked Tag objects + + ``repo`` + is the Repo + + ``text`` + is the text output from the git command + + Returns + ``GitPython.Tag[]`` + """ + tags = [] + for line in text.splitlines(): + tags.append(cls.from_string(repo, line)) + return tags + + @classmethod + def from_string(cls, repo, line): + """ + Create a new Tag instance from the given string. + + ``repo`` + is the Repo + + ``line`` + is the formatted tag information + + Format + name: [a-zA-Z_/]+ + <null byte> + id: [0-9A-Fa-f]{40} + + Returns + ``GitPython.Tag`` + """ + full_name, ids = line.split("\x00") + name = full_name.split("/")[-1] + commit = Commit(repo, **{'id': ids}) + return Tag(name, commit) + + def __repr__(self): + return '<GitPython.Tag "%s">' % self.name |
