mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-01 14:01:38 +01:00
This reverts commit 6fdb41922c.
This commit is contained in:
@@ -7,6 +7,7 @@ import TelemetryReporter from '@vscode/extension-telemetry';
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
import picomatch from 'picomatch';
|
||||
import * as iconv from '@vscode/iconv-lite-umd';
|
||||
import { CancellationError, CancellationToken, CancellationTokenSource, Command, commands, Disposable, Event, EventEmitter, FileDecoration, l10n, LogLevel, LogOutputChannel, Memento, ProgressLocation, ProgressOptions, QuickDiffProvider, RelativePattern, scm, SourceControl, SourceControlInputBox, SourceControlInputBoxValidation, SourceControlInputBoxValidationType, SourceControlResourceDecorations, SourceControlResourceGroup, SourceControlResourceState, TabInputNotebookDiff, TabInputTextDiff, TabInputTextMultiDiff, ThemeColor, Uri, window, workspace, WorkspaceEdit } from 'vscode';
|
||||
import { ActionButton } from './actionButton';
|
||||
import { ApiRepository } from './api/api1';
|
||||
@@ -24,6 +25,7 @@ import { StatusBarCommands } from './statusbar';
|
||||
import { toGitUri } from './uri';
|
||||
import { anyEvent, combinedDisposable, debounceEvent, dispose, EmptyDisposable, eventToPromise, filterEvent, find, getCommitShortHash, IDisposable, isDescendant, isLinuxSnap, isRemote, Limiter, onceEvent, pathEquals, relativePath } from './util';
|
||||
import { IFileWatcher, watch } from './watch';
|
||||
import { detectEncoding } from './encoding';
|
||||
import { ISourceControlHistoryItemDetailsProviderRegistry } from './historyItemDetailsProvider';
|
||||
|
||||
const timeout = (millis: number) => new Promise(c => setTimeout(c, millis));
|
||||
@@ -1220,9 +1222,19 @@ export class Repository implements Disposable {
|
||||
await this.run(Operation.Remove, () => this.repository.rm(resources.map(r => r.fsPath)));
|
||||
}
|
||||
|
||||
async stage(resource: Uri, contents: string, encoding: string): Promise<void> {
|
||||
async stage(resource: Uri, contents: string): Promise<void> {
|
||||
const path = relativePath(this.repository.root, resource.fsPath).replace(/\\/g, '/');
|
||||
await this.run(Operation.Stage, async () => {
|
||||
const path = relativePath(this.repository.root, resource.fsPath).replace(/\\/g, '/');
|
||||
const configFiles = workspace.getConfiguration('files', Uri.file(resource.fsPath));
|
||||
let encoding = configFiles.get<string>('encoding') ?? 'utf8';
|
||||
const autoGuessEncoding = configFiles.get<boolean>('autoGuessEncoding') === true;
|
||||
const candidateGuessEncodings = configFiles.get<string[]>('candidateGuessEncodings') ?? [];
|
||||
|
||||
if (autoGuessEncoding) {
|
||||
encoding = detectEncoding(Buffer.from(contents), candidateGuessEncodings) ?? encoding;
|
||||
}
|
||||
|
||||
encoding = iconv.encodingExists(encoding) ? encoding : 'utf8';
|
||||
await this.repository.stage(path, contents, encoding);
|
||||
|
||||
this._onDidChangeOriginalResource.fire(resource);
|
||||
@@ -1968,15 +1980,17 @@ export class Repository implements Disposable {
|
||||
async show(ref: string, filePath: string): Promise<string> {
|
||||
return await this.run(Operation.Show, async () => {
|
||||
const path = relativePath(this.repository.root, filePath).replace(/\\/g, '/');
|
||||
const configFiles = workspace.getConfiguration('files', Uri.file(filePath));
|
||||
const defaultEncoding = configFiles.get<string>('encoding');
|
||||
const autoGuessEncoding = configFiles.get<boolean>('autoGuessEncoding');
|
||||
const candidateGuessEncodings = configFiles.get<string[]>('candidateGuessEncodings');
|
||||
|
||||
try {
|
||||
const content = await this.repository.buffer(`${ref}:${path}`);
|
||||
return await workspace.decode(content, Uri.file(filePath));
|
||||
return await this.repository.bufferString(`${ref}:${path}`, defaultEncoding, autoGuessEncoding, candidateGuessEncodings);
|
||||
} catch (err) {
|
||||
if (err.gitErrorCode === GitErrorCodes.WrongCase) {
|
||||
const gitRelativePath = await this.repository.getGitRelativePath(ref, path);
|
||||
const content = await this.repository.buffer(`${ref}:${gitRelativePath}`);
|
||||
return await workspace.decode(content, Uri.file(filePath));
|
||||
return await this.repository.bufferString(`${ref}:${gitRelativePath}`, defaultEncoding, autoGuessEncoding, candidateGuessEncodings);
|
||||
}
|
||||
|
||||
throw err;
|
||||
|
||||
Reference in New Issue
Block a user