]> git.donarmstrong.com Git - lilypond.git/blobdiff - Documentation/contributor/introduction.itexi
Merge remote-tracking branch 'origin/master' into translation
[lilypond.git] / Documentation / contributor / introduction.itexi
index baa458c563b5b7cdc75408fb7d94a07b50ab3b56..b6530b4ffdcdfa99a3e5fe2520034a58320e71ae 100644 (file)
@@ -5,11 +5,13 @@
 @node Introduction to contributing
 @chapter Introduction to contributing
 
-FIXME add fluff
+This chapter presents a quick overview of ways that people can
+help LilyPond.
 
 @menu
 * Help us::
 * Overview of work flow::
+* Summary for experienced developers::
 * Mentors::
 @end menu
 
@@ -19,20 +21,16 @@ FIXME add fluff
 
 @helpusNeed
 
-@helpusTasks
+@helpusSimple
 
-@helpusProjects
+@helpusAdvanced
 
 
 @node Overview of work flow
 @section Overview of work flow
 
-@cartouche
-@strong{Ultra-short summary for Unix developers}: source code is at
-@code{git://git.sv.gnu.org/lilypond.git}.  Documentation is built
-with Texinfo, after pre-processing with @code{lilypond-book}.
-Send well-formed patches to @email{lilypond-devel@@gnu.org}.
-@end cartouche
+@advanced{Experienced developers should skip to
+@ref{Summary for experienced developers}.}
 
 Git is a @emph{version control system} that tracks the history of
 a program's source code.  The LilyPond source code is maintained
@@ -51,7 +49,7 @@ The @q{official} LilyPond Git repository is hosted by the GNU
 Savannah software forge at @uref{http://git.sv.gnu.org}.
 Although, since Git uses a @emph{distributed} model, technically
 there is no central repository.  Instead, each contributor keeps a
-complete copy of the entire repository (about 116M).
+complete copy of the entire repository (about 116MB).
 
 Changes made within one contributor's copy of the repository can
 be shared with other contributors using @emph{patches}.  A patch
@@ -73,9 +71,9 @@ interface is at
 
 Git is a complex and powerful tool, but tends to be confusing at
 first, particularly for users not familiar with the command line
-and/or version control systems.  Contributors who don't want to
-deal with Git directly are encouraged to use the
-@command{lily-git} graphical user interface instead.
+and/or version control systems.  We have created the
+@command{lily-git} graphical user interface to ease this
+difficulty.
 
 @emph{Compiling} (@q{building}) LilyPond allows developers to see
 how changes to the source code affect the program itself.
@@ -95,6 +93,121 @@ email to @email{lilypond-devel@@gnu.org}.  You can subscribe to
 the developers' mailing list here:
 @uref{http://lists.gnu.org/mailman/listinfo/lilypond-devel}.
 
+@warning{Contributors on Windows or MacOS X wishing to compile
+code or documentation are strongly advised to use our Ubuntu
+LilyPond Developer Remix, as discussed in @ref{Quick start}.}
+
+
+@node Summary for experienced developers
+@section Summary for experienced developers
+
+If you are already familiar with typical open-source tools, here's
+what you need to know:
+
+@itemize
+@item @strong{source repository}:
+hosted by GNU savannah.
+
+@example
+@uref{http://git.savannah.gnu.org/gitweb/?p=lilypond.git}
+@end example
+
+@item @strong{environment variables}:
+many maintenance scripts, and many instructions in this guide rely on
+predefined @ref{Environment variables}.
+
+@item @strong{mailing lists}:
+given on @rweb{Contact}.
+
+@item @strong{branches}:
+
+@itemize
+@item @code{master}:
+base your work from this, but do @strong{not push} to it.
+
+@item @code{staging}:
+after a successful review (see below), push here.
+
+@item @code{translation}:
+translators should base their work from this, and also push to it.
+
+@item @code{dev/foo}:
+feel free to push any new branch name under @code{dev/}.
+
+@end itemize
+
+@item @strong{regression tests}:
+also known as @qq{regtests}; this is a collection of more than a
+thousand .ly files.  We track the output of those files between
+versions.
+
+If a patch introduces any unintentional changes to the regtests,
+we will likely reject it -- make sure that you are aware and can
+explain any regtest changes.  More info in @ref{Regression tests}.
+
+@item @strong{reviews}:
+after finishing work on a patch or branch:
+
+@enumerate
+@item
+upload it with our custom @code{git-cl}.  In addition to uploading
+it to the google rietveld code review tool, this adds a tracker
+issue so that we don't lose your patch.  The @qq{status} of your
+patch is kept on the issue tracker; see @ref{Issues}.
+
+@example
+@uref{https://github.com/gperciva/git-cl}
+@end example
+
+Your patch will be given @code{Patch-new} status.  More info in
+@ref{Uploading a patch for review}.
+
+@item
+If your patch passes some automatic tests, it will be given
+@code{Patch-review} status.  This generally happens within 24
+hours.
+
+@item
+After that, the patch must wait for the next @qq{patch countdown},
+which occur 3 times a week.  If there are a lot of patches waiting
+for a countdown, a subset of patches are chosen randomly.  When
+your patch is put on a countdown, it will be given
+@code{Patch-countdown} status.
+
+@item
+The countdown is a 48-hour period which gives other developers one
+last chance to review the patch.  If no significant problems are
+found, your patch will be given @code{Patch-push} status.
+
+@item
+You may now either push it to the @code{staging} branch, or email
+your patch (created with @w{@code{git format-patch}}) to somebody
+who will push it for you.
+
+@end enumerate
+
+@advanced{Yes, this process means that most patches wait between
+60-120 hours before reaching @code{master}.  This is unfortunate, but
+given our limited resources for reviewing patches and a history of
+unintended breakage in @code{master}, this is the best compromise
+we have found.}
+
+@c I don't think this is important enough to list here, but I may
+@c change my mind and/or leave a link to a later CG section.
+@ignore
+@item @strong{code style}:
+C++ code should be formatted with
+@file{scripts/auxiliar/fixcc.py}, which requires
+@url{http://astyle.sourceforge.net/, astyle 2.02}.  However, we
+are not very strict about this requirement.
+
+At the moment, scheme code should be formatted @qq{like emacs does
+it}.  We are working on an automated tool to simplify this step.
+However, we are not very strict about this requirement either.
+@end ignore
+
+@end itemize
+
 
 @node Mentors
 @section Mentors
@@ -119,6 +232,12 @@ They might not be able to help you with all problems, but we find
 that new contributors often get stuck with something that could be
 solved/explained with 2 or 3 sentences from a mentor.
 
+@item
+If you have been working on a task much longer than was originally
+estimated, stop and ask your mentor.  There may have been a
+miscommunication, or there may be some time-saving tips that could
+vastly simply your task.
+
 @item
 Send patches to your mentor for initial comments.
 
@@ -143,7 +262,7 @@ than we think you can handle.
 
 @item
 Respond to questions from your contributor(s) promptly, even if
-the reponse is just @qq{sorry, I don't know} or @qq{sorry, I'm
+the response is just @qq{sorry, I don't know} or @qq{sorry, I'm
 very busy for the next 3 days; I'll get back to you then}.  Make
 sure they feel valued.
 
@@ -153,7 +272,7 @@ emails -- do you work on lilypond every day, or every weekend, or
 what?  Also, if you'll be unavailable for longer than usual (say,
 if you normally reply within 24 hours, but you'll be at a
 conference for a week), let your contributors know.  Again, make
-sure thay feel valued, and that your silence (if they ask a
+sure they feel valued, and that your silence (if they ask a
 question during that period) isn't their fault.
 
 @item
@@ -171,11 +290,34 @@ for docs and translations; code patches should almost always go to
 -devel before being pushed).
 
 @item
-Keep track of patches from your contributor.  If you've sent a
-patch to -devel, it's your responsibility to pester people to get
-comments for it, or at very least add it to the google tracker.
+Keep track of patches from your contributor.  Either upload them
+to Rietveld yourself, or help+encourage them to upload the patches
+themselves.  When a patch is on Rietveld, it's your responbility
+to get comments for it, and to add a link to the patch to the
+google tracker.  (tag it @qq{patch-new}, or @qq{patch-review} if
+you feel very confident in it)
 
-@end enumerate
+@item
+Encourage your contributor to review patches, particularly your
+own!  It doesn't matter if they're not familiar with C++ / scheme
+/ build system / doc stuff -- simply going through the process is
+valuable.  Besides, anybody can find a typo!
 
+@item
+Contact your contributor at least once a week.  The goal is just
+to get a conversation started -- there's nothing wrong with simply
+copy&pasting this into an email:
+
+@example
+Hey there,
+
+How are things going?  If you sent a patch and got a review, do
+you know what you need to fix?  If you sent a patch but have no
+reviews yet, do you know when you will get reviews?  If you are
+working on a patch, what step(s) are you working on?
+@end example
+
+
+@end enumerate