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.
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.
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.
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.
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.
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.
Add documentation.
Also work on automatically providing the libgit2 documentation to the available functions. This may require creating a script similar to NCI generator.
Midterms.
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
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.