1
0
Эх сурвалжийг харах

authors: Clean up AUTHORS and NICKS files

Git didn't really understand the multiple email addresses in the NICKS
file the same way I expected it to, and this fixes that. It also makes
AUTHORS the "master" file that everything else depends on, so it
now includes all of name, nickname and email addresses.

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3243
Jakob Borg 9 жил өмнө
parent
commit
d67c0a1eda
4 өөрчлөгдсөн 303 нэмэгдсэн , 193 устгасан
  1. 93 88
      AUTHORS
  2. 109 86
      NICKS
  3. 1 1
      gui/default/syncthing/core/aboutModalView.html
  4. 100 18
      script/authors.go

+ 93 - 88
AUTHORS

@@ -1,90 +1,95 @@
 # This is the official list of Syncthing authors for copyright purposes.
+# The format is:
+#
+#    Name Name Name (nickname) <[email protected]> <[email protected]>
+#
+# The NICKS list is auto generated from this file.
 
-Aaron Bieber <[email protected]>
-Adam Piggott <[email protected]> <[email protected]>
-Alessandro G. <[email protected]>
-Alexander Graf <[email protected]>
-Anderson Mesquita <[email protected]>
-Andrew Dunham <[email protected]>
-Antony Male <[email protected]>
-Arthur Axel fREW Schmidt <[email protected]> <frioux@gmail.com>
-Alexandre Viau <[email protected]> <[email protected]>
-Audrius Butkevicius <[email protected]>
-Bart De Vries <[email protected]>
-Ben Curthoys <[email protected]>
-Ben Schulz <[email protected]> <[email protected]>
-Ben Sidhom <[email protected]>
-Benny Ng <[email protected]>
-Brandon Philips <[email protected]>
-Brendan Long <[email protected]>
-Brian R. Becker <[email protected]>
-Caleb Callaway <[email protected]>
-Carsten Hagemann <[email protected]>
-Cathryne Linenweaver <[email protected]> <[email protected]>
-Chris Howie <[email protected]>
-Chris Joel <[email protected]>
-Colin Kennedy <[email protected]>
-Daniel Bergmann <[email protected]> <[email protected]>
-Daniel Harte <[email protected]> <[email protected]> <[email protected]>
-Daniel Martí <[email protected]>
-David Rimmer <[email protected]>
-Denis A. <[email protected]>
-Dennis Wilson <[email protected]>
-Dominik Heidler <[email protected]>
-Elias Jarlebring <[email protected]>
-Emil Hessman <[email protected]>
-Erik Meitner <[email protected]>
-Federico Castagnini <[email protected]>
-Felix Ableitner <[email protected]>
-Felix Unterpaintner <[email protected]>
-Francois-Xavier Gsell <[email protected]>
-Frank Isemann <[email protected]>
-Gilli Sigurdsson <[email protected]>
-Jaakko Hannikainen <[email protected]>
-Jacek Szafarkiewicz <[email protected]>
-Jake Peterson <[email protected]>
-Jakob Borg <[email protected]>
-James Patterson <[email protected]> <[email protected]>
-Jaroslav Malec <[email protected]>
-Jens Diemer <[email protected]> <[email protected]>
-Jochen Voss <[email protected]>
-Johan Vromans <[email protected]>
-Karol Różycki <[email protected]>
-Kelong Cong <[email protected]> <[email protected]>
-Ken'ichi Kamada <[email protected]>
-Kevin Allen <[email protected]>
-Lars K.W. Gohlke <[email protected]>
-Laurent Etiemble <[email protected]> <[email protected]>
-Lode Hoste <[email protected]>
-Lord Landon Agahnim <[email protected]>
-Marc Laporte <[email protected]> <[email protected]>
-Marc Pujol <[email protected]>
-Marcin Dziadus <[email protected]>
-Mateusz Naściszewski <[email protected]>
-Matt Burke <[email protected]> <[email protected]>
-Max Schulze <[email protected]> <[email protected]>
-Michael Jephcote <[email protected]> <[email protected]>
-Michael Ploujnikov <[email protected]>
-Michael Tilli <[email protected]>
-Nate Morrison <[email protected]>
-Pascal Jungblut <[email protected]> <[email protected]>
-Peter Hoeg <[email protected]>
-Philippe Schommers <[email protected]>
-Phill Luby <[email protected]>
-Piotr Bejda <[email protected]>
-Ryan Sullivan <[email protected]>
-Scott Klupfel <[email protected]>
-Sergey Mishin <[email protected]>
-Stefan Kuntz <[email protected]> <[email protected]>
-Stefan Tatschner <[email protected]> <[email protected]>
-Tim Abell <[email protected]>
-Tobias Nygren <[email protected]>
-Tomas Cerveny <[email protected]>
-Tully Robinson <[email protected]>
-Tyler Brazier <[email protected]>
-Veeti Paananen <[email protected]>
-Victor Buinsky <[email protected]>
-Vil Brekin <[email protected]>
-William A. Kennington III <[email protected]>
-Wulf Weich <[email protected]> <[email protected]>
-Yannic A. <[email protected]> <[email protected]>
+Aaron Bieber (qbit) <[email protected]>
+Adam Piggott (simplypeachy) <[email protected]> <[email protected]>
+Alessandro G. (alessandro.g89) <[email protected]>
+Alexander Graf (alex2108) <[email protected]>
+Alexandre Viau (aviau) <[email protected]> <[email protected]>
+Anderson Mesquita (andersonvom) <[email protected]>
+Andrew Dunham (andrew-d) <[email protected]>
+Antony Male (canton7) <antony.male@gmail.com>
+Arthur Axel fREW Schmidt (frioux) <[email protected]> <[email protected]>
+Audrius Butkevicius (AudriusButkevicius) <[email protected]>
+Bart De Vries (mogwa1) <[email protected]>
+Ben Curthoys (bencurthoys) <[email protected]>
+Ben Schulz (uok) <[email protected]> <[email protected]>
+Ben Sidhom (bsidhom) <[email protected]>
+Benny Ng (tpng) <[email protected]>
+Brandon Philips (philips) <[email protected]>
+Brendan Long (brendanlong) <[email protected]>
+Brian R. Becker (brbecker) <[email protected]>
+Caleb Callaway (cqcallaw) <[email protected]>
+Carsten Hagemann (Moter8) <[email protected]>
+Cathryne Linenweaver (Cathryne) <[email protected]> <[email protected]>
+Chris Howie (cdhowie) <[email protected]>
+Chris Joel (cdata) <[email protected]>
+Colin Kennedy (moshen) <[email protected]>
+Daniel Bergmann (brgmnn) <[email protected]> <[email protected]>
+Daniel Harte (norgeous) <[email protected]> <[email protected]> <[email protected]>
+Daniel Martí (mvdan) <[email protected]>
+David Rimmer (dinosore) <[email protected]>
+Denis A. (dva) <[email protected]>
+Dennis Wilson (snnd) <[email protected]>
+Dominik Heidler (asdil12) <[email protected]>
+Elias Jarlebring (jarlebring) <[email protected]>
+Emil Hessman (ceh) <[email protected]>
+Erik Meitner (WSGCSysadmin) <[email protected]>
+Federico Castagnini (facastagnini) <[email protected]>
+Felix Ableitner (Nutomic) <[email protected]>
+Felix Unterpaintner (bigbear2nd) <[email protected]>
+Francois-Xavier Gsell (zukoo) <[email protected]>
+Frank Isemann (fti7) <[email protected]>
+Gilli Sigurdsson (gillisig) <[email protected]>
+Jaakko Hannikainen (jgke) <[email protected]>
+Jacek Szafarkiewicz (hadogenes) <[email protected]>
+Jake Peterson (acogdev) <[email protected]>
+Jakob Borg (calmh) <[email protected]>
+James Patterson (jpjp) <[email protected]> <[email protected]>
+Jaroslav Malec (dzarda) <[email protected]>
+Jens Diemer (jedie) <[email protected]> <[email protected]>
+Jochen Voss (seehuhn) <[email protected]>
+Johan Vromans (sciurius) <[email protected]>
+Karol Różycki (krozycki) <[email protected]>
+Kelong Cong (kc1212) <[email protected]> <[email protected]>
+Ken'ichi Kamada (kamadak) <[email protected]>
+Kevin Allen (ironmig) <[email protected]>
+Lars K.W. Gohlke (lkwg82) <[email protected]>
+Laurent Etiemble (letiemble) <[email protected]> <[email protected]>
+Lode Hoste (Zillode) <[email protected]>
+Lord Landon Agahnim (LordLandon) <[email protected]>
+Marc Laporte (marclaporte) <[email protected]> <[email protected]>
+Marc Pujol (kilburn) <[email protected]>
+Marcin Dziadus (marcindziadus) <[email protected]>
+Mateusz Naściszewski (mateon1) <[email protected]>
+Matt Burke (burkemw3) <[email protected]> <[email protected]>
+Max Schulze (kralo) <[email protected]> <[email protected]>
+Michael Jephcote (Rewt0r) <[email protected]> <[email protected]>
+Michael Ploujnikov (plouj) <[email protected]>
+Michael Tilli (pyfisch) <[email protected]>
+Nate Morrison (nrm21) <[email protected]>
+Pascal Jungblut (pascalj) <[email protected]> <[email protected]>
+Peter Hoeg (peterhoeg) <[email protected]>
+Philippe Schommers (filoozoom) <[email protected]>
+Phill Luby (pluby) <[email protected]>
+Piotr Bejda (piobpl) <[email protected]>
+Ryan Sullivan (KayoticSully) <[email protected]>
+Scott Klupfel (kluppy) <[email protected]>
+Sergey Mishin (ralder) <[email protected]>
+Stefan Kuntz (Stefan-Code) <[email protected]> <[email protected]>
+Stefan Tatschner (rumpelsepp) <[email protected]> <[email protected]>
+Tim Abell (timabell) <[email protected]>
+Tobias Nygren (tnn2) <[email protected]>
+Tomas Cerveny (kozec) <[email protected]>
+Tully Robinson (tojrobinson) <[email protected]>
+Tyler Brazier (tylerbrazier) <[email protected]>
+Veeti Paananen (veeti) <[email protected]>
+Victor Buinsky (buinsky) <[email protected]>
+Vil Brekin (Vilbrekin) <[email protected]>
+William A. Kennington III (wkennington) <[email protected]>
+Wulf Weich (wweich) <[email protected]> <[email protected]>
+Yannic A. (eipiminus1) <[email protected]> <[email protected]>

