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.
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.
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.
Support for opening objects will come later.
Add tests and documentation for the above classes.
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.
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.
Also work on automatically providing the libgit2 documentation to the available functions. This may require creating a script similar to NCI generator.
Deliverables: Updated NCI defs, Completed wrapper for Indexes, Unified buildsystem, tests, documentation.
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.
Continue work on objects - this time focusing on blobs and tags and completing any remaining work on commits and references.
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.
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.
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.
Pencils down. Spend time fixing minor issues, such as fixing documentation, broken tests, etc.
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