Merge vscode source through 1.62 release (#19981)

* Build breaks 1

* Build breaks

* Build breaks

* Build breaks

* More build breaks

* Build breaks (#2512)

* Runtime breaks

* Build breaks

* Fix dialog location break

* Update typescript

* Fix ASAR break issue

* Unit test breaks

* Update distro

* Fix breaks in ADO builds (#2513)

* Bump to node 16

* Fix hygiene errors

* Bump distro

* Remove reference to node type

* Delete vscode specific extension

* Bump to node 16 in CI yaml

* Skip integration tests in CI builds (while fixing)

* yarn.lock update

* Bump moment dependency in remote yarn

* Fix drop-down chevron style

* Bump to node 16

* Remove playwrite from ci.yaml

* Skip building build scripts in hygine check
This commit is contained in:
Karl Burtram
2022-07-11 14:09:32 -07:00
committed by GitHub
parent fa0fcef303
commit 26455e9113
1876 changed files with 72050 additions and 37997 deletions

View File

@@ -694,27 +694,26 @@ export class CommandCenter {
viewColumn: ViewColumn.Active
};
let document;
try {
document = await workspace.openTextDocument(uri);
} catch (error) {
await commands.executeCommand('vscode.open', uri, {
...opts,
override: arg instanceof Resource && arg.type === Status.BOTH_MODIFIED ? false : undefined
});
await commands.executeCommand('vscode.open', uri, {
...opts,
override: arg instanceof Resource && arg.type === Status.BOTH_MODIFIED ? false : undefined
});
const document = window.activeTextEditor?.document;
// If the document doesn't match what we opened then don't attempt to select the range
if (document?.uri.toString() !== uri.toString()) {
continue;
}
// Check if active text editor has same path as other editor. we cannot compare via
// URI.toString() here because the schemas can be different. Instead we just go by path.
if (activeTextEditor && activeTextEditor.document.uri.path === uri.path) {
if (activeTextEditor && activeTextEditor.document.uri.path === uri.path && document) {
// preserve not only selection but also visible range
opts.selection = activeTextEditor.selection;
const previousVisibleRanges = activeTextEditor.visibleRanges;
const editor = await window.showTextDocument(document, opts);
editor.revealRange(previousVisibleRanges[0]);
} else {
await commands.executeCommand('vscode.open', uri, opts);
}
}
}

View File

@@ -48,13 +48,6 @@ export class GitFileSystemProvider implements FileSystemProvider {
model.onDidChangeRepository(this.onDidChangeRepository, this),
model.onDidChangeOriginalResource(this.onDidChangeOriginalResource, this),
workspace.registerFileSystemProvider('git', this, { isReadonly: true, isCaseSensitive: true }),
workspace.registerResourceLabelFormatter({
scheme: 'git',
formatting: {
label: '${path} (git)',
separator: '/'
}
})
);
setInterval(() => this.cleanup(), FIVE_MINUTES);

View File

@@ -1842,7 +1842,7 @@ export class Repository {
const onStdoutData = (raw: string) => {
parser.update(raw);
if (parser.status.length > limit) {
if (limit !== 0 && parser.status.length > limit) {
child.removeListener('exit', onExit);
child.stdout!.removeListener('data', onStdoutData);
child.kill();

View File

@@ -842,7 +842,7 @@ export class Repository implements Disposable {
return this.repository.dotGit;
}
private isRepositoryHuge = false;
private isRepositoryHuge: false | { limit: number } = false;
private didWarnAboutLimit = false;
private resourceCommandResolver = new ResourceCommandResolver(this);
@@ -917,6 +917,8 @@ export class Repository implements Disposable {
|| e.affectsConfiguration('git.untrackedChanges', root)
|| e.affectsConfiguration('git.ignoreSubmodules', root)
|| e.affectsConfiguration('git.openDiffOnClick', root)
|| e.affectsConfiguration('git.rebaseWhenSync', root)
|| e.affectsConfiguration('git.showUnpublishedCommitsButton', root)
)(this.updateModelState, this, this.disposables);
const updateInputBoxVisibility = () => {
@@ -971,6 +973,14 @@ export class Repository implements Disposable {
}
validateInput(text: string, position: number): SourceControlInputBoxValidation | undefined {
let tooManyChangesWarning: SourceControlInputBoxValidation | undefined;
if (this.isRepositoryHuge) {
tooManyChangesWarning = {
message: localize('tooManyChangesWarning', "Too many changes were detected. Only the first {0} changes will be shown below.", this.isRepositoryHuge.limit),
type: SourceControlInputBoxValidationType.Warning
};
}
if (this.rebaseCommit) {
if (this.rebaseCommit.message !== text) {
return {
@@ -984,7 +994,7 @@ export class Repository implements Disposable {
const setting = config.get<'always' | 'warn' | 'off'>('inputValidation');
if (setting === 'off') {
return;
return tooManyChangesWarning;
}
if (/^\s+$/.test(text)) {
@@ -1020,7 +1030,7 @@ export class Repository implements Disposable {
if (line.length <= threshold) {
if (setting !== 'always') {
return;
return tooManyChangesWarning;
}
return {
@@ -1790,12 +1800,16 @@ export class Repository implements Disposable {
const scopedConfig = workspace.getConfiguration('git', Uri.file(this.repository.root));
const ignoreSubmodules = scopedConfig.get<boolean>('ignoreSubmodules');
const { status, didHitLimit } = await this.repository.getStatus({ ignoreSubmodules });
const limit = scopedConfig.get<number>('statusLimit', 5000);
const { status, didHitLimit } = await this.repository.getStatus({ limit, ignoreSubmodules });
const config = workspace.getConfiguration('git');
const shouldIgnore = config.get<boolean>('ignoreLimitWarning') === true;
const useIcons = !config.get<boolean>('decorations.enabled', true);
this.isRepositoryHuge = didHitLimit;
this.isRepositoryHuge = didHitLimit ? { limit } : false;
// Triggers or clears any validation warning
this._sourceControl.inputBox.validateInput = this._sourceControl.inputBox.validateInput;
if (didHitLimit && !shouldIgnore && !this.didWarnAboutLimit) {
const knownHugeFolderPaths = await this.findKnownHugeFolderPathsToIgnore();
@@ -1808,18 +1822,21 @@ export class Repository implements Disposable {
const addKnown = localize('add known', "Would you like to add '{0}' to .gitignore?", folderName);
const yes = { title: localize('yes', "Yes") };
const no = { title: localize('no', "No") };
const result = await window.showWarningMessage(`${gitWarn} ${addKnown}`, yes, neverAgain);
if (result === neverAgain) {
config.update('ignoreLimitWarning', true, false);
this.didWarnAboutLimit = true;
} else if (result === yes) {
const result = await window.showWarningMessage(`${gitWarn} ${addKnown}`, yes, no, neverAgain);
if (result === yes) {
this.ignore([Uri.file(folderPath)]);
} else {
if (result === neverAgain) {
config.update('ignoreLimitWarning', true, false);
}
this.didWarnAboutLimit = true;
}
} else {
const result = await window.showWarningMessage(gitWarn, neverAgain);
const ok = { title: localize('ok', "OK") };
const result = await window.showWarningMessage(gitWarn, ok, neverAgain);
if (result === neverAgain) {
config.update('ignoreLimitWarning', true, false);
}
@@ -1906,6 +1923,37 @@ export class Repository implements Disposable {
return undefined;
});
let actionButton: SourceControl['actionButton'];
if (HEAD !== undefined) {
const config = workspace.getConfiguration('git', Uri.file(this.repository.root));
const showActionButton = config.get<string>('showUnpublishedCommitsButton', 'whenEmpty');
if (showActionButton === 'always' || (showActionButton === 'whenEmpty' && workingTree.length === 0 && index.length === 0 && untracked.length === 0 && merge.length === 0)) {
if (HEAD.name && HEAD.commit) {
if (HEAD.upstream) {
if (HEAD.ahead) {
const rebaseWhenSync = config.get<string>('rebaseWhenSync');
actionButton = {
command: rebaseWhenSync ? 'git.syncRebase' : 'git.sync',
title: localize('scm button sync title', ' Sync Changes $(sync){0}{1}', HEAD.behind ? `${HEAD.behind}$(arrow-down) ` : '', `${HEAD.ahead}$(arrow-up)`),
tooltip: this.syncTooltip,
arguments: [this._sourceControl],
};
}
} else {
actionButton = {
command: 'git.publish',
title: localize('scm button publish title', "$(cloud-upload) Publish Changes"),
tooltip: localize('scm button publish tooltip', "Publish Changes"),
arguments: [this._sourceControl],
};
}
}
}
}
this._sourceControl.actionButton = actionButton;
// set resource groups
this.mergeGroup.resourceStates = merge;
this.indexGroup.resourceStates = index;