Skip to content

Instantly share code, notes, and snippets.

Last active Feb 19, 2016
What would you like to do?
Parrot schedule


This project is aimed at providing a complete low-level (PIR) binding to the libgit2 0.18 API, as well as a higher-level Winxed binding along with documentation and tests.


This project aims to provide bindings to libgit2 for the Parrot Virtual Machine. This would allow all languages that run on Parrot to access libgit2 by loading a minimal amount of bytecode. There is already some existing code which provides bindings to libgit2 but this needs to be updated to the latest stable version of libgit2, tests and documentation need to be added for additional languages including Perl and NQP. The project would aim at providing updated bindings along with documentation and tests. There would also be an OO interface to the bindings including classes for git repositories, objects(commits, trees, blobs, tags), index and refs among others.


May 27- June 16:

This is the familiarisation period where I will read docs regarding PIR, winxed, NCI, libgit2. This period will also involve looking into the existing parrot-libgit2 project. Some bugs may need to be fixed in order to get it ready so that work can proceed.

June 17- June 23:

Coding starts.

This period would be used to generate NCI defs for updated libgit2 bindings. This may not be perfect. One would need to add other functions manually.

Currently it is done using a glue script that would need to be updated.

This is added to the issue tracker as Issue#14.

June 24- June 30:

Begin adding the wrapper classes. The first class to be implemented will be Indexes. This would aim at implementing this example. (See Issue#15) , and Repositories.

Objectives: One should be able to create, clone and open repositories(modify constructor here), destroy repositories, open repository index, open, read, and destroy index, and get index entries.

Support for opening objects will come later.

July 1 - July 7:

Add tests and documentation for the above classes.

One should be able to implement a simple program such as this using the above classes. This will be phase I for Issue#15.

July 8 - July 14:

Unify the buildsystem. Currently, there is a Makefile and a setup.winxed.

The Makefile currently updates the NCI bindings and the Rosella git submodule in addition to everything setup.winxed does. Convert the makefile into a simple wrapper around setup.winxed.

July 15 - July 21:

Begin adding other wrappers for other classes including References and Objects(ODB and OIDs).

Objectives: Resolve, rename, delete references. Repository should have a HEAD reference. One should be able to check if HEAD is detached or not.

Objects include commits, trees, blobs, tags. Commits and trees are the most important. One should be able to read raw objects and create commits.

July 22 - July 28:

Add documentation.

Also work on automatically providing the libgit2 documentation to the available functions. This may require creating a script similar to NCI generator.

July 29:


Deliverables: Updated NCI defs, Completed wrapper for Indexes, Unified buildsystem, tests, documentation.

July 29 - August 4:

This also approximately marks the end of my college vacations. I won't be able to give my full time but by this period several learning goals would have been completed and adding other classes wouldn't be as hard.

Continue with work on objects, especially trees. Implement tests which can manipulate commits and trees.

Objectives: Insert and Remove objects from trees.

August 5 - August 11:

Continue work on objects - this time focusing on blobs and tags and completing any remaining work on commits and references.

August 12 - August 25:

Focus on adding more tests, for several Parrot languages.

This is the stage where all functions mentioned in this example should work if work on the respective classes have been done.

Add low-level tests. This means that these tests are not only for the high-level OO interface but also for all functions. They shouldn't blow up, or consume excess memory, etc.

August 26 - September 1:

Add utility classes including classes which may include Configs, Remotes, revparsing.

Objectives: get system and global config, write config files. Creating and removing remotes. Also revparsing is a pretty important function that should be added by now.

September 2 - September 15:

Add a diff class with support for patches and hunks. Potential objectives: patch, merge patches, identifying hunks. A patch is a collection of hunks. Find similar patches.

Add more tests, documentation and complete any due work.

September 16 - September 22:

Pencils down. Spend time fixing minor issues, such as fixing documentation, broken tests, etc.

September 23:

Submit code to Google. Work on merging it to master and any other work will continue.


Common.winxed contains the common data structures. All data structures that need to be added are added to this file.


A complete low-level (PIR) binding to the libgit2 0.18 API, as well as a higher-level Winxed binding with enough functions implemented to implement the libgit2 examples show-index.c, general.c and clone.c



This comment has been minimized.

Copy link

@leto leto commented Apr 26, 2013

Great start! Please add about one paragraph of detail for each week of GSoC, with relevant links to the source code that you will modify.


This comment has been minimized.

Copy link

@leto leto commented Apr 26, 2013

And by relevant links, I mean links to the source code files on Github, with specific line numbers if applicable.


This comment has been minimized.

Copy link

@leto leto commented Apr 28, 2013

Great work so far! 👍 👍 👍

This is becoming a very nice proposal that will guide you through the summer. Consider it a living document. Update it anytime something changes. I promise you, they will :)

"Midterms", "Submit code" and "Add documentation" are too vague. Please add more details, with URLs and/or references.

Also, let's make your deliverable more specific: "A complete low-level (PIR) binding to the libgit2 0.18 API, as well as a higher-level Winxed binding with enough functions implemented to implement the libgit2 examples X, Y and Z".

Please choose X,Y and Z and update your proposal accordingly.


This comment has been minimized.

Copy link

@leto leto commented Apr 28, 2013

"Pencils down. Spend time fixing minor issues." is also too vague :) Feel free to mention the specific functions and datastructures that you will need to add support for. The examples you choose will tell you what those are. If you need help, there is also a libgit2 mailing list and IRC channel. Please introduce yourself to them and provide them a link to this proposal. They may just give you some valuable feedback. You will want to already be on that list and in that channel when you run into a problem in the middle of the summer.

You can tell them I sent you, too :)


This comment has been minimized.

Copy link
Owner Author

@sa1 sa1 commented May 3, 2013

Moved unified buildsystem up in schedule.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment