Skip to content

Commit 18c31dc

Browse files
author
Stephan Dilly
committed
unittest to make sure rebase merge multiple commits also works
1 parent 6430484 commit 18c31dc

File tree

1 file changed

+61
-11
lines changed

1 file changed

+61
-11
lines changed

asyncgit/src/sync/branch/merge_rebase.rs

Lines changed: 61 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,20 +27,15 @@ pub fn merge_upstream_rebase(
2727
let annotated_upstream =
2828
repo.find_annotated_commit(upstream_commit.id())?;
2929

30-
let branch_commit = branch.get().peel_to_commit()?;
31-
let annotated_branch =
32-
repo.find_annotated_commit(branch_commit.id())?;
33-
dbg!(annotated_branch.id());
34-
3530
let mut rebase =
3631
repo.rebase(None, Some(&annotated_upstream), None, None)?;
3732

3833
let signature =
3934
crate::sync::commit::signature_allow_undefined_name(&repo)?;
4035

4136
while let Some(op) = rebase.next() {
42-
let op = op?;
43-
dbg!(op.id());
37+
let _op = op?;
38+
// dbg!(op.id());
4439

4540
if repo.index()?.has_conflicts() {
4641
rebase.abort()?;
@@ -49,14 +44,11 @@ pub fn merge_upstream_rebase(
4944
)));
5045
}
5146

52-
let commit = rebase.commit(None, &signature, None)?;
53-
dbg!(commit);
47+
rebase.commit(None, &signature, None)?;
5448
}
5549

5650
rebase.finish(Some(&signature))?;
5751

58-
repo.index()?.read(true)?;
59-
6052
Ok(())
6153
}
6254

@@ -177,6 +169,64 @@ mod test {
177169
assert_eq!(clone1.head_detached().unwrap(), false);
178170
}
179171

172+
#[test]
173+
fn test_merge_multiple() {
174+
let (r1_dir, _repo) = repo_init_bare().unwrap();
175+
176+
let (clone1_dir, clone1) =
177+
repo_clone(r1_dir.path().to_str().unwrap()).unwrap();
178+
179+
let clone1_dir = clone1_dir.path().to_str().unwrap();
180+
181+
// clone1
182+
183+
write_commit_file(&clone1, "test.txt", "test", "commit1");
184+
185+
push(clone1_dir, "origin", "master", false, None, None)
186+
.unwrap();
187+
188+
// clone2
189+
190+
let (clone2_dir, clone2) =
191+
repo_clone(r1_dir.path().to_str().unwrap()).unwrap();
192+
193+
let clone2_dir = clone2_dir.path().to_str().unwrap();
194+
195+
write_commit_file(&clone2, "test2.txt", "test", "commit2");
196+
197+
push(clone2_dir, "origin", "master", false, None, None)
198+
.unwrap();
199+
200+
// clone1
201+
202+
write_commit_file(&clone1, "test3.txt", "test", "commit3");
203+
write_commit_file(&clone1, "test4.txt", "test", "commit4");
204+
205+
//lets fetch from origin
206+
207+
fetch_origin(clone1_dir, "master", None, None).unwrap();
208+
209+
merge_upstream_rebase(clone1_dir, "master").unwrap();
210+
211+
debug_cmd_print(clone1_dir, "git log");
212+
213+
let state = crate::sync::repo_state(clone1_dir).unwrap();
214+
assert_eq!(state, RepoState::Clean);
215+
216+
let commits = get_commit_msgs(&clone1);
217+
assert_eq!(
218+
commits,
219+
vec![
220+
String::from("commit4"),
221+
String::from("commit3"),
222+
String::from("commit2"),
223+
String::from("commit1")
224+
]
225+
);
226+
227+
assert_eq!(clone1.head_detached().unwrap(), false);
228+
}
229+
180230
#[test]
181231
fn test_merge_conflict() {
182232
let (r1_dir, _repo) = repo_init_bare().unwrap();

0 commit comments

Comments
 (0)