33using System . Reactive . Linq ;
44using System . Threading . Tasks ;
55using GitHub . Api ;
6+ using GitHub . Extensions ;
67using GitHub . Logging ;
78using GitHub . Models ;
89using LibGit2Sharp ;
@@ -21,12 +22,14 @@ public class RepositoryForkService : IRepositoryForkService
2122
2223 readonly IGitClient gitClient ;
2324 readonly IVSGitServices vsGitServices ;
25+ readonly IUsageTracker usageTracker ;
2426
2527 [ ImportingConstructor ]
26- public RepositoryForkService ( IGitClient gitClient , IVSGitServices vsGitServices )
28+ public RepositoryForkService ( IGitClient gitClient , IVSGitServices vsGitServices , IUsageTracker usageTracker )
2729 {
2830 this . gitClient = gitClient ;
2931 this . vsGitServices = vsGitServices ;
32+ this . usageTracker = usageTracker ;
3033 }
3134
3235 public IObservable < Repository > ForkRepository ( IApiClient apiClient , IRepositoryModel sourceRepository , NewRepositoryFork repositoryFork , bool updateOrigin , bool addUpstream , bool trackMasterUpstream )
@@ -43,11 +46,33 @@ public IObservable<Repository> ForkRepository(IApiClient apiClient, IRepositoryM
4346
4447 await SwitchRemotes ( repo . ActiveRepo , originUri , upstreamUri , trackMasterUpstream ) ;
4548
49+ RecordForkRepositoryUsage ( updateOrigin , addUpstream , trackMasterUpstream ) . Forget ( ) ;
50+
4651 return repo . RemoteRepo ;
4752 }
4853 } ) ;
4954 }
5055
56+ private async Task RecordForkRepositoryUsage ( bool updateOrigin , bool addUpstream , bool trackMasterUpstream )
57+ {
58+ await usageTracker . IncrementCounter ( model => model . NumberOfReposForked ) ;
59+
60+ if ( updateOrigin )
61+ {
62+ await usageTracker . IncrementCounter ( model => model . NumberOfOriginsUpdatedWhenForkingRepo ) ;
63+ }
64+
65+ if ( addUpstream )
66+ {
67+ await usageTracker . IncrementCounter ( model => model . NumberOfUpstreamsAddedWhenForkingRepo ) ;
68+ }
69+
70+ if ( trackMasterUpstream )
71+ {
72+ await usageTracker . IncrementCounter ( model => model . NumberOfTrackMasterUpstreamWhenForkingRepo ) ;
73+ }
74+ }
75+
5176 public IObservable < object > SwitchRemotes ( IRepositoryModel destinationRepository , bool updateOrigin , bool addUpstream , bool trackMasterUpstream )
5277 {
5378 return Observable . Defer ( ( ) => Observable . Return ( new object ( ) )
0 commit comments