]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/contributor/administration.itexi
Doc: CG - Updated the Meister's section
[lilypond.git] / Documentation / contributor / administration.itexi
1 @node Administrative policies
2 @chapter Administrative policies
3
4 This chapter discusses miscellaneous administrative issues which
5 don't fit anywhere else.
6
7 @menu
8 * Meta-policy for this document::
9 * Environment variables::
10 * Meisters::
11 * Managing Staging and Master branches with Patchy::
12 * Administrative mailing list::
13 * Grand Organization Project (GOP)::
14 * Grand LilyPond Input Syntax Standardization (GLISS)::
15 * Unsorted policies::
16 @end menu
17
18 @node Meta-policy for this document
19 @section Meta-policy for this document
20
21 The Contributor's Guide as a whole is still a work in progress,
22 but some chapters are much more complete than others.  Chapters
23 which are @qq{almost finished} should not have major changes
24 without a discussion on @w{@code{-devel}}; in other chapters, a
25 disorganized @qq{wiki-style dump} of information is encouraged.
26
27 Do not change (other than spelling mistakes) without discussion:
28
29 @itemize
30
31 @item
32 @ref{Introduction to contributing}
33
34 @item
35 @ref{Working with source code}
36
37 @end itemize
38
39 Please dump info in an appropriate @@section within these manuals,
40 but discuss any large-scale reorganization:
41
42 @itemize
43
44 @item
45 @ref{Compiling}
46
47 @item
48 @ref{Documentation work}
49
50 @item
51 @ref{Issues}
52
53 @item
54 @ref{Regression tests}
55
56 @item
57 @ref{Programming work}
58
59
60 @end itemize
61
62 Totally disorganized; do whatever the mao you want:
63
64 @itemize
65
66 @item
67 @ref{Website work}
68
69 @item
70 @ref{LSR work}
71
72 @item
73 @ref{Release work}
74
75 @item
76 @ref{Administrative policies}
77
78 @end itemize
79
80
81 @node Environment variables
82 @section Environment variables
83
84 Some maintenance scripts and instructions in this guide rely on
85 the following environment variables.  They should be predefined in
86 LilyDev distribution (see @ref{LilyDev}); if you set up your own
87 development environment, you can set them by appending these settings to
88 your @file{~/.bashrc} (or whatever defines your default environment
89 variables for the user account for LilyPond development), then logging
90 out and in (adapt directories to your setup):
91
92 @example
93 LILYPOND_GIT=~/lilypond-git
94 export LILYPOND_GIT
95 LILYPOND_BUILD_DIR=~/lilypond-git/build
96 export LILYPOND_BUILD_DIR
97 @end example
98
99 The standard build and install procedure (with @code{autogen.sh},
100 @code{configure}, @code{make}, @code{make install}, @code{make doc}
101 @dots{}) does not rely on them.
102
103 In addition, for working on the website, @code{LILYPOND_WEB_MEDIA_GIT}
104 should be set to the repository lilypond-extra, see
105 @ref{lilypond-extra}.
106
107
108 @node Meisters
109 @section Meisters
110
111 We have four primary jobs to help organize all our contributors:
112
113 @unnumberedsubsec The Bug Meister
114
115 The Bug Meister's responsibilities are:
116
117 @itemize
118
119 @item
120 To organize the individual Bug Squad volunteers, making sure that
121 each member is aware of their responsibilities.  See
122 @ref{The Bug Squad}.
123
124 @item
125 To train new Bug Squad volunteers in the Issue Tracker process.  See
126 @ref{Issues}.
127
128 @item
129 To have the final say on our policies for Issues and their
130 classification.  See @ref{Issue classification}.
131
132 @end itemize
133
134 Current Bug Meister: Colin Hall @email{bug-lilypond@@gnu.org}
135
136
137 @unnumberedsubsec The Doc Meister
138
139 The Doc Meister's responsibilities are:
140
141 @itemize
142
143 @item
144 To train new volunteers in our Documentation style and policy,
145 including organizing LilyPond Snippet Repository (LSR) work.
146
147 @item
148 To organize the individual volunteers -- who does what on which job --
149 and to check that everything is running smoothly.
150
151 @item
152 To have final say on any Documentation policy.  See
153 @ref{Documentation policy}.
154
155 @end itemize
156
157 Current Doc Meister: None
158
159
160 @unnumberedsubsec The Patch Meister
161
162 The Patch Meister's responsibilities are:
163
164 @itemize
165
166 @item
167 To keep track of all patches submitted for testing and review.  This
168 includes scanning the bug and dev email lists looking for any patches
169 submitted by @q{random} contributors and advising them on how to submit
170 a patch for testing and review.  See @ref{Commits and patches}.
171
172 @item
173 To makes sure that any patch submitted has a corresponding Issue Tracker
174 and Rietveld Issue created for it before it enters the testing and
175 review process.  See @ref{Issues}.
176
177 @item
178 Updates all Issue statuses for all patches that are currently in the
179 testing and review process periodically -- currently every 3 - 4 days.
180 See @ref{Patch handling}.
181
182 @end itemize
183
184 @warning{The Patch Meister's role is a purely administrative one and no
185 programming skill or judgement is assumed or required.}
186
187 Currently: James Lowe @email{pkx@@gnu.org}
188
189
190 @unnumberedsubsec The Translation Meister
191
192 The Translation Meister's responsibilities are:
193
194 @itemize
195
196 @item
197 To train new documentation translators in the translation process.  See
198 @ref{Translating the documentation}.
199
200 @item
201 To update the translation priority list and handle the merging of the
202 translation branches (in both directions).
203
204 @item
205 To have final say on any Translation management policies.  See
206 @ref{Translating the documentation}.
207
208 @end itemize
209
210 Currently: Francisco Vila @email{translations@@lilynet.net}
211
212
213
214 @node Managing Staging and Master branches with Patchy
215 @section Managing Staging and Master branches with Patchy
216
217 @ignore
218 The script 'test-patches.py' no longer works with code.google.com since
219 Google changed their authentication method.
220 @end ignore
221
222 @menu
223 * Overview of Patchy::
224 * Patchy requirements::
225 * Installing Patchy::
226 * Configuring Patchy::
227 * Running the script::
228 * Automating Patchy::
229 * Troubleshooting Patchy::
230 @end menu
231
232 @node Overview of Patchy
233 @subsection Overview of Patchy
234
235 No programmatic skill is required to run Patchy; although knowledge of
236 compiling LilyPond and its documentation along with understanding how to
237 configure the @var{PATH} environment of your computer is required.  See
238 @ref{Working with source code}.
239
240 The script @code{lilypond-patchy-staging.py} checks for any new commits
241 in @code{remote/origin/staging}, makes sure that the new HEAD compiles
242 along with all the LilyPond documentation.  Then finally pushing to
243 @code{remote/origin/master}.  This script can be run and left
244 unattended, requiring no human intervention.
245
246 Patchy can also be configured to send emails after each successful (or
247 unsuccessful) operation.  This is not a requirement and is turned off
248 by default.
249
250 @c Need to explain in more detail how to set up Patchy for email but
251 @c as I don't use myself it I have no experience - JL
252
253
254 @node Patchy requirements
255 @subsection Patchy requirements
256
257 @itemize
258
259 @item
260 A full local copy of the source code.  See
261 @ref{Working with source code}.
262
263 @item
264 All the software needed for compiling LilyPond @emph{and} the
265 documentation.  Unlike testing patches, being able to build the full set
266 of LilyPond's documentation is required to be able to test & push new
267 commits.  See @ref{Compiling}.
268
269 @item
270 Commit access @emph{is} required to test and push new commits, but a
271 valid login to @uref{http://code.google.com/} is @emph{not}.  See
272 @ref{Commit access}.
273
274 @end itemize
275
276
277 @node Installing Patchy
278 @subsection Installing Patchy
279
280 The Patchy scripts are not part of the LilyPond code base, but can be
281 downloaded from @uref{https://github.com/gperciva/lilypond-extra/}.  The
282 scripts and related Python libraries are all located in the
283 @file{patches/} directory.
284
285 Alternatively, use @code{git clone};
286
287 @example
288 git clone https://github.com/gperciva/lilypond-extra/
289 @end example
290
291 This makes it simpler to update the scripts if any changes are ever made
292 to them.  Finally, add the location of the @file{patches/} directory to
293 your @var{PATH}.
294
295
296 @node Configuring Patchy
297 @subsection Configuring Patchy
298
299 @warning{It is recommended to create a new user on your computer
300 specifically to run the Patchy scripts as a security precaution and that
301 this user should not have any administrative privileges.  Also do not
302 set password protection for your ssh key else you will not be able to
303 run the scripts unattended.}
304
305 @enumerate
306
307 @item
308 Make sure the environment variables @var{LILYPOND_GIT} and
309 @var{LILYPOND_BUILD_DIR} are configured appropriately.  See
310 @ref{Environment variables}.
311
312 @item
313 Manually run either the @code{lilypond-patchy-staging.py} script and
314 when prompted:
315
316 @smallexample
317 Warning: using default config; please edit /home/joe/.lilypond-patchy-config
318 Are you sure that you want to continue with the default config? (y/[n])
319 @end smallexample
320
321 Answer @qq{@code{n}} and press enter.
322
323 The next time either of the scripts are run they will use the
324 @code{.lilypond-patchy-config} settings copied to your @code{$HOME}
325 directory.
326
327 @item
328 Manually edit the @file{.lilypond-patchy-config} file, located in your
329 @code{$HOME} directory to change any of the default settings.
330
331 @end enumerate
332
333 These include:
334
335 @itemize
336
337 @item
338 All @code{make} operations are run with;
339 @example
340 extra_make_options = -j3 CPU_COUNT=3
341 @end example
342
343 See @ref{Saving time with the -j option}
344
345 @item
346 A complete build of all the LilyPond documentation is @emph{not}
347 performed;
348 @example
349 patch_test_build_docs = no
350 @end example
351
352 @item
353 Each instance of either a patch test or commit test & push is logged in;
354 @example
355 auto_compile_results_dir = ~/lilypond-auto-compile-results/
356 @end example
357
358 @item
359 Both scripts will perform their build operations in;
360 @example
361 build_dir = /tmp/lilypond-autobuild/
362 @end example
363
364 @end itemize
365
366 The script creates a clones of @code{staging} and @code{master}
367 branches (prefixed with @code{test-}) with a third branch, called
368 @code{test-master-lock} used as a check to protect against two or more
369 instances of Patchy being run locally at the same time.
370
371
372 @node Running the script
373 @subsection Running the script
374
375 @code{lilypond-patchy-staging.py} is run @emph{without} any arguments.
376 It then checks to see if @code{remote/origin/staging} is
377 @qq{further ahead} than @code{remote/origin/master}.
378
379 @noindent
380 If there are no new differences between the two branches since the last
381 run check, the script will report something like this:
382
383 @smallexample
384 (UTC) Begin LilyPond compile, previous commit at 4726764cb591f622e7893407db0e7d42bcde90d9
385 Success:                No new commits in staging
386 @end smallexample
387
388 @noindent
389 If there are any differences between the two branches since the last
390 run check, (or if the script cannot for any reason, locate the last
391 instance of a commit that it checked) it will report something like
392 this:
393
394 @smallexample
395 (UTC) Begin LilyPond compile, previous commit at 4726764cb591f622e7893407db0e7d42bcde90d9
396 Merged staging, now at: 79e98a773b6570cfa28a15775a9dea3d3e54d6b5
397         Success:                ./autogen.sh --noconfigure
398         Success:                /tmp/lilypond-autobuild/configure --disable-optimising
399 ...
400 @end smallexample
401
402 and proceed with running @code{make}, @code{make test} and a
403 @code{make doc}.  Unlike @code{test-patches.py} if all the tests pass,
404 the script then pushes the changes to @code{remote/origin/master}.
405
406 @smallexample
407 ...
408 Success:                nice make clean
409 Success:                nice make -j7 CPU_COUNT=7
410 Success:                nice make test -j7 CPU_COUNT=7
411 Success:                nice make doc -j7 CPU_COUNT=7
412 To ssh://joe@@git.sv.gnu.org/srv/git/lilypond.git
413    79e98a7..4726764  test-staging -> master
414         Success:                pushed to master
415 @end smallexample
416
417 @warning{In the case where any of the @code{lilypond-patchy-staging.py}
418 tests fail, do not try to push your own fixes but report the failures to
419 the Developers List <lilypond-devel@@gnu.org> for advice.}
420
421
422 @node Automating Patchy
423 @subsection Automating Patchy
424
425 To run as a cron job make sure you have;
426
427 @example
428 [notification]
429 notify_non_action = no
430 @end example
431
432 in @file{$HOME/.lilypond-patchy-config} to avoid any unintentional email
433 flooding:
434
435 Assuming that Patchy run a user @qq{patchy}, create a file called
436 @file{$HOME/lilypond-patchy.cron}, adapting it as necessary (the
437 @code{/2} means @qq{run this every 2 hours}):
438
439 @smallexample
440 02 0-23/2 * * * /home/patchy/lilypond-extra/patches/lilypond-patchy-staging.py
441 @end smallexample
442
443 @warning{@code{cron} will not inherit environment variables so you must
444 re-define any variables inside @file{$HOME/lilypond-patchy.cron}.  For
445 instance, @var{LILYPOND_GIT} may need to be defined if
446 @var{git_repository_dir} is not correctly set in
447 @file{$HOME/.lilypond-patchy-config}.}
448
449 Finally, apply the cron job (you may need superuser privileges for
450 this):
451
452 @example
453 crontab -u patchy /home/patchy/lilypond-patchy.cron
454 @end example
455
456
457 @node Troubleshooting Patchy
458 @subsection Troubleshooting Patchy
459
460 The following is a list of the most common messages that the scripts
461 may report with explanations.
462
463 @smallexample
464 this Git revision has already been pushed by an operator other than this Patchy.
465 @end smallexample
466
467 @itemize
468
469 @item
470 Another, remote, machine has already tested and pushed the new commits
471 in staging.
472
473 @item
474 You may also see this if the auto-build files have been deleted and this
475 computer has previously already pushed the listed commit ID to
476 @code{master}.
477
478 @end itemize
479
480 @example
481 test-master-lock and PID entry exist but previous Patchy
482 run (PID xxxxx) died, resetting test-master-lock anyway.
483 @end example
484
485 @noindent
486 A previous attempt was unsuccessful for some reason and the scripts were
487 not able to tidy up after themselves (for example if you manually halt
488 the process by killing it or closing the terminal you may have been
489 running the script in).  The @code{test-master-lock} branch was
490 therefore not able to be deleted cleanly however, nothing needs to be
491 done the scripts will rebuild any tests it needs to.
492
493 @example
494 fatal: A branch named 'test-master-lock' already exists.
495 @end example
496
497 @itemize
498
499 @item
500 There is another instance of Patchy running on your computer that is
501 testing the same tracker issue.
502
503 @item
504 A previous test attempt was unsuccessful for some reason and the scripts
505 were not able to tidy up after themselves (for example if you manually
506 halt the testing process by killing it or closing the terminal you may
507 have been running the script in).  The @code{test-master-lock} branch
508 was therefore not able to be deleted cleanly, in this case you must
509 manually delete the @code{test-master-lock} branch in your
510 @code{$LILYPOND_GIT} directory.
511
512 @example
513 git branch -d test-master-lock
514 @end example
515
516 @noindent
517 It may be wise to also manually delete @code{test-master} and
518 @code{test-staging} too, just to be safe.
519
520 @end itemize
521
522 @example
523 *** FAILED STEP ***
524         merge from staging
525         Another instance (PID xxxxx) is already running.
526 @end example
527
528 @noindent
529 This occurs when trying to run @code{lilypond-patchy-staging.py} when
530 another instance of either script is already running locally.
531
532
533
534
535 @node Administrative mailing list
536 @section Administrative mailing list
537
538 A mailing list for administrative issues is maintained at
539 @code{lilypond-hackers@@gnu.org}.
540
541 This list is intended to be used for discussions that should be kept
542 private. Therefore, the archives are closed to the public.
543
544 Subscription to this list is limited to certain senior developers.
545
546 At the present time, the list is dormant.
547
548 Details about the criteria for membership, the types of discussion
549 to take place on the list, and other policies for the hackers list
550 will be finalized during the
551 @ref{Grand Organization Project (GOP)}.
552
553
554
555 @node Grand Organization Project (GOP)
556 @section Grand Organization Project (GOP)
557
558 GOP has two goals:
559
560 @itemize
561 @item
562 Clarify the various development tasks by writing down the policies
563 and techniques and/or simplifying the tasks directly.
564
565 @item
566 Get more people involved in development: specifically, find people
567 to do easy tasks to allow advanced developers to concentrate on
568 difficult tasks.
569
570 @end itemize
571
572 @menu
573 * Motivation::
574 * Ongoing jobs::
575 * Policy decisions::
576 * Policy decisions (finished)::
577 @end menu
578
579 @node Motivation
580 @subsection Motivation
581
582 Most readers are probably familiar with the LilyPond Grand
583 Documentation Project, which ran from Aug 2007 to Aug 2008. This
584 project involved over 20 people and resulted in an almost complete
585 rewrite of the documentation. Most of those contributors were
586 normal users who decided to volunteer their time and effort to
587 improve lilypond for everybody. By any measure, it was a great
588 success.
589
590 The Grand Organization Project aims to do the same thing with a
591 larger scope -- instead of focusing purely on documentation, the
592 project aims to improve all parts of LilyPond and its community.
593 Just as with GDP, the main goal is to encourage and train users to
594 become more involved.
595
596 If you have never contributed to an open-source project before --
597 especially if you use Windows or OSX and do not know how to
598 program or compile programs -- you may be wondering if there's
599 anything you can do. Rest assured that you @emph{can} help.
600
601 @subheading "Trickle-up" development
602
603 One of the reasons I'm organizing GOP is "trickle-up"
604 development.  The idea is this: doing easy tasks frees up advanced
605 developers to do harder tasks.  Don't ask "am I the @emph{best}
606 person for this job"; instead, ask "am I @emph{capable} of doing
607 this job, so that the current person can do stuff I @emph{can't}
608 do?".
609
610 For example, consider lilypond's poor handling of grace notes in
611 conjunction with clef and tempo changes. Fixing this will require
612 a fair amount of code rewriting, and would take an advanced
613 developer a few weeks to do. It's clearly beyond the scope of a
614 normal user, so we might as well sit back and do nothing, right?
615
616 No; we @emph{can} help, indirectly. Suppose that our normal user
617 starts answering more emails on lilypond-user. This in turn means
618 that documentation writers don't need to answer those emails, so
619 they can spend more time improving the docs. I've noticed that all
620 doc writers tackle harder and harder subjects, and when they start
621 writing docs on scheme programming and advanced tweaks, they start
622 contributing bug fixes to lilypond. Having people performing these
623 easy-to-moderate bug fixes frees up the advanced developers to
624 work on the really hard stuff... like rewriting the grace note
625 code.
626
627 Having 1 more normal user answering emails on lilypond-user won't
628 have a dramatic @q{trickle-up} effect all by itself, of course. But if
629 we had 8 users volunteering to answer emails, 6 users starting to
630 write documentation, and 2 users editing LSR... well, that would
631 free up a lot of current bug-fixing-capable contributors to focus
632 on that, and we could start to make a real dent in the number of
633 bugs in lilypond. Quite apart from the eased workload, having that
634 many new helpers will provide a great moral boost!
635
636 @node Ongoing jobs
637 @subsection Ongoing jobs
638
639 Although GOP is a short-term project, the main goal is to train
640 more people to handle ongoing jobs. The more people doing these
641 jobs, the lighter the work will be, and the more we can get done
642 with lilypond!
643
644 Also, it would be nice if we had at least one "replacement" /
645 "understudy" for each role -- too many tasks are only being done
646 by one person, so if that person goes on vacation or gets very
647 busy with other matters, work in that area grinds to a halt.
648
649 @subheading Jobs for normal users
650
651 @itemize
652 @item Consultant:
653 LilyPond is sometimes critized for not listening to users, but
654 whenever we ask for opinions about specific issues, we never get
655 enough feedback. This is somewhat aggravating.
656 We need a group of users to make a dedicated effort to test and
657 give feedback. If there's new documentation, read it. If there's
658 an experimental binary, download it and try compiling a score with
659 it. If we're trying to name a new command, think about it and give
660 serious suggestions.
661
662 @item lilypond-user support:
663 I think it would be nice if we had an official team of users
664 helping other users.
665
666 @item LilyPond Report:
667 Keeping a monthly newsletter running is a non-trivial task.  A lot
668 of work is needed to organize it; it would be great if we could
669 split up the work. One person could write the Snippet of the
670 Month, another person could do Quotes of the Month, another person
671 could do interviews, etc.
672
673 @item Documentation:
674 Although GDP (the Grand Documentation Project) did great work,
675 there's still many tasks remaining.
676
677 @item Translations:
678 Keeping the documentation translations is a monumental task; we
679 need all the help we can get!
680
681 @end itemize
682
683 @subheading Jobs for advanced users for developers
684
685 @itemize
686 @item Git help for writers:
687 We often receive reports of typos and minor text updates to the
688 documentation. It would be great if somebody could create
689 properly-formatted patches for these corrections.
690
691 Technical requirements: ability to run @ref{LilyDev}.
692
693 @item LSR editor:
694 LSR contains many useful examples of lilypond, but some snippets
695 are out of date and need updating. Other snippets need to be
696 advertized, and new snippets need to be sorted. We could use
697 another person to handle LSR.
698
699 Technical requirements: use of a web browser. LilyPond
700 requirements: you should be familiar with most of Notation
701 chapters 1 and 2 (or be willing to read the docs to find out).
702
703 @item Join the Frogs:
704 "Frogs" are a team of bug-fixers (because frogs eat bugs, and you
705 often find them in Ponds of Lilies) and new feature implementors.
706
707 Technical requirements: development environment (such as
708 @ref{LilyDev}), ability to read+write scheme and/or C++ code.
709
710 @end itemize
711
712
713 @node Policy decisions
714 @subsection Policy decisions
715
716 There are a number of policy decisions -- some of them fairly
717 important -- which we have been postponing for a few years.  We
718 are now discussing them slowly and thoroughly; agenda and exact
719 proposals are online:
720
721 @example
722 @uref{http://lilypond.org/~graham/gop/index.html}
723 @end example
724
725 Below is a list of policies which are not @qq{on the agenda} yet.
726
727 Note that the presence of an item on this list does @emph{not}
728 mean that everybody thinks that something needs to be done.
729 Inclusion in this simply means that one developer thinks that we
730 should discuss it.  We are not going to filter this list; if any
731 developer thinks we should discuss something, just add it to the
732 bottom of the list.  (the list is unsorted)
733
734 As GOP progresses, items from this list will be put on the agenda
735 and removed from this list.  I generally try to have one month's
736 discussion planned in advance, but I may shuffle things around to
737 respond to any immediate problems in the developer community.
738
739 There are some item(s) not displayed here; these are questions
740 that were posed to me privately, and I do not feel justified in
741 discussing them publicly without the consent of the person(s) that
742 brought them up. They will initially be discussed privately on the
743 lilypond-hackers mailing list -- but the first question will be
744 "do we absolutely need to do this privately", and if not, the
745 discussion will take place on lilypond-devel like the other items.
746
747 In most policy discussions in lilypond over the past few years,
748 the first half (or more) is wasted arguing on the basis of
749 incorrect or incomplete data; once all the relevant facts are
750 brought to light, the argument is generally resolved fairly
751 quickly.  In order to keep the GOP discussions focused, each topic
752 will be introduced with a collection of relevant facts and/or
753 proposals.  It is, of course, impossible to predict exactly which
754 facts will be relevant to the discussion -- but spending an hour
755 or two collecting information could still save hours of
756 discussion.
757
758 @warning{The estimated time required for "prep work", and the
759 following discussion, has been added to each item.  At the moment,
760 there is an estimated 30 hours of prep work and 140 hours of
761 discussion.}
762
763 @itemize
764 @item @strong{Patch reviewing}:
765 At the time of this writing, we have 23 (known) patches waiting
766 for review.  Some from main developers; some from new developers.
767 We desperately need more people helping with lilypond, but
768 ignoring patches is the best way to drive potential contributors
769 away.  This is not good.
770
771 (prep: 2 hours.  discuss: 10 hours)
772
773 @item @strong{Official links to other organizations?}:
774 There's something called the "software freedom conservancy", and
775 in general, there's a bunch of "umbrella organizations". Joining
776 some of these might give us more visibility, possibly leading to
777 more users, more developers, maybe even financial grants or use in
778 schools, etc.
779
780 (prep: 2 hours.  discuss: 5 hours)
781
782 @item @strong{Issue tracking with google code}:
783 We use the google issue tracker, but this means that we are
784 relying on a commercial entity for a large part of our
785 development. Would it be better (safer in the long run) to use the
786 savannah bug tracker?
787
788 (prep: 1 hour.  discuss: 5 hours)
789
790 @item @strong{Patch review tool}:
791 Reitveld is inconvenient in some respects: it requires a google
792 account, and there's no way to see all patches relating to
793 lilypond. Should we switch to something like gerritt?
794 @uref{http://code.google.com/p/lilypond/issues/detail?id=1184}
795
796 (prep: 5 hours.  discuss: 15 hours)
797
798 @item @strong{Clarity for sponsorships}:
799 We currently do not advertize bounties and sponsorships on the
800 webpage.  How much advertising do we want, and what type?
801 Should we change the "structure" / "framework" for bounties?
802
803 (prep: 2 hours.  discuss: 10 hours)
804
805 @item @strong{code readability}:
806 "Our aim when producing source code for Lilypond in whatever
807 language is that it should be totally comprehensible to a
808 relatively inexperienced developer at the second reading."
809
810 Rationale:
811 - aids maintainability of code base
812 - "second reading" so newer developers can look up unfamiliar
813   stuff
814 - will help to keep things simple, even if the code is doing
815   complex stuff discourages "secret squirrel" coding, e.g.  "how
816   much functionality can I squeeze into as few characters as
817   possible" "comments are for wimps"
818 - will aid not *discouraging* new developers to join the project
819
820 (prep: 2 hours.  discuss: 10 hours)
821
822 @item @strong{C++ vs. scheme}:
823 what should be in scheme, what should be in C++, what can/should
824 be ported from one to the other, etc.  Questions of
825 maintainability, speed (especially considering guile 2.0), and the
826 amount of current material in either form, are important.
827
828 (prep: 5 hours.  discuss: 15 hours)
829
830 @item @strong{always make an issue number for patches}:
831 there is a proposal that we should always have a google code issue
832 number for every patch.  This proposal is closely tied to our
833 choice of patch review tool; if we switch to a different tool (as
834 suggested in a different proposal), this proposal may become moot.
835
836 (prep: 1 hour.  discuss: 5 hours)
837
838 @item @strong{initalizer lists}:
839 shoudl we use initalizer lists for C++?  AFAIK they make no
840 difference for built-in types, but there's some weird case where
841 it's more efficient for objects, or something.
842
843 Probably not worth making this a weekly thing on its own, but we
844 can probably wrap it up with some other code-related questions.
845
846 (prep: 15 minutes.  discuss: 3 hours)
847
848 @end itemize
849
850 @node Policy decisions (finished)
851 @subsection Policy decisions (finished)
852
853 Here is a record the final decisions, along with links to the
854 discussions.
855
856 @menu
857 * GOP-PROP 1 - python formatting::
858 * GOP-PROP 2 - mentors and frogs::
859 * GOP-PROP 3 - C++ formatting::
860 * GOP-PROP 4 - lessons from 2.14::
861 * GOP-PROP 5 - build system output (not accepted)::
862 * GOP-PROP 6 - private mailing lists::
863 * GOP-PROP 7 - developers as resources::
864 * GOP-PROP 8 - issue priorities::
865 * GOP-PROP 9 - behavior of make doc::
866 @end menu
867
868 @node GOP-PROP 1 - python formatting
869 @subsubsection GOP-PROP 1 - python formatting
870
871 We will follow the indentation described in PEP-8.
872 @uref{http://www.python.org/dev/peps/pep-0008/}
873
874 @itemize
875 @item
876 use 4 spaces per indentation level
877
878 @item
879 never mix tabs and spaces (for indentation)
880
881 @item
882 Code indented with a mixture of tabs and spaces should be
883 converted to using spaces exclusively
884
885 Once this is done, we should add @code{python -tt} to the build
886 system to avoid such errors in the future.
887
888 @end itemize
889
890 There should be absolutely no tab characters for indentation in
891 any @code{.py} file in lilypond git.  All such files should be
892 converted to use spaces only.
893
894 @subsubheading Discussions
895
896 @smallexample
897 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-06/msg00060.html}
898 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-06/msg00084.html}
899 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-06/msg00310.html}
900 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-06/msg00574.html}
901 @end smallexample
902
903
904 @node GOP-PROP 2 - mentors and frogs
905 @subsubsection GOP-PROP 2 - mentors and frogs
906
907 Nothing much was decided.  The list of responsibilities was
908 slightly altered; see the new one in @ref{Mentors}.  We should
909 encourage more use of the Frogs mailing list.  There's a list of
910 contributor-mentor pairs in:
911
912 @smallexample
913 @uref{https://github.com/gperciva/lilypond-extra/blob/master/people/mentors.txt}
914 @end smallexample
915
916 That's pretty much it.
917
918 @subsubheading Discussions
919
920 @smallexample
921 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-06/msg00311.html}
922 @uref{}
923 @uref{}
924 @end smallexample
925
926
927 @node GOP-PROP 3 - C++ formatting
928 @subsubsection GOP-PROP 3 - C++ formatting
929
930 Speaking academically, C++ code style is a "solved problem". Let's
931 pick one of the existing solutions, and let a computer deal with
932 this.  Humans should not waste their time, energy, and creativity
933 manually adding tabs or spaces to source code.
934
935 We have modified @code{fixcc.py} to use astyle, along with extra
936 regex tweaks.
937
938 @itemize
939 @item
940 the final script will be run @strong{blindly} on the lilypond
941 source code.  We will accept whatever formatting the final version
942 of this script produces, with no manual tweaking.
943
944 @item
945 patches which have been run through this tool will not be rejected
946 for style reasons.  Any code formatting @qq{desires} which are not
947 enforced by @code{fixcc.py} will not be considered grounds for
948 rejecting a patch.
949
950 @item
951 for now, this style will not be enforced.  It is not cause for
952 concern if patches which do not follow the formatting done by
953 @code{fixcc.py} are pushed.  From time to time, Graham will run
954 the formatter on the entire code base, and commit the resulting
955 changes.
956
957 In a few months, we will tighten up this policy item (with some
958 sort of automatic processing), but that is outside the scope of
959 this policy item and is a matter for later discussion.
960
961 @item
962 after the proposal is accepted, we will leave some time for
963 existing patches to be accepted and pushed.  The script was
964 run on the source code on @strong{2011 August 01}.
965
966 @end itemize
967
968 @subheading GNU code
969
970 LilyPond is a GNU project, so it makes sense to follow the GNU
971 coding standards.  These standards state:
972
973 @quotation
974 We don’t think of these recommendations as requirements, because
975 it causes no problems for users if two different programs have
976 different formatting styles.
977
978 But whatever style you use, please use it consistently, since a
979 mixture of styles within one program tends to look ugly. If you
980 are contributing changes to an existing program, please follow the
981 style of that program. 
982 @end quotation
983
984 (@uref{http://www.gnu.org/prep/standards/html_node/Formatting.html})
985
986 With that in mind, we do not think that we must blindly follow the
987 formatting given by the currrent version of Emacs.
988
989 @subheading Implementation notes
990
991 We can avoid some of the style change pollution in git history by
992 ignoring whitespaces changes:
993
994 @example
995 git diff -w
996 @end example
997
998 @subsubheading Discussions
999
1000 @smallexample
1001 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-06/msg00526.html}
1002 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-06/msg00796.html}
1003 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-07/msg00200.html}
1004 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-07/msg00525.html}
1005 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-07/msg00751.html}
1006 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-07/msg00751.html}
1007 @end smallexample
1008
1009
1010 @node GOP-PROP 4 - lessons from 2.14
1011 @subsubsection GOP-PROP 4 - lessons from 2.14
1012
1013 @subheading History
1014
1015 A brief history of releases:
1016
1017 @multitable @columnfractions .2 .2 .3
1018 @headitem date (YYYY-MM-DD) @tab version @tab comment
1019 @item 2008-10-28 @tab 2.11.63 @tab nobody checking regtests
1020 @item 2008-11-17 @tab 2.11.64
1021 @item 2008-11-29 @tab 2.11.65
1022 @item 2008-12-23 @tab 2.12.0
1023 @item 2009-01-01 @tab @tab somewhere around here, Graham becomes
1024 officially release manager, but Han-Wen still builds the actual
1025 releases
1026 @item 2009-01-01 @tab 2.12.1
1027 @item 2009-01-25 @tab 2.12.2
1028 @item 2009-02-28 @tab 2.13.0
1029 @item 2009-06-01 @tab 2.13.1 @tab note jump in time!
1030 @item 2009-06-27 @tab 2.13.2 @tab first Graham release?
1031 @item 2009-07-03 @tab 2.13.3
1032 @item 2009-09-09 @tab @tab Graham arrives in Glasgow, gets a
1033 powerful desktop computer, and begins serious work on GUB (sending
1034 bug reports to Jan).  It takes approximately 100 hours until GUB
1035 is stable enough to make regular releases.
1036 @item 2009-09-24 @tab 2.13.4
1037 @item 2009-10-02 @tab 2.13.5
1038 @item 2009-10-22 @tab 2.13.6
1039 @item 2009-11-05 @tab 2.13.7
1040 @item ...
1041 @item 2010-01-13 @tab 2.12.3
1042 @item ...
1043 @item 2010-03-19 @tab 2.13.16 @tab Bug squad starts doing a few
1044 regtest comparisons, but IIRC the effort dies out after a few
1045 weeks (BLUE)
1046 @item ...
1047 @item 2010-08-04 @tab 2.13.29 @tab Phil starts checking regtests (BLUE)
1048 @item ...
1049 @item 2011-01-12 @tab 2.13.46 @tab release candidate 1 (GREEN)
1050 @item ...
1051 @item 2011-05-30 @tab 2.13.63 @tab release candidate 7 (GREEN)
1052 @item 2011-06-06 @tab 2.14.0
1053 @end multitable
1054
1055 @c A graphical display of bugs:
1056 @c 
1057 @c @image{bugs-2.13-visualization,png}
1058 @c @image{zoom-2.13-visualization,png}
1059
1060 @subheading Carl's analysis of the bugs
1061
1062 A @file{csv} spreadsheet is available.
1063
1064 @smallexample
1065 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-06/msg00852.html}
1066 @end smallexample
1067
1068 @example
1069 @uref{lilypond-issues-analysis.csv}
1070 @uref{lilypond-issues-analysis-trim-duplicates.csv}
1071 @end example
1072
1073 There 148 issues marked with Priority=Critical in the tracker.
1074
1075 I've done an analysis, and it looks to me like there was initially
1076 a backlog of critical issues that weren't fixed, and little work
1077 was being done to eliminate critical issues.
1078
1079 Somewhere about 2010-08-01, critical issues started to disappear,
1080 but occasional new ones appeared.
1081
1082 There were a couple of major changes that introduced unanticipated
1083 regressions (new spacing code, beam collision avoidance).  These
1084 produced more than the expected number of regressions.
1085
1086 It appears to me that we didn't really get serious about
1087 eliminating critical bugs until about 2010-06-15 or so.  After
1088 that point, the number of critical bugs more-or-less steadily
1089 decreased until we got to a release candidate.
1090
1091 Of particular interest, the first release candidate of 2.14 was
1092 released on 2011-01-12.  Over the next 10 days, about a dozen bugs
1093 were reported and fixed.  Release candidate 2 came out on
1094 2011-02-09.   No surge of bugs occurred with this release.
1095 Candidate 3 came out on 2011-03-13; we got 2 bugs per week.
1096 Candidate 4 came out on 2011-03-29; 2 new bugs.  Candidate 6 came
1097 out on 2011-04-07.  We got a couple of bugs per week.
1098
1099 @subheading Notes, commentary, and opinions
1100
1101 @example
1102 Han-Wen: Overall, I think this cycle took too long
1103 Mike: I agree
1104 Graham: +1
1105 @end example
1106
1107 @subsubheading Discussions
1108
1109 @smallexample
1110 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-06/msg00797.html}
1111 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-07/msg00364.html}
1112 @uref{}
1113 @end smallexample
1114
1115
1116 @node GOP-PROP 5 - build system output (not accepted)
1117 @subsubsection GOP-PROP 5 - build system output (not accepted)
1118
1119 This proposal was too broad; after a month of discussion, Graham
1120 withdrew the proposal.  Portions of it will be introduced in later
1121 proposals.
1122
1123 @subsubheading Discussions
1124
1125 @smallexample
1126 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-07/msg00320.html}
1127 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-07/msg00527.html}
1128 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-07/msg00753.html}
1129 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-07/msg01042.html}
1130 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-08/msg00116.html}
1131 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-08/msg00310.html}
1132 @end smallexample
1133
1134
1135 @node GOP-PROP 6 - private mailing lists
1136 @subsubsection GOP-PROP 6 - private mailing list
1137
1138 Potentially sensitive or private matters will be referred to
1139 Graham.  He will then decide who should discuss the matter on an
1140 ad-hoc basis, and forward or CC them on future emails.
1141
1142 For emphasis, the project administrators are Han-Wen, Jan, and
1143 Graham; those three will always be CC'd on any important
1144 discussions.
1145
1146 The lilypond-hackers mailing list will be removed.
1147
1148 @subheading History
1149
1150 There is some unhappy history about this idea in our development
1151 community:
1152
1153 @example
1154 @uref{http://lists.gnu.org/archive/html/lilypond-devel/2010-09/msg00178.html}
1155 @uref{http://web.archive.org/web/20110325004849/http://news.lilynet.net/spip.php?article121}
1156 @uref{http://lists.gnu.org/archive/html/lilypond-devel/2010-11/msg00076.html}
1157 @end example
1158
1159 @subheading Other projects
1160
1161 The idea of private mailing lists is hardly uncommon in
1162 open-source software.  For example,
1163
1164 @example
1165 @uref{http://lwn.net/Articles/394660/}   about debian-private
1166 @uref{http://subversion.apache.org/mailing-lists.html}  private@@
1167 @uref{http://www.freebsd.org/administration.html#t-core}
1168 @uref{http://foundation.gnome.org/legal/}   board members pledge
1169 to keep certain matters confidential
1170
1171 every security team of every GNU/Linux distribution and OS
1172 @end example
1173
1174 In fact, Karl Fogel's @qq{Producing Open Source Software}
1175 explicitly suggests a private mailing list for some circumstances:
1176
1177 @example
1178 [on granting commit/push access to a contributor]
1179
1180 But here is one of the rare instances where secrecy is
1181 appropriate. You can't have votes about potential committers
1182 posted to a public mailing list, because the candidate's feelings
1183 (and reputation) could be hurt.
1184
1185 @uref{http://producingoss.com/en/consensus-democracy.html#electorate}
1186 @end example
1187
1188 @subheading Board of governers, voting, etc?
1189
1190 Many projects have an official board of directors, or a list of
1191 @qq{core developers}, with set term limits and elections and
1192 stuff.
1193
1194 I don't think that we're that big.  I think we're still small
1195 enough, and there's enough trust and consensus decisions, that we
1196 can avoid that.  I would rather that we kept on going with
1197 trust+consensus for at least the next 2-3 years, and spent more
1198 time+energy on bug fixes and new features instead of
1199 administrative stuff.
1200
1201 Project administrators are Han-Wen, Jan, and Graham.
1202
1203 @subsubheading Discussions
1204
1205 @smallexample
1206 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-07/msg00783.html}
1207 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-07/msg01004.html}
1208 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-08/msg00117.html}
1209 @end smallexample
1210
1211
1212 @node GOP-PROP 7 - developers as resources
1213 @subsubsection GOP-PROP 7 - developers as resources
1214
1215 We shall treat developers (and contributors) as
1216 @strong{Independent volunteers}: each person does whatever they
1217 want, whenever they want.  We have busy careers and lives; we make
1218 no expectations of action from anybody (with the exception of the
1219 6 people in @qq{Meister} positions).
1220
1221 @subsubheading Discussions
1222
1223 @smallexample
1224 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-07/msg01092.html}
1225 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-08/msg00087.html}
1226 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-08/msg00497.html}
1227 @end smallexample
1228
1229
1230 @node GOP-PROP 8 - issue priorities
1231 @subsubsection GOP-PROP 8 - issue priorities
1232
1233 We will delete the @qq{priority} field of the issue tracker
1234 altogether.  The @qq{type} system will be tweaked.
1235
1236 Type-critical:
1237
1238 @itemize
1239
1240 @item
1241 a reproducible failure to build either @code{make} or @code{make
1242 doc}, from an empty build tree, in a first run, if
1243 @code{configure} does not report any errors.
1244
1245 @item
1246 any program behaviour which is @strong{unintentionally} worse than
1247 the previous stable version or the current development version.
1248 Developers may always use the @qq{this is intentional}, or even
1249 the @qq{this is an unavoidable effect of an improvement in another
1250 area}, reason to move this to a different type.
1251
1252 @item
1253 anything which stops contributors from helping out (e.g.
1254 lily-git.tcl not working, source tree(s) not being available,
1255 LilyDev being unable to compile git master, inaccurate
1256 instructions in the Contributor's Guide 2 Quick start).
1257
1258 To limit this scope of this point, we will assume that the
1259 contributor is using the latest LilyDev and has read the relevant
1260 part(s) of the Contributor's Guide.  Problems in other chapters of
1261 the CG are not sufficient to qualify as Type-Critical.
1262
1263 @end itemize
1264
1265 @subsubheading More new/changed types and labels
1266
1267 Unless otherwise specified, the current types and labels will
1268 continue to be used.  The new types introduced by this proposal
1269 are:
1270
1271 @itemize
1272
1273 @item
1274 Type-crash: any segfault, regardless of what the input file looks
1275 like or which options are given.  Disclaimer: this might not be
1276 possible in some cases, for example certain guile programs (we
1277 certainly can't predict if a piece of scheme will ever stop
1278 running, i.e. the halting problem), or if we rely on other
1279 programs (i.e. ghostscript).  If there are any such cases that
1280 make segfault-prevention impossible, we will document those
1281 exceptions (and the issue will remain as a "crash" instead of
1282 "documentation" until the warning has been pushed).
1283
1284 @item
1285 Type-maintainability: anything which makes it difficult for
1286 serious contributors to help out (e.g. difficult to find the
1287 relevant source tree(s), confusing policies, problems with
1288 automatic indentation tools, etc).
1289
1290 @item
1291 Type-ugly: replaces Type-collision, and it will include things
1292 like bad slurs in addition to actual collision.
1293
1294 @end itemize
1295
1296 A new label will be added:
1297
1298 @itemize
1299 @item
1300 (label) Needs_evidence: it is not clear what the correct output
1301 should look like.  We need scans, references, examples, etc.
1302
1303 @end itemize
1304
1305 @subheading Reminding users about stars
1306
1307 We can remind users that they can @qq{star} an issue to indicate
1308 that they care about it.  Since we resolved to treat developers as
1309 independent volunteers, there is no expectation that anybody will
1310 look at those stars, but if any developer want to organize their
1311 work schedule according to the stars, they are welcome to do so.
1312
1313 @subsubheading Discussions
1314
1315 @smallexample
1316 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-08/msg00019.html}
1317 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-08/msg00277.html}
1318 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-08/msg00413.html}
1319 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-08/msg00624.html}
1320 @uref{}
1321 @end smallexample
1322
1323
1324 @node GOP-PROP 9 - behavior of make doc
1325 @subsubsection GOP-PROP 9 - behavior of make doc
1326
1327 If there are build problems, then it should be easier to find out
1328 why it's failing.  This will be achieved with log files, as well
1329 as possibly including scripts which automatically display portions
1330 of those log files for a failing build.
1331
1332 We will also add targets for building a specific manual (for
1333 quick+easy checking of doc work), as well as for building all
1334 documentation in a specific language (either English or a
1335 translated language).
1336
1337 When you run @code{make doc},
1338
1339 @itemize
1340
1341 @item
1342 All output will be saved to various log files, with the exception
1343 of output directly from @code{make(1)}.
1344
1345 Note that @code{make(1)} refers to a specific executable file on
1346 unix computers, and is not a general term for the build system.
1347
1348 @item
1349 By default, no other output will be displayed on the console, with
1350 one exception: if a build fails, we might display some portion(s)
1351 of log file(s) which give useful clues about the reason for the
1352 failure.
1353
1354 The user may optionally request additional output to be printed;
1355 this is controlled with the @code{VERBOSE=x} flag.  In such cases,
1356 all output will still be written to log files; the console output
1357 is strictly additional to the log files.
1358
1359 @item
1360 Logfiles from calling lilypond (as part of lilypond-book) will go in
1361 the relevant
1362 @file{$LILYPOND_BUILD_DIR/out/lybook-db/12/lily-123456.log} file.  All
1363 other logfiles will go in the @file{$LILYPOND_BUILD_DIR/logfiles/}
1364 directory.
1365
1366 A single @code{make doc} will therefore result in hundreds of log
1367 files.  Log files produced from individual lilypond runs are not
1368 under our control; apart from that, I anticipate having one or two
1369 dozen log files.  As long as it is clear which log file is
1370 associated with which operation(s), I think this is entirely
1371 appropriate.  The precise implementation will be discussed for
1372 specific patches as they appear.
1373
1374 @item
1375 Both stderr and stdout will be saved in @code{*.log}.  The order
1376 of lines from these streams should be preserved.
1377
1378 @item
1379 There will be no additional @qq{progress messages} during the
1380 build process.  If you run @code{make --silent}, a non-failing
1381 build should print absolutely nothing to the screen.
1382
1383 @item
1384 Assuming that the loglevels patch is accepted, lilypond (inside
1385 lilypond-book) will be run with --loglevel=WARN.
1386 @uref{http://codereview.appspot.com/4822055/}
1387
1388 @item
1389 Ideally, a failing build should provide hints about the reason why
1390 it failed, or at least hints about which log file(s) to examine.
1391
1392 @end itemize
1393
1394 If this proposal is accepted, none of these policies will be
1395 assumed to apply to any other aspect of the build system.
1396 Policies for any other aspect of the build system will be
1397 discussed in separate proposals.
1398
1399 @subheading Don't cause more build problems
1400
1401 However, there is a danger in this approach, that vital error
1402 messages can also be lost, thus preventing the cause of the
1403 failure of a make being found.  We therefore need to be
1404 exceptionally careful to move cautiously, include plenty of tests,
1405 and give time for people to experiment/find problems in each stage
1406 before proceeding to the next stage.
1407
1408 This will be done by starting from individual lilypond calls
1409 within lilypond-book, and slowly moving to @qq{larger} targets of
1410 the build system -- after the individual lilypond calls are are
1411 producing the appropriate amount of output and this is saved in
1412 the right place and we can automatically isolate parts of a
1413 failing build, we will work on lilypond-book in general, and only
1414 then will we look at the build system itself.
1415
1416 @subheading Implementation notes
1417
1418 There is an existing make variable QUIET_BUILD, which
1419 alter the amount of output being displayed
1420 (@uref{
1421 http://lilypond.org/doc/v2.15/Documentation/contributor/useful-make-variables}
1422 ).  We are not planning on keeping this make variable.
1423
1424 The standard way for GNU packages to give more output is with a
1425 @code{V=x} option.  Presumably this is done by increasing
1426 @code{x}?  If we support this option, we should still write log
1427 files; we would simply print more of the info in those log files
1428 to screen.
1429
1430 The command @code{tee} may be useful to write to a file and
1431 display to stdout (in the case of VERBOSE).
1432
1433
1434 @subsubheading Discussions
1435
1436 @smallexample
1437 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-08/msg00378.html}
1438 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-08/msg00703.html}
1439 @end smallexample
1440
1441
1442 @ignore
1443 @n ode GOP-PROP 10 - scheme indentation
1444 @s ubsubsection GOP-PROP 10 - scheme indentation
1445
1446 still under discussion
1447
1448 @subsubheading Discussions
1449
1450 @smallexample
1451 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-08/msg00625.html}
1452 @uref{https://lists.gnu.org/archive/html/lilypond-devel/2011-08/msg01026.html}
1453 @c @uref{}
1454 @end smallexample
1455 @end ignore
1456
1457
1458
1459 @node Grand LilyPond Input Syntax Standardization (GLISS)
1460 @section Grand LilyPond Input Syntax Standardization (GLISS)
1461
1462 @subheading Summary
1463
1464 @itemize
1465 @item
1466 Start: sortly after 2.14 comes out, which is currently estimated
1467 to happen in January 2011.
1468
1469 @item
1470 Length: 6-12 months.  We're not going to rush this.
1471
1472 @item
1473 Goal: define an input which we commit to being
1474 machine-updateable for the forseeable future.  Any future patches
1475 which change the syntax in a non-convert-ly-able format will be
1476 rejected.  (subject to the limitations, below)
1477 Once this is finished, we will release lilypond 3.0.
1478
1479 @end itemize
1480
1481
1482 @subheading The Problem
1483
1484 One of the biggest complaints people have with lilypond -- other
1485 than silly thing like "there's no gui" -- is the changing syntax.
1486 Now, inventing a language or standards is difficult.  If you set
1487 it in stone too soon, you risk being stuck with decisions which
1488 may limit matters.  If you keep on updating the syntax,
1489 interaction with older data (and other programs!) becomes complex.
1490
1491 @subheading Scope and Limitations
1492
1493 @itemize
1494 @item
1495 tweaks will not be included.  Anything with \override, \set,
1496 \overrideProperty, \tweak, \revert, \unset... including even those
1497 command names themselves... is still fair game for NOT_SMART
1498 convert-ly updates.
1499
1500 @item
1501 other than that, everything is on the table.  Is it a problem to
1502 have the tagline inside \header?  What should the default behavior
1503 of \include be?
1504
1505 @item
1506 we need to get standards for command names.  This will help users
1507 remember them, and reduce the options for future names (and
1508 potential renamings later on).  \commandOn and \commandOff seem to
1509 work well (should we *always* have an Off command?), but what
1510 about the "command" part?  Should it be \nounVerbOn, or
1511 \verbNounOn ?  Or \verbNotesWithExtraInformationOn ?
1512
1513 @item
1514 we need standards for the location of commands.  Ligature
1515 brackets, I'm looking at you.  (non-postfix notation must die!)
1516
1517 @item
1518 this Grand Project doesn't affect whether we have a 2.16 or not.
1519 The main problem will be deciding what to do (with a bit of
1520 messiness anticipated for \tuplet); we should definitely release a
1521 2.16 before merging _any_ of these changes.
1522
1523 @item
1524 we obviously can't /guarantee/ that we'll /never/ make any
1525 non-convert-ly changes in the basic format.  But we *can*
1526 guarantee that such changes would force lilypond 4.0, and that we
1527 would only do so for overwhelmingly good reasons.
1528
1529 @end itemize
1530
1531 @subheading Workflow
1532
1533 @itemize
1534 @item
1535 We're going to have lots and lots of emails flying around.  The
1536 vast majority won't really fit into either -devel or -user, so
1537 we'll use a list devoted to syntax issues.
1538
1539 @item
1540 Once we have a serious proposal that gained general acceptance
1541 from the separate syntax mailing list, I'll bring it to -devel.
1542 We're not going to make any changes without discussing it on
1543 -devel, but if we're going to have huge threads about English
1544 grammar and silly ideas, and I don't want to clutter up -devel.
1545 Once whatever chaotic silliness on the syntax list is settled
1546 down, I'll bring the ideas to -devel.
1547
1548 @item
1549 as with GDP, I'll moderate the discussion.  Not as with mailist
1550 moderation, but rather by introducing issues at specific times.
1551 We don't want a free-for-all discussion of all parts of the syntax
1552 at once; nothing will get resolved.
1553
1554 @item
1555 Whenever possible, we'll decide on policies at the highest level
1556 of abstraction.  For example, consider \numericTimeSignature,
1557 \slurUp, \xNotesOn, \startTextSpan, and \verylongfermata.  One of
1558 them starts with the name of the notation first (slur).  One has
1559 an abbreviation (x instead of cross).  One has the verb at the end
1560 (On), another has it at the beginning (start).  The adjective can
1561 come at the beginning (numeric, x) or end (Up).  Most are in
1562 camelCase, but one isn't (verylongfermata).
1563
1564 @item
1565 Instead of arguing about each individual command, we'll decide on
1566 abstract questions.  Should each command begin the notation-noun,
1567 or the verb?  Should all commands be in camelCase, or should we
1568 make everything other than articulations in camelCase but make
1569 articulations all lower-case?  Are abbreviations allowed?
1570
1571 @item
1572 Once we've answered such fundamental questions, most of the syntax
1573 should fall into place pretty easily.  There might be a few odd
1574 questions left ("is it a span, or a spanner?"), but those can be
1575 settled fairly quickly.
1576
1577 @end itemize
1578
1579 @subheading Implementation
1580
1581 Nothing until the project is finished, then we declare the next
1582 stable release (2.16.0 or 2.18.0 ?) to be the final 2.x version,
1583 release it, then apply all the GLISS syntax changes and start
1584 testing a beta for 3.0 a week or two later.
1585
1586 @subheading Discussion
1587
1588 Don't respond to any of the specifics yet.  Yes, we all have our
1589 pet irritations (like "what's up with \paper and \layout?!").
1590 There will be plenty of time to discuss them once GLISS starts.
1591
1592 That said, we have a list of specific items that people really
1593 wanted to have written down.  See @ref{Specific GLISS issues}.
1594
1595 @menu
1596 * Specific GLISS issues::
1597 @end menu
1598
1599
1600 @node Specific GLISS issues
1601 @subsection Specific GLISS issues
1602
1603 @itemize
1604 @item
1605 add regtests for every piece of syntax (not one-command-per-file,
1606 but making a few files which, between them, use every single piece
1607 of syntax.)  This is a great test for convert-ly.
1608
1609 @item
1610 should GLISS cover suggested conventions?  (indentation,
1611 one-bar-per-line, etc -- the kind of stuff we list for the
1612 lilypond formatting in the docs ?)
1613
1614 @item
1615 how much (if any) syntactic sugar should we add?  i.e.
1616 @example
1617   \instrumentName #'foo
1618 % instead of
1619   \set Staff.instrumentName
1620 @end example
1621 ?  Carl: maybe yes, Neil: no.  (for example, it fails for
1622 pianostaff)
1623
1624 @item
1625 the values that are used as arguments to common used overrides.
1626 Sometimes they are a symbol (e.g. #'around), sometimes a
1627 predefined variable referring to a Scheme value or object (e.g.
1628 #LEFT, #all-visible ). The main trouble is that for novice users
1629 it is not clear when there should be an apostrophe and when not.
1630
1631 @item
1632 When do we need -\command and when is it just \command ?
1633
1634
1635 @item
1636 Command-line options to the lilypond binary.  -dfoo counts as a
1637 tweak; we won't be trying to pin those down.
1638
1639 @item
1640 @verbatim
1641 \layout {
1642   \context { \Score
1643 % vs.
1644 \layout {
1645   \context {
1646     \Score
1647 @end verbatim
1648
1649 @item
1650 If would be pedagogically simpler to realize this difference if
1651 the syntax was separate if you define a context from scratch (as
1652 is the case with \RemoveEmptyStaffContext) or if it's defined by
1653 adding onto an existing context. For example, a syntax like
1654
1655 @verbatim
1656 \context{
1657  % Copy the current settings of the Staff context:
1658  \use Staff
1659  % do whatever additional settings
1660 }
1661 %%% could be used to distinguish from
1662 \context{
1663  % Take settings from a variable:
1664  \Variable
1665  % do whatever additional settings
1666 }
1667
1668 %%% and
1669
1670 \context{
1671  % Start from scratch:
1672  \type ...
1673  \name ...
1674  \consists ...
1675  ...
1676 }
1677 @end verbatim
1678
1679 @item
1680 Capitalization of identifiers: \VoiceOne ?
1681
1682 @item
1683 @verbatim
1684 %%% Allow
1685 { music expression } * 4
1686 %%% instead of
1687 \repeat unfold 4 { music expression }
1688 @end verbatim
1689
1690 ?  patch here:
1691 @smallexample
1692 @uref{http://lists.gnu.org/archive/html/lilypond-devel/2010-04/msg00467.html}
1693 @end smallexample
1694
1695 @item
1696 Personally, I find it easier to understand when there's a repeated
1697 8 in the half-bar position; it's much easier to see that you have
1698 two groups of 4:
1699
1700 @example
1701 c8 c c c c8 c c c
1702 %%% instead of one group of eight:
1703 c8 c c c c c c c
1704 @end example
1705
1706 @item
1707 trivially simple bar-lines:
1708
1709 c1 | c1 |
1710
1711 encourage, allow, or discourage, or disallow?
1712
1713 @item
1714 indentation of \\ inside a @{@} construct.
1715
1716
1717 @item
1718 barline checks at the end of line should be preceded by at least 2
1719 spaces?  barline checks should line up if possible (i.e.  if you
1720 can use less than 4, 8, X empty spaces before a barline check to
1721 make them line up?)
1722
1723 @item
1724 Why doesn't \transpose respect \relative mode?
1725
1726
1727 @item
1728 on \score vs. \new Score
1729
1730 But in the light of a consistent syntax and semantic, I see no
1731 reason (from the users POV) to disallow it.  After all, the real
1732 top-level context is a \book @{@}, isn't it, and I don't see a point
1733 in disallowing a \new Score construct just like \new Staff.
1734
1735 From a syntactical POV, I see the following pros for \new Score:
1736 - You can write \with @{ ... @} for every other context but \Score,
1737 which (for consistency) should also work with \new Score.
1738 - When there's a \new Foo Bar, there's also a \context Foo Bar,
1739   which makes the same as a parallel instantiation of all Bar's.
1740 - [Quoting Rune from
1741 @uref{http://www.mail-archive.com/lilypond-devel@@gnu.org/msg14713.html}
1742   "I know that the \score-statement is a syntactical construct,
1743 but I think it would be nice to hide this fact from the users.  I
1744 think we could make the use of score-block much more intuitive if
1745 changing the syntax to \new \Score and adding an implicit
1746 sequential-statement to the score."
1747
1748
1749 @item
1750 Discussion on
1751 @uref{http://code.google.com/p/lilypond/issues/detail?id=1322}
1752 about \new vs. \context.
1753
1754
1755 @item
1756 Let users add their own items to the parser?  comment 11 on:
1757 @uref{http://code.google.com/p/lilypond/issues/detail?id=1322}
1758
1759 @item
1760 should engravers be pluralized (note_heads_engraver) or not
1761 (note_head_engraver) ?
1762
1763 @item
1764 should we allow numbers in identifier names?  Issue:
1765 @uref{http://code.google.com/p/lilypond/issues/detail?id=1670}
1766
1767 @item
1768 should we officially allow accented characters?  in general, how
1769 do we feel about utf-8 stuff?
1770
1771 @item
1772 for the sake of completeness/simplicity, what about *disallowing*
1773 the "one-note" form of a music expression?  i.e. only allowing
1774 stuff like
1775 @verbatim
1776   \transpose c d { e1 }
1777   \transpose c d << e1 >>
1778 @end verbatim
1779
1780 and never allowing
1781 @verbatim
1782   \transpose c d e1
1783 @end verbatim
1784
1785 @item
1786 What should be the officially encouraged way of writing music for
1787 transposing instruments? Maybe it should be simplified?
1788 See http://lists.gnu.org/archive/html/lilypond-user/2011-07/msg00130.html
1789
1790 @end itemize
1791
1792
1793 @node Unsorted policies
1794 @section Unsorted policies
1795
1796 @subsubheading Language-specific mailing lists
1797
1798 A translator can ask for an official lilypond-xy mailing list once
1799 they've finished all @qq{priority 1} translation items.
1800
1801 @subsubheading Performing yearly copyright update (@qq{grand-replace})
1802
1803 At the start of each year, copyright notices for all source files
1804 should be refreshed by running the following command from the top of
1805 the source tree:
1806
1807 @example
1808 make grand-replace
1809 @end example
1810
1811 Internally, this invokes the script @file{scripts/build/grand-replace.py},
1812 which performs a regular expression substitution for old-year -> new-year
1813 wherever it finds a valid copyright notice.
1814
1815 Note that snapshots of third party files such as @file{texinfo.tex} should
1816 not be included in the automatic update; @file{grand-replace.py} ignores these
1817 files if they are listed in the variable @code{copied_files}.
1818
1819
1820 @subsubheading Push git access
1821
1822 Git access is given out when a contributor has a significant
1823 record of patches being accepted without problems.  If existing
1824 developers are tired of pushing patches for a contributor, we'll
1825 discuss giving them push access.  Unsolicited requests from
1826 contributors for access will almost always be turned down.
1827