Skip to content

Commit 548baad

Browse files
committed
git: have own log level
related to microsoft#85992
1 parent c6e9d72 commit 548baad

5 files changed

Lines changed: 93 additions & 5 deletions

File tree

extensions/git/package.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@
2626
},
2727
"contributes": {
2828
"commands": [
29+
{
30+
"command": "git.setLogLevel",
31+
"title": "%command.setLogLevel%",
32+
"category": "Git"
33+
},
2934
{
3035
"command": "git.clone",
3136
"title": "%command.clone%",

extensions/git/package.nls.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"displayName": "Git",
33
"description": "Git SCM Integration",
4+
"command.setLogLevel": "Set Log Level...",
45
"command.clone": "Clone",
56
"command.init": "Initialize Repository",
67
"command.openRepository": "Open Repository",

extensions/git/src/commands.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { Repository, Resource, ResourceGroupType } from './repository';
1616
import { applyLineChanges, getModifiedRange, intersectDiffWithRange, invertLineChange, toLineRanges } from './staging';
1717
import { fromGitUri, toGitUri, isGitUri } from './uri';
1818
import { grep, isDescendant, pathEquals } from './util';
19+
import { Log, LogLevel } from './log';
1920

2021
const localize = nls.loadMessageBundle();
2122

@@ -252,6 +253,36 @@ export class CommandCenter {
252253
});
253254
}
254255

256+
@command('git.setLogLevel')
257+
async setLogLevel(): Promise<void> {
258+
const createItem = (logLevel: LogLevel) => ({
259+
label: LogLevel[logLevel],
260+
logLevel,
261+
description: Log.logLevel === logLevel ? localize('current', "Current") : undefined
262+
});
263+
264+
const items = [
265+
createItem(LogLevel.Trace),
266+
createItem(LogLevel.Debug),
267+
createItem(LogLevel.Info),
268+
createItem(LogLevel.Warning),
269+
createItem(LogLevel.Error),
270+
createItem(LogLevel.Critical),
271+
createItem(LogLevel.Off)
272+
];
273+
274+
const choice = await window.showQuickPick(items, {
275+
placeHolder: localize('select log level', "Select log level")
276+
});
277+
278+
if (!choice) {
279+
return;
280+
}
281+
282+
Log.logLevel = choice.logLevel;
283+
this.outputChannel.appendLine(localize('changed', "Log level changed to: {0}", LogLevel[Log.logLevel]));
284+
}
285+
255286
@command('git.refresh', { repository: true })
256287
async refresh(repository: Repository): Promise<void> {
257288
await repository.status();

extensions/git/src/log.ts

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
import { Event, EventEmitter } from 'vscode';
7+
8+
/**
9+
* The severity level of a log message
10+
*/
11+
export enum LogLevel {
12+
Trace = 1,
13+
Debug = 2,
14+
Info = 3,
15+
Warning = 4,
16+
Error = 5,
17+
Critical = 6,
18+
Off = 7
19+
}
20+
21+
let _logLevel: LogLevel = LogLevel.Info;
22+
const _onDidChangeLogLevel = new EventEmitter<LogLevel>();
23+
24+
export const Log = {
25+
/**
26+
* Current logging level.
27+
*/
28+
get logLevel(): LogLevel {
29+
return _logLevel;
30+
},
31+
32+
/**
33+
* Current logging level.
34+
*/
35+
set logLevel(logLevel: LogLevel) {
36+
if (_logLevel === logLevel) {
37+
return;
38+
}
39+
40+
_logLevel = logLevel;
41+
_onDidChangeLogLevel.fire(logLevel);
42+
},
43+
44+
/**
45+
* An [event](#Event) that fires when the log level has changed.
46+
*/
47+
get onDidChangeLogLevel(): Event<LogLevel> {
48+
return _onDidChangeLogLevel.event;
49+
}
50+
};

extensions/git/src/repository.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import * as fs from 'fs';
77
import * as path from 'path';
8-
import { CancellationToken, Command, Disposable, env, Event, EventEmitter, LogLevel, Memento, OutputChannel, ProgressLocation, ProgressOptions, scm, SourceControl, SourceControlInputBox, SourceControlInputBoxValidation, SourceControlInputBoxValidationType, SourceControlResourceDecorations, SourceControlResourceGroup, SourceControlResourceState, ThemeColor, Uri, window, workspace, WorkspaceEdit, Decoration } from 'vscode';
8+
import { CancellationToken, Command, Disposable, Event, EventEmitter, Memento, OutputChannel, ProgressLocation, ProgressOptions, scm, SourceControl, SourceControlInputBox, SourceControlInputBoxValidation, SourceControlInputBoxValidationType, SourceControlResourceDecorations, SourceControlResourceGroup, SourceControlResourceState, ThemeColor, Uri, window, workspace, WorkspaceEdit, Decoration } from 'vscode';
99
import * as nls from 'vscode-nls';
1010
import { Branch, Change, GitErrorCodes, LogOptions, Ref, RefType, Remote, Status } from './api/git';
1111
import { AutoFetcher } from './autofetch';
@@ -15,6 +15,7 @@ import { StatusBarCommands } from './statusbar';
1515
import { toGitUri } from './uri';
1616
import { anyEvent, combinedDisposable, debounceEvent, dispose, EmptyDisposable, eventToPromise, filterEvent, find, IDisposable, isDescendant, onceEvent } from './util';
1717
import { IFileWatcher, watch } from './watch';
18+
import { Log, LogLevel } from './log';
1819

1920
const timeout = (millis: number) => new Promise(c => setTimeout(c, millis));
2021

@@ -457,8 +458,8 @@ class FileEventLogger {
457458
private onDotGitFileChange: Event<Uri>,
458459
private outputChannel: OutputChannel
459460
) {
460-
this.logLevelDisposable = env.onDidChangeLogLevel(this.onDidChangeLogLevel, this);
461-
this.onDidChangeLogLevel(env.logLevel);
461+
this.logLevelDisposable = Log.onDidChangeLogLevel(this.onDidChangeLogLevel, this);
462+
this.onDidChangeLogLevel(Log.logLevel);
462463
}
463464

464465
private onDidChangeLogLevel(level: LogLevel): void {
@@ -519,7 +520,7 @@ class DotGitWatcher implements IFileWatcher {
519520
this.transientDisposables.push(upstreamWatcher);
520521
upstreamWatcher.event(this.emitter.fire, this.emitter, this.transientDisposables);
521522
} catch (err) {
522-
if (env.logLevel <= LogLevel.Error) {
523+
if (Log.logLevel <= LogLevel.Error) {
523524
this.outputChannel.appendLine(`Failed to watch ref '${upstreamPath}', is most likely packed.\n${err.stack || err}`);
524525
}
525526
}
@@ -682,7 +683,7 @@ export class Repository implements Disposable {
682683
onDotGitFileChange = dotGitFileWatcher.event;
683684
this.disposables.push(dotGitFileWatcher);
684685
} catch (err) {
685-
if (env.logLevel <= LogLevel.Error) {
686+
if (Log.logLevel <= LogLevel.Error) {
686687
outputChannel.appendLine(`Failed to watch '${this.dotGit}', reverting to legacy API file watched. Some events might be lost.\n${err.stack || err}`);
687688
}
688689

0 commit comments

Comments
 (0)