]> git.donarmstrong.com Git - lilypond.git/blobdiff - Documentation/contributor/source-code.itexi
Merge branch 'master' into translation
[lilypond.git] / Documentation / contributor / source-code.itexi
index 032bb9b7d4b790833bfbda580966b7c0e0380572..7c4dc63778584703f17823f636e9f928483aef82 100644 (file)
@@ -93,7 +93,7 @@ files.
 @end enumerate
 
 @warning{Throughout the rest of this manual, most command-line
-input should be entered from @file{~/lilypond-git/}.  This is
+input should be entered from @file{$LILYPOND_GIT}.  This is
 referred to as the @emph{top source directory}.}
 
 Further instructions are in @ref{How to use lily-git}.
@@ -160,7 +160,7 @@ The above command will put the it in @file{~/lilypond-git}, where
 
 @subsubheading Technical details
 
-This creates (within the @file{~/lilypond-git/} directory) a
+This creates (within the @file{$LILYPOND_GIT} directory) a
 subdirectory called @file{.git/}, which Git uses to keep track of
 changes to the repository, among other things.  Normally you don't
 need to access it, but it's good to know it's there.
@@ -171,7 +171,7 @@ need to access it, but it's good to know it's there.
 
 @warning{Throughout the rest of this manual, all command-line
 input should be entered from the top directory of the Git
-repository being discussed (eg. @file{~/lilypond-git/}).  This is
+repository being discussed (eg. @file{$LILYPOND_GIT}).  This is
 referred to as the @emph{top source directory}.}
 
 Before working with the copy of the main LilyPond repository, you
@@ -216,9 +216,9 @@ this to your @file{~/.bashrc}:
 export PS1="\u@\h \w\$(__git_ps1)$ "
 @end verbatim
 
-If you are not using LilyDev, you may need to install the
-additional @code{git-completion} package, but it is definitely
-worth it.
+You may need to install the additional @code{bash-completion}
+package, but it is definitely worth it.  After installation
+you must log out, and then log back in again to enable it.
 
 
 @subsubheading Technical details
@@ -531,7 +531,7 @@ We have a few other code repositories.
 @menu
 * lilypond-extra::
 * Grand Unified Builder (GUB)::
-* lilypad::
+* LilyPad::
 * yet more repositories::
 @end menu
 
@@ -549,39 +549,101 @@ environment variable to point to that repository.
 @end example
 
 To configure an environment variable in bash (the default for most
-Linux distributions),
+GNU/Linux distributions),
 
 @example
 export LILYPOND_WEB_MEDIA_GIT=$HOME/dir/of/lilypond-extra/
 @end example
 
+Be aware that @code{lilypond-extra} is the definitive source for some binary
+files - in particular PDF versions of papers concerning LilyPond.  To add
+further PDFs of this sort, all that is necessary is to add the PDF to
+@code{lilypond-extra} and then add a reference to it in the documentation.  The
+file will then be copied to the website when @code{make website} is run.
+
+However, pictures that are also used in the documentation build are mastered in
+the main git repository.  If any of these is changed, it should be updated in
+git, and then the updates copied to @code{lilypond-extra}.
+
 @node Grand Unified Builder (GUB)
 @unnumberedsubsubsec Grand Unified Builder (GUB)
 
 Another item of interest might be the Grand Unified Builder, our
