git-update: Improve error message for non-blob objects

When a repository contains a directory, a user is currently faced with
the following error message:

    remote: Traceback (most recent call last):
    remote:   File "hooks/update", line 194, in <module>
    remote:     if repo[treeobj.id].size > 250000:
    remote: AttributeError: '_pygit2.Tree' object has no attribute 'size'
    remote: error: hook declined to update refs/heads/master

Explicitly check for directories and other non-blob objects and display
a more intuitive message.

Signed-off-by: Lukas Fleischer <lfleischer@archlinux.org>
This commit is contained in:
Lukas Fleischer 2015-06-08 13:40:47 +02:00
parent 6e52439e6f
commit ed72af6378

View file

@ -191,7 +191,16 @@ for commit in walker:
die_commit("missing .SRCINFO", commit.id)
for treeobj in commit.tree:
if repo[treeobj.id].size > 250000:
blob = repo[treeobj.id]
if isinstance(blob, pygit2.Tree):
die_commit("the repository must not contain subdirectories",
commit.id)
if not isinstance(blob, pygit2.Blob):
die_commit("not a blob object: %s" % (treeobj), commit.id)
if blob.size > 250000:
die_commit("maximum blob size (250kB) exceeded", commit.id)
srcinfo_raw = repo[commit.tree['.SRCINFO'].id].data.decode()