@@ -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