-cross-platform building tool.  Since it is used by projects as
+cross-platform building tool.  Since it is used by other projects as
 well, it is not stored in our gub repository.  For more info, see
 @uref{http://lilypond.org/gub}.
 
-There are two locations for this repository, which will hopefully
-be kept up-to-date with each other:
+There are two locations for this repository: the version being used to
+build lilypond, which is at
 
 @example
-@uref{http://github.com/janneke/gub}
 @uref{http://github.com/gperciva/gub}
 @end example
 
+and the original version by Jan Nieuwenhuizen, kept at
+
+@example
+@uref{http://github.com/janneke/gub}
+@end example
+
 
-@node lilypad
-@unnumberedsubsubsec lilypad
+@node LilyPad
+@unnumberedsubsubsec LilyPad
 
 Our binary releases on MacOS X and Windows contain a lightweight
-text editor.  This code is here:
+text editor.
+
+To make any modifications the Windows editor, you will need to do the
+following:
+
+@enumerate
+@item
+Clone the git repository from @code{https://github.com/gperciva/lilypad}
+
+@item
+Make changes to the source, and check it compiles.  In a Windows environment
+@code{MinGW} provides both a @code{Git} installation and a @code{gcc}
+compiler.  This can be obtained from @code{http://www.mingw.org/}
+
+@item
+Update the version which is contained in the @file{rsrc.rc}.  Check
+this compiles, too.
+
+@item
+Commit the changes with an informative commit message.
+
+@item
+Push the changes to github.  You will need to use syntax similiar to this:
 
 @example
-https://github.com/gperciva/lilypad
+git push https://UserName@@github.com/gperciva/lilypad.git
 @end example
 
+You will need to have push access to the git repository for this to be
+successful.
+
+@item
+Make a tarball of the source code to be used by GUB by pulling the updated
+repository from GitHub.  Ensure that the tarball has the correct Version
+number.
+
+@item
+Copy the tarball to @code{http://lilypond.org/download/gub-sources/lilypad/}.
+You will need to have SSH access to @code{lilypond.org}.  If you do not, contact
+the Release Manager via the lilypond-devel mailing list.
+
+@item
+Update GUB to make it use the new tarball by editing
+@file{gub/specs/lilypad.py} and changing the @code{source =} line to point to
+the new source.
+
+@item
+Push this updated @file{lilypad.py} version to the GUB repository on GitHub.
+
+@item
+Test the changes with a new GUB compile.
+
+@end enumerate
 
 @node yet more repositories
 @unnumberedsubsubsec yet more repositories
@@ -727,7 +789,7 @@ Already on 'master'
 @end example
 
 By now the source files should be accessible---you should be able
-to edit any files in the @file{lilypond-git/} directory using a
+to edit any files in the @file{$LILYPOND_GIT} directory using a
 text editor of your choice.  But don't start just yet!  Before
 editing any source files, learn how to keep your changes organized
 and prevent problems later---read @ref{Basic Git procedures}.
@@ -786,7 +848,8 @@ The branches are kept for archival reasons.
 * The Git contributor's cycle::
 * Pulling and rebasing::
 * Using local branches::
-* Commits and patches::
+* Commits::
+* Patches::
 @end menu
 
 
@@ -878,7 +941,7 @@ refusing to pull with rebase: your working tree is not up-to-date
 
 @noindent
 it means that you have modified some files in you working tree
-without committing changes (see @ref{Commits and patches}); you
+without committing changes (see @ref{Commits}); you
 can use the @command{git@tie{}stash} command to work around this:
 
 @example
@@ -1019,24 +1082,21 @@ git merge @var{foo}
 
 If any conflict happens, see @ref{Resolving conflicts}.
 
-There are common usage cases for merging: as a translator, you
-will often want the Translations meister to merge @code{master} into
-@code{translation}; on the other hand, the Translations
-meister wants to merge @code{translation} into
-@code{staging} whenever he has checked that
-@code{translation} builds successfully.
+There are common usage cases for merging: as a translator, you will
+often want the Translations meister to merge @code{master} into
+@code{translation}; on the other hand, the Translations meister wants
+to merge @code{translation} into @code{staging} whenever he has
+checked that @code{translation} builds successfully.
 
 
-@node Commits and patches
-@subsection Commits and patches
+@node Commits
+@subsection Commits
 
 
 @menu
 * Understanding commits::
 * Making commits::
 * Commit messages::
-* Making patches::
-* Uploading a patch for review::
 @end menu
 
 
@@ -1187,6 +1247,16 @@ involved.  Visit the links listed in @ref{Understanding commits}
 for examples.
 
 
+@node Patches
+@subsection Patches
+
+
+@menu
+* Making patches::
+* Uploading a patch for review::
+@end menu
+
+
 @node Making patches
 @unnumberedsubsubsec Making patches
 
@@ -1238,72 +1308,9 @@ code review website:
 @uref{http://codereview.appspot.com/}
 @end example
 
-@subsubheading @command{git-cl} install
-
-LilyDev users should skip over these @q{install} instructions.
-
-@enumerate
-
-@item
-Install @command{git-cl} by entering:
-
-@example
-git clone https://github.com/gperciva/git-cl.git
-@end example
-
-If that command fails for some reason, try this instead:
-
-@example
-git clone git://github.com/gperciva/git-cl.git
-@end example
-
-@item
-Add the @file{git-cl/} directory to your PATH,
-or create a symbolic link to the @command{git-cl}
-and @command{upload.py} scripts in one of your PATH
-directories (such as @file{$HOME/bin}).
-
-In Ubuntu (and LilyDev), you can add directories to PATH
-by adding this line to a hidden file @file{.bashrc},
-located in your home directory:
-
-@example
-PATH=~/type-here-directory-containing-git-cl:"$@{PATH@}"
-@end example
-
-@end enumerate
-
-@subsubheading @command{git-cl} configuration
-
-LilyDev users should perform these @q{configuration} instructions.
-
-@enumerate
-@item
-You must have a google account; please create one if you do not
-have one already.
-
-Note that a google account does not need to be a gmail account; you can
-use any email address for your google account when you sign up.
-
-@item
-Move into the top source directory and then configure @command{git
-cl} with the following commands.  If you do not understand any
-question, just answer with a newline (CR).
-
-@example
-cd $HOME/lilypond-git/
-git cl config
-@end example
-
-The @qq{CC list} question should be answered with:
-
-@example
-lilypond-devel@@gnu.org
-@end example
-
-@end enumerate
-
-@subsubheading Uploading patch set
+You can upload a patch for review by using our custom @code{git-cl}
+@q{helper-script}.  This section assumes you have already installed,
+updated, and configured @code{git-cl}.  See @ref{git-cl}.
 
 @warning{Unless you are familiar with branches, only work on one
 set of changes at once.}
@@ -1312,13 +1319,13 @@ There are two methods, depending on your git setup.
 
 @itemize
 @item
-@strong{Master branch}: (easy option, and used in @command{lily-git.tcl})
+@strong{Master branch}: (easy option)
 
 If you added your patch to @code{master}, then:
 
 @example
 git pull -r
-git cl upload origin/master
+git-cl upload origin/master
 @end example
 
 @c Mention staging here?
@@ -1336,32 +1343,46 @@ option.
 @item
 @strong{Separate branch}: (complicated option)
 
-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:
+Ensure your changes are committed in a separate branch, which should
+differ from the reference branch to be used (usually
+@code{origin/master}) by just the changes to be uploaded.  Checkout the
+branch with the changes:
 
 @example
-git cl upload <reference SHA1 ID>
+git checkout some-branch-with-changes
+@end example
+
+If the reference branch is to be @code{origin/master}, ensure that the
+branch containing the changes is up-to-date with it.  Use
+@command{git rebase} or @command{git pull -r} to rebase the branch to
+the head of @code{origin/master}.  For example:
+
+@example
+git pull -r origin master
+@end example
+
+Finally, start the upload by entering:
+
+@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:
+SHA1 ID of origin/master, and in that case you can just use the command:
 
 @example
-git cl upload origin/master
+git-cl upload origin/master
 @end example
 
-@noindent
-can be used.
-
 @end itemize
 
+First you will see a terminal editor where you can edit the
+message that will accompany your patch. @command{git-cl} will
+respect the @env{EDITOR} environment variable if defined,
+otherwise it will use @command{vi} as the default editor.
+
 After prompting for your Google email address and password, the
 patch set will be posted to Rietveld, and you will be given a URL
 for your patch.
@@ -1393,20 +1414,20 @@ associate the new branch with an existing Rietveld issue,
 the following command can be used:
 
 @example
-git cl issue issue-number
+git-cl issue issue-number
 @end example
 
 @noindent
 where @code{issue-number} is the number of the existing Rietveld
 issue.
 
-@subsubheading Resetting git cl
+@subsubheading Resetting git-cl
 
-If @command{git cl} becomes confused, you can @qq{reset} it by
+If @command{git-cl} becomes confused, you can @qq{reset} it by
 running:
 
 @example
-git cl issue 0
+git-cl issue 0
 @end example
 
 @subsubheading Wait for a countdown
@@ -2040,6 +2061,15 @@ patch has been lost.  Note that you can check the commits on
 @code{origin/staging} by looking at the git web interface on
 savannah.
 
+It may happen occasionally that the staging branch breaks automated
+testing.  In this case the automatic move of staging material to
+master gets halted in order to avoid broken material entering master.
+This is a safety net.  Please do not try breaking out from it by
+adding fixes on top of staging: in that case the whole sequence will
+end up in master after all, defeating the purpose of the system.  The
+proper fix usually involves rewriting the staging branch and is best
+left to core developers after discussion on the developer list.
+
 @subsubheading If your work is in a patch file
 
 Assuming that your patch is in a file called