33 lines
1.2 KiB
TypeScript
33 lines
1.2 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright Google LLC All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
* found in the LICENSE file at https://angular.io/license
|
|
*/
|
|
import * as gitCommits_ from 'git-raw-commits';
|
|
|
|
import {Commit, gitLogFormatForParsing, parseCommitMessage} from './parse';
|
|
|
|
// Set `gitCommits` as this imported value to address "Cannot call a namespace" error.
|
|
const gitCommits = gitCommits_;
|
|
|
|
|
|
/**
|
|
* Find all commits within the given range and return an object describing those.
|
|
*/
|
|
export function getCommitsInRange(from: string, to: string = 'HEAD'): Promise<Commit[]> {
|
|
return new Promise((resolve, reject) => {
|
|
/** List of parsed commit objects. */
|
|
const commits: Commit[] = [];
|
|
/** Stream of raw git commit strings in the range provided. */
|
|
const commitStream = gitCommits({from, to, format: gitLogFormatForParsing});
|
|
|
|
// Accumulate the parsed commits for each commit from the Readable stream into an array, then
|
|
// resolve the promise with the array when the Readable stream ends.
|
|
commitStream.on('data', (commit: Buffer) => commits.push(parseCommitMessage(commit)));
|
|
commitStream.on('error', (err: Error) => reject(err));
|
|
commitStream.on('end', () => resolve(commits));
|
|
});
|
|
}
|