Skip to content

Commit b025273

Browse files
authored
Git - add similarity threshold setting (microsoft#182492)
1 parent 0007f99 commit b025273

File tree

4 files changed

+16
-2
lines changed

4 files changed

+16
-2
lines changed

extensions/git/package.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2706,6 +2706,14 @@
27062706
"default": "prompt",
27072707
"markdownDescription": "%config.openRepositoryInParentFolders%",
27082708
"scope": "resource"
2709+
},
2710+
"git.similarityThreshold": {
2711+
"type": "number",
2712+
"default": 50,
2713+
"minimum": 0,
2714+
"maximum": 100,
2715+
"description": "%config.similarityThreshold%",
2716+
"scope": "resource"
27092717
}
27102718
}
27112719
},

extensions/git/package.nls.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,7 @@
252252
"config.publishBeforeContinueOn.always": "Always publish unpublished git state when using Continue Working On from a git repository",
253253
"config.publishBeforeContinueOn.never": "Never publish unpublished git state when using Continue Working On from a git repository",
254254
"config.publishBeforeContinueOn.prompt": "Prompt to publish unpublished git state when using Continue Working On from a git repository",
255+
"config.similarityThreshold": "Controls the threshold of the similarity index (i.e. amount of additions/deletions compared to the file's size) for changes in a pair of added/deleted files to be considered a rename.",
255256
"submenu.explorer": "Git",
256257
"submenu.commit": "Commit",
257258
"submenu.commit.amend": "Amend",

extensions/git/src/git.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2000,7 +2000,7 @@ export class Repository {
20002000
}
20012001
}
20022002

2003-
async getStatus(opts?: { limit?: number; ignoreSubmodules?: boolean; untrackedChanges?: 'mixed' | 'separate' | 'hidden'; cancellationToken?: CancellationToken }): Promise<{ status: IFileStatus[]; statusLength: number; didHitLimit: boolean }> {
2003+
async getStatus(opts?: { limit?: number; ignoreSubmodules?: boolean; similarityThreshold?: number; untrackedChanges?: 'mixed' | 'separate' | 'hidden'; cancellationToken?: CancellationToken }): Promise<{ status: IFileStatus[]; statusLength: number; didHitLimit: boolean }> {
20042004
if (opts?.cancellationToken && opts?.cancellationToken.isCancellationRequested) {
20052005
throw new CancellationError();
20062006
}
@@ -2020,6 +2020,10 @@ export class Repository {
20202020
args.push('--ignore-submodules');
20212021
}
20222022

2023+
if (opts?.similarityThreshold) {
2024+
args.push(`--find-renames=${opts.similarityThreshold}%`);
2025+
}
2026+
20232027
const child = this.stream(args, { env });
20242028

20252029
let result = new Promise<{ status: IFileStatus[]; statusLength: number; didHitLimit: boolean }>((c, e) => {

extensions/git/src/repository.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2056,9 +2056,10 @@ export class Repository implements Disposable {
20562056
const ignoreSubmodules = scopedConfig.get<boolean>('ignoreSubmodules');
20572057

20582058
const limit = scopedConfig.get<number>('statusLimit', 10000);
2059+
const similarityThreshold = scopedConfig.get<number>('similarityThreshold', 50);
20592060

20602061
const start = new Date().getTime();
2061-
const { status, statusLength, didHitLimit } = await this.repository.getStatus({ limit, ignoreSubmodules, untrackedChanges, cancellationToken });
2062+
const { status, statusLength, didHitLimit } = await this.repository.getStatus({ limit, ignoreSubmodules, similarityThreshold, untrackedChanges, cancellationToken });
20622063
const totalTime = new Date().getTime() - start;
20632064

20642065
this.isRepositoryHuge = didHitLimit ? { limit } : false;

0 commit comments

Comments
 (0)