- public libgit2 structs should be python objects (classes) - Example: git_repository => Repository()
- nameing convention: strip git_
struct_name
_* - Example: git_repository_config() => Repository.config() - iterations should be implemented as a generator, if this is not possible we need to change libgit2 (other bindings will benefit from this as well)
- every method should map to one libgit2 function (exceptions are iterations)
- return values of methods
- no lists use generators instead
- no dictionaries use tuples or objects instead
- no instantiation of objects use strings instead (important for generators) like sha1-hash for objects or names for references.
- inheritance for every object
- no return value restrictions
- pythonic