+ 109 - 86
NICKS

@@ -1,89 +1,112 @@
 # This file maps email addresses used in commits to nicks used the changelog.
+# It is auto generated from the AUTHORS file by script/authors.go.
 
-acogdev		<[email protected]>
-alex2108	<[email protected]>
-alessandro.g89	<[email protected]>
-andersonvom	<[email protected]>
-andrew-d	<[email protected]>
-asdil12		<[email protected]>
-AudriusButkevicius	<[email protected]>
-aviau       <[email protected]> <[email protected]>
-bencurthoys	<[email protected]>
-bigbear2nd	<[email protected]>
-brbecker	<[email protected]>
-brendanlong	<[email protected]>
-brgmnn      <[email protected]> <[email protected]>
-bsidhom		<[email protected]>
-buinsky	<[email protected]>
-burkemw3	<[email protected]> <[email protected]>
-calmh		<[email protected]>
-canton7	<[email protected]>
-Cathryne	<[email protected]> <[email protected]>
-cdata		<[email protected]>
-cdhowie	<[email protected]>
-ceh		<[email protected]>
-cqcallaw	<[email protected]>
-dinosore	<[email protected]>
-dva	<[email protected]>
-dzarda		<[email protected]>
-eipiminus1	<[email protected]> <[email protected]>
-facastagnini	<[email protected]>
-filoozoom	<[email protected]>
-frioux		<[email protected]> <[email protected]>
-fti7	<[email protected]>
-gillisig	<[email protected]>
-hadogenes	<[email protected]>
-ironmig	<[email protected]>
-jarlebring	<[email protected]>
-jedie		<[email protected]> <[email protected]>
-jgke	<[email protected]>
-jpjp		<[email protected]> <[email protected]>
-kamadak		<[email protected]>
-KayoticSully	<[email protected]>
-kilburn		<[email protected]>
-kluppy	<[email protected]>
-kozec		<[email protected]>
-kralo	<[email protected]>
-krozycki	<[email protected]>
-letiemble	<[email protected]> <[email protected]>
-LordLandon	<[email protected]>
-lkwg82	<[email protected]>
-marcindziadus	<[email protected]>
+acogdev <[email protected]>
+alessandro.g89 <[email protected]>
+alex2108 <[email protected]>
+andersonvom <[email protected]>
+andrew-d <[email protected]>
+asdil12 <[email protected]>
+AudriusButkevicius <[email protected]>
+aviau <[email protected]>
+aviau <[email protected]>
+bencurthoys <[email protected]>
+bigbear2nd <[email protected]>
+brbecker <[email protected]>
+brendanlong <[email protected]>
+brgmnn <[email protected]>
+brgmnn <[email protected]>
+bsidhom <[email protected]>
+buinsky <[email protected]>
+burkemw3 <[email protected]>
+burkemw3 <[email protected]>
+calmh <[email protected]>
+canton7 <[email protected]>
+Cathryne <[email protected]>
+Cathryne <[email protected]>
+cdata <[email protected]>
+cdhowie <[email protected]>
+ceh <[email protected]>
+cqcallaw <[email protected]>
+dinosore <[email protected]>
+dva <[email protected]>
+dzarda <[email protected]>
+eipiminus1 <[email protected]>
+eipiminus1 <[email protected]>
+facastagnini <[email protected]>
+filoozoom <[email protected]>
+frioux <[email protected]>
+frioux <[email protected]>
+fti7 <[email protected]>
+gillisig <[email protected]>
+hadogenes <[email protected]>
+ironmig <[email protected]>
+jarlebring <[email protected]>
+jedie <[email protected]>
+jedie <[email protected]>
+jgke <[email protected]>
+jpjp <[email protected]>
+jpjp <[email protected]>
+kamadak <[email protected]>
+KayoticSully <[email protected]>
+kc1212 <[email protected]>
+kc1212 <[email protected]>
+kilburn <[email protected]>
+kluppy <[email protected]>
+kozec <[email protected]>
+kralo <[email protected]>
+kralo <[email protected]>
+krozycki <[email protected]>
+letiemble <[email protected]>
+letiemble <[email protected]>
+lkwg82 <[email protected]>
+LordLandon <[email protected]>
+marcindziadus <[email protected]>
 marclaporte <[email protected]>
