mirror of
https://github.com/ckaczor/vscode-gitlens.git
synced 2026-02-16 10:58:34 -05:00
Adds arbitrary branch support to getVersionedFile[Text]
This commit is contained in:
@@ -12,6 +12,7 @@ export * from './enrichers/logParserEnricher';
|
|||||||
|
|
||||||
let git: IGit;
|
let git: IGit;
|
||||||
const UncommittedRegex = /^[0]+$/;
|
const UncommittedRegex = /^[0]+$/;
|
||||||
|
const ShaRegex = /\b[0-9a-f]{40}\b/;
|
||||||
|
|
||||||
const DefaultLogParams = [`log`, `--name-status`, `--full-history`, `-m`, `--date=iso8601-strict`, `--format=%H -%nauthor %an%nauthor-date %ai%ncommitter %cn%ncommitter-date %ci%nparent %P%nsummary %B%nfilename ?`];
|
const DefaultLogParams = [`log`, `--name-status`, `--full-history`, `-m`, `--date=iso8601-strict`, `--format=%H -%nauthor %an%nauthor-date %ai%ncommitter %cn%ncommitter-date %ci%nparent %P%nsummary %B%nfilename ?`];
|
||||||
|
|
||||||
@@ -112,20 +113,20 @@ export class Git {
|
|||||||
return gitCommand(repoPath, ...params);
|
return gitCommand(repoPath, ...params);
|
||||||
}
|
}
|
||||||
|
|
||||||
static async getVersionedFile(fileName: string, repoPath: string, sha: string) {
|
static async getVersionedFile(fileName: string, repoPath: string, branchOrSha: string) {
|
||||||
const data = await Git.getVersionedFileText(fileName, repoPath, sha);
|
const data = await Git.getVersionedFileText(fileName, repoPath, branchOrSha);
|
||||||
|
|
||||||
const shortSha = sha.substring(0, 8);
|
const suffix = Git.isSha(branchOrSha) ? branchOrSha.substring(0, 8) : branchOrSha;
|
||||||
const ext = path.extname(fileName);
|
const ext = path.extname(fileName);
|
||||||
return new Promise<string>((resolve, reject) => {
|
return new Promise<string>((resolve, reject) => {
|
||||||
tmp.file({ prefix: `${path.basename(fileName, ext)}-${shortSha}__`, postfix: ext },
|
tmp.file({ prefix: `${path.basename(fileName, ext)}-${suffix}__`, postfix: ext },
|
||||||
(err, destination, fd, cleanupCallback) => {
|
(err, destination, fd, cleanupCallback) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
reject(err);
|
reject(err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger.log(`getVersionedFile(${fileName}, ${repoPath}, ${sha}); destination=${destination}`);
|
Logger.log(`getVersionedFile(${fileName}, ${repoPath}, ${branchOrSha}); destination=${destination}`);
|
||||||
fs.appendFile(destination, data, err => {
|
fs.appendFile(destination, data, err => {
|
||||||
if (err) {
|
if (err) {
|
||||||
reject(err);
|
reject(err);
|
||||||
@@ -138,12 +139,12 @@ export class Git {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
static getVersionedFileText(fileName: string, repoPath: string, sha: string) {
|
static getVersionedFileText(fileName: string, repoPath: string, branchOrSha: string) {
|
||||||
const [file, root] = Git.splitPath(Git.normalizePath(fileName), repoPath);
|
const [file, root] = Git.splitPath(Git.normalizePath(fileName), repoPath);
|
||||||
sha = sha.replace('^', '');
|
branchOrSha = branchOrSha.replace('^', '');
|
||||||
|
|
||||||
if (Git.isUncommitted(sha)) return Promise.reject(new Error(`sha=${sha} is uncommitted`));
|
if (Git.isUncommitted(branchOrSha)) return Promise.reject(new Error(`sha=${branchOrSha} is uncommitted`));
|
||||||
return gitCommand(root, 'show', `${sha}:./${file}`);
|
return gitCommand(root, 'show', `${branchOrSha}:./${file}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gitInfo(): IGit {
|
static gitInfo(): IGit {
|
||||||
@@ -218,6 +219,10 @@ export class Git {
|
|||||||
return gitCommand(repoPath, ...params);
|
return gitCommand(repoPath, ...params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static isSha(sha: string) {
|
||||||
|
return ShaRegex.test(sha);
|
||||||
|
}
|
||||||
|
|
||||||
static isUncommitted(sha: string) {
|
static isUncommitted(sha: string) {
|
||||||
return UncommittedRegex.test(sha);
|
return UncommittedRegex.test(sha);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user