@@ -27,20 +27,15 @@ pub fn merge_upstream_rebase(
27
27
let annotated_upstream =
28
28
repo. find_annotated_commit ( upstream_commit. id ( ) ) ?;
29
29
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
-
35
30
let mut rebase =
36
31
repo. rebase ( None , Some ( & annotated_upstream) , None , None ) ?;
37
32
38
33
let signature =
39
34
crate :: sync:: commit:: signature_allow_undefined_name ( & repo) ?;
40
35
41
36
while let Some ( op) = rebase. next ( ) {
42
- let op = op?;
43
- dbg ! ( op. id( ) ) ;
37
+ let _op = op?;
38
+ // dbg!(op.id());
44
39
45
40
if repo. index ( ) ?. has_conflicts ( ) {
46
41
rebase. abort ( ) ?;
@@ -49,14 +44,11 @@ pub fn merge_upstream_rebase(
49
44
) ) ) ;
50
45
}
51
46
52
- let commit = rebase. commit ( None , & signature, None ) ?;
53
- dbg ! ( commit) ;
47
+ rebase. commit ( None , & signature, None ) ?;
54
48
}
55
49
56
50
rebase. finish ( Some ( & signature) ) ?;
57
51
58
- repo. index ( ) ?. read ( true ) ?;
59
-
60
52
Ok ( ( ) )
61
53
}
62
54
@@ -177,6 +169,64 @@ mod test {
177
169
assert_eq ! ( clone1. head_detached( ) . unwrap( ) , false ) ;
178
170
}
179
171
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
+
180
230
#[ test]
181
231
fn test_merge_conflict ( ) {
182
232
let ( r1_dir, _repo) = repo_init_bare ( ) . unwrap ( ) ;
0 commit comments