33using System . Linq ;
44using System . Reactive ;
55using System . Reactive . Linq ;
6+ using System . Threading . Tasks ;
67using GitHub . Extensions ;
78using GitHub . Primitives ;
89using LibGit2Sharp ;
@@ -23,90 +24,76 @@ public GitClient(IGitHubCredentialProvider credentialProvider)
2324 fetchOptions = new FetchOptions { CredentialsProvider = credentialProvider . HandleCredentials } ;
2425 }
2526
26- public IObservable < Unit > Push ( IRepository repository , string branchName , string remoteName )
27+ public Task Push ( IRepository repository , string branchName , string remoteName )
2728 {
2829 Guard . ArgumentNotEmptyString ( branchName , nameof ( branchName ) ) ;
2930 Guard . ArgumentNotEmptyString ( remoteName , nameof ( remoteName ) ) ;
3031
31- return Observable . Defer ( ( ) =>
32+ if ( repository . Head ? . Commits != null && repository . Head . Commits . Any ( ) )
3233 {
33- if ( repository . Head ? . Commits != null && repository . Head . Commits . Any ( ) )
34- {
35- var remote = repository . Network . Remotes [ remoteName ] ;
36- repository . Network . Push ( remote , "HEAD" , @"refs/heads/" + branchName , pushOptions ) ;
37- }
38- return Observable . Return ( Unit . Default ) ;
39- } ) ;
34+ var remote = repository . Network . Remotes [ remoteName ] ;
35+ repository . Network . Push ( remote , "HEAD" , @"refs/heads/" + branchName , pushOptions ) ;
36+ }
37+
38+ return Task . FromResult < object > ( null ) ;
4039 }
4140
42- public IObservable < Unit > Fetch ( IRepository repository , string remoteName )
41+ public Task Fetch ( IRepository repository , string remoteName )
4342 {
4443 Guard . ArgumentNotEmptyString ( remoteName , nameof ( remoteName ) ) ;
4544
46- return Observable . Defer ( ( ) =>
47- {
48- var remote = repository . Network . Remotes [ remoteName ] ;
49- repository . Network . Fetch ( remote , fetchOptions ) ;
50- return Observable . Return ( Unit . Default ) ;
51- } ) ;
45+ var remote = repository . Network . Remotes [ remoteName ] ;
46+ repository . Network . Fetch ( remote , fetchOptions ) ;
47+
48+ return Task . FromResult < object > ( null ) ;
5249 }
5350
54- public IObservable < Unit > Fetch ( IRepository repository , string remoteName , params string [ ] refspecs )
51+ public Task Fetch ( IRepository repository , string remoteName , params string [ ] refspecs )
5552 {
5653 Guard . ArgumentNotEmptyString ( remoteName , nameof ( remoteName ) ) ;
5754
58- return Observable . Defer ( ( ) =>
59- {
60- var remote = repository . Network . Remotes [ remoteName ] ;
61- repository . Network . Fetch ( remote , refspecs , fetchOptions ) ;
62- return Observable . Return ( Unit . Default ) ;
63- } ) ;
55+ var remote = repository . Network . Remotes [ remoteName ] ;
56+ repository . Network . Fetch ( remote , refspecs , fetchOptions ) ;
57+
58+ return Task . FromResult < object > ( null ) ;
6459 }
6560
66- public IObservable < Unit > SetRemote ( IRepository repository , string remoteName , Uri url )
61+ public Task SetRemote ( IRepository repository , string remoteName , Uri url )
6762 {
6863 Guard . ArgumentNotEmptyString ( remoteName , nameof ( remoteName ) ) ;
6964
70- return Observable . Defer ( ( ) =>
71- {
72- repository . Config . Set ( "remote." + remoteName + ".url" , url . ToString ( ) ) ;
73- repository . Config . Set ( "remote." + remoteName + ".fetch" , "+refs/heads/*:refs/remotes/" + remoteName + "/*" ) ;
65+ repository . Config . Set ( "remote." + remoteName + ".url" , url . ToString ( ) ) ;
66+ repository . Config . Set ( "remote." + remoteName + ".fetch" , "+refs/heads/*:refs/remotes/" + remoteName + "/*" ) ;
7467
75- return Observable . Return ( Unit . Default ) ;
76- } ) ;
68+ return Task . FromResult < object > ( null ) ;
7769 }
7870
79- public IObservable < Unit > SetTrackingBranch ( IRepository repository , string branchName , string remoteName )
71+ public Task SetTrackingBranch ( IRepository repository , string branchName , string remoteName )
8072 {
8173 Guard . ArgumentNotEmptyString ( branchName , nameof ( branchName ) ) ;
8274 Guard . ArgumentNotEmptyString ( remoteName , nameof ( remoteName ) ) ;
8375
84- return Observable . Defer ( ( ) =>
76+ var remoteBranchName = IsCanonical ( remoteName ) ? remoteName : "refs/remotes/" + remoteName + "/" + branchName ;
77+ var remoteBranch = repository . Branches [ remoteBranchName ] ;
78+ // if it's null, it's because nothing was pushed
79+ if ( remoteBranch != null )
8580 {
86- var remoteBranchName = IsCanonical ( remoteName ) ? remoteName : "refs/remotes/" + remoteName + "/" + branchName ;
87- var remoteBranch = repository . Branches [ remoteBranchName ] ;
88- // if it's null, it's because nothing was pushed
89- if ( remoteBranch != null )
90- {
91- var localBranchName = IsCanonical ( branchName ) ? branchName : "refs/heads/" + branchName ;
92- var localBranch = repository . Branches [ localBranchName ] ;
93- repository . Branches . Update ( localBranch , b => b . TrackedBranch = remoteBranch . CanonicalName ) ;
94- }
95- return Observable . Return ( Unit . Default ) ;
96- } ) ;
81+ var localBranchName = IsCanonical ( branchName ) ? branchName : "refs/heads/" + branchName ;
82+ var localBranch = repository . Branches [ localBranchName ] ;
83+ repository . Branches . Update ( localBranch , b => b . TrackedBranch = remoteBranch . CanonicalName ) ;
84+ }
85+
86+ return Task . FromResult < object > ( null ) ;
9787 }
9888
99- public IObservable < Remote > GetHttpRemote ( IRepository repo , string remote )
89+ public Task < Remote > GetHttpRemote ( IRepository repo , string remote )
10090 {
101- return Observable . Defer ( ( ) => Observable . Return ( GitService . GitServiceHelper . GetRemoteUri ( repo , remote ) ) )
102- . Select ( uri => new { Remote = uri . IsHypertextTransferProtocol ? remote : remote + "-http" , Uri = uri } )
103- . Select ( r =>
104- {
105- var ret = repo . Network . Remotes [ r . Remote ] ;
106- if ( ret == null )
107- ret = repo . Network . Remotes . Add ( r . Remote , UriString . ToUriString ( r . Uri . ToRepositoryUrl ( ) ) ) ;
108- return ret ;
109- } ) ;
91+ var uri = GitService . GitServiceHelper . GetRemoteUri ( repo , remote ) ;
92+ var remoteName = uri . IsHypertextTransferProtocol ? remote : remote + "-http" ;
93+ var ret = repo . Network . Remotes [ remoteName ] ;
94+ if ( ret == null )
95+ ret = repo . Network . Remotes . Add ( remoteName , UriString . ToUriString ( uri . ToRepositoryUrl ( ) ) ) ;
96+ return Task . FromResult ( ret ) ;
11097 }
11198
11299 static bool IsCanonical ( string s )
0 commit comments