-mateon1	<[email protected]>
-mogwa1	<[email protected]>
-moshen		<[email protected]>
-Moter8		<[email protected]>
-mvdan		<[email protected]>
-norgeous	<[email protected]> <[email protected]> <[email protected]>
-nrm21	<[email protected]>
-Nutomic		<[email protected]>
-pascalj		<[email protected]> <[email protected]>
-peterhoeg	<[email protected]>
-philips		<[email protected]>
-piobpl		<[email protected]>
-plouj	<[email protected]>
-pluby		<[email protected]>
-pyfisch		<[email protected]>
-qbit		<[email protected]>
-ralder		<[email protected]>
-Rewt0r		<[email protected]> <[email protected]>
-rumpelsepp	<[email protected]> <[email protected]>
-sciurius	<[email protected]>
-seehuhn		<[email protected]>
-simplypeachy	<[email protected]> <[email protected]>
-snnd		<[email protected]>
-Stefan-Code	<[email protected]> <[email protected]>
-timabell	<[email protected]>
-tnn2		<[email protected]>
-tojrobinson	<[email protected]>
-tpng		<[email protected]>
-tylerbrazier	<[email protected]>
-uok		<[email protected]> <[email protected]>
-veeti		<[email protected]>
-Vilbrekin	<[email protected]>
-wkennington	<[email protected]>
-wsgcsysadmin	<[email protected]>
-wweich	<[email protected]> <[email protected]>
-Zillode		<[email protected]>
-zukoo		<[email protected]>
+marclaporte <[email protected]>
+mateon1 <[email protected]>
+mogwa1 <[email protected]>
+moshen <[email protected]>
+Moter8 <[email protected]>
+mvdan <[email protected]>
+norgeous <[email protected]>
+norgeous <[email protected]>
+norgeous <[email protected]>
+nrm21 <[email protected]>
+Nutomic <[email protected]>
+pascalj <[email protected]>
+pascalj <[email protected]>
+peterhoeg <[email protected]>
+philips <[email protected]>
+piobpl <[email protected]>
+plouj <[email protected]>
+pluby <[email protected]>
+pyfisch <[email protected]>
+qbit <[email protected]>
+ralder <[email protected]>
+Rewt0r <[email protected]>
+Rewt0r <[email protected]>
+rumpelsepp <[email protected]>
+rumpelsepp <[email protected]>
+sciurius <[email protected]>
+seehuhn <[email protected]>
+simplypeachy <[email protected]>
+simplypeachy <[email protected]>
+snnd <[email protected]>
+Stefan-Code <[email protected]>
+Stefan-Code <[email protected]>
+timabell <[email protected]>
+tnn2 <[email protected]>
+tojrobinson <[email protected]>
+tpng <[email protected]>
+tylerbrazier <[email protected]>
+uok <[email protected]>
+uok <[email protected]>
+veeti <[email protected]>
+Vilbrekin <[email protected]>
+wkennington <[email protected]>
+WSGCSysadmin <[email protected]>
+wweich <[email protected]>
+wweich <[email protected]>
+Zillode <[email protected]>
+zukoo <[email protected]>

