Parrot-libgit2 Final Report

Submitted by sa1 on Thu, 09/26/2013 - 13:23

GSoC has come to an end finally and my project is done. The project was about implementing bindings to libgit2. I learned quite a bit about git internals, about how libraries are implemented, and parrot stuff.

I began with a better libgit2 header file parser which then creates the NCI low-level definitions. It was accurate enough so that I've had to update it only once since the mid-term data. There is a also a better unified buildsystem, though there are still rough edges around it.

You can access the most commonly used libgit2 functions using the higher-level Winxed API. As I have talked about in my past posts, most of the git internal functions are exposed, including work around Index, Repositories, Objects, Commits, Trees, References, Remotes and configs. There is also some documentation and tests present - though that needs to be improved. These are mostly plumbing functions, a even more higher level porcelain layer is possible. Take a look[1].

There were several false starts, wrong approaches wasted several weeks, as I struggled to see how to call several C functions or debug things when they crashed. In the end, however I managed to work around most of them with a C wrapper. This remains, however an intermediate solution.

Work will go on, I'll spend some time polishing stuff - adding functions, creating tests, implementing examples, reaching parity with other bindings. Maybe then I'll create bindings to other libraries on parrot or contribute to git/libgit2 upstream, or look into parrot internals.

I'd like to thank all the people who helped me at some point and encouraged me including Duke, Bruce, Bob and Will.