Edit

kc3-lang/libgit2/docs/projects.md

Branch :

  • Show log

    Commit

  • Author : Patrick Steinhardt
    Date : 2018-03-22 09:20:43
    Hash : 68a3c0b1
    Message : docs: reorganize documents Our non-technical documents are currently floating around loosely in our project's root, making it harden than necessary to discover what one is searching for. We do have a "docs/" directory, though, which serves exactly that purpose of hosting documentation. Move our non-technical documentation into the "docs/" directory. Adjust all links to these documents.

  • docs/projects.md
  • Projects For LibGit2
    ====================
    
    So, you want to start helping out with `libgit2`? That's fantastic! We
    welcome contributions and we promise we'll try to be nice.
    
    This is a list of libgit2 related projects that new contributors can take
    on.  It includes a number of good starter projects as well as some larger
    ideas that no one is actively working on.
    
    ## Before You Start
    
    Please start by reading the [README.md](../README.md),
    [contributing.md](contributing.md), and [conventions.md](conventions.md)
    files before diving into one of these projects.  Those explain our work
    flow and coding conventions to help ensure that your work will be easily
    integrated into libgit2.
    
    Next, work through the build instructions and make sure you can clone the
    repository, compile it, and run the tests successfully.  That will make
    sure that your development environment is set up correctly and you are
    ready to start on libgit2 development.
    
    ## Starter Projects
    
    These are good small projects to get started with libgit2.
    
    * Look at the `examples/` programs, find an existing one that mirrors a
      core Git command and add a missing command-line option.  There are many
      gaps right now and this helps demonstrate how to use the library.  Here
      are some specific ideas (though there are many more):
        * Fix the `examples/diff.c` implementation of the `-B`
          (a.k.a. `--break-rewrites`) command line option to actually look for
          the optional `[<n>][/<m>]` configuration values. There is an
          existing comment that reads `/* TODO: parse thresholds */`. The
          trick to this one will be doing it in a manner that is clean and
          simple, but still handles the various cases correctly (e.g. `-B/70%`
          is apparently a legal setting).
        * As an extension to the matching idea for `examples/log.c`, add the
          `-i` option to use `strcasestr()` for matches.
        * For `examples/log.c`, implement the `--first-parent` option now that
          libgit2 supports it in the revwalk API.
    * Pick a Git command that is not already emulated in `examples/` and write
      a new example that mirrors the behavior.  Examples don't have to be
      perfect emulations, but should demonstrate how to use the libgit2 APIs
      to get results that are similar to Git commands.  This lets you (and us)
      easily exercise a particular facet of the API and measure compatibility
      and feature parity with core git.
    * Submit a PR to clarify documentation! While we do try to document all of
      the APIs, your fresh eyes on the documentation will find areas that are
      confusing much more easily.
    
    If none of these appeal to you, take a look at our issues list to see if
    there are any unresolved issues you'd like to jump in on.
    
    ## Larger Projects
    
    These are ideas for larger projects mostly taken from our backlog of
    [Issues](https://github.com/libgit2/libgit2/issues).  Please don't dive
    into one of these as a first project for libgit2 - we'd rather get to
    know you first by successfully shipping your work on one of the smaller
    projects above.
    
    Some of these projects are broken down into subprojects and/or have
    some incremental steps listed towards the larger goal.  Those steps
    might make good smaller projects by themselves.
    
    * Port part of the Git test suite to run against the command line emulation
      in `examples/`
        * Pick a Git command that is emulated in our `examples/` area
        * Extract the Git tests that exercise that command
        * Convert the tests to call our emulation
        * These tests could go in `examples/tests/`...
    * Add hooks API to enumerate and manage hooks (not run them at this point)
        * Enumeration of available hooks
        * Lookup API to see which hooks have a script and get the script
        * Read/write API to load a hook script and write a hook script
        * Eventually, callback API to invoke a hook callback when libgit2
          executes the action in question
    * Isolate logic of ignore evaluation into a standalone API
    * Upgrade internal libxdiff code to latest from core Git
    * Tree builder improvements:
        * Extend to allow building a tree hierarchy
    * Apply-patch API
    * Add a patch editing API to enable "git add -p" type operations
    * Textconv API to filter binary data before generating diffs (something
      like the current Filter API, probably).
    * Performance profiling and improvement
    * Support "git replace" ref replacements
    * Include conflicts in diff results and in status
        * GIT_DELTA_CONFLICT for items in conflict (with multiple files)
        * Appropriate flags for status
    * Support sparse checkout (i.e. "core.sparsecheckout" and ".git/info/sparse-checkout")