Skip to content

Commit 770da16

Browse files
committed
Adds compare w/ common base to results files
1 parent 9acfad5 commit 770da16

File tree

4 files changed

+46
-0
lines changed

4 files changed

+46
-0
lines changed

contributions.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7829,6 +7829,18 @@
78297829
]
78307830
}
78317831
},
7832+
"gitlens.views.openChangesWithMergeBase": {
7833+
"label": "Open Changes with Common Base",
7834+
"menus": {
7835+
"gitlens/commit/file/changes": [
7836+
{
7837+
"when": "viewItem =~ /gitlens:file:results\\b/",
7838+
"group": "1_gitlens",
7839+
"order": 2
7840+
}
7841+
]
7842+
}
7843+
},
78327844
"gitlens.views.openChangesWithWorking": {
78337845
"label": "Open Changes with Working File",
78347846
"icon": "$(gitlens-compare-ref-working)",

package.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8574,6 +8574,10 @@
85748574
"title": "Open Changes",
85758575
"icon": "$(compare-changes)"
85768576
},
8577+
{
8578+
"command": "gitlens.views.openChangesWithMergeBase",
8579+
"title": "Open Changes with Common Base"
8580+
},
85778581
{
85788582
"command": "gitlens.views.openChangesWithWorking",
85798583
"title": "Open Changes with Working File",
@@ -12310,6 +12314,10 @@
1231012314
"command": "gitlens.views.openChanges",
1231112315
"when": "false"
1231212316
},
12317+
{
12318+
"command": "gitlens.views.openChangesWithMergeBase",
12319+
"when": "false"
12320+
},
1231312321
{
1231412322
"command": "gitlens.views.openChangesWithWorking",
1231512323
"when": "false"
@@ -13823,6 +13831,11 @@
1382313831
"command": "gitlens.views.highlightRevisionChanges",
1382413832
"when": "viewItem =~ /gitlens:file\\b((?=.*?\\b\\+committed\\b)|:results)/",
1382513833
"group": "2_gitlens@2"
13834+
},
13835+
{
13836+
"command": "gitlens.views.openChangesWithMergeBase",
13837+
"when": "viewItem =~ /gitlens:file:results\\b/",
13838+
"group": "1_gitlens@2"
1382613839
}
1382713840
],
1382813841
"gitlens/commit/file/commit": [

src/constants.commands.generated.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,7 @@ export type ContributedCommands =
343343
| 'gitlens.views.openChangedFileRevisions'
344344
| 'gitlens.views.openChangedFiles'
345345
| 'gitlens.views.openChanges'
346+
| 'gitlens.views.openChangesWithMergeBase'
346347
| 'gitlens.views.openChangesWithWorking'
347348
| 'gitlens.views.openCommitOnRemote'
348349
| 'gitlens.views.openCommitOnRemote.multi'

src/views/viewCommands.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ import { log } from '../system/decorators/log';
5656
import { partial, runSequentially } from '../system/function';
5757
import { join, map } from '../system/iterable';
5858
import { lazy } from '../system/lazy';
59+
import { basename } from '../system/path';
5960
import { DeepLinkActionType } from '../uris/deepLinks/deepLink';
6061
import type { LaunchpadItemNode } from './launchpadView';
6162
import type { RepositoryFolderNode } from './nodes/abstract/repositoryFolderNode';
@@ -278,6 +279,7 @@ export class ViewCommands implements Disposable {
278279
),
279280

280281
registerViewCommand('gitlens.views.openChanges', this.openChanges, this),
282+
registerViewCommand('gitlens.views.openChangesWithMergeBase', this.openChangesWithMergeBase, this),
281283
registerViewCommand('gitlens.views.openChangesWithWorking', this.openChangesWithWorking, this),
282284
registerViewCommand(
283285
'gitlens.views.openPreviousChangesWithWorking',
@@ -1536,6 +1538,24 @@ export class ViewCommands implements Disposable {
15361538
return CommitActions.openCommitChangesWithWorking(this.container, node.commit, individually, options);
15371539
}
15381540

1541+
@log()
1542+
private async openChangesWithMergeBase(node: ResultsFileNode) {
1543+
if (!node.is('results-file')) return Promise.resolve();
1544+
1545+
const mergeBase = await this.container.git.refs(node.repoPath).getMergeBase(node.ref1, node.ref2 || 'HEAD');
1546+
if (mergeBase == null) return Promise.resolve();
1547+
1548+
return CommitActions.openChanges(
1549+
node.file,
1550+
{ repoPath: node.repoPath, lhs: mergeBase, rhs: node.ref1 },
1551+
{
1552+
preserveFocus: true,
1553+
preview: true,
1554+
lhsTitle: `${basename(node.uri.fsPath)} (Base)`,
1555+
},
1556+
);
1557+
}
1558+
15391559
@log()
15401560
private async openChangesWithWorking(node: ViewRefFileNode | MergeConflictFileNode | StatusFileNode) {
15411561
if (node.is('status-file')) {

0 commit comments

Comments
 (0)