+ 1 - 1
gui/default/syncthing/core/aboutModalView.html

@@ -11,7 +11,7 @@
   <p translate>Copyright &copy; 2014-2016 the following Contributors:</p>
   <div class="row">
     <div class="col-md-12" id="contributor-list">
-Jakob Borg, Audrius Butkevicius, Alexander Graf, Anderson Mesquita, Ben Schulz, Caleb Callaway, Lars K.W. Gohlke, Lode Hoste, Michael Ploujnikov, Philippe Schommers, Ryan Sullivan, Sergey Mishin, Stefan Tatschner, Aaron Bieber, Adam Piggott, Alessandro G., Alexandre Viau, Andrew Dunham, Antony Male, Arthur Axel fREW Schmidt, Bart De Vries, Ben Curthoys, Ben Sidhom, Benny Ng, Brandon Philips, Brendan Long, Brian R. Becker, Carsten Hagemann, Cathryne Linenweaver, Chris Howie, Chris Joel, Colin Kennedy, Daniel Bergmann, Daniel Harte, Daniel Martí, David Rimmer, Denis A., Dennis Wilson, Dominik Heidler, Elias Jarlebring, Emil Hessman, Erik Meitner, Federico Castagnini, Felix Ableitner, Felix Unterpaintner, Francois-Xavier Gsell, Frank Isemann, Gilli Sigurdsson, Jaakko Hannikainen, Jacek Szafarkiewicz, Jake Peterson, James Patterson, Jaroslav Malec, Jens Diemer, Jochen Voss, Johan Vromans, Karol Różycki, Kelong Cong, Ken'ichi Kamada, Kevin Allen, Laurent Etiemble, Lord Landon Agahnim, Marc Laporte, Marc Pujol, Marcin Dziadus, Mateusz Naściszewski, Matt Burke, Max Schulze, Michael Jephcote, Michael Tilli, Nate Morrison, Pascal Jungblut, Peter Hoeg, Phill Luby, Piotr Bejda, Scott Klupfel, Stefan Kuntz, Tim Abell, Tobias Nygren, Tomas Cerveny, Tully Robinson, Tyler Brazier, Veeti Paananen, Victor Buinsky, Vil Brekin, William A. Kennington III, Wulf Weich, Yannic A.
+Jakob Borg, Audrius Butkevicius, Alexander Graf, Anderson Mesquita, Ben Schulz, Caleb Callaway, Daniel Harte, Lars K.W. Gohlke, Lode Hoste, Michael Ploujnikov, Philippe Schommers, Ryan Sullivan, Sergey Mishin, Stefan Tatschner, Aaron Bieber, Adam Piggott, Alessandro G., Alexandre Viau, Andrew Dunham, Antony Male, Arthur Axel fREW Schmidt, Bart De Vries, Ben Curthoys, Ben Sidhom, Benny Ng, Brandon Philips, Brendan Long, Brian R. Becker, Carsten Hagemann, Cathryne Linenweaver, Chris Howie, Chris Joel, Colin Kennedy, Daniel Bergmann, Daniel Martí, David Rimmer, Denis A., Dennis Wilson, Dominik Heidler, Elias Jarlebring, Emil Hessman, Erik Meitner, Federico Castagnini, Felix Ableitner, Felix Unterpaintner, Francois-Xavier Gsell, Frank Isemann, Gilli Sigurdsson, Jaakko Hannikainen, Jacek Szafarkiewicz, Jake Peterson, James Patterson, Jaroslav Malec, Jens Diemer, Jochen Voss, Johan Vromans, Karol Różycki, Kelong Cong, Ken'ichi Kamada, Kevin Allen, Laurent Etiemble, Lord Landon Agahnim, Marc Laporte, Marc Pujol, Marcin Dziadus, Mateusz Naściszewski, Matt Burke, Max Schulze, Michael Jephcote, Michael Tilli, Nate Morrison, Pascal Jungblut, Peter Hoeg, Phill Luby, Piotr Bejda, Scott Klupfel, Stefan Kuntz, Tim Abell, Tobias Nygren, Tomas Cerveny, Tully Robinson, Tyler Brazier, Veeti Paananen, Victor Buinsky, Vil Brekin, William A. Kennington III, Wulf Weich, Yannic A.
     </div>
   </div>
   <hr/>

