Merge commit 'refs/pull/49397/head' of github.com:Microsoft/vscode into pr/49397

This commit is contained in:
Joao Moreno 2018-07-06 15:46:10 +02:00
commit 3f9e71722d
2 changed files with 28 additions and 2 deletions

View file

@ -751,6 +751,27 @@ export class Repository {
return { mode, object, size: parseInt(size) };
}
async lstreeOutput(treeish: string, path: string): Promise<string> {
if (!treeish) { // index
const { stdout } = await this.run(['ls-files', '--stage', '--', path]);
return stdout;
}
const { stdout } = await this.run(['ls-tree', '-l', treeish, '--', path]);
return stdout;
}
async relativePathToGitRelativePath(treeish: string, path: string): Promise<string> {
let gitPath: string = path;
const pathPrefix = path.substring(0, path.lastIndexOf('/'));
const lstOutput = await this.lstreeOutput(treeish, pathPrefix + '/');
const findResult = lstOutput.toUpperCase().indexOf(path.toUpperCase());
if (findResult) {
gitPath = lstOutput.substr(findResult, path.length);
}
return gitPath;
}
async detectObjectType(object: string): Promise<{ mimetype: string, encoding?: string }> {
const child = await this.stream(['show', object]);
const buffer = await readBytes(child.stdout, 4100);

View file

@ -876,12 +876,17 @@ export class Repository implements Disposable {
}
async show(ref: string, filePath: string): Promise<string> {
return this.run(Operation.Show, () => {
const relativePath = path.relative(this.repository.root, filePath).replace(/\\/g, '/');
return this.run(Operation.Show, async () => {
let relativePath = path.relative(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');
if (ref === '') {
ref = 'HEAD';
}
relativePath = await this.repository.relativePathToGitRelativePath(ref, relativePath);
return this.repository.bufferString(`${ref}:${relativePath}`, defaultEncoding, autoGuessEncoding);
});
}