]> git.donarmstrong.com Git - lilypond.git/blobdiff - Documentation/contributor/source-code.itexi
Doc: cleanup @file{}, take 2: remove all @/ escaping sequences.
[lilypond.git] / Documentation / contributor / source-code.itexi
index b27228d2f34abb6f1409ca3335741fdf90ba9476..d7d1bed0cf69d8ebcb8d3194ceb5e4eac6bd8bd5 100644 (file)
@@ -4,6 +4,11 @@
 @node Working with source code
 @chapter Working with source code
 
+New contributors should only read @ref{Using lily-git}.  Please
+ignore the rest of this chapter.
+
+Advanced contributors will find the rest of this material quite
+useful, particularly if they are working on major new features.
 
 @menu
 * Using lily-git::
 @node Using lily-git
 @section Using lily-git
 
+@subsubheading Install and Configuration
+
+@enumerate
+@item
+If you haven't already, download and install Git.
+
+@itemize
+
+@item
+Lilybuntu users: git has already been installed for you.
+
+@item Windows users: download the @code{.exe} file labeled
+@qq{Full installer for official Git} from:
+
+@example
+@uref{http://code.google.com/p/msysgit/downloads/list}
+@end example
 
-If you haven't already, download and install Git.  Go to
-@uref{http://git-scm.com/download}, and in the @qq{Binaries}
-section, select the appropriate package for your operating system.
-Windows users should visit
-@uref{http://code.google.com/p/msysgit/downloads/list} and
-download the @file{.exe} file labeled @qq{Full installer for
-official Git}.
+@item Other operating systems: either install @command{git} with
+your package manager, or download it from the @qq{Binaries}
+section of:
 
+@example
+@uref{http://git-scm.com/download}
+@end example
+
+@end itemize
+
+
+@item
 Download the lily-git script from:
 
 @c don't change the cgit link below to gitweb; gitweb uses
@@ -37,6 +63,7 @@ Download the lily-git script from:
 @uref{http://git.sv.gnu.org/cgit/lilypond.git/plain/scripts/auxiliar/lily-git.tcl}
 @end example
 
+@item
 To run the program from the command line, navigate to the
 directory containing @file{lily-git.tcl} and enter:
 
@@ -44,12 +71,14 @@ directory containing @file{lily-git.tcl} and enter:
 wish lily-git.tcl
 @end example
 
+@end enumerate
 
-@subsubheading Get source / Update source
+
+@subsubheading 1. Get source / Update source
 
 When you click the @qq{Get source} button, @command{lily-git} will
 create a directory called @file{lilypond-git/} within your home
-directory, and will download the complete source code into that
+directory, and will download the source code into that
 directory (around 55Mb).  When the process is finished, the
 @qq{Command output} window will display @qq{Done}, and the button
 label will change to say @qq{Update source}.
@@ -58,8 +87,17 @@ Navigate to the @file{lilypond-git/} directory to view the source
 files.  You should now be able to modify the source files using
 your normal text editor.
 
+@quotation
+Advanced note: The @qq{Get source} button does not fetch the
+entire history of the git repository, so utilities like
+@command{gitk} will only be able to display the most recent
+additions.  As you continue to work with @command{lily-git}, the
+@qq{Update source} button will take any new additions and add it
+to whatever is currently in your repository's history.
+@end quotation
+
 
-@subsubheading New local commit
+@subsubheading 2a. New local commit
 
 A single commit typically represents one logical set of related
 changes (such as a bug-fix), and may incorporate changes to
@@ -75,22 +113,26 @@ After entering a commit message, click @qq{OK} to finalize the
 commit.
 
 
-@subsubheading Amend previous commit
+@subsubheading 2b. Amend previous commit
 
 You can go back and make changes to the most recent commit with
 the @qq{Amend previous commit} button.  This is useful if a
-mistake is found after you've clicked the @qq{New local commit}
-button.  To amend the most recent commit, edit the source files as
-needed and click the button.  The earlier version of the commit is
-not saved, but is replaced by the new one.
+mistake is found after you have clicked the @qq{New local commit}
+button.
 
-Note that this does not update patch files; if you have a patch
-file from an earlier version of the commit, you will need to make
-another patch set when using this feature.  The old patch file is
-not saved, but is replaced by the new one.
+To amend the most recent commit, re-edit the source files as
+needed and then click the @qq{Amend previous commit} button.  The
+earlier version of the commit is not saved, but is replaced by the
+new one.
 
+Note that this does not update the patch @strong{files}; if you
+have a patch file from an earlier version of the commit, you will
+need to make another patch set when using this feature.  The old
+patch file will not be saved, but will be replaced by the new one
+after you click on @qq{Make patch set}.
 
-@subsubheading Make patch set
+
+@subsubheading 3. Make patch set
 
 Before making a patch set from any commits, you should click the
 @qq{Update source} button to make sure the commits are based on
@@ -731,6 +773,7 @@ meister wants to merge @code{lilypond/translation} into
 * Making commits::
 * Commit messages::
 * Making patches::
+* Uploading a patch for review::
 @end menu
 
 
@@ -844,7 +887,7 @@ that looks like this:
 
 @example
 
-# Please enter the commit message for your changes. Lines starting
+# Please enter the commit message for your changes.  Lines starting
 # with '#' will be ignored, and an empty message aborts the commit.
 # On branch master
 # Changes to be committed:
@@ -884,9 +927,12 @@ for examples.
 @node Making patches
 @unnumberedsubsubsec Making patches
 
-
 If you want to share your changes with other contributors and
 developers, you need to generate @emph{patches} from your commits.
+We prefer it if you follow the instructions in
+@ref{Uploading a patch for review}.  However, we present an
+alternate method here.
+
 You should always run @command{git@tie{}pull@tie{}-r} (translators
 should leave off the @code{-r}) before doing this to ensure that
 your patches are as current as possible.
@@ -918,11 +964,128 @@ the patch files attached.  Translators should send patches to
 reviewed, the developers may push one or more of them to the main
 repository or discuss them with you.
 
-@seealso
 
-If your patch includes a significant amount of code, you may want
-to see @ref{Adding or modifying features}, especially @emph{Post
-patch for comments}.
+@node Uploading a patch for review
+@unnumberedsubsubsec Uploading a patch for review
+
+Any non-trivial change should be uploaded to our @qq{Rietveld}
+code review website:
+
+@example
+@uref{http://codereview.appspot.com/}
+@end example
+
+@subsubheading Initial setup
+
+This requires the use of an external package, git-cl, and an email
+account on Google.
+
+@command{git-cl} is installed by:
+
+@example
+git clone git://neugierig.org/git-cl.git
+@end example
+
+Then, add the @file{git-cl} directory to your PATH, or create a
+symbolic link to the @command{git-cl} and @command{upload.py} in
+one of your PATH directories (like @file{usr/bin}).  Then
+configure the program by running:
+
+@example
+git cl config
+@end example
+
+@noindent
+in the LilyPond git directory and answering the questions that
+are asked.  If you do not understand the question answer with just
+a newline (CR).
+
+@subsubheading Uploading patch set
+
+There are two methods, depending on your git setup.
+
+@itemize
+@item
+@strong{Separate branch}:
+
+Ensure your changes are committed in a separate branch, which
+should differ from the reference branch to be used by just the
+changes to be uploaded.  If the reference branch is to be
+origin/master, ensure this is up-to-date.  If necessary, use git
+rebase to rebase the branch containing the changes to the head of
+origin/master.  Finally, check out branch with the changes and
+enter the command:
+
+@example
+git cl upload <reference SHA1 ID>
+@end example
+
+@noindent
+where <reference SHA1 ID> is the SHA1 ID of the commit to be used
+as a reference source for the patch.  Generally, this will be the
+SHA1 ID of origin/master, and in that case the command:
+
+@example
+git cl upload origin/master
+@end example
+
+@noindent
+can be used.
+
+@item
+@strong{Master branch}:
+
+If you added your patch to @code{master}, then make sure that you
+are up-to-date (by running @code{git pull -r}), and then run:
+
+@example
+git cl upload origin/master
+@end example
+
+If you have git push ability, make sure that you @emph{remove}
+your patch (with @command{git rebase} or @command{git reset})
+before pushing other stuff.
+
+@end itemize
+
+After prompting for your Google email address and password, the
+patch set will be posted to Rietveld.
+
+@subsubheading Announcing your patch set
+
+You should then announce the patch by sending an email to
+@code{lilypond-devel}, with a subject line starting with PATCH:,
+asking for comments on the patch.  Alternately, you may Publish +
+Mail a (bogus) comment, in order to send an email to
+lilypond-devel.
+
+@subsubheading Revisions
+
+As revisions are made in response to comments, successive patch sets
+for the same issue can be uploaded by reissuing the git-cl command
+with the modified branch checked out.
+
+Sometimes in response to comments on revisions, the best way to
+work may require creation of a new branch in git.  In order to
+associate the new branch with an existing Rietveld issue,
+the following command can be used:
+
+@example
+git cl issue issue-number
+@end example
+
+@noindent
+where @code{issue-number} is the number of the existing Rietveld
+issue.
+
+@subsubheading Resetting git cl
+
+If @command{git cl} becomes confused, you can @qq{reset} it by
+running:
+
+@example
+git cl issue 0
+@end example
 
 
 @node Advanced Git procedures
@@ -989,7 +1152,7 @@ copy and paste the committish.
 
 A @emph{branch} is nothing more than a pointer to a particular
 commit, which is called the @emph{head} of the branch; when
-referring to a branch, one often acutally thinks about its head
+referring to a branch, one often actually thinks about its head
 and the ancestor commits of the head.
 
 Now we will explain the two last commands you used to get the
@@ -1141,7 +1304,7 @@ repository.
 
 
 The commands above don't only bring you the latest version of the
-sources, but also the full history of revisions (revisons, also
+sources, but also the full history of revisions (revisions, also
 called commits, are changes made to the sources), stored in the
 @file{.git} directory.  You can browse this history with
 
@@ -1332,7 +1495,7 @@ where @var{user} is your username on Savannah.
 
 
 @item
-After your membership has been activated and youve configured Git
+After your membership has been activated and you've configured Git
 to use SSH, test the connection with:
 
 @example
@@ -1452,6 +1615,31 @@ should add these lines to @file{.git/config}:
 @end example
 @end itemize
 
+@knownissues
+Encryption protocols, including ssh, generally do not permit packet
+fragmentation to avoid introducing a point of insecurity.  This
+means that the maximum packet size must not exceed the smallest
+MTU (Maximum Transmission Unit) set in the routers along the path.
+This smallest MTU is determined by a procedure during call set-up
+which relies on the transmission over the path of ICMP packets.
+If any of the routers in the path block ICMP packets this mechanism
+fails, resulting in the possibility of packets being transmitted
+which exceed the MTU of one of the routers.  If this happens the
+packet is discarded, causing the ssh session to hang, timeout or
+terminate with the error message
+
+@example
+ssh: connect to host <host ip addr> port 22: Bad file number
+fatal: The remote end hung up unexpectedly
+@end example
+
+depending on precisely when in the proceedings the first large
+packet is transmitted.  Most routers on the internet have MTU
+set to 1500, but routers installed in homes to connect via
+broadband may use a slightly smaller MTU for efficient transmission
+over ATM.  If this problem is encountered a possible work-around is
+to set the MTU in the local router to 1500.
+
 @node Git on Windows
 @section Git on Windows
 
@@ -1466,7 +1654,7 @@ paragraphs next to analogous Unix instructions? -mp
 
 Git is a system for tracking the changes made to source files by a
 distributed set of editors.  It is designed to work without a
-master repository, but we have chosen to have a master respository
+master repository, but we have chosen to have a master repository
 for LilyPond files.  Editors hold a local copy of the master
 repository together with any changes they have made locally.
 Local changes are held in a local @q{branch}, of which there may
@@ -1573,7 +1761,7 @@ clicking on the usual Windows close-window widget.
 @subsection Git GUI
 
 Almost all subsequent work will use the Git Graphical User
-Interface, which avoids having to type command line commands. To
+Interface, which avoids having to type command line commands.  To
 start Git GUI first start the Git bash shell by clicking on the
 desktop icon, and type