+ 100 - 18
script/authors.go

@@ -13,6 +13,7 @@ package main
 
 import (
 	"bytes"
+	"fmt"
 	"io/ioutil"
 	"log"
 	"math"
@@ -25,8 +26,26 @@ import (
 
 const htmlFile = "gui/default/syncthing/core/aboutModalView.html"
 
+var (
+	nicknameRe = regexp.MustCompile(`\(([^\s]*)\)`)
+	emailRe    = regexp.MustCompile(`<([^\s]*)>`)
+)
+
+const authorsHeader = `# This is the official list of Syncthing authors for copyright purposes.
+# The format is:
+#
+#    Name Name Name (nickname) <[email protected]> <[email protected]>
+#
+# The NICKS list is auto generated from this file.
+`
+
+const nicksHeader = `# This file maps email addresses used in commits to nicks used the changelog.
+# It is auto generated from the AUTHORS file by script/authors.go.
+`
+
 type author struct {
 	name         string
+	nickname     string
 	emails       []string
 	commits      int
 	log10commits int
@@ -50,36 +69,75 @@ func main() {
 	if err := ioutil.WriteFile(htmlFile, bs, 0644); err != nil {
 		log.Fatal(err)
 	}
+
+	// Write AUTHORS file
+
+	sort.Sort(byName(authors))
+
+	out, err := os.Create("AUTHORS")
+	if err != nil {
+		log.Fatal(err)
+	}
+	fmt.Fprintf(out, "%s\n", authorsHeader)
+	for _, author := range authors {
+		fmt.Fprintf(out, "%s", author.name)
+		if author.nickname != "" {
+			fmt.Fprintf(out, " (%s)", author.nickname)
+		}
+		for _, email := range author.emails {
+			fmt.Fprintf(out, " <%s>", email)
+		}
+		fmt.Fprintf(out, "\n")
+	}
+	out.Close()
+
+	// Write NICKS file
+
+	sort.Sort(byNick(authors))
+
+	out, err = os.Create("NICKS")
+	if err != nil {
+		log.Fatal(err)
+	}
+	fmt.Fprintf(out, "%s\n", nicksHeader)
+	for _, author := range authors {
+		if author.nickname == "" {
+			continue
+		}
+		for _, email := range author.emails {
+			fmt.Fprintf(out, "%s <%s>\n", author.nickname, email)
+		}
+	}
+	out.Close()
 }
 
 func getAuthors() []author {
 	bs := readAll("AUTHORS")
 	lines := strings.Split(string(bs), "\n")
 	var authors []author
-	nameRe := regexp.MustCompile(`(.+?)\s+<`)
-	authorRe := regexp.MustCompile(`<([^>]+)>`)
-	for _, line := range lines {
-		m := nameRe.FindStringSubmatch(line)
-		if len(m) < 2 {
-			continue
-		}
-		name := m[1]
 
-		ms := authorRe.FindAllStringSubmatch(line, -1)
-		if len(ms) == 0 {
+	for _, line := range lines {
+		if len(line) == 0 || line[0] == '#' {
 			continue
 		}
 
-		var emails []string
-		for i := range ms {
-			emails = append(emails, ms[i][1])
+		fields := strings.Fields(line)
+		var author author
+		for _, field := range fields {
+			if m := nicknameRe.FindStringSubmatch(field); len(m) > 1 {
+				author.nickname = m[1]
+			} else if m := emailRe.FindStringSubmatch(field); len(m) > 1 {
+				author.emails = append(author.emails, m[1])
+			} else {
+				if author.name == "" {
+					author.name = field
+				} else {
+					author.name = author.name + " " + field
+				}
+			}
 		}
 
-		a := author{
-			name:   name,
-			emails: emails,
-		}
-		authors = append(authors, a)
+		authors = append(authors, author)
 	}
 	return authors
 }
@@ -141,3 +199,27 @@ func (l byContributions) Less(a, b int) bool {
 }
 
 func (l byContributions) Swap(a, b int) { l[a], l[b] = l[b], l[a] }
+
+type byName []author
+
+func (l byName) Len() int { return len(l) }
+
+func (l byName) Less(a, b int) bool {
+	aname := strings.ToLower(l[a].name)
+	bname := strings.ToLower(l[b].name)
+	return aname < bname
+}
+
+func (l byName) Swap(a, b int) { l[a], l[b] = l[b], l[a] }
+
+type byNick []author
+
+func (l byNick) Len() int { return len(l) }
+
+func (l byNick) Less(a, b int) bool {
+	anick := strings.ToLower(l[a].nickname)
+	bnick := strings.ToLower(l[b].nickname)
+	return anick < bnick
+}
+
+func (l byNick) Swap(a, b int) { l[a], l[b] = l[b], l[a] }