Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Commit 31d15cb

Browse files
committed
Run git tasks on b/g thread.
1 parent d932ee6 commit 31d15cb

File tree

1 file changed

+43
-33
lines changed

1 file changed

+43
-33
lines changed

src/GitHub.App/Services/GitClient.cs

Lines changed: 43 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -29,71 +29,81 @@ public Task Push(IRepository repository, string branchName, string remoteName)
2929
Guard.ArgumentNotEmptyString(branchName, nameof(branchName));
3030
Guard.ArgumentNotEmptyString(remoteName, nameof(remoteName));
3131

32-
if (repository.Head?.Commits != null && repository.Head.Commits.Any())
32+
return Task.Factory.StartNew(() =>
3333
{
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);
34+
if (repository.Head?.Commits != null && repository.Head.Commits.Any())
35+
{
36+
var remote = repository.Network.Remotes[remoteName];
37+
repository.Network.Push(remote, "HEAD", @"refs/heads/" + branchName, pushOptions);
38+
}
39+
});
3940
}
4041

4142
public Task Fetch(IRepository repository, string remoteName)
4243
{
4344
Guard.ArgumentNotEmptyString(remoteName, nameof(remoteName));
4445

45-
var remote = repository.Network.Remotes[remoteName];
46-
repository.Network.Fetch(remote, fetchOptions);
47-
48-
return Task.FromResult<object>(null);
46+
return Task.Factory.StartNew(() =>
47+
{
48+
var remote = repository.Network.Remotes[remoteName];
49+
repository.Network.Fetch(remote, fetchOptions);
50+
});
4951
}
5052

5153
public Task Fetch(IRepository repository, string remoteName, params string[] refspecs)
5254
{
5355
Guard.ArgumentNotEmptyString(remoteName, nameof(remoteName));
5456

55-
var remote = repository.Network.Remotes[remoteName];
56-
repository.Network.Fetch(remote, refspecs, fetchOptions);
57-
58-
return Task.FromResult<object>(null);
57+
return Task.Factory.StartNew(() =>
58+
{
59+
var remote = repository.Network.Remotes[remoteName];
60+
repository.Network.Fetch(remote, refspecs, fetchOptions);
61+
});
5962
}
6063

6164
public Task SetRemote(IRepository repository, string remoteName, Uri url)
6265
{
6366
Guard.ArgumentNotEmptyString(remoteName, nameof(remoteName));
6467

65-
repository.Config.Set("remote." + remoteName + ".url", url.ToString());
66-
repository.Config.Set("remote." + remoteName + ".fetch", "+refs/heads/*:refs/remotes/" + remoteName + "/*");
68+
return Task.Factory.StartNew(() =>
69+
{
6770

68-
return Task.FromResult<object>(null);
71+
repository.Config.Set("remote." + remoteName + ".url", url.ToString());
72+
repository.Config.Set("remote." + remoteName + ".fetch", "+refs/heads/*:refs/remotes/" + remoteName + "/*");
73+
});
6974
}
7075

7176
public Task SetTrackingBranch(IRepository repository, string branchName, string remoteName)
7277
{
7378
Guard.ArgumentNotEmptyString(branchName, nameof(branchName));
7479
Guard.ArgumentNotEmptyString(remoteName, nameof(remoteName));
7580

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)
81+
return Task.Factory.StartNew(() =>
8082
{
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);
83+
var remoteBranchName = IsCanonical(remoteName) ? remoteName : "refs/remotes/" + remoteName + "/" + branchName;
84+
var remoteBranch = repository.Branches[remoteBranchName];
85+
// if it's null, it's because nothing was pushed
86+
if (remoteBranch != null)
87+
{
88+
var localBranchName = IsCanonical(branchName) ? branchName : "refs/heads/" + branchName;
89+
var localBranch = repository.Branches[localBranchName];
90+
repository.Branches.Update(localBranch, b => b.TrackedBranch = remoteBranch.CanonicalName);
91+
}
92+
});
8793
}
8894

8995
public Task<Remote> GetHttpRemote(IRepository repo, string remote)
9096
{
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);
97+
return Task.Factory.StartNew(() =>
98+
{
99+
100+
var uri = GitService.GitServiceHelper.GetRemoteUri(repo, remote);
101+
var remoteName = uri.IsHypertextTransferProtocol ? remote : remote + "-http";
102+
var ret = repo.Network.Remotes[remoteName];
103+
if (ret == null)
104+
ret = repo.Network.Remotes.Add(remoteName, UriString.ToUriString(uri.ToRepositoryUrl()));
105+
return ret;
106+
});
97107
}
98108

99109
static bool IsCanonical(string s)

0 commit comments

Comments
 (0)