chore: refine author list generation
Now applies a slightly narrower definition of "author", being one that has touched code in a file that exists today (tracking renames).
This commit is contained in:
@@ -13,103 +13,96 @@
|
|||||||
# contents of this file.
|
# contents of this file.
|
||||||
#
|
#
|
||||||
|
|
||||||
Aaron Bieber (qbit) <qbit@deftly.net>
|
Jakob Borg (calmh) <jakob@nym.se> <jakob@kastelo.net> <jborg@coreweave.com>
|
||||||
|
Audrius Butkevicius (AudriusButkevicius) <audrius.butkevicius@gmail.com> <github@audrius.rocks>
|
||||||
|
Simon Frei (imsodin) <freisim93@gmail.com>
|
||||||
|
Tomasz Wilczyński <5626656+tomasz1986@users.noreply.github.com> <twilczynski@naver.com>
|
||||||
|
Alexander Graf (alex2108) <register-github@alex-graf.de>
|
||||||
|
Alexandre Viau (aviau) <alexandre@alexandreviau.net> <aviau@debian.org>
|
||||||
|
Anderson Mesquita (andersonvom) <andersonvom@gmail.com>
|
||||||
|
André Colomb (acolomb) <src@andre.colomb.de> <github.com@andre.colomb.de>
|
||||||
|
Antony Male (canton7) <antony.male@gmail.com>
|
||||||
|
Ben Schulz (uok) <ueomkail@gmail.com> <uok@users.noreply.github.com>
|
||||||
|
bt90 <btom1990@googlemail.com>
|
||||||
|
Caleb Callaway (cqcallaw) <enlightened.despot@gmail.com>
|
||||||
|
Daniel Harte (norgeous) <daniel@harte.me> <daniel@danielharte.co.uk> <norgeous@users.noreply.github.com>
|
||||||
|
Emil Lundberg <emil@emlun.se>
|
||||||
|
Eric P <eric@kastelo.net>
|
||||||
|
Evgeny Kuznetsov <evgeny@kuznetsov.md>
|
||||||
|
greatroar <61184462+greatroar@users.noreply.github.com>
|
||||||
|
Lars K.W. Gohlke (lkwg82) <lkwg82@gmx.de>
|
||||||
|
Lode Hoste (Zillode) <zillode@zillode.be>
|
||||||
|
Michael Ploujnikov (plouj) <ploujj@gmail.com>
|
||||||
|
Ross Smith II (rasa) <ross@smithii.com>
|
||||||
|
Stefan Tatschner (rumpelsepp) <stefan@sevenbyte.org> <rumpelsepp@sevenbyte.org> <stefan@rumpelsepp.org>
|
||||||
|
Wulf Weich (wweich) <wweich@users.noreply.github.com> <wweich@gmx.de> <wulf@weich-kr.de>
|
||||||
Adam Piggott (ProactiveServices) <aD@simplypeachy.co.uk> <simplypeachy@users.noreply.github.com> <ProactiveServices@users.noreply.github.com> <adam@proactiveservices.co.uk>
|
Adam Piggott (ProactiveServices) <aD@simplypeachy.co.uk> <simplypeachy@users.noreply.github.com> <ProactiveServices@users.noreply.github.com> <adam@proactiveservices.co.uk>
|
||||||
Adel Qalieh (adelq) <aqalieh95@gmail.com> <adelq@users.noreply.github.com>
|
Adel Qalieh (adelq) <aqalieh95@gmail.com> <adelq@users.noreply.github.com>
|
||||||
Alan Pope <alan@popey.com>
|
|
||||||
Alberto Donato <albertodonato@users.noreply.github.com>
|
|
||||||
Aleksey Vasenev <margtu-fivt@ya.ru>
|
Aleksey Vasenev <margtu-fivt@ya.ru>
|
||||||
Alessandro G. (alessandro.g89) <alessandro.g89@gmail.com>
|
Alessandro G. (alessandro.g89) <alessandro.g89@gmail.com>
|
||||||
Alex Ionescu <github@ionescu.sh>
|
Alex Ionescu <github@ionescu.sh>
|
||||||
Alex Lindeman <139387+aelindeman@users.noreply.github.com>
|
Alex Lindeman <139387+aelindeman@users.noreply.github.com>
|
||||||
Alex Xu <alex.hello71@gmail.com>
|
Alex Xu <alex.hello71@gmail.com>
|
||||||
Alexander Graf (alex2108) <register-github@alex-graf.de>
|
|
||||||
Alexander Seiler <seileralex@gmail.com>
|
Alexander Seiler <seileralex@gmail.com>
|
||||||
Alexandre Alves <alexandrealvesdb.contact@gmail.com>
|
Alexandre Alves <alexandrealvesdb.contact@gmail.com>
|
||||||
Alexandre Viau (aviau) <alexandre@alexandreviau.net> <aviau@debian.org>
|
|
||||||
Aman Gupta <aman@tmm1.net>
|
Aman Gupta <aman@tmm1.net>
|
||||||
Anatoli Babenia <anatoli@rainforce.org>
|
|
||||||
Anderson Mesquita (andersonvom) <andersonvom@gmail.com>
|
|
||||||
Andreas Sommer <andreas.sommer87@googlemail.com>
|
Andreas Sommer <andreas.sommer87@googlemail.com>
|
||||||
andresvia <andres.via@gmail.com>
|
andresvia <andres.via@gmail.com>
|
||||||
Andrew Dunham (andrew-d) <andrew@du.nham.ca>
|
|
||||||
Andrew Meyer <andrewm.bpi@gmail.com>
|
|
||||||
Andrew Rabert (nvllsvm) <ar@nullsum.net> <6550543+nvllsvm@users.noreply.github.com>
|
Andrew Rabert (nvllsvm) <ar@nullsum.net> <6550543+nvllsvm@users.noreply.github.com>
|
||||||
Andrey D (scienmind) <scintertech@cryptolab.net> <scienmind@users.noreply.github.com>
|
Andrey D (scienmind) <scintertech@cryptolab.net> <scienmind@users.noreply.github.com>
|
||||||
André Colomb (acolomb) <src@andre.colomb.de> <github.com@andre.colomb.de>
|
|
||||||
andyleap <andyleap@gmail.com>
|
andyleap <andyleap@gmail.com>
|
||||||
Anjan Momi <anjan@momi.ca>
|
Anjan Momi <anjan@momi.ca>
|
||||||
Anthony Goeckner <agoeckner@users.noreply.github.com>
|
Anthony Goeckner <agoeckner@users.noreply.github.com>
|
||||||
Antoine Lamielle (0x010C) <antoine.lamielle@0x010c.fr> <gh@0x010c.fr>
|
Antoine Lamielle (0x010C) <antoine.lamielle@0x010c.fr> <gh@0x010c.fr>
|
||||||
Antony Male (canton7) <antony.male@gmail.com>
|
|
||||||
Anur <anurnomeru@163.com>
|
Anur <anurnomeru@163.com>
|
||||||
Aranjedeath <Aranjedeath@users.noreply.github.com>
|
Aranjedeath <Aranjedeath@users.noreply.github.com>
|
||||||
Arkadiusz Tymiński <gevleeog@gmail.com>
|
Arkadiusz Tymiński <gevleeog@gmail.com>
|
||||||
Aroun <login@b-vo.fr>
|
Aroun <login@b-vo.fr>
|
||||||
Arthur Axel fREW Schmidt (frioux) <frew@afoolishmanifesto.com> <frioux@gmail.com>
|
Arthur Axel fREW Schmidt (frioux) <frew@afoolishmanifesto.com> <frioux@gmail.com>
|
||||||
Artur Zubilewicz <AkaZecik@users.noreply.github.com>
|
Artur Zubilewicz <AkaZecik@users.noreply.github.com>
|
||||||
Audrius Butkevicius (AudriusButkevicius) <audrius.butkevicius@gmail.com> <github@audrius.rocks>
|
|
||||||
Aurélien Rainone <476650+arl@users.noreply.github.com>
|
Aurélien Rainone <476650+arl@users.noreply.github.com>
|
||||||
BAHADIR YILMAZ <bahadiryilmaz32@gmail.com>
|
BAHADIR YILMAZ <bahadiryilmaz32@gmail.com>
|
||||||
Bart De Vries (mogwa1) <devriesb@gmail.com>
|
Bart De Vries (mogwa1) <devriesb@gmail.com>
|
||||||
Beat Reichenbach <44111292+beatreichenbach@users.noreply.github.com>
|
Beat Reichenbach <44111292+beatreichenbach@users.noreply.github.com>
|
||||||
Ben Curthoys (bencurthoys) <ben@bencurthoys.com>
|
|
||||||
Ben Schulz (uok) <ueomkail@gmail.com> <uok@users.noreply.github.com>
|
|
||||||
Ben Shepherd (benshep) <bjashepherd@gmail.com>
|
Ben Shepherd (benshep) <bjashepherd@gmail.com>
|
||||||
Ben Sidhom (bsidhom) <bsidhom@gmail.com>
|
Ben Sidhom (bsidhom) <bsidhom@gmail.com>
|
||||||
Benedikt Heine (bebehei) <bebe@bebehei.de>
|
Benedikt Heine (bebehei) <bebe@bebehei.de>
|
||||||
Benedikt Morbach <benedikt.morbach@googlemail.com>
|
|
||||||
Benjamin Nater <17193640+bn4t@users.noreply.github.com>
|
|
||||||
Benno Fünfstück <benno.fuenfstueck@gmail.com>
|
Benno Fünfstück <benno.fuenfstueck@gmail.com>
|
||||||
Benny Ng (tpng) <benny.tpng@gmail.com>
|
Benny Ng (tpng) <benny.tpng@gmail.com>
|
||||||
boomsquared <54829195+boomsquared@users.noreply.github.com>
|
boomsquared <54829195+boomsquared@users.noreply.github.com>
|
||||||
Boqin Qin <bobbqqin@bupt.edu.cn>
|
Boqin Qin <bobbqqin@bupt.edu.cn>
|
||||||
Boris Rybalkin <ribalkin@gmail.com>
|
Boris Rybalkin <ribalkin@gmail.com>
|
||||||
Brandon Philips (philips) <brandon@ifup.org>
|
|
||||||
Brendan Long (brendanlong) <self@brendanlong.com>
|
Brendan Long (brendanlong) <self@brendanlong.com>
|
||||||
Brian R. Becker (brbecker) <brbecker@gmail.com>
|
|
||||||
bt90 <btom1990@googlemail.com>
|
|
||||||
Caleb Callaway (cqcallaw) <enlightened.despot@gmail.com>
|
|
||||||
Carsten Hagemann (carstenhag) <moter8@gmail.com> <carsten@chagemann.de>
|
|
||||||
Catfriend1 <16361913+Catfriend1@users.noreply.github.com>
|
Catfriend1 <16361913+Catfriend1@users.noreply.github.com>
|
||||||
Cathryne Linenweaver (Cathryne) <cathryne.linenweaver@gmail.com> <Cathryne@users.noreply.github.com> <katrinleinweber@MAC.local>
|
Cathryne Linenweaver (Cathryne) <cathryne.linenweaver@gmail.com> <Cathryne@users.noreply.github.com> <katrinleinweber@MAC.local>
|
||||||
Cedric Staniewski (xduugu) <cedric@gmx.ca>
|
Cedric Staniewski (xduugu) <cedric@gmx.ca>
|
||||||
chenrui <rui@meetup.com>
|
|
||||||
Chih-Hsuan Yen <yan12125@gmail.com> <1937689+yan12125@users.noreply.github.com>
|
Chih-Hsuan Yen <yan12125@gmail.com> <1937689+yan12125@users.noreply.github.com>
|
||||||
Choongkyu <choongkyu.kim+gh@gmail.com> <vapidlyrapid+gh@gmail.com>
|
Choongkyu <choongkyu.kim+gh@gmail.com> <vapidlyrapid+gh@gmail.com>
|
||||||
Chris Howie (cdhowie) <me@chrishowie.com>
|
Chris Howie (cdhowie) <me@chrishowie.com>
|
||||||
Chris Joel (cdata) <chris@scriptolo.gy>
|
Chris Joel (cdata) <chris@scriptolo.gy>
|
||||||
Chris Tonkinson <chris@masterbran.ch>
|
|
||||||
Christian Kujau <ckujau@users.noreply.github.com>
|
Christian Kujau <ckujau@users.noreply.github.com>
|
||||||
Christian Prescott <me@christianprescott.com>
|
Christian Prescott <me@christianprescott.com>
|
||||||
chucic <chucic@seznam.cz>
|
chucic <chucic@seznam.cz>
|
||||||
cjc7373 <niuchangcun@gmail.com>
|
cjc7373 <niuchangcun@gmail.com>
|
||||||
Colin Kennedy (moshen) <moshen.colin@gmail.com>
|
Colin Kennedy (moshen) <moshen.colin@gmail.com>
|
||||||
Cromefire_ <tim.l@nghorst.net> <26320625+cromefire@users.noreply.github.com>
|
Cromefire_ <tim.l@nghorst.net> <26320625+cromefire@users.noreply.github.com>
|
||||||
cui fliter <imcusg@gmail.com>
|
|
||||||
Cyprien Devillez <cypx@users.noreply.github.com>
|
Cyprien Devillez <cypx@users.noreply.github.com>
|
||||||
d-volution <49024624+d-volution@users.noreply.github.com>
|
d-volution <49024624+d-volution@users.noreply.github.com>
|
||||||
Dale Visser <dale.visser@live.com>
|
|
||||||
Dan <benda.daniel@gmail.com>
|
Dan <benda.daniel@gmail.com>
|
||||||
Daniel Barczyk <46358936+DanielBarczyk@users.noreply.github.com>
|
Daniel Barczyk <46358936+DanielBarczyk@users.noreply.github.com>
|
||||||
Daniel Bergmann (brgmnn) <dan.arne.bergmann@gmail.com> <brgmnn@users.noreply.github.com>
|
Daniel Bergmann (brgmnn) <dan.arne.bergmann@gmail.com> <brgmnn@users.noreply.github.com>
|
||||||
Daniel Harte (norgeous) <daniel@harte.me> <daniel@danielharte.co.uk> <norgeous@users.noreply.github.com>
|
|
||||||
Daniel Martí (mvdan) <mvdan@mvdan.cc>
|
Daniel Martí (mvdan) <mvdan@mvdan.cc>
|
||||||
Daniel Padrta <64928366+danpadcz@users.noreply.github.com>
|
Daniel Padrta <64928366+danpadcz@users.noreply.github.com>
|
||||||
Darshil Chanpura (dtchanpura) <dtchanpura@gmail.com> <dcprime314@gmail.com>
|
Darshil Chanpura (dtchanpura) <dtchanpura@gmail.com> <dcprime314@gmail.com>
|
||||||
dashangcun <907225865@qq.com>
|
dashangcun <907225865@qq.com>
|
||||||
David Rimmer (dinosore) <dinosore@dbrsoftware.co.uk>
|
David Rimmer (dinosore) <dinosore@dbrsoftware.co.uk>
|
||||||
deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com>
|
|
||||||
DeflateAwning <11021263+DeflateAwning@users.noreply.github.com>
|
DeflateAwning <11021263+DeflateAwning@users.noreply.github.com>
|
||||||
Denis A. (dva) <denisva@gmail.com>
|
Denis A. (dva) <denisva@gmail.com>
|
||||||
Dennis Wilson (snnd) <dw@risu.io>
|
Dennis Wilson (snnd) <dw@risu.io>
|
||||||
dependabot-preview[bot] <dependabot-preview[bot]@users.noreply.github.com> <27856297+dependabot-preview[bot]@users.noreply.github.com>
|
|
||||||
dependabot[bot] <dependabot[bot]@users.noreply.github.com> <49699333+dependabot[bot]@users.noreply.github.com>
|
|
||||||
derekriemer <derek.riemer@colorado.edu>
|
derekriemer <derek.riemer@colorado.edu>
|
||||||
DerRockWolf <50499906+DerRockWolf@users.noreply.github.com>
|
DerRockWolf <50499906+DerRockWolf@users.noreply.github.com>
|
||||||
desbma <desbma@users.noreply.github.com>
|
desbma <desbma@users.noreply.github.com>
|
||||||
Devon G. Redekopp <devon@redekopp.com>
|
Devon G. Redekopp <devon@redekopp.com>
|
||||||
diemade <spamkill@posteo.ch>
|
|
||||||
digital <didev@dinid.net>
|
digital <didev@dinid.net>
|
||||||
Dimitri Papadopoulos Orfanos <3234522+DimitriPapadopoulos@users.noreply.github.com>
|
Dimitri Papadopoulos Orfanos <3234522+DimitriPapadopoulos@users.noreply.github.com>
|
||||||
Dmitry Saveliev (dsaveliev) <d.e.saveliev@gmail.com>
|
Dmitry Saveliev (dsaveliev) <d.e.saveliev@gmail.com>
|
||||||
@@ -119,14 +112,11 @@ Dominik Heidler (asdil12) <dominik@heidler.eu>
|
|||||||
Elias Jarlebring (jarlebring) <jarlebring@gmail.com>
|
Elias Jarlebring (jarlebring) <jarlebring@gmail.com>
|
||||||
Elliot Huffman <thelich2@gmail.com>
|
Elliot Huffman <thelich2@gmail.com>
|
||||||
Emil Hessman (ceh) <emil@hessman.se>
|
Emil Hessman (ceh) <emil@hessman.se>
|
||||||
Emil Lundberg <emil@emlun.se>
|
|
||||||
Eng Zer Jun <engzerjun@gmail.com>
|
Eng Zer Jun <engzerjun@gmail.com>
|
||||||
entity0xfe <109791748+entity0xfe@users.noreply.github.com> <entity0xfe@my.domain>
|
entity0xfe <109791748+entity0xfe@users.noreply.github.com> <entity0xfe@my.domain>
|
||||||
Eric Lesiuta <elesiuta@gmail.com>
|
Eric Lesiuta <elesiuta@gmail.com>
|
||||||
Eric P <eric@kastelo.net>
|
|
||||||
Erik Meitner (WSGCSysadmin) <e.meitner@willystreet.coop>
|
Erik Meitner (WSGCSysadmin) <e.meitner@willystreet.coop>
|
||||||
Evan Spensley <94762716+0evan@users.noreply.github.com>
|
Evan Spensley <94762716+0evan@users.noreply.github.com>
|
||||||
Evgeny Kuznetsov <evgeny@kuznetsov.md>
|
|
||||||
Federico Castagnini (facastagnini) <federico.castagnini@gmail.com>
|
Federico Castagnini (facastagnini) <federico.castagnini@gmail.com>
|
||||||
Felix <53702818+f-eliks@users.noreply.github.com>
|
Felix <53702818+f-eliks@users.noreply.github.com>
|
||||||
Felix Ableitner (Nutomic) <me@nutomic.com>
|
Felix Ableitner (Nutomic) <me@nutomic.com>
|
||||||
@@ -140,7 +130,6 @@ ghjklw <malo@jaffre.info>
|
|||||||
Gilli Sigurdsson (gillisig) <gilli@vx.is>
|
Gilli Sigurdsson (gillisig) <gilli@vx.is>
|
||||||
Gleb Sinyavskiy <zhulik.gleb@gmail.com>
|
Gleb Sinyavskiy <zhulik.gleb@gmail.com>
|
||||||
Graham Miln (grahammiln) <graham.miln@dssw.co.uk> <graham.miln@miln.eu>
|
Graham Miln (grahammiln) <graham.miln@dssw.co.uk> <graham.miln@miln.eu>
|
||||||
greatroar <61184462+greatroar@users.noreply.github.com>
|
|
||||||
Greg <gco@jazzhaiku.com>
|
Greg <gco@jazzhaiku.com>
|
||||||
guangwu <guoguangwu@magic-shield.com>
|
guangwu <guoguangwu@magic-shield.com>
|
||||||
gudvinr <gudvinr@gmail.com>
|
gudvinr <gudvinr@gmail.com>
|
||||||
@@ -155,50 +144,35 @@ Hugo Locurcio <hugo.locurcio@hugo.pro>
|
|||||||
Iain Barnett <iainspeed@gmail.com>
|
Iain Barnett <iainspeed@gmail.com>
|
||||||
Ian Johnson (anonymouse64) <ian.johnson@canonical.com> <person.uwsome@gmail.com>
|
Ian Johnson (anonymouse64) <ian.johnson@canonical.com> <person.uwsome@gmail.com>
|
||||||
ignacy123 <ignacy.buczek@onet.pl>
|
ignacy123 <ignacy.buczek@onet.pl>
|
||||||
Ikko Ashimine <eltociear@gmail.com>
|
|
||||||
Ilya Brin <464157+ilyabrin@users.noreply.github.com>
|
|
||||||
Iskander Sharipov (Alex) <quasilyte@gmail.com>
|
Iskander Sharipov (Alex) <quasilyte@gmail.com>
|
||||||
Jaakko Hannikainen (jgke) <jgke@jgke.fi>
|
Jaakko Hannikainen (jgke) <jgke@jgke.fi>
|
||||||
Jacek Szafarkiewicz (hadogenes) <szafar@linux.pl>
|
|
||||||
Jack Croft <jccroft1@users.noreply.github.com>
|
Jack Croft <jccroft1@users.noreply.github.com>
|
||||||
Jacob <jyundt@gmail.com>
|
Jacob <jyundt@gmail.com>
|
||||||
Jake Peterson (acogdev) <jake@acogdev.com>
|
Jake Peterson (acogdev) <jake@acogdev.com>
|
||||||
Jakob Borg (calmh) <jakob@nym.se> <jakob@kastelo.net> <jborg@coreweave.com>
|
|
||||||
James O'Beirne <wild-github@au92.org>
|
James O'Beirne <wild-github@au92.org>
|
||||||
James Patterson (jpjp) <jamespatterson@operamail.com> <jpjp@users.noreply.github.com>
|
James Patterson (jpjp) <jamespatterson@operamail.com> <jpjp@users.noreply.github.com>
|
||||||
janost <janost@tuta.io>
|
|
||||||
Jaroslav Lichtblau <svetlemodry@users.noreply.github.com>
|
Jaroslav Lichtblau <svetlemodry@users.noreply.github.com>
|
||||||
Jaroslav Malec (dzarda) <dzardacz@gmail.com>
|
Jaroslav Malec (dzarda) <dzardacz@gmail.com>
|
||||||
jaseg <githubaccount@jaseg.net>
|
|
||||||
Jaspitta <ste.scarpitta@gmail.com>
|
Jaspitta <ste.scarpitta@gmail.com>
|
||||||
Jauder Ho <jauderho@users.noreply.github.com>
|
|
||||||
Jaya Chithra (jayachithra) <s.k.jayachithra@gmail.com>
|
Jaya Chithra (jayachithra) <s.k.jayachithra@gmail.com>
|
||||||
Jaya Kumar <jaya.kumar@ict.nl>
|
Jaya Kumar <jaya.kumar@ict.nl>
|
||||||
Jeffery To <jeffery.to@gmail.com>
|
Jeffery To <jeffery.to@gmail.com>
|
||||||
jelle van der Waa <jelle@vdwaa.nl>
|
jelle van der Waa <jelle@vdwaa.nl>
|
||||||
Jens Diemer (jedie) <github.com@jensdiemer.de> <git@jensdiemer.de>
|
Jens Diemer (jedie) <github.com@jensdiemer.de> <git@jensdiemer.de>
|
||||||
Jerry Jacobs (xor-gate) <jerry.jacobs@xor-gate.org> <xor-gate@users.noreply.github.com>
|
|
||||||
Jesse Lucas <jesse@jesselucas.com>
|
|
||||||
Jochen Voss (seehuhn) <voss@seehuhn.de>
|
Jochen Voss (seehuhn) <voss@seehuhn.de>
|
||||||
Johan Andersson <j@i19.se>
|
|
||||||
Johan Vromans (sciurius) <jvromans@squirrel.nl>
|
Johan Vromans (sciurius) <jvromans@squirrel.nl>
|
||||||
John Rinehart (fuzzybear3965) <johnrichardrinehart@gmail.com>
|
John Rinehart (fuzzybear3965) <johnrichardrinehart@gmail.com>
|
||||||
Jonas Thelemann <e-mail@jonas-thelemann.de>
|
Jonas Thelemann <e-mail@jonas-thelemann.de>
|
||||||
Jonathan <artback@protonmail.com> <jonagn@gmail.com>
|
Jonathan <artback@protonmail.com> <jonagn@gmail.com>
|
||||||
Jonathan Cross <jcross@gmail.com>
|
|
||||||
Jonta <359397+Jonta@users.noreply.github.com>
|
|
||||||
Jose Manuel Delicado (jmdaweb) <jmdaweb@hotmail.com> <jmdaweb@users.noreply.github.com>
|
Jose Manuel Delicado (jmdaweb) <jmdaweb@hotmail.com> <jmdaweb@users.noreply.github.com>
|
||||||
jtagcat <git-514635f7@jtag.cat> <git-12dbd862@jtag.cat>
|
jtagcat <git-514635f7@jtag.cat> <git-12dbd862@jtag.cat>
|
||||||
Julian Lehrhuber <jul13579@users.noreply.github.com>
|
Julian Lehrhuber <jul13579@users.noreply.github.com>
|
||||||
Jörg Thalheim <Mic92@users.noreply.github.com>
|
Jörg Thalheim <Mic92@users.noreply.github.com>
|
||||||
Jędrzej Kula <kula.jedrek@gmail.com>
|
Jędrzej Kula <kula.jedrek@gmail.com>
|
||||||
K.B.Dharun Krishna <kbdharunkrishna@gmail.com>
|
|
||||||
Kalle Laine <pahakalle@protonmail.com>
|
|
||||||
Kapil Sareen <kapilsareen584@gmail.com>
|
Kapil Sareen <kapilsareen584@gmail.com>
|
||||||
Karol Różycki (krozycki) <rozycki.karol@gmail.com>
|
Karol Różycki (krozycki) <rozycki.karol@gmail.com>
|
||||||
Kebin Liu <lkebin@gmail.com>
|
Kebin Liu <lkebin@gmail.com>
|
||||||
Keith Harrison <keithh@protonmail.com>
|
Keith Harrison <keithh@protonmail.com>
|
||||||
Keith Turner <kturner@apache.org>
|
|
||||||
Kelong Cong (kc1212) <kc04bc@gmx.com> <kc1212@users.noreply.github.com>
|
Kelong Cong (kc1212) <kc04bc@gmx.com> <kc1212@users.noreply.github.com>
|
||||||
Ken'ichi Kamada (kamadak) <kamada@nanohz.org>
|
Ken'ichi Kamada (kamadak) <kamada@nanohz.org>
|
||||||
Kevin Allen (ironmig) <kma1660@gmail.com>
|
Kevin Allen (ironmig) <kma1660@gmail.com>
|
||||||
@@ -207,30 +181,23 @@ Kevin White, Jr. (kwhite17) <kevinwhite1710@gmail.com>
|
|||||||
klemens <ka7@github.com>
|
klemens <ka7@github.com>
|
||||||
Kurt Fitzner (Kudalufi) <kurt@va1der.ca> <kurt.fitzner@gmail.com>
|
Kurt Fitzner (Kudalufi) <kurt@va1der.ca> <kurt.fitzner@gmail.com>
|
||||||
kylosus <33132401+kylosus@users.noreply.github.com>
|
kylosus <33132401+kylosus@users.noreply.github.com>
|
||||||
Lars K.W. Gohlke (lkwg82) <lkwg82@gmx.de>
|
|
||||||
Lars Lehtonen <lars.lehtonen@gmail.com>
|
Lars Lehtonen <lars.lehtonen@gmail.com>
|
||||||
Laurent Arnoud <laurent@spkdev.net>
|
|
||||||
Laurent Etiemble (letiemble) <laurent.etiemble@gmail.com> <laurent.etiemble@monobjc.net>
|
Laurent Etiemble (letiemble) <laurent.etiemble@gmail.com> <laurent.etiemble@monobjc.net>
|
||||||
Leo Arias (elopio) <yo@elopio.net>
|
Leo Arias (elopio) <yo@elopio.net>
|
||||||
Liu Siyuan (liusy182) <liusy182@gmail.com> <liusy182@hotmail.com>
|
Liu Siyuan (liusy182) <liusy182@gmail.com> <liusy182@hotmail.com>
|
||||||
Lode Hoste (Zillode) <zillode@zillode.be>
|
|
||||||
Lord Landon Agahnim (LordLandon) <lordlandon@gmail.com>
|
Lord Landon Agahnim (LordLandon) <lordlandon@gmail.com>
|
||||||
LSmithx2 <42276854+lsmithx2@users.noreply.github.com>
|
LSmithx2 <42276854+lsmithx2@users.noreply.github.com>
|
||||||
luchenhan <168071714+luchenhan@users.noreply.github.com>
|
|
||||||
Lukas Lihotzki <lukas@lihotzki.de>
|
Lukas Lihotzki <lukas@lihotzki.de>
|
||||||
Luke Hamburg <1992842+luckman212@users.noreply.github.com>
|
Luke Hamburg <1992842+luckman212@users.noreply.github.com>
|
||||||
luzpaz <luzpaz@users.noreply.github.com>
|
luzpaz <luzpaz@users.noreply.github.com>
|
||||||
Majed Abdulaziz (majedev) <majed.alhajry@gmail.com>
|
Majed Abdulaziz (majedev) <majed.alhajry@gmail.com>
|
||||||
Marc Laporte (marclaporte) <marc@marclaporte.com> <marc@laporte.name>
|
Marc Laporte (marclaporte) <marc@marclaporte.com> <marc@laporte.name>
|
||||||
Marc Pujol (kilburn) <kilburn@la3.org>
|
|
||||||
Marcin Dziadus (marcindziadus) <dziadus.marcin@gmail.com>
|
Marcin Dziadus (marcindziadus) <dziadus.marcin@gmail.com>
|
||||||
marco-m <marco.molteni@laposte.net>
|
|
||||||
Marcus B Spencer <marcus@marcusspencer.xyz> <marcus@marcusspencer.us>
|
Marcus B Spencer <marcus@marcusspencer.xyz> <marcus@marcusspencer.us>
|
||||||
Marcus Legendre <marcus.legendre@gmail.com>
|
Marcus Legendre <marcus.legendre@gmail.com>
|
||||||
Mario Majila <mariustshipichik@gmail.com>
|
Mario Majila <mariustshipichik@gmail.com>
|
||||||
Mark Pulford (mpx) <mark@kyne.com.au>
|
Mark Pulford (mpx) <mark@kyne.com.au>
|
||||||
Martchus <martchus@gmx.net>
|
Martchus <martchus@gmx.net>
|
||||||
Martin Polehla <p0l0us@users.noreply.github.com>
|
|
||||||
Mateusz Naściszewski (mateon1) <matin1111@wp.pl>
|
Mateusz Naściszewski (mateon1) <matin1111@wp.pl>
|
||||||
Mateusz Ż <thedead4fun@live.com>
|
Mateusz Ż <thedead4fun@live.com>
|
||||||
mathias4833 <67101597+mathias4833@users.noreply.github.com>
|
mathias4833 <67101597+mathias4833@users.noreply.github.com>
|
||||||
@@ -241,15 +208,10 @@ Matteo Ruina <matteo.ruina@gmail.com>
|
|||||||
Maurizio Tomasi <ziotom78@gmail.com>
|
Maurizio Tomasi <ziotom78@gmail.com>
|
||||||
Max <github@germancoding.com>
|
Max <github@germancoding.com>
|
||||||
Max Schulze (kralo) <max.schulze@online.de> <kralo@users.noreply.github.com>
|
Max Schulze (kralo) <max.schulze@online.de> <kralo@users.noreply.github.com>
|
||||||
maxice8 <30738253+maxice8@users.noreply.github.com>
|
|
||||||
MaximAL <almaximal@ya.ru>
|
MaximAL <almaximal@ya.ru>
|
||||||
Maxime Thirouin <m@moox.io>
|
|
||||||
Maximilian <maxi.rostock@outlook.de> <public@complexvector.space>
|
Maximilian <maxi.rostock@outlook.de> <public@complexvector.space>
|
||||||
mclang <1721600+mclang@users.noreply.github.com>
|
|
||||||
Michael Jephcote (Rewt0r) <rewt0r@gmx.com> <Rewt0r@users.noreply.github.com>
|
Michael Jephcote (Rewt0r) <rewt0r@gmx.com> <Rewt0r@users.noreply.github.com>
|
||||||
Michael Ploujnikov (plouj) <ploujj@gmail.com>
|
|
||||||
Michael Rienstra <mrienstra@gmail.com>
|
Michael Rienstra <mrienstra@gmail.com>
|
||||||
Michael Tilli (pyfisch) <pyfisch@gmail.com>
|
|
||||||
MichaIng <micha@dietpi.com>
|
MichaIng <micha@dietpi.com>
|
||||||
Migelo <miha@filetki.si>
|
Migelo <miha@filetki.si>
|
||||||
Mike Boone <mike@boonedocks.net>
|
Mike Boone <mike@boonedocks.net>
|
||||||
@@ -258,7 +220,6 @@ MikolajTwarog <43782609+MikolajTwarog@users.noreply.github.com>
|
|||||||
Mingxuan Lin <gdlmx@users.noreply.github.com>
|
Mingxuan Lin <gdlmx@users.noreply.github.com>
|
||||||
mv1005 <49659413+mv1005@users.noreply.github.com>
|
mv1005 <49659413+mv1005@users.noreply.github.com>
|
||||||
Nate Morrison (nrm21) <natemorrison@gmail.com>
|
Nate Morrison (nrm21) <natemorrison@gmail.com>
|
||||||
Naveen <172697+naveensrinivasan@users.noreply.github.com>
|
|
||||||
nf <nf@wh3rd.net>
|
nf <nf@wh3rd.net>
|
||||||
Nicholas Rishel (PrototypeNM1) <rishel.nick@gmail.com> <PrototypeNM1@users.noreply.github.com>
|
Nicholas Rishel (PrototypeNM1) <rishel.nick@gmail.com> <PrototypeNM1@users.noreply.github.com>
|
||||||
Nick Busey <NickBusey@users.noreply.github.com>
|
Nick Busey <NickBusey@users.noreply.github.com>
|
||||||
@@ -273,7 +234,6 @@ NoLooseEnds <jon.koslung@gmail.com>
|
|||||||
Oliver Freyermuth <o.freyermuth@googlemail.com>
|
Oliver Freyermuth <o.freyermuth@googlemail.com>
|
||||||
orangekame3 <miya.org.0309@gmail.com>
|
orangekame3 <miya.org.0309@gmail.com>
|
||||||
otbutz <tbutz@optitool.de>
|
otbutz <tbutz@optitool.de>
|
||||||
Otiel <Otiel@users.noreply.github.com>
|
|
||||||
overkill <22098433+0verk1ll@users.noreply.github.com>
|
overkill <22098433+0verk1ll@users.noreply.github.com>
|
||||||
Oyebanji Jacob Mayowa <oyebanji05@gmail.com>
|
Oyebanji Jacob Mayowa <oyebanji05@gmail.com>
|
||||||
Pablo <pbaeyens31+github@gmail.com>
|
Pablo <pbaeyens31+github@gmail.com>
|
||||||
@@ -281,7 +241,6 @@ Pascal Jungblut (pascalj) <github@pascalj.com> <mail@pascal-jungblut.com>
|
|||||||
Paul Brit <paulbrit44@gmail.com>
|
Paul Brit <paulbrit44@gmail.com>
|
||||||
Paul Donald <newtwen+github@gmail.com>
|
Paul Donald <newtwen+github@gmail.com>
|
||||||
Pawel Palenica (qepasa) <pawelpalenica11@gmail.com>
|
Pawel Palenica (qepasa) <pawelpalenica11@gmail.com>
|
||||||
Paweł Rozlach <vespian@users.noreply.github.com>
|
|
||||||
perewa <cavalcante.ten@gmail.com>
|
perewa <cavalcante.ten@gmail.com>
|
||||||
Peter Badida <KeyWeeUsr@users.noreply.github.com>
|
Peter Badida <KeyWeeUsr@users.noreply.github.com>
|
||||||
Peter Dave Hello <hsu@peterdavehello.org>
|
Peter Dave Hello <hsu@peterdavehello.org>
|
||||||
@@ -291,19 +250,15 @@ Phani Rithvij <phanirithvij2000@gmail.com>
|
|||||||
Phil Davis <phil.davis@inf.org>
|
Phil Davis <phil.davis@inf.org>
|
||||||
Philippe Schommers (filoozoom) <philippe@schommers.be>
|
Philippe Schommers (filoozoom) <philippe@schommers.be>
|
||||||
Phill Luby (pluby) <phill.luby@newredo.com>
|
Phill Luby (pluby) <phill.luby@newredo.com>
|
||||||
Pier Paolo Ramon <ramonpierre@gmail.com>
|
|
||||||
Piotr Bejda (piobpl) <piotrb10@gmail.com>
|
Piotr Bejda (piobpl) <piotrb10@gmail.com>
|
||||||
polyfloyd <polyfloyd@users.noreply.github.com>
|
polyfloyd <polyfloyd@users.noreply.github.com>
|
||||||
Pramodh KP (pramodhkp) <pramodh.p@directi.com> <1507241+pramodhkp@users.noreply.github.com>
|
|
||||||
Quentin Hibon <qh.public@yahoo.com>
|
Quentin Hibon <qh.public@yahoo.com>
|
||||||
Rahmi Pruitt <rjpruitt16@gmail.com>
|
Rahmi Pruitt <rjpruitt16@gmail.com>
|
||||||
red_led <red-led@users.noreply.github.com>
|
red_led <red-led@users.noreply.github.com>
|
||||||
Richard Hartmann <RichiH@users.noreply.github.com>
|
|
||||||
Robert Carosi (nov1n) <robert@carosi.nl>
|
Robert Carosi (nov1n) <robert@carosi.nl>
|
||||||
Roberto Santalla <roobre@users.noreply.github.com>
|
Roberto Santalla <roobre@users.noreply.github.com>
|
||||||
Robin Schoonover <robin@cornhooves.org>
|
Robin Schoonover <robin@cornhooves.org>
|
||||||
Roman Zaynetdinov (zaynetro) <romanznet@gmail.com>
|
Roman Zaynetdinov (zaynetro) <romanznet@gmail.com>
|
||||||
Ross Smith II (rasa) <ross@smithii.com>
|
|
||||||
rubenbe <github-com-00ff86@vandamme.email>
|
rubenbe <github-com-00ff86@vandamme.email>
|
||||||
Ruslan Yevdokymov <38809160+ruslanye@users.noreply.github.com>
|
Ruslan Yevdokymov <38809160+ruslanye@users.noreply.github.com>
|
||||||
Ryan Qian <i@bitbili.net>
|
Ryan Qian <i@bitbili.net>
|
||||||
@@ -315,18 +270,14 @@ Sergey Mishin (ralder) <ralder@yandex.ru>
|
|||||||
Sertonix <83883937+Sertonix@users.noreply.github.com>
|
Sertonix <83883937+Sertonix@users.noreply.github.com>
|
||||||
Severin von Wnuck-Lipinski <ss7@live.de>
|
Severin von Wnuck-Lipinski <ss7@live.de>
|
||||||
Shaarad Dalvi <60266155+shaaraddalvi@users.noreply.github.com> <shdalv@microsoft.com>
|
Shaarad Dalvi <60266155+shaaraddalvi@users.noreply.github.com> <shdalv@microsoft.com>
|
||||||
Simon Frei (imsodin) <freisim93@gmail.com>
|
|
||||||
Simon Mwepu <simonmwepu@gmail.com>
|
Simon Mwepu <simonmwepu@gmail.com>
|
||||||
Simon Pickup <simon@pickupinfinity.com>
|
Simon Pickup <simon@pickupinfinity.com>
|
||||||
Sly_tom_cat <slytomcat@mail.ru>
|
Sly_tom_cat <slytomcat@mail.ru>
|
||||||
Sonu Kumar Saw <31889738+dev-saw99@users.noreply.github.com>
|
Sonu Kumar Saw <31889738+dev-saw99@users.noreply.github.com>
|
||||||
Stefan Kuntz (Stefan-Code) <stefan.github@gmail.com> <Stefan.github@gmail.com>
|
Stefan Kuntz (Stefan-Code) <stefan.github@gmail.com> <Stefan.github@gmail.com>
|
||||||
Stefan Tatschner (rumpelsepp) <stefan@sevenbyte.org> <rumpelsepp@sevenbyte.org> <stefan@rumpelsepp.org>
|
|
||||||
Steven Eckhoff <steven.eckhoff.opensource@gmail.com>
|
Steven Eckhoff <steven.eckhoff.opensource@gmail.com>
|
||||||
Suhas Gundimeda (snugghash) <suhas.gundimeda@gmail.com> <snugghash@gmail.com>
|
Suhas Gundimeda (snugghash) <suhas.gundimeda@gmail.com> <snugghash@gmail.com>
|
||||||
Sven Bachmann <dev@mcbachmann.de>
|
Sven Bachmann <dev@mcbachmann.de>
|
||||||
Syncthing Automation <automation@syncthing.net>
|
|
||||||
Syncthing Release Automation <release@syncthing.net>
|
|
||||||
Sébastien WENSKE <sebastien@wenske.fr>
|
Sébastien WENSKE <sebastien@wenske.fr>
|
||||||
Taylor Khan (nelsonkhan) <nelsonkhan@gmail.com>
|
Taylor Khan (nelsonkhan) <nelsonkhan@gmail.com>
|
||||||
Terrance <git@terrance.allofti.me>
|
Terrance <git@terrance.allofti.me>
|
||||||
@@ -335,14 +286,11 @@ Thomas <9749173+uhthomas@users.noreply.github.com>
|
|||||||
Thomas Hipp <thomashipp@gmail.com>
|
Thomas Hipp <thomashipp@gmail.com>
|
||||||
Tim Abell (timabell) <tim@timwise.co.uk>
|
Tim Abell (timabell) <tim@timwise.co.uk>
|
||||||
Tim Howes (timhowes) <timhowes@berkeley.edu>
|
Tim Howes (timhowes) <timhowes@berkeley.edu>
|
||||||
Tim Nordenfur <tim@gurka.se>
|
|
||||||
Tobias Frölich <40638719+tobifroe@users.noreply.github.com>
|
Tobias Frölich <40638719+tobifroe@users.noreply.github.com>
|
||||||
Tobias Klauser <tobias.klauser@gmail.com>
|
Tobias Klauser <tobias.klauser@gmail.com>
|
||||||
Tobias Nygren (tnn2) <tnn@nygren.pp.se>
|
Tobias Nygren (tnn2) <tnn@nygren.pp.se>
|
||||||
Tobias Tom (tobiastom) <t.tom@succont.de>
|
Tobias Tom (tobiastom) <t.tom@succont.de>
|
||||||
Tom Jakubowski <tom@crystae.net>
|
Tom Jakubowski <tom@crystae.net>
|
||||||
Tomasz Wilczyński <5626656+tomasz1986@users.noreply.github.com> <twilczynski@naver.com>
|
|
||||||
Tommy Thorn <tommy-github-email@thorn.ws>
|
|
||||||
Tommy van der Vorst <tommy-github@pixelspark.nl> <tommy@pixelspark.nl>
|
Tommy van der Vorst <tommy-github@pixelspark.nl> <tommy@pixelspark.nl>
|
||||||
Tully Robinson (tojrobinson) <tully@tojr.org>
|
Tully Robinson (tojrobinson) <tully@tojr.org>
|
||||||
Tyler Brazier (tylerbrazier) <tyler@tylerbrazier.com>
|
Tyler Brazier (tylerbrazier) <tyler@tylerbrazier.com>
|
||||||
@@ -360,10 +308,9 @@ WangXi <xib1102@icloud.com>
|
|||||||
Will Rouesnel <wrouesnel@wrouesnel.com>
|
Will Rouesnel <wrouesnel@wrouesnel.com>
|
||||||
William A. Kennington III (wkennington) <william@wkennington.com>
|
William A. Kennington III (wkennington) <william@wkennington.com>
|
||||||
wouter bolsterlee <wouter@bolsterl.ee>
|
wouter bolsterlee <wouter@bolsterl.ee>
|
||||||
Wulf Weich (wweich) <wweich@users.noreply.github.com> <wweich@gmx.de> <wulf@weich-kr.de>
|
|
||||||
xarx00 <xarx00@users.noreply.github.com>
|
xarx00 <xarx00@users.noreply.github.com>
|
||||||
Xavier O. (damajor) <damajor@gmail.com>
|
Xavier O. (damajor) <damajor@gmail.com>
|
||||||
xjtdy888 (xjtdy888) <xjtdy888@163.com>
|
xjtdy888 (xjtdy888) <xjtdy888@163.com> <xjtdy888@gmail.com>
|
||||||
Yannic A. (eipiminus1) <eipiminusone+github@gmail.com> <eipiminus1@users.noreply.github.com>
|
Yannic A. (eipiminus1) <eipiminusone+github@gmail.com> <eipiminus1@users.noreply.github.com>
|
||||||
佛跳墙 <daoquan@qq.com>
|
佛跳墙 <daoquan@qq.com>
|
||||||
落心 <luoxin.ttt@gmail.com>
|
落心 <luoxin.ttt@gmail.com>
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
<h4 class="text-center" translate>The Syncthing Authors</h4>
|
<h4 class="text-center" translate>The Syncthing Authors</h4>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12" id="contributor-list">
|
<div class="col-md-12" id="contributor-list">
|
||||||
Jakob Borg, Audrius Butkevicius, Jesse Lucas, Simon Frei, Tomasz Wilczyński, Alexander Graf, Alexandre Viau, Anderson Mesquita, André Colomb, Antony Male, Ben Schulz, Caleb Callaway, Daniel Harte, Emil Lundberg, Eric P, Evgeny Kuznetsov, Lars K.W. Gohlke, Lode Hoste, Michael Ploujnikov, Nate Morrison, Philippe Schommers, Ross Smith II, Ryan Sullivan, Sergey Mishin, Stefan Tatschner, Wulf Weich, bt90, greatroar, Aaron Bieber, Adam Piggott, Adel Qalieh, Alan Pope, Alberto Donato, Aleksey Vasenev, Alessandro G., Alex Ionescu, Alex Lindeman, Alex Xu, Alexander Seiler, Alexandre Alves, Aman Gupta, Anatoli Babenia, Andreas Sommer, Andrew Dunham, Andrew Meyer, Andrew Rabert, Andrey D, Anjan Momi, Anthony Goeckner, Antoine Lamielle, Anur, Aranjedeath, Arkadiusz Tymiński, Aroun, Arthur Axel fREW Schmidt, Artur Zubilewicz, Aurélien Rainone, BAHADIR YILMAZ, Bart De Vries, Beat Reichenbach, Ben Curthoys, Ben Shepherd, Ben Sidhom, Benedikt Heine, Benedikt Morbach, Benjamin Nater, Benno Fünfstück, Benny Ng, Boqin Qin, Boris Rybalkin, Brandon Philips, Brendan Long, Brian R. Becker, Carsten Hagemann, Catfriend1, Cathryne Linenweaver, Cedric Staniewski, Chih-Hsuan Yen, Choongkyu, Chris Howie, Chris Joel, Chris Tonkinson, Christian Kujau, Christian Prescott, Colin Kennedy, Cromefire_, Cyprien Devillez, Dale Visser, Dan, Daniel Barczyk, Daniel Bergmann, Daniel Martí, Daniel Padrta, Darshil Chanpura, David Rimmer, DeflateAwning, Denis A., Dennis Wilson, DerRockWolf, Devon G. Redekopp, Dimitri Papadopoulos Orfanos, Dmitry Saveliev, Domenic Horner, Dominik Heidler, Elias Jarlebring, Elliot Huffman, Emil Hessman, Eng Zer Jun, Eric Lesiuta, Erik Meitner, Evan Spensley, Federico Castagnini, Felix, Felix Ableitner, Felix Lampe, Felix Unterpaintner, Francois-Xavier Gsell, Frank Isemann, Gahl Saraf, Gilli Sigurdsson, Gleb Sinyavskiy, Graham Miln, Greg, Gusted, Han Boetes, HansK-p, Harrison Jones, Hazem Krimi, Heiko Zuerker, Hireworks, Hugo Locurcio, Iain Barnett, Ian Johnson, Ikko Ashimine, Ilya Brin, Iskander Sharipov, Jaakko Hannikainen, Jacek Szafarkiewicz, Jack Croft, Jacob, Jake Peterson, James O'Beirne, James Patterson, Jaroslav Lichtblau, Jaroslav Malec, Jaspitta, Jauder Ho, Jaya Chithra, Jaya Kumar, Jeffery To, Jens Diemer, Jerry Jacobs, Jochen Voss, Johan Andersson, Johan Vromans, John Rinehart, Jonas Thelemann, Jonathan, Jonathan Cross, Jonta, Jose Manuel Delicado, Julian Lehrhuber, Jörg Thalheim, Jędrzej Kula, K.B.Dharun Krishna, Kalle Laine, Kapil Sareen, Karol Różycki, Kebin Liu, Keith Harrison, Keith Turner, Kelong Cong, Ken'ichi Kamada, Kevin Allen, Kevin Bushiri, Kevin White, Jr., Kurt Fitzner, LSmithx2, Lars Lehtonen, Laurent Arnoud, Laurent Etiemble, Leo Arias, Liu Siyuan, Lord Landon Agahnim, Lukas Lihotzki, Luke Hamburg, Majed Abdulaziz, Marc Laporte, Marc Pujol, Marcin Dziadus, Marcus B Spencer, Marcus Legendre, Mario Majila, Mark Pulford, Martchus, Martin Polehla, Mateusz Naściszewski, Mateusz Ż, Matic Potočnik, Matt Burke, Matt Robenolt, Matteo Ruina, Maurizio Tomasi, Max, Max Schulze, MaximAL, Maxime Thirouin, Maximilian, MichaIng, Michael Jephcote, Michael Rienstra, Michael Tilli, Migelo, Mike Boone, MikeLund, MikolajTwarog, Mingxuan Lin, Naveen, Nicholas Rishel, Nick Busey, Nico Stapelbroek, Nicolas Braud-Santoni, Nicolas Perraut, Niels Peter Roest, Nils Jakobi, NinoM4ster, Nitroretro, NoLooseEnds, Oliver Freyermuth, Otiel, Oyebanji Jacob Mayowa, Pablo, Pascal Jungblut, Paul Brit, Paul Donald, Pawel Palenica, Paweł Rozlach, Peter Badida, Peter Dave Hello, Peter Hoeg, Peter Marquardt, Phani Rithvij, Phil Davis, Phill Luby, Pier Paolo Ramon, Piotr Bejda, Pramodh KP, Quentin Hibon, Rahmi Pruitt, Richard Hartmann, Robert Carosi, Roberto Santalla, Robin Schoonover, Roman Zaynetdinov, Ruslan Yevdokymov, Ryan Qian, Sacheendra Talluri, Scott Klupfel, Sertonix, Severin von Wnuck-Lipinski, Shaarad Dalvi, Simon Mwepu, Simon Pickup, Sly_tom_cat, Sonu Kumar Saw, Stefan Kuntz, Steven Eckhoff, Suhas Gundimeda, Sven Bachmann, Sébastien WENSKE, Taylor Khan, Terrance, TheCreeper, Thomas, Thomas Hipp, Tim Abell, Tim Howes, Tim Nordenfur, Tobias Frölich, Tobias Klauser, Tobias Nygren, Tobias Tom, Tom Jakubowski, Tommy Thorn, Tommy van der Vorst, Tully Robinson, Tyler Brazier, Tyler Kropp, Unrud, Veeti Paananen, Victor Buinsky, Vik, Vil Brekin, Vladimir Rusinov, WangXi, Will Rouesnel, William A. Kennington III, Xavier O., Yannic A., andresvia, andyleap, boomsquared, chenrui, chucic, cjc7373, cui fliter, d-volution, dashangcun, derekriemer, desbma, diemade, digital, domain, entity0xfe, georgespatton, ghjklw, guangwu, gudvinr, ignacy123, janost, jaseg, jelle van der Waa, jtagcat, klemens, kylosus, luchenhan, luzpaz, marco-m, mathias4833, maxice8, mclang, mv1005, nf, orangekame3, otbutz, overkill, perewa, polyfloyd, red_led, rubenbe, sec65, vapatel2, villekalliomaki, wangguoliang, wouter bolsterlee, xarx00, xjtdy888, 佛跳墙, 落心
|
Jakob Borg, Audrius Butkevicius, Simon Frei, Tomasz Wilczyński, Alexander Graf, Alexandre Viau, Anderson Mesquita, André Colomb, Antony Male, Ben Schulz, bt90, Caleb Callaway, Daniel Harte, Emil Lundberg, Eric P, Evgeny Kuznetsov, greatroar, Lars K.W. Gohlke, Lode Hoste, Michael Ploujnikov, Ross Smith II, Stefan Tatschner, Wulf Weich, Adam Piggott, Adel Qalieh, Aleksey Vasenev, Alessandro G., Alex Ionescu, Alex Lindeman, Alex Xu, Alexander Seiler, Alexandre Alves, Aman Gupta, Andreas Sommer, andresvia, Andrew Rabert, Andrey D, andyleap, Anjan Momi, Anthony Goeckner, Antoine Lamielle, Anur, Aranjedeath, Arkadiusz Tymiński, Aroun, Arthur Axel fREW Schmidt, Artur Zubilewicz, Aurélien Rainone, BAHADIR YILMAZ, Bart De Vries, Beat Reichenbach, Ben Shepherd, Ben Sidhom, Benedikt Heine, Benno Fünfstück, Benny Ng, boomsquared, Boqin Qin, Boris Rybalkin, Brendan Long, Catfriend1, Cathryne Linenweaver, Cedric Staniewski, Chih-Hsuan Yen, Choongkyu, Chris Howie, Chris Joel, Christian Kujau, Christian Prescott, chucic, cjc7373, Colin Kennedy, Cromefire_, Cyprien Devillez, d-volution, Dan, Daniel Barczyk, Daniel Bergmann, Daniel Martí, Daniel Padrta, Darshil Chanpura, dashangcun, David Rimmer, DeflateAwning, Denis A., Dennis Wilson, derekriemer, DerRockWolf, desbma, Devon G. Redekopp, digital, Dimitri Papadopoulos Orfanos, Dmitry Saveliev, domain, Domenic Horner, Dominik Heidler, Elias Jarlebring, Elliot Huffman, Emil Hessman, Eng Zer Jun, entity0xfe, Eric Lesiuta, Erik Meitner, Evan Spensley, Federico Castagnini, Felix, Felix Ableitner, Felix Lampe, Felix Unterpaintner, Francois-Xavier Gsell, Frank Isemann, Gahl Saraf, georgespatton, ghjklw, Gilli Sigurdsson, Gleb Sinyavskiy, Graham Miln, Greg, guangwu, gudvinr, Gusted, Han Boetes, HansK-p, Harrison Jones, Hazem Krimi, Heiko Zuerker, Hireworks, Hugo Locurcio, Iain Barnett, Ian Johnson, ignacy123, Iskander Sharipov, Jaakko Hannikainen, Jack Croft, Jacob, Jake Peterson, James O'Beirne, James Patterson, Jaroslav Lichtblau, Jaroslav Malec, Jaspitta, Jaya Chithra, Jaya Kumar, Jeffery To, jelle van der Waa, Jens Diemer, Jochen Voss, Johan Vromans, John Rinehart, Jonas Thelemann, Jonathan, Jose Manuel Delicado, jtagcat, Julian Lehrhuber, Jörg Thalheim, Jędrzej Kula, Kapil Sareen, Karol Różycki, Kebin Liu, Keith Harrison, Kelong Cong, Ken'ichi Kamada, Kevin Allen, Kevin Bushiri, Kevin White, Jr., klemens, Kurt Fitzner, kylosus, Lars Lehtonen, Laurent Etiemble, Leo Arias, Liu Siyuan, Lord Landon Agahnim, LSmithx2, Lukas Lihotzki, Luke Hamburg, luzpaz, Majed Abdulaziz, Marc Laporte, Marcin Dziadus, Marcus B Spencer, Marcus Legendre, Mario Majila, Mark Pulford, Martchus, Mateusz Naściszewski, Mateusz Ż, mathias4833, Matic Potočnik, Matt Burke, Matt Robenolt, Matteo Ruina, Maurizio Tomasi, Max, Max Schulze, MaximAL, Maximilian, Michael Jephcote, Michael Rienstra, MichaIng, Migelo, Mike Boone, MikeLund, MikolajTwarog, Mingxuan Lin, mv1005, Nate Morrison, nf, Nicholas Rishel, Nick Busey, Nico Stapelbroek, Nicolas Braud-Santoni, Nicolas Perraut, Niels Peter Roest, Nils Jakobi, NinoM4ster, Nitroretro, NoLooseEnds, Oliver Freyermuth, orangekame3, otbutz, overkill, Oyebanji Jacob Mayowa, Pablo, Pascal Jungblut, Paul Brit, Paul Donald, Pawel Palenica, perewa, Peter Badida, Peter Dave Hello, Peter Hoeg, Peter Marquardt, Phani Rithvij, Phil Davis, Philippe Schommers, Phill Luby, Piotr Bejda, polyfloyd, Quentin Hibon, Rahmi Pruitt, red_led, Robert Carosi, Roberto Santalla, Robin Schoonover, Roman Zaynetdinov, rubenbe, Ruslan Yevdokymov, Ryan Qian, Ryan Sullivan, Sacheendra Talluri, Scott Klupfel, sec65, Sergey Mishin, Sertonix, Severin von Wnuck-Lipinski, Shaarad Dalvi, Simon Mwepu, Simon Pickup, Sly_tom_cat, Sonu Kumar Saw, Stefan Kuntz, Steven Eckhoff, Suhas Gundimeda, Sven Bachmann, Sébastien WENSKE, Taylor Khan, Terrance, TheCreeper, Thomas, Thomas Hipp, Tim Abell, Tim Howes, Tobias Frölich, Tobias Klauser, Tobias Nygren, Tobias Tom, Tom Jakubowski, Tommy van der Vorst, Tully Robinson, Tyler Brazier, Tyler Kropp, Unrud, vapatel2, Veeti Paananen, Victor Buinsky, Vik, Vil Brekin, villekalliomaki, Vladimir Rusinov, wangguoliang, WangXi, Will Rouesnel, William A. Kennington III, wouter bolsterlee, xarx00, Xavier O., xjtdy888, Yannic A., 佛跳墙, 落心
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+158
-171
@@ -14,14 +14,14 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"cmp"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
|
||||||
"log"
|
"log"
|
||||||
"math"
|
"math"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"regexp"
|
"regexp"
|
||||||
"sort"
|
"slices"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -64,59 +64,33 @@ type author struct {
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
// Read authors from the AUTHORS file
|
// Read authors from the AUTHORS file
|
||||||
authors := getAuthors()
|
authorSet := getAuthors()
|
||||||
|
|
||||||
// Grab the set of thus known email addresses
|
|
||||||
listed := make(stringSet)
|
|
||||||
names := make(map[string]int)
|
|
||||||
for i, a := range authors {
|
|
||||||
names[a.name] = i
|
|
||||||
for _, e := range a.emails {
|
|
||||||
listed.add(e)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Grab the set of all known authors based on the git log, and add any
|
// Grab the set of all known authors based on the git log, and add any
|
||||||
// missing ones to the authors list.
|
// missing ones to the authors list.
|
||||||
all := allAuthors()
|
addAuthors(authorSet)
|
||||||
for email, name := range all {
|
|
||||||
if listed.has(email) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, ok := names[name]; ok && name != "" {
|
authors := authorSet.filteredAuthors()
|
||||||
// We found a match on name
|
|
||||||
authors[names[name]].emails = append(authors[names[name]].emails, email)
|
|
||||||
listed.add(email)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
authors = append(authors, author{
|
// Write authors to the about dialog
|
||||||
name: name,
|
|
||||||
emails: []string{email},
|
|
||||||
})
|
|
||||||
names[name] = len(authors) - 1
|
|
||||||
listed.add(email)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write author names in GUI about modal
|
slices.SortFunc(authors, func(a, b author) int {
|
||||||
|
return cmp.Or(
|
||||||
getContributions(authors)
|
-cmp.Compare(a.log10commits, b.log10commits),
|
||||||
sort.Sort(byContributions(authors))
|
cmp.Compare(strings.ToLower(a.name), strings.ToLower(b.name)))
|
||||||
|
})
|
||||||
|
|
||||||
var lines []string
|
var lines []string
|
||||||
for _, author := range authors {
|
for _, author := range authors {
|
||||||
if authorBotsRe.MatchString(author.name) {
|
|
||||||
// Only humans are eligible, pending future legislation to the
|
|
||||||
// contrary.
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
lines = append(lines, author.name)
|
lines = append(lines, author.name)
|
||||||
}
|
}
|
||||||
replacement := strings.Join(lines, ", ")
|
replacement := strings.Join(lines, ", ")
|
||||||
|
|
||||||
authorsRe := regexp.MustCompile(`(?s)id="contributor-list">.*?</div>`)
|
authorsRe := regexp.MustCompile(`(?s)id="contributor-list">.*?</div>`)
|
||||||
bs := readAll(htmlFile)
|
bs, err := os.ReadFile(htmlFile)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
bs = authorsRe.ReplaceAll(bs, []byte("id=\"contributor-list\">\n"+replacement+"\n </div>"))
|
bs = authorsRe.ReplaceAll(bs, []byte("id=\"contributor-list\">\n"+replacement+"\n </div>"))
|
||||||
|
|
||||||
if err := os.WriteFile(htmlFile, bs, 0o644); err != nil {
|
if err := os.WriteFile(htmlFile, bs, 0o644); err != nil {
|
||||||
@@ -125,8 +99,6 @@ func main() {
|
|||||||
|
|
||||||
// Write AUTHORS file
|
// Write AUTHORS file
|
||||||
|
|
||||||
sort.Sort(byName(authors))
|
|
||||||
|
|
||||||
out, err := os.Create("AUTHORS")
|
out, err := os.Create("AUTHORS")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
@@ -141,16 +113,22 @@ func main() {
|
|||||||
for _, email := range author.emails {
|
for _, email := range author.emails {
|
||||||
fmt.Fprintf(out, " <%s>", email)
|
fmt.Fprintf(out, " <%s>", email)
|
||||||
}
|
}
|
||||||
fmt.Fprintf(out, "\n")
|
fmt.Fprint(out, "\n")
|
||||||
}
|
}
|
||||||
out.Close()
|
out.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
func getAuthors() []author {
|
func getAuthors() *authorSet {
|
||||||
bs := readAll("AUTHORS")
|
bs, err := os.ReadFile("AUTHORS")
|
||||||
lines := strings.Split(string(bs), "\n")
|
if err != nil {
|
||||||
var authors []author
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
lines := strings.Split(string(bs), "\n")
|
||||||
|
authors := &authorSet{
|
||||||
|
emails: make(map[string]int),
|
||||||
|
commits: make(map[string]stringSet),
|
||||||
|
}
|
||||||
for _, line := range lines {
|
for _, line := range lines {
|
||||||
if len(line) == 0 || line[0] == '#' {
|
if len(line) == 0 || line[0] == '#' {
|
||||||
continue
|
continue
|
||||||
@@ -159,7 +137,9 @@ func getAuthors() []author {
|
|||||||
fields := strings.Fields(line)
|
fields := strings.Fields(line)
|
||||||
var author author
|
var author author
|
||||||
for _, field := range fields {
|
for _, field := range fields {
|
||||||
if m := nicknameRe.FindStringSubmatch(field); len(m) > 1 {
|
if field == "#" {
|
||||||
|
break
|
||||||
|
} else if m := nicknameRe.FindStringSubmatch(field); len(m) > 1 {
|
||||||
author.nickname = m[1]
|
author.nickname = m[1]
|
||||||
} else if m := emailRe.FindStringSubmatch(field); len(m) > 1 {
|
} else if m := emailRe.FindStringSubmatch(field); len(m) > 1 {
|
||||||
author.emails = append(author.emails, m[1])
|
author.emails = append(author.emails, m[1])
|
||||||
@@ -172,53 +152,11 @@ func getAuthors() []author {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
authors = append(authors, author)
|
authors.add(author)
|
||||||
}
|
}
|
||||||
return authors
|
return authors
|
||||||
}
|
}
|
||||||
|
|
||||||
func readAll(path string) []byte {
|
|
||||||
fd, err := os.Open(path)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
defer fd.Close()
|
|
||||||
|
|
||||||
bs, err := io.ReadAll(fd)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return bs
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add number of commits per author to the author list.
|
|
||||||
func getContributions(authors []author) {
|
|
||||||
buf := new(bytes.Buffer)
|
|
||||||
cmd := exec.Command("git", "log", "--pretty=format:%ae")
|
|
||||||
cmd.Stdout = buf
|
|
||||||
err := cmd.Run()
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
next:
|
|
||||||
for _, line := range strings.Split(buf.String(), "\n") {
|
|
||||||
for i := range authors {
|
|
||||||
for _, email := range authors[i].emails {
|
|
||||||
if email == line {
|
|
||||||
authors[i].commits++
|
|
||||||
continue next
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for i := range authors {
|
|
||||||
authors[i].log10commits = int(math.Log10(float64(authors[i].commits + 1)))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// list of commits that we don't include in our author file; because they
|
// list of commits that we don't include in our author file; because they
|
||||||
// are legacy things that don't affect code, are committed with incorrect
|
// are legacy things that don't affect code, are committed with incorrect
|
||||||
// address, or for other reasons.
|
// address, or for other reasons.
|
||||||
@@ -230,102 +168,95 @@ var excludeCommits = stringSetFromStrings([]string{
|
|||||||
"9bdcadf6345aba3a939e9e58d85b89dbe9d44bc9",
|
"9bdcadf6345aba3a939e9e58d85b89dbe9d44bc9",
|
||||||
"b933e9666abdfcd22919dd458c930d944e1e1b7f",
|
"b933e9666abdfcd22919dd458c930d944e1e1b7f",
|
||||||
"b84d960a81c1282a79e2b9477558de4f1af6faae",
|
"b84d960a81c1282a79e2b9477558de4f1af6faae",
|
||||||
|
"4dfb9d7c83ed172f12ae19408517961f4a49beeb",
|
||||||
})
|
})
|
||||||
|
|
||||||
// allAuthors returns the set of authors in the git commit log, except those
|
// allAuthors returns the set of authors in the git commit log, except those
|
||||||
// in excluded commits.
|
// in excluded commits.
|
||||||
func allAuthors() map[string]string {
|
func addAuthors(authors *authorSet) {
|
||||||
// Format is hash, email, name, newline, body. The body is indented with
|
// All existing source-tracked files
|
||||||
// one space, to differentiate from the hash lines.
|
bs, err := exec.Command("git", "ls-tree", "-r", "HEAD", "--name-only").CombinedOutput()
|
||||||
args := append([]string{"log", "--format=%H %ae %an%n%w(,1,1)%b"})
|
|
||||||
cmd := exec.Command("git", args...)
|
|
||||||
bs, err := cmd.Output()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("git:", err)
|
fmt.Println(string(bs))
|
||||||
|
log.Fatal("git ls-tree:", err)
|
||||||
}
|
}
|
||||||
|
files := strings.Split(string(bs), "\n")
|
||||||
|
files = slices.DeleteFunc(files, func(s string) bool {
|
||||||
|
return !(strings.HasPrefix(s, "assets/") ||
|
||||||
|
strings.HasPrefix(s, "cmd/") ||
|
||||||
|
strings.HasPrefix(s, "etc/") ||
|
||||||
|
strings.HasPrefix(s, "gui/") ||
|
||||||
|
strings.HasPrefix(s, "internal/") ||
|
||||||
|
strings.HasPrefix(s, "lib/") ||
|
||||||
|
strings.HasPrefix(s, "proto/") ||
|
||||||
|
strings.HasPrefix(s, "script/") ||
|
||||||
|
strings.HasPrefix(s, "test/") ||
|
||||||
|
strings.HasPrefix(s, "Dockerfile") ||
|
||||||
|
s == "build.go")
|
||||||
|
})
|
||||||
|
|
||||||
coAuthoredPrefix := "Co-authored-by: "
|
coAuthoredPrefix := "Co-authored-by: "
|
||||||
names := make(map[string]string)
|
for _, file := range files {
|
||||||
skipCommit := false
|
// All commits affecting those files, following any renames to their
|
||||||
for _, line := range bytes.Split(bs, []byte{'\n'}) {
|
// origin. Format is hash, email, name, newline, body. The body is
|
||||||
if len(line) == 0 {
|
// indented with one space, to differentiate from the hash lines.
|
||||||
continue
|
args := []string{"log", "--format=%H %ae %an%n%w(,1,1)%b", "--follow", "--", file}
|
||||||
|
bs, err = exec.Command("git", args...).CombinedOutput()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(string(bs))
|
||||||
|
log.Fatal("git log:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
switch line[0] {
|
skipCommit := false
|
||||||
case ' ':
|
var hash, email, name string
|
||||||
// Look for Co-authored-by: lines in the commit body.
|
for _, line := range bytes.Split(bs, []byte{'\n'}) {
|
||||||
if skipCommit {
|
if len(line) == 0 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
line = line[1:]
|
switch line[0] {
|
||||||
if bytes.HasPrefix(line, []byte(coAuthoredPrefix)) {
|
case ' ':
|
||||||
// Co-authored-by: Name Name <email@example.com>
|
// Look for Co-authored-by: lines in the commit body.
|
||||||
line = line[len(coAuthoredPrefix):]
|
if skipCommit {
|
||||||
if name, email, ok := strings.Cut(string(line), "<"); ok {
|
continue
|
||||||
name = strings.TrimSpace(name)
|
}
|
||||||
email = strings.Trim(strings.TrimSpace(email), "<>")
|
|
||||||
if email == "@" {
|
line = line[1:]
|
||||||
// GitHub special for users who hide their email.
|
if bytes.HasPrefix(line, []byte(coAuthoredPrefix)) {
|
||||||
continue
|
// Co-authored-by: Name Name <email@example.com>
|
||||||
}
|
line = line[len(coAuthoredPrefix):]
|
||||||
if names[email] == "" {
|
if name, email, ok := strings.Cut(string(line), "<"); ok {
|
||||||
names[email] = name
|
name = strings.TrimSpace(name)
|
||||||
|
email = strings.Trim(strings.TrimSpace(email), "<>")
|
||||||
|
if email == "@" {
|
||||||
|
// GitHub special for users who hide their email.
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
authors.setName(email, name)
|
||||||
|
authors.addCommit(email, hash)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
default: // hash email name
|
default: // hash email name
|
||||||
fields := strings.SplitN(string(line), " ", 3)
|
fields := strings.SplitN(string(line), " ", 3)
|
||||||
if len(fields) != 3 {
|
if len(fields) != 3 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
hash, email, name := fields[0], fields[1], fields[2]
|
hash, email, name = fields[0], fields[1], fields[2]
|
||||||
|
|
||||||
if excludeCommits.has(hash) {
|
if excludeCommits.has(hash) {
|
||||||
skipCommit = true
|
skipCommit = true
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
skipCommit = false
|
skipCommit = false
|
||||||
|
|
||||||
if names[email] == "" {
|
authors.setName(email, name)
|
||||||
names[email] = name
|
authors.addCommit(email, hash)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return names
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type byContributions []author
|
|
||||||
|
|
||||||
func (l byContributions) Len() int { return len(l) }
|
|
||||||
|
|
||||||
// Sort first by log10(commits), then by name. This means that we first get
|
|
||||||
// an alphabetic list of people with >= 1000 commits, then a list of people
|
|
||||||
// with >= 100 commits, and so on.
|
|
||||||
func (l byContributions) Less(a, b int) bool {
|
|
||||||
if l[a].log10commits != l[b].log10commits {
|
|
||||||
return l[a].log10commits > l[b].log10commits
|
|
||||||
}
|
|
||||||
return l[a].name < l[b].name
|
|
||||||
}
|
|
||||||
|
|
||||||
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] }
|
|
||||||
|
|
||||||
// A simple string set type
|
// A simple string set type
|
||||||
|
|
||||||
type stringSet map[string]struct{}
|
type stringSet map[string]struct{}
|
||||||
@@ -347,12 +278,68 @@ func (s stringSet) has(e string) bool {
|
|||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s stringSet) except(other stringSet) stringSet {
|
// A set of authors
|
||||||
diff := make(stringSet)
|
|
||||||
for e := range s {
|
type authorSet struct {
|
||||||
if !other.has(e) {
|
authors []author
|
||||||
diff.add(e)
|
emails map[string]int // email to author index
|
||||||
|
commits map[string]stringSet // email to commit hashes
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *authorSet) add(author author) {
|
||||||
|
for _, e := range author.emails {
|
||||||
|
if idx, ok := a.emails[e]; ok {
|
||||||
|
emails := append(author.emails, a.authors[idx].emails...)
|
||||||
|
slices.Sort(emails)
|
||||||
|
emails = slices.Compact(emails)
|
||||||
|
a.authors[idx].name = author.name
|
||||||
|
a.authors[idx].emails = emails
|
||||||
|
|
||||||
|
for _, e := range emails {
|
||||||
|
a.emails[e] = idx
|
||||||
|
}
|
||||||
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return diff
|
|
||||||
|
for _, e := range author.emails {
|
||||||
|
a.emails[e] = len(a.authors)
|
||||||
|
}
|
||||||
|
a.authors = append(a.authors, author)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *authorSet) setName(email, name string) {
|
||||||
|
idx, ok := a.emails[email]
|
||||||
|
if !ok {
|
||||||
|
a.emails[email] = len(a.authors)
|
||||||
|
a.authors = append(a.authors, author{name: name, emails: []string{email}})
|
||||||
|
} else if a.authors[idx].name == "" {
|
||||||
|
a.authors[idx].name = name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *authorSet) addCommit(email, hash string) {
|
||||||
|
ss, ok := a.commits[email]
|
||||||
|
if !ok {
|
||||||
|
ss = make(stringSet)
|
||||||
|
a.commits[email] = ss
|
||||||
|
}
|
||||||
|
ss.add(hash)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *authorSet) filteredAuthors() []author {
|
||||||
|
authors := make([]author, len(a.authors))
|
||||||
|
copy(authors, a.authors)
|
||||||
|
for i, author := range authors {
|
||||||
|
for _, e := range author.emails {
|
||||||
|
authors[i].commits += len(a.commits[e])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
authors = slices.DeleteFunc(authors, func(a author) bool {
|
||||||
|
return a.commits == 0 || authorBotsRe.MatchString(a.name)
|
||||||
|
})
|
||||||
|
for i := range authors {
|
||||||
|
authors[i].log10commits = int(math.Log10(float64(authors[i].commits)))
|
||||||
|
}
|
||||||
|
return authors
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user