summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Polesky <markpolesky@yahoo.com>2014-06-23 01:28:24 -0700
committerMark Polesky <markpolesky@yahoo.com>2014-06-23 01:28:24 -0700
commit8cd87804592a2815e35cbdaff2cd98e5e3dc59ce (patch)
treea9ce5e2e5b8042262f226adbd19c38d1d40c8301
parent3a08af9dc9dcd1c3e93ba0022352772dc055d1f8 (diff)
Add `make-countdown-announcement.sh'.
-rw-r--r--Documentation/contributor/issues.itexi42
-rwxr-xr-xscripts/auxiliar/make-countdown-announcement.sh259
2 files changed, 272 insertions, 29 deletions
diff --git a/Documentation/contributor/issues.itexi b/Documentation/contributor/issues.itexi
index d534b073e4..8fe73428ee 100644
--- a/Documentation/contributor/issues.itexi
+++ b/Documentation/contributor/issues.itexi
@@ -885,38 +885,22 @@ PATCH: Countdown to 20130113
The text of the email sets the deadline for this countdown batch. At
present, batches are done on Tuesday, Thursday and Sunday evenings.
-The body of the email lists the patches grouped by patch type, and for
-each patch, shows the tracker issue number and title, with a link to
-the Rietveld item. Copying the information from the website and pasting
-into the email gives a hyperlinked version of the information.
-
-@smallexample
-
-For 20:00 MST Tuesday January 8:
-
-Crash:
- Issue 2990: \RemoveEmptyStaves in StaffGroup context crashes - R 7069044
-
-Defect:
- Issue 677: \score markup confuses paper settings - R 7028045
- Issue 3050: displayLilyMusic produced erroneous code for rightHandFinger arguments - R 7032045
-
-Documentation:
- Issue 2952: Upgrade documentation of \once - R 7031053
- Issue 3044: Dual license the files under mf/ using OFL. - R 6970046
- Issue 3084: [DOC]Add "Known issue" in NR 1.2.1 about Scaling durations with rational numbers - R 7071044
-
-Enhancement:
- Issue 3061: make \articulate handle colon-type tremolos - R 7033045
- Issue 3082: Patch: Let ChordNameVoice use the same performers as Voice - R 7054043
- Issue 3083: Patch: Chord change detection in fretboards should depend on placements, not notes - R 7062043
- Issue 2983: assertion failed with \glissando - R 6625078
+To create the countdown announcement, use the
+@code{make-countdown-announcement.sh} script, which takes the
+deadline date, and optionally your name. Follow the instructions
+provided:
+@example
+cd $LILYPOND_BUILD_DIR
+../scripts/auxiliar/make-countdown-announcement.sh "Jan 1, 2001" James
+@end example
-Cheers,
-Colin
+The script produces an announcement that is easily readable in all
+email clients. Also, whenever a new contributor submits a patch,
+you will be prompted to add the new username and author name to
+the script itself, and then commit those changes to the main git
+repository.
-@end smallexample
@item
On the scheduled countdown day, the Patch Meister reviews the
diff --git a/scripts/auxiliar/make-countdown-announcement.sh b/scripts/auxiliar/make-countdown-announcement.sh
new file mode 100755
index 0000000000..757f5de6f6
--- /dev/null
+++ b/scripts/auxiliar/make-countdown-announcement.sh
@@ -0,0 +1,259 @@
+#!/bin/bash
+
+# convert a Google code CSV file into a countdown announcement
+#
+# USAGE:
+# make-countdown-announcement.sh NEXT_DEADLINE_DATE [PATCH-MEISTER]
+# OR
+# make-countdown-announcement.sh NEXT_DEADLINE_DATE [PATCH-MEISTER] > OUTPUT-FILE
+#
+# EXAMPLES:
+# make-countdown-announcement.sh "Jan 1, 2001" "John Doe"
+# make-countdown-announcement.sh "Jan 1, 2001" John
+# make-countdown-announcement.sh "Jan 1, 2001" > countdown.txt
+
+
+CSV_FILE=lilypond-issues.csv # comma-separated values
+TSV_FILE=lilypond-issues.tsv # tab-separated values
+URL_BASE="http://code.google.com/p/lilypond/issues"
+QUERY_STR="q=Patch%3Apush%2Ccountdown%2Creview%2Cnew%2Cwaiting&colspec=Patch%20Owner%20ID%20Summary&sort=patch"
+DEADLINE=$1
+PATCH_MEISTER=${2:-"The Patch Mister"}
+MAILMAP='
+"adam.spiers","Adam Spiers"
+"aleksandr.andreev","Aleksandr Andreev"
+"benko.pal","Benkő Pál"
+"bordage.bertrand","Bertrand Bordage"
+"brownian.box","Dmytro O. Redchuk"
+"Carl.D.Sorensen","Carl Sorensen"
+"carlopeterson","Carl Peterson"
+"colinghall","Colin Hall"
+"ColinPKCampbell","Colin Campbell"
+"d8valily","Mark Mathias"
+"dak@gnu.org","David Kastrup"
+"david.nalesnik","David Nalesnik"
+"dschudy","Devon Schudy"
+"Eluzew","Eluze W"
+"erlenda","Erlend Aasland"
+"fedelogy","Federico Bruni"
+"frederic.bron.1995@polytechnique.org","Frédéric Bron"
+"graham@percival-music.ca","Graham Percival"
+"hanwenn","Han-Wen Nienhuys"
+"hjunes","Heikki Junes"
+"ianhulin44","Ian Hulin"
+"idragosani","Brett McCoy"
+"jameselihubailey","James E. Bailey"
+"janek.lilypond","Janek Warchoł"
+"jan.nieuwenhuizen","Jan Nieuwenhuizen"
+"joeneeman","Joe Neeman"
+"john.mandereau","John Mandereau"
+"joseph.wakeling","Joseph Wakeling"
+"julien.rioux","Julien Rioux"
+"kieren@alumni.rice.edu","Kieren MacMillan"
+"k-ohara5a5a@oco.net","Keith OHara"
+"lemzwerg","Werner Lemberg"
+"lilyliska","Urs Liska"
+"lilypond.patchy.graham","Graham Percival"
+"mandolaerik","Erik Sandberg"
+"marc@hohlart.de","Marc Hohl"
+"marek@gregoriana.sk","Marek Klein"
+"markpolesky","Mark Polesky"
+"milimetr88","Łukasz Czerwiński"
+"mtsolo","Mike Solomon"
+"neziap","Janek Warchoł"
+"nicolas.sceaux","Nicolas Sceaux"
+"n.puttock","Neil Puttock"
+"paconet.org","Francisco Vila"
+"PhilEHolmes","Phil Holmes"
+"pkx166h","James Lowe"
+"plroskin","Pavel Roskin"
+"pnorcks","Patrick McCarty"
+"RalphBugList","Ralph Palmer"
+"reinhold.kainhofer","Reinhold Kainhofer"
+"rzedeler","Rune Zedeler"
+"schilke.60","Derek Klinge"
+"shingarov","Boris Shingarov"
+"tdanielsmusic","Trevor Daniels"
+"thomasmorley65","Thomas Morley"
+"v.villenave","Valentin Villenave"
+'
+
+
+usage() {
+ cat << EOF >&2
+USAGE:
+ `basename $0` NEXT_DEADLINE_DATE [PATCH-MEISTER]
+ OR
+ `basename $0` NEXT_DEADLINE_DATE [PATCH-MEISTER] > OUTPUT-FILE
+
+EXAMPLES:
+ `basename $0` "Jan 1, 2001" "John Doe"
+ `basename $0` "Jan 1, 2001" John
+ `basename $0` "Jan 1, 2001" > countdown.txt
+EOF
+ exit 1
+}
+
+
+# display USAGE
+case $# in
+ 1|2) case $1 in
+ -h|--help) usage ;;
+ *) ;;
+ esac ;;
+ *) usage ;;
+esac
+
+
+# clean up in case of a previous interrupt
+remove-if-exists() {
+ if [ -e $1 ]; then rm $1; fi
+}
+remove-if-exists push.tmp
+remove-if-exists countdown.tmp
+remove-if-exists review.tmp
+remove-if-exists new.tmp
+remove-if-exists waiting.tmp
+remove-if-exists $TSV_FILE
+
+
+# show initial instructions
+read -p "First, in your web browser, make sure you're logged in to:
+
+ $URL_BASE/list
+
+Then save the following link as a file called \"$CSV_FILE\"
+(save it to this directory -- $PWD/):
+
+ $URL_BASE/csv?$QUERY_STR
+
+Then press enter"
+
+
+if [ ! -e $CSV_FILE ]; then
+ echo -e "\nError: can't find \`$CSV_FILE': No such file or directory" >&2
+ exit 1
+fi
+
+
+# If the user wasn't logged in when downloading $CSV_FILE, the emails will
+# appear truncated, e.g. "abc...@gmail.com", and won't be properly replaced by
+# the author names later on. This code block complains if the string "...@" is
+# found anywhere in the email field.
+if [ "`cut -d, -f2 $CSV_FILE | grep -o '\.\.\.@'`" ]; then
+ read -p "
+It looks like you were not logged in to Google code when you downloaded
+$CSV_FILE. Continue anyway (y/n)? "
+ while :
+ do
+ case "$REPLY" in
+ y) break ;;
+ n) exit 1 ;;
+ *) read -p "Enter \`y' to continue; \`n' to quit and try again: "
+ esac
+ done
+fi
+
+
+# change the quoted, comma-separated file
+# into an unquoted, tab-separated file
+# and keep only the first 4 fields: Patch,Owner,ID,Summary
+sed '{
+1d
+/^$/d
+s/^"//
+s/","/\t/g
+s/",*$//
+s/""/"/g
+}' $CSV_FILE | cut -sf1-4 > $TSV_FILE
+
+
+EMAILS_USED=`awk -F"\t" '{ print $2 }' $TSV_FILE | sort --unique`
+KNOWN_EMAILS=`
+IFS=$'\n'
+for i in $MAILMAP; do
+ echo "$i" | sed 's/^"\(.*\)",".*/\1/'
+done`
+UNKNOWN_EMAILS=`comm -23 <(echo "$EMAILS_USED") <(echo "$KNOWN_EMAILS")`
+
+
+# Unknown emails/usernames usually mean new contributors.
+# If any are found, the user is prompted to add the new
+# authors' names to the MAILMAP list above.
+if [ "$UNKNOWN_EMAILS" ]; then
+ COUNT=`wc --lines <(echo "$UNKNOWN_EMAILS") | sed 's/ .*//'`
+ if [ $COUNT -eq 1 ]; then
+ echo -e "\nError: The following email/username needs to be associated with a name:" >&2
+ echo "$UNKNOWN_EMAILS" | sed 's/^/ /' >&2
+ echo -e "Please add it to the MAILMAP list in\n $0" >&2
+ else
+ echo -e "\nError: The following emails/usernames need to be associated with names:" >&2
+ echo "$UNKNOWN_EMAILS" | sed 's/^/ /' >&2
+ echo -e "Please add them to the MAILMAP list in\n $0" >&2
+ fi
+ echo "using the following form:" >&2
+ echo "$UNKNOWN_EMAILS" | sed 's/.*/ "&","author name"/' >&2
+ echo "and commit your changes to the main git repository." >&2
+ remove-if-exists $TSV_FILE
+ exit 1
+fi
+
+
+EMAIL_REPLACEMENTS=`
+IFS=$'\n'
+for i in $MAILMAP; do
+ echo "$i" | sed 's/^"\(.*\)","\(.*\)"$/s\/\1\/\2\/g/'
+done`
+
+
+# replace emails/usernames with author names
+# and separate the issues by patch type
+sed -n "{
+$EMAIL_REPLACEMENTS
+/^push/w push.tmp
+/^countdown/w countdown.tmp
+/^review/w review.tmp
+/^new/w new.tmp
+/^waiting/w waiting.tmp
+}" $TSV_FILE
+
+
+# clean up; $TSV_FILE is no longer needed
+remove-if-exists $TSV_FILE
+
+
+format-entry() {
+ TYPE=$1
+ FILE="$1.tmp"
+ if [ -s $FILE ]; then
+ echo -e "$TYPE:\n" | tr 'a-z' 'A-Z'
+ awk -v UB=$URL_BASE -F"\t" \
+ '{ printf("%s: %s\n%s/detail?id=%d\n\n"), $2, $4, UB, $3 }' $FILE
+ echo -e "____________________\n\n"
+ fi
+ remove-if-exists $FILE
+}
+
+echo >&2
+
+
+# display the countdown announcement
+echo "Hello,
+
+Here is the current patch countdown list.
+The next countdown will be on $DEADLINE.
+
+You can always view the most current countdown list here:
+$URL_BASE/list?$QUERY_STR
+
+____________________
+
+"
+
+format-entry push
+format-entry countdown
+format-entry review
+format-entry new
+format-entry waiting
+
+echo -e "Thank you,\n$PATCH_MEISTER"