commit
94f21697cd
3 changed files with 400 additions and 37 deletions
145
.mailmap
Normal file
145
.mailmap
Normal file
|
@ -0,0 +1,145 @@
|
|||
|
||||
Alexander <alexander@kuvaev.me># Alexander Kuvaev
|
||||
AbubakerB <abubaker_bashir@hotmail.com> # Abubaker Bashir
|
||||
Adam Freidin <adam.freidin@gmail.com> Adam Freidin <afreidin@adobe.com>
|
||||
Adi Dahiya <adahiya@palantir.com> Adi Dahiya <adi.dahiya14@gmail.com>
|
||||
Ahmad Farid <ahfarid@microsoft.com> ahmad-farid <ahfarid@microsoft.com>
|
||||
Alex Eagle <alexeagle@google.com>
|
||||
Anders Hejlsberg <andersh@microsoft.com> unknown <andersh@AndersX1.NOE.Nokia.com> unknown <andersh@andersh-yoga.redmond.corp.microsoft.com>
|
||||
Andrew Z Allen <me@andrewzallen.com>
|
||||
Andy Hanson <anhans@microsoft.com> Andy <anhans@microsoft.com>
|
||||
Anil Anar <anilanar@hotmail.com>
|
||||
Anton Tolmachev <myste@mail.ru>
|
||||
Arnavion <arnavion@gmail.com> # Arnav Singh
|
||||
Arthur Ozga <aozgaa@umich.edu> Arthur Ozga <t-arthoz@microsoft.com>
|
||||
Asad Saeeduddin <masaeedu@gmail.com>
|
||||
Schmavery <avery.schmavery@gmail.com> # Avery Morin
|
||||
Basarat Ali Syed <basaratali@gmail.com> Basarat Syed <basaratali@gmail.com> basarat <basaratali@gmail.com>
|
||||
Bill Ticehurst <billti@hotmail.com> Bill Ticehurst <billti@microsoft.com>
|
||||
Ben Duffield <jebavarde@gmail.com>
|
||||
Blake Embrey <hello@blakeembrey.com>
|
||||
Bowden Kelly <wilkelly@microsoft.com>
|
||||
Brett Mayen <bmayen@midnightsnacks.net>
|
||||
Bryan Forbes <bryan@reigndropsfall.net>
|
||||
Caitlin Potter <caitpotter88@gmail.com>
|
||||
ChrisBubernak <chris.bubernak@gmail.com> unknown <chrbub@chrbub1.redmond.corp.microsoft.com> # Chris Bubernak
|
||||
Chuck Jazdzewski <chuckj@google.com>
|
||||
Colby Russell <mr@colbyrussell.com>
|
||||
Colin Snover <github.com@zetafleet.com>
|
||||
Cyrus Najmabadi <cyrusn@microsoft.com> CyrusNajmabadi <cyrusn@microsoft.com> unknown <cyrusn@cylap.ntdev.corp.microsoft.com>
|
||||
Dan Corder <dev@dancorder.com>
|
||||
Dan Quirk <danquirk@microsoft.com> Dan Quirk <danquirk@users.noreply.github.com> nknown <danquirk@DANQUIRK1.redmond.corp.microsoft.com>
|
||||
Daniel Rosenwasser <drosen@microsoft.com> Daniel Rosenwasser <DanielRosenwasser@users.noreply.github.com> Daniel Rosenwasser <DanielRosenwasser@gmail.com> Daniel Rosenwasser <Daniel.Rosenwasser@microsoft.com> Daniel Rosenwasser <DanielRosenwasser@microsoft.com>
|
||||
David Li <jiawei.davidli@gmail.com>
|
||||
David Souther <davidsouther@gmail.com>
|
||||
Denis Nedelyaev <denvned@gmail.com>
|
||||
Dick van den Brink <d_vandenbrink@outlook.com> unknown <d_vandenbrink@outlook.com> unknown <d_vandenbrink@live.com>
|
||||
Dirk Baeumer <dirkb@microsoft.com> Dirk Bäumer <dirkb@microsoft.com> # Dirk Bäumer
|
||||
Dirk Holtwick <dirk.holtwick@gmail.com>
|
||||
Doug Ilijev <dilijev@users.noreply.github.com>
|
||||
Erik Edrosa <erik.edrosa@gmail.com>
|
||||
Ethan Rubio <ethanrubio@users.noreply.github.com>
|
||||
Evan Martin <martine@danga.com>
|
||||
Evan Sebastian <evanlhoini@gmail.com>
|
||||
Eyas <eyas.sharaiha@gmail.com> # Eyas Sharaiha
|
||||
falsandtru <falsandtru@users.noreply.github.com> # @falsandtru
|
||||
Frank Wallis <fwallis@outlook.com>
|
||||
František Žiačik <fziacik@gratex.com> František Žiačik <ziacik@gmail.com>
|
||||
Gabriel Isenberg <gisenberg@gmail.com>
|
||||
Gilad Peleg <giladp007@gmail.com>
|
||||
Graeme Wicksted <graeme.wicksted@gmail.com>
|
||||
Guillaume Salles <guillaume.salles@me.com>
|
||||
Guy Bedford <guybedford@gmail.com> guybedford <guybedford@gmail.com>
|
||||
Harald Niesche <harald@niesche.de>
|
||||
Iain Monro <iain.monro@softwire.com>
|
||||
Ingvar Stepanyan <me@rreverser.com>
|
||||
impinball <impinball@gmail.com> # Isiah Meadows
|
||||
Ivo Gabe de Wolff <ivogabe@ivogabe.nl>
|
||||
James Whitney <james@whitney.io>
|
||||
Jason Freeman <jfreeman@microsoft.com> Jason Freeman <JsonFreeman@users.noreply.github.com>
|
||||
Jason Killian <jkillian@palantir.com>
|
||||
Jason Ramsay <jasonra@microsoft.com> jramsay <jramsay@users.noreply.github.com>
|
||||
Jed Mao <jed.hunsaker@gmail.com>
|
||||
Jeffrey Morlan <jmmorlan@sonic.net>
|
||||
tobisek <jiri@wix.com> # Jiri Tobisek
|
||||
Johannes Rieken <jrieken@microsoft.com>
|
||||
John Vilk <jvilk@cs.umass.edu>
|
||||
jbondc <jbondc@gdesolutions.com> jbondc <jbondc@golnetwork.com> jbondc <jbondc@openmv.com> # Jonathan Bond-Caron
|
||||
Jonathan Park <jpark@daptiv.com>
|
||||
Jonathan Turner <jont@microsoft.com> Jonathan Turner <probata@hotmail.com>
|
||||
Jonathan Toland <toland@dnalot.com>
|
||||
Jesse Schalken <me@jesseschalken.com>
|
||||
Josh Kalderimis <josh.kalderimis@gmail.com>
|
||||
Josh Soref <jsoref@users.noreply.github.com>
|
||||
Juan Luis Boya García <ntrrgc@gmail.com>
|
||||
Julian Williams <julianjw92@gmail.com>
|
||||
Herrington Darkholme <nonamesheep1@gmail.com>
|
||||
Kagami Sascha Rosylight <saschanaz@outlook.com> SaschaNaz <saschanaz@outlook.com>
|
||||
Kanchalai Tanglertsampan <yuisu@microsoft.com> Yui <yuit@users.noreply.github.com>
|
||||
Kanchalai Tanglertsampan <yuisu@microsoft.com> Yui T <yuisu@microsoft.com>
|
||||
Kanchalai Tanglertsampan <yuisu@microsoft.com> Yui <yuit@users.noreply.github.com>
|
||||
Kanchalai Tanglertsampan <yuisu@microsoft.com> Yui <yuisu@microsoft.com>
|
||||
Kanchalai Tanglertsampan <yuisu@microsoft.com> yui T <yuisu@microsoft.com>
|
||||
Keith Mashinter <kmashint@yahoo.com> kmashint <kmashint@yahoo.com>
|
||||
Ken Howard <ken@simplicatedweb.com>
|
||||
kimamula <kenji.imamula@gmail.com> # Kenji Imamula
|
||||
Kyle Kelley <rgbkrk@gmail.com>
|
||||
Lorant Pinter <lorant.pinter@prezi.com>
|
||||
Lucien Greathouse <me@lpghatguy.com>
|
||||
Martin Vseticka <vseticka.martin@gmail.com> Martin Všeticka <vseticka.martin@gmail.com> MartyIX <vseticka.martin@gmail.com>
|
||||
vvakame <vvakame+dev@gmail.com> # Masahiro Wakame
|
||||
Matt McCutchen <rmccutch@mit.edu>
|
||||
Max Deepfield <maxdeepfield@absolutefreakout.com>
|
||||
Micah Zoltu <micah@zoltu.net>
|
||||
Mohamed Hegazy <mhegazy@microsoft.com>
|
||||
Nathan Shively-Sanders <nathansa@microsoft.com>
|
||||
Nathan Yee <ny.nathan.yee@gmail.com>
|
||||
Nima Zahedi <nima.zahedee@gmail.com>
|
||||
Noj Vek <nojvek@gmail.com>
|
||||
mihailik <mihailik@gmail.com> # Oleg Mihailik
|
||||
Oleksandr Chekhovskyi <oleksandr.chekhovskyi@hansoft.com>
|
||||
Paul van Brenk <paul.van.brenk@microsoft.com> Paul van Brenk <paul.van.brenk@outlook.com> unknown <paul.van.brenk@microsoft.com> unknown <paul.van.brenk@microsoft.com> unknown <pvanbren@pvbvsproai.redmond.corp.microsoft.com>
|
||||
Oskar Segersva¨rd <oskar.segersvard@widespace.com>
|
||||
pcan <piero.cangianiello@gmail.com> # Piero Cangianiello
|
||||
pcbro <2bux89+dk3zspjmuh16o@sharklasers.com> # @pcbro
|
||||
Pedro Maltez <pedro@pedro.ac> # Pedro Maltez
|
||||
piloopin <piloopin@gmail.com> # @piloopin
|
||||
milkisevil <philip@milkisevil.com> # Philip Bulley
|
||||
progre <djyayutto@gmail.com> # @progre
|
||||
Prayag Verma <prayag.verma@gmail.com>
|
||||
Punya Biswal <pbiswal@palantir.com>
|
||||
Rado Kirov <radokirov@google.com>
|
||||
Ron Buckton <rbuckton@microsoft.com> Ron Buckton <ron.buckton@microsoft.com>
|
||||
Richard Knoll <riknoll@users.noreply.github.com> Richard Knoll <riknoll@microsoft.com>
|
||||
Rowan Wyborn <rwyborn@internode.on.net>
|
||||
Ryan Cavanaugh <RyanCavanaugh@users.noreply.github.com> Ryan Cavanaugh <ryan.cavanaugh@microsoft.com> Ryan Cavanaugh <ryanca@microsoft.com>
|
||||
Ryohei Ikegami <iofg2100@gmail.com>
|
||||
Sarangan Rajamanickam <sarajama@microsoft.com>
|
||||
Sébastien Arod <sebastien.arod@gmail.com>
|
||||
Sheetal Nandi <shkamat@microsoft.com>
|
||||
Shengping Zhong <zhongsp@users.noreply.github.com>
|
||||
shyyko.serhiy@gmail.com <shyyko.serhiy@gmail.com> # Shyyko Serhiy
|
||||
Simon Hürlimann <simon.huerlimann@cyt.ch>
|
||||
Solal Pirelli <solal.pirelli@gmail.com>
|
||||
Stan Thomas <stmsdn@norvil.net>
|
||||
Stanislav Sysoev <d4rkr00t@gmail.com>
|
||||
Steve Lucco <steveluc@users.noreply.github.com> steveluc <steveluc@microsoft.com>
|
||||
Tarik <tarik@pushmote.com> # Tarik Ozket
|
||||
Tien Nguyen <tihoanh@microsoft.com> tien <hoanhtien@users.noreply.github.com> unknown <tihoanh@microsoft.com> #Tien Hoanhtien
|
||||
Tim Perry <pimterry@gmail.com>
|
||||
Tim Viiding-Spader <viispade@users.noreply.github.com>
|
||||
Tingan Ho <tingan87@gmail.com>
|
||||
togru <v3nomzxgt8@gmail.com> # togru
|
||||
Tomas Grubliauskas <tgrubliauskas@gmail.com>
|
||||
ToddThomson <achilles@telus.net> # Todd Thomson
|
||||
TruongSinh Tran-Nguyen <i@truongsinh.pro>
|
||||
vilicvane <i@vilic.info> # Vilic Vane
|
||||
Vladimir Matveev <vladima@microsoft.com> vladima <vladima@microsoft.com> v2m <desco.by@gmail.com>
|
||||
Wesley Wigham <t-weswig@microsoft.com> Wesley Wigham <wwigham@gmail.com>
|
||||
York Yao <plantain-00@users.noreply.github.com> york yao <yaoao12306@outlook.com> yaoyao <yaoyao12306@163.com>
|
||||
Yuichi Nukiyama <oscar.wilde84@hotmail.co.jp> YuichiNukiyama <oscar.wilde84@hotmail.co.jp>
|
||||
Zev Spitz <shivisi@etrog.net.il>
|
||||
Zhengbo Li <zhengbli@microsoft.com> zhengbli <zhengbli@microsoft.com> Zhengbo Li <Zhengbo Li> Zhengbo Li <zhengbli@mirosoft.com> tinza123 <li.zhengbo@outlook.com> unknown <zhengbli@zhengblit430.redmond.corp.microsoft.com> Zhengbo Li <Zhengbo Li>
|
||||
zhongsp <patrick.zhongsp@gmail.com> # Patrick Zhong
|
||||
T18970237136 <T18970237136@users.noreply.github.com> # @T18970237136
|
||||
JBerger <JBerger@melco.com>
|
110
AUTHORS.md
110
AUTHORS.md
|
@ -1,105 +1,141 @@
|
|||
TypeScript is authored by:
|
||||
|
||||
* Abubaker Bashir
|
||||
* Adam Freidin
|
||||
* Ahmad Farid
|
||||
* Akshar Patel
|
||||
* Adi Dahiya
|
||||
* Ahmad Farid
|
||||
* Alex Eagle
|
||||
* Alexander Kuvaev
|
||||
* Anders Hejlsberg
|
||||
* Andrew Z Allen
|
||||
* Andy Hanson
|
||||
* Anil Anar
|
||||
* Anton Tolmachev
|
||||
* Arnav Singh
|
||||
* Arthur Ozga
|
||||
* Asad Saeeduddin
|
||||
* Basarat Ali Syed
|
||||
* Avery Morin
|
||||
* Basarat Ali Syed
|
||||
* Ben Duffield
|
||||
* Bill Ticehurst
|
||||
* Bill Ticehurst
|
||||
* Blake Embrey
|
||||
* Bowden Kelly
|
||||
* Brett Mayen
|
||||
* Bryan Forbes
|
||||
* Caitlin Potter
|
||||
* Bryan Forbes
|
||||
* Caitlin Potter
|
||||
* Chris Bubernak
|
||||
* Colby Russell
|
||||
* Chuck Jazdzewski
|
||||
* Colby Russell
|
||||
* Colin Snover
|
||||
* Cyrus Najmabadi
|
||||
* Dan Corder
|
||||
* Dan Quirk
|
||||
* Dan Quirk
|
||||
* Daniel Rosenwasser
|
||||
* @dashaus
|
||||
* David Li
|
||||
* David Li
|
||||
* David Souther
|
||||
* Denis Nedelyaev
|
||||
* Dick van den Brink
|
||||
* Dirk Bäumer
|
||||
* Dirk Holtwick
|
||||
* Doug Ilijev
|
||||
* Erik Edrosa
|
||||
* Ethan Rubio
|
||||
* Evan Martin
|
||||
* Evan Sebastian
|
||||
* Eyas Sharaiha
|
||||
* @falsandtru
|
||||
* Frank Wallis
|
||||
* Frank Wallis
|
||||
* František Žiačik
|
||||
* Gabriel Isenberg
|
||||
* Gilad Peleg
|
||||
* Gilad Peleg
|
||||
* Graeme Wicksted
|
||||
* Guillaume Salles
|
||||
* Guillaume Salles
|
||||
* Guy Bedford
|
||||
* Harald Niesche
|
||||
* Herrington Darkholme
|
||||
* Iain Monro
|
||||
* Ingvar Stepanyan
|
||||
* Ivo Gabe de Wolff
|
||||
* James Whitney
|
||||
* Isiah Meadows
|
||||
* Ivo Gabe de Wolff
|
||||
* James Whitney
|
||||
* Jason Freeman
|
||||
* Jason Killian
|
||||
* Jason Ramsay
|
||||
* Jason Ramsay
|
||||
* JBerger
|
||||
* Jed Mao
|
||||
* Jeffrey Morlan
|
||||
* Johannes Rieken
|
||||
* Jesse Schalken
|
||||
* Jiri Tobisek
|
||||
* Johannes Rieken
|
||||
* John Vilk
|
||||
* Jonathan Bond-Caron
|
||||
* Jonathan Park
|
||||
* Jonathan Toland
|
||||
* Jonathan Turner
|
||||
* Jonathon Smith
|
||||
* Josh Kalderimis
|
||||
* Josh Soref
|
||||
* Juan Luis Boya García
|
||||
* Julian Williams
|
||||
* Kagami Sascha Rosylight
|
||||
* Kanchalai Tanglertsampan
|
||||
* Keith Mashinter
|
||||
* Ken Howard
|
||||
* Kenji Imamula
|
||||
* Lorant Pinter
|
||||
* Kyle Kelley
|
||||
* Lorant Pinter
|
||||
* Lucien Greathouse
|
||||
* Martin Všetička
|
||||
* Martin Vseticka
|
||||
* Masahiro Wakame
|
||||
* Mattias Buelens
|
||||
* Matt McCutchen
|
||||
* Max Deepfield
|
||||
* Micah Zoltu
|
||||
* Mohamed Hegazy
|
||||
* Micah Zoltu
|
||||
* Mohamed Hegazy
|
||||
* Nathan Shively-Sanders
|
||||
* Nathan Yee
|
||||
* Nima Zahedi
|
||||
* Noj Vek
|
||||
* Oleg Mihailik
|
||||
* Oleksandr Chekhovskyi
|
||||
* Paul van Brenk
|
||||
* Oleksandr Chekhovskyi
|
||||
* Oskar Segersva¨rd
|
||||
* Patrick Zhong
|
||||
* Paul van Brenk
|
||||
* @pcbro
|
||||
* Pedro Maltez
|
||||
* Pedro Maltez
|
||||
* Philip Bulley
|
||||
* piloopin
|
||||
* Piero Cangianiello
|
||||
* @piloopin
|
||||
* Prayag Verma
|
||||
* @progre
|
||||
* Punya Biswal
|
||||
* Richard Sentino
|
||||
* Ron Buckton
|
||||
* Rado Kirov
|
||||
* Richard Knoll
|
||||
* Ron Buckton
|
||||
* Rowan Wyborn
|
||||
* Ryan Cavanaugh
|
||||
* Ryan Cavanaugh
|
||||
* Ryohei Ikegami
|
||||
* Sébastien Arod
|
||||
* Sarangan Rajamanickam
|
||||
* Sheetal Nandi
|
||||
* Shengping Zhong
|
||||
* Shyyko Serhiy
|
||||
* Simon Hürlimann
|
||||
* Solal Pirelli
|
||||
* Stan Thomas
|
||||
* Stanislav Sysoev
|
||||
* Steve Lucco
|
||||
* Thomas Loubiou
|
||||
* Sébastien Arod
|
||||
* @T18970237136
|
||||
* Tarik Ozket
|
||||
* Tien Hoanhtien
|
||||
* Tim Perry
|
||||
* Tim Viiding-Spader
|
||||
* Tingan Ho
|
||||
* Todd Thomson
|
||||
* togru
|
||||
* Tomas Grubliauskas
|
||||
* TruongSinh Tran-Nguyen
|
||||
* Viliv Vane
|
||||
* Vilic Vane
|
||||
* Vladimir Matveev
|
||||
* Wesley Wigham
|
||||
* York Yao
|
||||
* Yui Tanglertsampan
|
||||
* Yuichi Nukiyama
|
||||
* Zev Spitz
|
||||
* Zhengbo Li
|
||||
* Zev Spitz
|
||||
* Zhengbo Li
|
182
scripts/authors.ts
Normal file
182
scripts/authors.ts
Normal file
|
@ -0,0 +1,182 @@
|
|||
import fs = require('fs');
|
||||
import path = require('path');
|
||||
import child_process = require("child_process");
|
||||
|
||||
type Author = {
|
||||
displayNames: string[];
|
||||
preferedName?: string;
|
||||
emails: string[];
|
||||
};
|
||||
|
||||
type AuthorMap = { [s: string]: Author };
|
||||
|
||||
type Command = {
|
||||
(...arg: string[]): void;
|
||||
description?: string;
|
||||
};
|
||||
|
||||
const mailMapPath = path.resolve("../.mailmap");
|
||||
const authorsPath = path.resolve("../AUTHORS.md");
|
||||
|
||||
function getKnownAuthors(): Author[] {
|
||||
const segmentRegExp = /\s?([^<]+)\s+<([^>]+)>/g;
|
||||
const preferedNameRegeExp = /\s?#\s?([^#]+)$/;
|
||||
const knownAuthors: Author[] = [];
|
||||
|
||||
if (!fs.existsSync(mailMapPath)) {
|
||||
throw new Error(`Could not load known users form .mailmap file at: ${mailMapPath}`);
|
||||
}
|
||||
|
||||
const mailMap = fs.readFileSync(mailMapPath).toString();
|
||||
|
||||
for (const line of mailMap.split("\r\n")) {
|
||||
const author: Author = { displayNames: [], emails: [] };
|
||||
let match: RegExpMatchArray | null;
|
||||
|
||||
while (match = segmentRegExp.exec(line)) {
|
||||
author.displayNames.push(match[1]);
|
||||
author.emails.push(match[2]);
|
||||
}
|
||||
if (match = preferedNameRegeExp.exec(line)) {
|
||||
author.preferedName = match[1];
|
||||
}
|
||||
if (!author.emails) continue;
|
||||
knownAuthors.push(author);
|
||||
if (line.indexOf("#") > 0 && !author.preferedName) {
|
||||
throw new Error("Could not match prefered name for: " + line);
|
||||
}
|
||||
// console.log("===> line: " + line);
|
||||
// console.log(JSON.stringify(author, undefined, 2));
|
||||
}
|
||||
return knownAuthors;
|
||||
}
|
||||
|
||||
function getAuthorName(author: Author) {
|
||||
return author.preferedName || author.displayNames[0];
|
||||
}
|
||||
|
||||
function getKnownAuthorMaps() {
|
||||
const knownAuthors = getKnownAuthors();
|
||||
const authorsByName: AuthorMap = {};
|
||||
const authorsByEmail: AuthorMap = {};
|
||||
knownAuthors.forEach(author => {
|
||||
author.displayNames.forEach(n => authorsByName[n] = author);
|
||||
author.emails.forEach(e => authorsByEmail[e.toLocaleLowerCase()] = author);
|
||||
});
|
||||
return {
|
||||
knownAuthors,
|
||||
authorsByName,
|
||||
authorsByEmail
|
||||
};
|
||||
}
|
||||
|
||||
function deduplicate<T>(array: T[]): T[] {
|
||||
let result: T[] = []
|
||||
if (array) {
|
||||
for (const item of array) {
|
||||
if (result.indexOf(item) < 0) {
|
||||
result.push(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function log(s: string) {
|
||||
console.log(` ${s}`);
|
||||
}
|
||||
|
||||
function sortAuthors(a: string, b: string) {
|
||||
if (a.charAt(0) === "@") a = a.substr(1);
|
||||
if (b.charAt(0) === "@") b = b.substr(1);
|
||||
if (a.toLocaleLowerCase() < b.toLocaleLowerCase()) {
|
||||
return -1;
|
||||
}
|
||||
else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
namespace Commands {
|
||||
export const writeAuthors: Command = function () {
|
||||
const output = deduplicate(getKnownAuthors().map(getAuthorName).filter(a => !!a)).sort(sortAuthors).join("\r\n* ");
|
||||
fs.writeFileSync(authorsPath, "TypeScript is authored by:\r\n* " + output);
|
||||
};
|
||||
writeAuthors.description = "Write known authors to AUTHORS.md file.";
|
||||
|
||||
export const listKnownAuthors: Command = function () {
|
||||
deduplicate(getKnownAuthors().map(getAuthorName)).filter(a => !!a).sort(sortAuthors).forEach(log);
|
||||
};
|
||||
listKnownAuthors.description = "List known authors as listed in .mailmap file.";
|
||||
|
||||
export const listAuthors: Command = function (...specs:string[]) {
|
||||
const cmd = "git shortlog -se " + specs.join(" ");
|
||||
console.log(cmd);
|
||||
const outputRegExp = /\d+\s+([^<]+)<([^>]+)>/;
|
||||
const tty = process.platform === 'win32' ? 'CON' : '/dev/tty';
|
||||
const authors: { name: string, email: string, knownAuthor?: Author }[] = [];
|
||||
child_process.exec(`${cmd} < ${tty}`, { cwd: path.resolve("../") }, function (error, stdout, stderr) {
|
||||
if (error) {
|
||||
console.log(stderr.toString());
|
||||
}
|
||||
else {
|
||||
const output = stdout.toString();
|
||||
const lines = output.split("\n");
|
||||
lines.forEach(line => {
|
||||
if (line) {
|
||||
let match: RegExpExecArray | null;
|
||||
if (match = outputRegExp.exec(line)) {
|
||||
authors.push({ name: match[1], email: match[2] });
|
||||
}
|
||||
else {
|
||||
throw new Error("Could not parse output: " + line);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
const maps = getKnownAuthorMaps();
|
||||
|
||||
const lookupAuthor = function ({name, email}: { name: string, email: string }) {
|
||||
return maps.authorsByEmail[email.toLocaleLowerCase()] || maps.authorsByName[name];
|
||||
};
|
||||
|
||||
const knownAuthors = authors
|
||||
.map(lookupAuthor)
|
||||
.filter(a => !!a)
|
||||
.map(getAuthorName);
|
||||
const unknownAuthors = authors
|
||||
.filter(a => !lookupAuthor(a))
|
||||
.map(a => `${a.name} <${a.email}>`);
|
||||
|
||||
if (knownAuthors.length) {
|
||||
console.log("\r\n");
|
||||
console.log("Found known authors: ");
|
||||
console.log("=====================");
|
||||
deduplicate(knownAuthors).sort(sortAuthors).forEach(log);
|
||||
}
|
||||
|
||||
if (unknownAuthors.length) {
|
||||
console.log("\r\n");
|
||||
console.log("Found unknown authors: ");
|
||||
console.log("=====================");
|
||||
deduplicate(unknownAuthors).sort(sortAuthors).forEach(log);
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
listAuthors.description = "List known and unknown authors for a given spec";
|
||||
}
|
||||
|
||||
var args = process.argv.slice(2);
|
||||
if (args.length < 1) {
|
||||
console.log('Usage: node authors.js [command]');
|
||||
console.log('List of commands: ');
|
||||
Object.keys(Commands).forEach(k => console.log(` ${k}: ${(Commands as any)[k]['description']}`));
|
||||
} else {
|
||||
var cmd: Function = (Commands as any)[args[0]];
|
||||
if (cmd === undefined) {
|
||||
console.log('Unknown command ' + args[1]);
|
||||
} else {
|
||||
cmd.apply(undefined, args.slice(1));
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue