File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -520,6 +520,34 @@ export function createPRNodeUri(
520520 } ) ;
521521}
522522
523+ export interface CommitsNodeUriParams {
524+ prNumber : number ;
525+ commitsCount : number ;
526+ }
527+
528+ export function createCommitsNodeUri ( prNumber : number , commitsCount : number ) : vscode . Uri {
529+ const params : CommitsNodeUriParams = {
530+ prNumber,
531+ commitsCount
532+ } ;
533+
534+ return vscode . Uri . parse ( `commitsnode:${ prNumber } ` ) . with ( {
535+ scheme : Schemes . CommitsNode ,
536+ query : JSON . stringify ( params )
537+ } ) ;
538+ }
539+
540+ export function fromCommitsNodeUri ( uri : vscode . Uri ) : CommitsNodeUriParams | undefined {
541+ if ( uri . scheme !== Schemes . CommitsNode ) {
542+ return undefined ;
543+ }
544+ try {
545+ return JSON . parse ( uri . query ) as CommitsNodeUriParams ;
546+ } catch ( e ) {
547+ return undefined ;
548+ }
549+ }
550+
523551export interface NotificationUriParams {
524552 key : string ;
525553}
@@ -726,7 +754,8 @@ export enum Schemes {
726754 Repo = 'repo' , // New issue file for passing data
727755 Git = 'git' , // File content from the git extension
728756 PRQuery = 'prquery' , // PR query tree item
729- GitHubCommit = 'githubcommit' // file content from GitHub for a commit
757+ GitHubCommit = 'githubcommit' , // file content from GitHub for a commit
758+ CommitsNode = 'commitsnode' // Commits tree node, for decorations
730759}
731760
732761export function resolvePath ( from : vscode . Uri , to : string ) {
Original file line number Diff line number Diff line change @@ -42,6 +42,7 @@ import { NotificationsProvider } from './notifications/notificationsProvider';
4242import { ThemeWatcher } from './themeWatcher' ;
4343import { UriHandler } from './uriHandler' ;
4444import { CommentDecorationProvider } from './view/commentDecorationProvider' ;
45+ import { CommitsDecorationProvider } from './view/commitsDecorationProvider' ;
4546import { CompareChanges } from './view/compareChangesTreeDataProvider' ;
4647import { CreatePullRequestHelper } from './view/createPullRequestHelper' ;
4748import { FileTypeDecorationProvider } from './view/fileTypeDecorationProvider' ;
@@ -169,7 +170,7 @@ async function init(
169170 ) ;
170171 const treeDecorationProviders = new TreeDecorationProviders ( reposManager ) ;
171172 context . subscriptions . push ( treeDecorationProviders ) ;
172- treeDecorationProviders . registerProviders ( [ new FileTypeDecorationProvider ( ) , new CommentDecorationProvider ( reposManager ) ] ) ;
173+ treeDecorationProviders . registerProviders ( [ new FileTypeDecorationProvider ( ) , new CommentDecorationProvider ( reposManager ) , new CommitsDecorationProvider ( ) ] ) ;
173174
174175 const notificationsProvider = new NotificationsProvider ( credentialStore , reposManager ) ;
175176 context . subscriptions . push ( notificationsProvider ) ;
Original file line number Diff line number Diff line change 1+ /*---------------------------------------------------------------------------------------------
2+ * Copyright (c) Microsoft Corporation. All rights reserved.
3+ * Licensed under the MIT License. See License.txt in the project root for license information.
4+ *--------------------------------------------------------------------------------------------*/
5+
6+ import * as vscode from 'vscode' ;
7+ import { TreeDecorationProvider } from './treeDecorationProviders' ;
8+ import { fromCommitsNodeUri , Schemes } from '../common/uri' ;
9+ import { FolderRepositoryManager } from '../github/folderRepositoryManager' ;
10+ import { PullRequestModel } from '../github/pullRequestModel' ;
11+
12+ export class CommitsDecorationProvider extends TreeDecorationProvider {
13+
14+ constructor ( ) {
15+ super ( ) ;
16+ }
17+
18+ registerPullRequestPropertyChangedListeners ( _folderManager : FolderRepositoryManager , _model : PullRequestModel ) : vscode . Disposable {
19+ // No need to listen for changes since commit count doesn't change dynamically
20+ return { dispose : ( ) => { } } ;
21+ }
22+
23+ provideFileDecoration (
24+ uri : vscode . Uri ,
25+ _token : vscode . CancellationToken ,
26+ ) : vscode . ProviderResult < vscode . FileDecoration > {
27+ if ( uri . scheme !== Schemes . CommitsNode ) {
28+ return undefined ;
29+ }
30+
31+ const params = fromCommitsNodeUri ( uri ) ;
32+ if ( ! params ) {
33+ return undefined ;
34+ }
35+
36+ return {
37+ badge : params . commitsCount . toString ( ) ,
38+ tooltip : vscode . l10n . t ( '{0} commits' , params . commitsCount )
39+ } ;
40+ }
41+
42+ }
Original file line number Diff line number Diff line change @@ -7,11 +7,13 @@ import * as vscode from 'vscode';
77import { CommitNode } from './commitNode' ;
88import { TreeNode , TreeNodeParent } from './treeNode' ;
99import Logger , { PR_TREE } from '../../common/logger' ;
10+ import { createCommitsNodeUri } from '../../common/uri' ;
1011import { FolderRepositoryManager } from '../../github/folderRepositoryManager' ;
1112import { PullRequestModel } from '../../github/pullRequestModel' ;
1213
1314export class CommitsNode extends TreeNode implements vscode . TreeItem {
1415 public collapsibleState : vscode . TreeItemCollapsibleState ;
16+ public resourceUri : vscode . Uri ;
1517 private _folderRepoManager : FolderRepositoryManager ;
1618 private _pr : PullRequestModel ;
1719
@@ -25,7 +27,7 @@ export class CommitsNode extends TreeNode implements vscode.TreeItem {
2527 this . _pr = pr ;
2628 this . _folderRepoManager = reposManager ;
2729 this . collapsibleState = vscode . TreeItemCollapsibleState . Collapsed ;
28- this . description = pr . item . commits . length . toString ( ) ;
30+ this . resourceUri = createCommitsNodeUri ( pr . number , pr . item . commits . length ) ;
2931
3032 this . childrenDisposables = [ ] ;
3133 this . childrenDisposables . push ( this . _pr . onDidChangeReviewThreads ( ( ) => {
You can’t perform that action at this time.
0 commit comments