Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Commit 609da8a

Browse files
Merge pull request #236 from github-for-unity/enhancements/git-addall-refactor
Refactor for Git Add/AddAll functionality
2 parents c667a8e + 7355e4c commit 609da8a

File tree

5 files changed

+94
-7
lines changed

5 files changed

+94
-7
lines changed

src/GitHub.Api/Git/IRepository.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ interface IRepository : IEquatable<IRepository>
1010
{
1111
void Initialize(IRepositoryManager repositoryManager);
1212
void Refresh();
13+
ITask CommitAllFiles(string message, string body);
14+
ITask CommitFiles(List<string> files, string message, string body);
1315
ITask SetupRemote(string remoteName, string remoteUrl);
1416
ITask<List<GitLogEntry>> Log();
1517
ITask Pull();

src/GitHub.Api/Git/Repository.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,16 @@ public ITask<List<GitLogEntry>> Log()
8787
return repositoryManager.Log();
8888
}
8989

90+
public ITask CommitAllFiles(string message, string body)
91+
{
92+
return repositoryManager.CommitAllFiles(message, body);
93+
}
94+
95+
public ITask CommitFiles(List<string> files, string message, string body)
96+
{
97+
return repositoryManager.CommitFiles(files, message, body);
98+
}
99+
90100
public ITask Pull()
91101
{
92102
return repositoryManager.Pull(CurrentRemote.Value.Name, CurrentBranch?.Name);

src/GitHub.Api/Git/RepositoryManager.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ interface IRepositoryManager : IDisposable
2828
void Start();
2929
void Stop();
3030
void Refresh();
31+
ITask CommitAllFiles(string message, string body);
3132
ITask CommitFiles(List<string> files, string message, string body);
3233
ITask<List<GitLogEntry>> Log();
3334
ITask Fetch(string remote);
@@ -192,6 +193,15 @@ public void Refresh()
192193
UpdateGitStatus();
193194
}
194195

196+
public ITask CommitAllFiles(string message, string body)
197+
{
198+
var add = GitClient.AddAll();
199+
add.OnStart += t => IsBusy = true;
200+
return add
201+
.Then(GitClient.Commit(message, body))
202+
.Finally(() => IsBusy = false);
203+
}
204+
195205
public ITask CommitFiles(List<string> files, string message, string body)
196206
{
197207
var add = GitClient.Add(files);

src/UnityExtension/Assets/Editor/GitHub.Unity/UI/ChangesView.cs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -192,22 +192,20 @@ private void Commit()
192192
var files = Enumerable.Range(0, tree.Entries.Count)
193193
.Where(i => tree.CommitTargets[i].All)
194194
.Select(i => tree.Entries[i].Path)
195-
.ToArray();
195+
.ToList();
196196

197-
ITask<string> addTask;
197+
ITask addTask;
198198

199-
if (files.Length == tree.Entries.Count)
199+
if (files.Count == tree.Entries.Count)
200200
{
201-
addTask = GitClient.AddAll();
201+
addTask = Repository.CommitAllFiles(commitMessage, commitBody);
202202
}
203203
else
204204
{
205-
addTask = GitClient.Add(files);
205+
addTask = Repository.CommitFiles(files, commitMessage, commitBody);
206206
}
207207

208208
addTask
209-
.Then(GitClient.Commit(commitMessage, commitBody))
210-
.Then(GitClient.Status())
211209
.FinallyInUI((b, exception) =>
212210
{
213211
commitMessage = "";

src/tests/IntegrationTests/Events/RepositoryManagerTests.cs

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,73 @@ await RepositoryManager
129129
repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock);
130130
}
131131

132+
[Test, Category("TimeSensitive")]
133+
public async Task ShouldAddAndCommitAllFiles()
134+
{
135+
await Initialize(TestRepoMasterCleanSynchronized);
136+
137+
var repositoryManagerListener = Substitute.For<IRepositoryManagerListener>();
138+
repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents);
139+
140+
var expectedAfterChanges = new GitStatus {
141+
Behind = 1,
142+
LocalBranch = "master",
143+
RemoteBranch = "origin/master",
144+
Entries =
145+
new List<GitStatusEntry> {
146+
new GitStatusEntry("Assets\\TestDocument.txt",
147+
TestRepoMasterCleanSynchronized.Combine("Assets", "TestDocument.txt"),
148+
"Assets\\TestDocument.txt", GitFileStatus.Modified),
149+
new GitStatusEntry("foobar.txt", TestRepoMasterCleanSynchronized.Combine("foobar.txt"),
150+
"foobar.txt", GitFileStatus.Untracked)
151+
}
152+
};
153+
154+
var result = new GitStatus();
155+
RepositoryManager.OnStatusUpdated += status => { result = status; };
156+
157+
var foobarTxt = TestRepoMasterCleanSynchronized.Combine("foobar.txt");
158+
foobarTxt.WriteAllText("foobar");
159+
160+
var testDocumentTxt = TestRepoMasterCleanSynchronized.Combine("Assets", "TestDocument.txt");
161+
testDocumentTxt.WriteAllText("foobar");
162+
await TaskManager.Wait();
163+
WaitForNotBusy(repositoryManagerEvents, 1);
164+
RepositoryManager.WaitForEvents();
165+
WaitForNotBusy(repositoryManagerEvents, 1);
166+
167+
repositoryManagerListener.Received().OnStatusUpdate(Args.GitStatus);
168+
repositoryManagerListener.DidNotReceive().OnActiveBranchChanged(Arg.Any<ConfigBranch?>());
169+
repositoryManagerListener.DidNotReceive().OnActiveRemoteChanged(Arg.Any<ConfigRemote?>());
170+
repositoryManagerListener.DidNotReceive().OnHeadChanged();
171+
repositoryManagerListener.DidNotReceive().OnLocalBranchListChanged();
172+
repositoryManagerListener.DidNotReceive().OnRemoteBranchListChanged();
173+
repositoryManagerListener.ReceivedWithAnyArgs().OnIsBusyChanged(Args.Bool);
174+
repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock);
175+
176+
result.AssertEqual(expectedAfterChanges);
177+
178+
repositoryManagerListener.ClearReceivedCalls();
179+
repositoryManagerEvents.Reset();
180+
181+
await RepositoryManager
182+
.CommitAllFiles("IntegrationTest Commit", string.Empty)
183+
.StartAsAsync();
184+
185+
await TaskManager.Wait();
186+
RepositoryManager.WaitForEvents();
187+
WaitForNotBusy(repositoryManagerEvents, 1);
188+
189+
repositoryManagerListener.DidNotReceive().OnStatusUpdate(Args.GitStatus);
190+
repositoryManagerListener.DidNotReceive().OnActiveBranchChanged(Arg.Any<ConfigBranch?>());
191+
repositoryManagerListener.DidNotReceive().OnActiveRemoteChanged(Arg.Any<ConfigRemote?>());
192+
repositoryManagerListener.DidNotReceive().OnHeadChanged();
193+
repositoryManagerListener.DidNotReceive().OnLocalBranchListChanged();
194+
repositoryManagerListener.DidNotReceive().OnRemoteBranchListChanged();
195+
repositoryManagerListener.Received(2).OnIsBusyChanged(Args.Bool);
196+
repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock);
197+
}
198+
132199
[Test, Category("TimeSensitive")]
133200
public async Task ShouldDetectBranchChange()
134201
{

0 commit comments

Comments
 (0)