feat(dev-infra): allow suppression of `GitClient`s verbose logging (#39474)

Some usages of the `GitClient` are better served by suppressing the
logging of lines that express what commands are being run. Many usages
of `GitClient` are contained within tools which are best served by
keeping the output clean as mostly read actions are occurring.

PR Close #39474
This commit is contained in:
Joey Perrott 2020-10-28 10:07:48 -07:00
parent 059b1ca322
commit af8e547d86
2 changed files with 13 additions and 13 deletions

View File

@ -502,7 +502,7 @@ var GithubApiRequestError = /** @class */ (function (_super) {
var GithubClient = /** @class */ (function (_super) {
tslib.__extends(GithubClient, _super);
function GithubClient(token) {
var _this =
var _this =
// Pass in authentication token to base Octokit class.
_super.call(this, { auth: token }) || this;
/** The current user based on checking against the Github API. */
@ -581,7 +581,7 @@ var GithubGraphqlClient = /** @class */ (function () {
var GitCommandError = /** @class */ (function (_super) {
tslib.__extends(GitCommandError, _super);
function GitCommandError(client, args) {
var _this =
var _this =
// Errors are not guaranteed to be caught. To ensure that we don't
// accidentally leak the Github token that might be used in a command,
// we sanitize the command that will be part of the error message.
@ -647,14 +647,13 @@ var GitClient = /** @class */ (function () {
GitClient.prototype.runGraceful = function (args, options) {
if (options === void 0) { options = {}; }
// To improve the debugging experience in case something fails, we print all executed Git
// commands unless the `stdio` is explicitly set to `ignore` (which is equivalent to silent).
// commands to better understand the git actions occuring. Depending on the command being
// executed, this debugging information should be logged at different logging levels.
var printFn = (!GitClient.LOG_COMMANDS || options.stdio === 'ignore') ? debug : info;
// Note that we do not want to print the token if it is contained in the command. It's common
// to share errors with others if the tool failed, and we do not want to leak tokens.
// TODO: Add support for configuring this on a per-client basis. Some tools do not want
// to print the Git command messages to the console at all (e.g. to maintain clean output).
var printFn = options.stdio !== 'ignore' ? info : debug;
printFn('Executing: git', this.omitGithubTokenFromMessage(args.join(' ')));
var result = child_process.spawnSync('git', args, tslib.__assign(tslib.__assign({ cwd: this._projectRoot, stdio: 'pipe' }, options), {
var result = child_process.spawnSync('git', args, tslib.__assign(tslib.__assign({ cwd: this._projectRoot, stdio: 'pipe' }, options), {
// Encoding is always `utf8` and not overridable. This ensures that this method
// always returns `string` as output instead of buffers.
encoding: 'utf8' }));
@ -792,7 +791,7 @@ function getCaretakerConfig() {
class ReleaseTrain {
constructor(
/** Name of the branch for this release-train. */
branchName,
branchName,
/** Most recent version for this release train. */
version) {
this.branchName = branchName;
@ -3050,7 +3049,7 @@ function validateMergeConfig(config) {
var PullRequestFailure = /** @class */ (function () {
function PullRequestFailure(
/** Human-readable message for the failure */
message,
message,
/** Whether the failure is non-fatal and can be forcibly ignored. */
nonFatal) {
if (nonFatal === void 0) { nonFatal = false; }

View File

@ -42,6 +42,8 @@ export class GitCommandError extends Error {
* the dev-infra configuration is loaded with its Github configuration.
**/
export class GitClient {
/** Whether verbose logging of Git actions should be used. */
static LOG_COMMANDS = true;
/** Short-hand for accessing the default remote configuration. */
remoteConfig = this._config.github;
/** Octokit request parameters object for targeting the configured remote. */
@ -88,12 +90,11 @@ export class GitClient {
*/
runGraceful(args: string[], options: SpawnSyncOptions = {}): SpawnSyncReturns<string> {
// To improve the debugging experience in case something fails, we print all executed Git
// commands unless the `stdio` is explicitly set to `ignore` (which is equivalent to silent).
// commands to better understand the git actions occuring. Depending on the command being
// executed, this debugging information should be logged at different logging levels.
const printFn = (!GitClient.LOG_COMMANDS || options.stdio === 'ignore') ? debug : info;
// Note that we do not want to print the token if it is contained in the command. It's common
// to share errors with others if the tool failed, and we do not want to leak tokens.
// TODO: Add support for configuring this on a per-client basis. Some tools do not want
// to print the Git command messages to the console at all (e.g. to maintain clean output).
const printFn = options.stdio !== 'ignore' ? info : debug;
printFn('Executing: git', this.omitGithubTokenFromMessage(args.join(' ')));
const result = spawnSync('git', args, {