Subject: [GSoC] Proposal - Finishing network support for libgit2

From: Michael Schubert <[email-masked]>
Date: Fri, 06 Apr 2012 18:36:22 +0200

Finishing network support for libgit2
=====================================

Introduction
------------

So far, libgit2 supports fetching objects over http://, git:// and
file://. This year's GSoC task is to finish network support for
libgit2, namely

* fetch over ssh (including an API for SSH key management),
* support for packing objects (indispensable for push),
* push over http, git and ssh.

The existing network code is written in a modular manner and allows to
be reused (regarding socket handling for example).

Outline
-------

1. Fetch over SSH: Evaluate existing SSH libraries regarding their
usability (licence compliant, small, platform independent) with
libgit2. Implement a transport module for SSH.

1.1 SSH key managment API: Implement an easy-to-use API for the
management of SSH keys. Example: managed keys could be stored within
the object database, addressable through special purpose references
or config options.

2. Support for packing objects: fully implement (port, where possible)
the required code to create packs. This is expected to be both the most
challenging and time-consuming part.

3. Push over all four transports: Implement push for libgit2.

For all code parts, tests should be written.

Timeline
--------

04/24 - 04/30: Discuss implementation details with the mentor(s), finish
planning.

05/01 - 05/20: Implement first version of SSH transport and key
management, refactor existing network code for future use where needed.

05/21 - 05/31: Start working on the pack-objects part, read / discuss
pack details etc.

06/01 - 06/30: Implement pack-objects.

07/01 - 07/31: Implement push over all four transports.

08/01 - 08/13: Finish and polish code where needed, write more tests.

About me
--------

I study Computer Science at FU Berlin, besides I do a Git-related part
time job for a SCM company. As a regular contributor to libgit2 , I'm
rather familiar with the community and the bigger part of the code
base. GSoC would allow me to both gain experience with "Git's network
stack" and to add an important yet missing core part to libgit2. This
is the first time I apply for GSoC.