===========================
Contributing to Apache Lucy
===========================

MAKE A PLAN:

  If you're looking for something to work on, see the STATUS file for a list
  of development priorities that the Lucy community has already built
  consensus around.

  If you propose to make non-trivial changes to Lucy, especially changes to
  the public API, send a note to the Lucy developer's list describing your
  plans:

    http://lucy.apache.org/mailing_lists.html
  
GET THE CODE:

  Lucy's codebase is available via Git from git-wip-us.apache.org.  Start by
  creating a clone of the repository:

    git clone https://git-wip-us.apache.org/repos/asf/lucy.git

  There is also a mirror on Github.

    https://github.com/apache/lucy

  Follow the instructions in INSTALL to set up your local workspace.

MAKE CHANGES:

  Edit the source code as you see fit, then build Lucy and run its test suite.

  Lucy supports continuous integration services Travis and Appveyor
  to run tests under multiple host languages, host language versions, and
  platforms. If you fork the Github repository, you can make these services
  automatically test the changes you made in your fork.

  Please bear the following in mind:

    * All code will eventually need to be portable to multiple operating
      systems and compilers. (This is a complex requirement and it should not
      block your contribution.)
    * All public APIs must be documented.
    * Code should be formatted according to the style guidelines at
      <http://wiki.apache.org/lucy/LucyStyleGuide>.
    * All unit tests must pass.
    * New code needs to be accompanied by new unit tests.
    * Simplicity, both in terms of API and implementation, is highly valued
      within the Lucy development community; the simpler the contribution, the
      more quickly it can be reviewed and integrated. 

OPEN AN ISSUE:

  Lucy's issue-tracker/bug-tracker installation runs Atlassian JIRA and we
  generally use the term "issue" rather than "bug" because not every
  contribution fixes a "bug".
  
     https://issues.apache.org/jira/browse/LUCY
  
  1. Create a JIRA account for yourself and sign in.
  2. Once you have signed in, the "create new issue" link will appear.  Either
     use it to open a new issue or navigate to an existing one as appropriate.
  3. To attach files to an issue, use the menu command
     'More Actions > Attach Files'.

  Attaching a file to an issue causes an email notification to be sent to the
  lucy-issues list signalling that a patch has arrived.  Please be patient but
  persistent while engaging with the Lucy committers who review and apply such
  patches.

CONTRIBUTE A PATCH:

  The easiest way to create a patch with Git is to capture the output of
  `git diff`:

    git diff > my_changes.patch

  The resulting patch file can then be attached to a JIRA issue.

GITHUB PULL REQUESTS

  Github users may submit pull requests against our mirror:

    https://github.com/apache/lucy

  An email notifying the Lucy developers list of your pull request will be
  triggered automatically.

