From 20f202d83bdf1f332a3cb8f010bcf8bf3c2807bd Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 11 Oct 2009 16:36:51 +0200 Subject: Re-designed the tag testing - it does not use fixtures anymore but dyamically checks the existance of tags within the repository - it basically tests the interface and checks that expected return types are actually returned --- lib/git/head.py | 89 +++++++++++---------------------------------------------- 1 file changed, 17 insertions(+), 72 deletions(-) (limited to 'lib/git/head.py') diff --git a/lib/git/head.py b/lib/git/head.py index 639cee40..3c3f13ac 100644 --- a/lib/git/head.py +++ b/lib/git/head.py @@ -5,8 +5,9 @@ # the BSD License: http://www.opensource.org/licenses/bsd-license.php import commit +import base -class Head(object): +class Head(base.Ref): """ A Head is a named reference to a Commit. Every Head instance contains a name and a Commit object. @@ -26,93 +27,37 @@ class Head(object): '1c09f116cbc2cb4100fb6935bb162daa4723f455' """ - def __init__(self, name, commit): + def __init__(self, path, commit): """ Initialize a newly instanced Head - `name` - is the name of the head + ``path`` + is the path to the head ref, relative to the .git directory, i.e. + refs/heads/master `commit` is the Commit object that the head points to """ - self.name = name - self.commit = commit + super(Head, self).__init__(name, commit) - @classmethod - def find_all(cls, repo, **kwargs): - """ - Find all Heads in the repository - - `repo` - is the Repo - - `kwargs` - Additional options given as keyword arguments, will be passed - to git-for-each-ref - - Returns - git.Head[] - - List is sorted by committerdate - """ - - 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): + @property + def commit(self): """ - Parse out head information into a list of head objects - - ``repo`` - is the Repo - ``text`` - is the text output from the git-for-each-ref command - Returns - git.Head[] + Commit object the head points to """ - heads = [] - - for line in text.splitlines(): - heads.append(cls.from_string(repo, line)) - - return heads - + return self.object + @classmethod - def from_string(cls, repo, line): + def find_all(cls, repo, common_path = "refs/heads", **kwargs): """ - 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 - git.Head + git.Head[] + + For more documentation, please refer to git.base.Ref.find_all """ - full_name, ids = line.split("\x00") - - if full_name.startswith('refs/heads/'): - name = full_name[len('refs/heads/'):] - else: - name = full_name - - c = commit.Commit(repo, id=ids) - return Head(name, c) + return super(Head,cls).find_all(repo, common_path, **kwargs) def __repr__(self): return '' % self.name -- cgit v1.2.1 From 9374a916588d9fe7169937ba262c86ad710cfa74 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 11 Oct 2009 16:49:05 +0200 Subject: converted all spaces to tabs ( 4 spaces = 1 tab ) just to allow me and my editor to work with the files properly. Can convert it back for releaes --- lib/git/head.py | 106 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 53 insertions(+), 53 deletions(-) (limited to 'lib/git/head.py') diff --git a/lib/git/head.py b/lib/git/head.py index 3c3f13ac..f4e94637 100644 --- a/lib/git/head.py +++ b/lib/git/head.py @@ -8,56 +8,56 @@ import commit import base class Head(base.Ref): - """ - 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, path, commit): - """ - Initialize a newly instanced Head - - ``path`` - is the path to the head ref, relative to the .git directory, i.e. - refs/heads/master - - `commit` - is the Commit object that the head points to - """ - super(Head, self).__init__(name, commit) - - - @property - def commit(self): - """ - Returns - Commit object the head points to - """ - return self.object - - @classmethod - def find_all(cls, repo, common_path = "refs/heads", **kwargs): - """ - Returns - git.Head[] - - For more documentation, please refer to git.base.Ref.find_all - """ - return super(Head,cls).find_all(repo, common_path, **kwargs) - - def __repr__(self): - return '' % self.name + """ + 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, path, commit): + """ + Initialize a newly instanced Head + + ``path`` + is the path to the head ref, relative to the .git directory, i.e. + refs/heads/master + + `commit` + is the Commit object that the head points to + """ + super(Head, self).__init__(name, commit) + + + @property + def commit(self): + """ + Returns + Commit object the head points to + """ + return self.object + + @classmethod + def find_all(cls, repo, common_path = "refs/heads", **kwargs): + """ + Returns + git.Head[] + + For more documentation, please refer to git.base.Ref.find_all + """ + return super(Head,cls).find_all(repo, common_path, **kwargs) + + def __repr__(self): + return '' % self.name -- cgit v1.2.1 From 15b9129ec639112e94ea96b6a395ad9b149515d1 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 11 Oct 2009 19:07:03 +0200 Subject: lazymixin system now supports per-attribute baking, it is up to the class whether it bakes more. This also leads to more efficient use of memory as values are only cached and set when required - the baking system does not require an own tracking variable anymore, and values are only to be cached once - then python will natively find the cache without involving any additional overhead. This works by using __getattr__ instead of __get_attribute__ which would always be called --- lib/git/head.py | 14 -------------- 1 file changed, 14 deletions(-) (limited to 'lib/git/head.py') diff --git a/lib/git/head.py b/lib/git/head.py index f4e94637..42dfd735 100644 --- a/lib/git/head.py +++ b/lib/git/head.py @@ -27,20 +27,6 @@ class Head(base.Ref): '1c09f116cbc2cb4100fb6935bb162daa4723f455' """ - def __init__(self, path, commit): - """ - Initialize a newly instanced Head - - ``path`` - is the path to the head ref, relative to the .git directory, i.e. - refs/heads/master - - `commit` - is the Commit object that the head points to - """ - super(Head, self).__init__(name, commit) - - @property def commit(self): """ -- cgit v1.2.1