1
1
use crates_index_diff:: Index ;
2
2
use git_repository as git;
3
+ use git_repository:: refs:: transaction:: PreviousValue ;
3
4
use git_testtools:: tempfile:: TempDir ;
4
5
use std:: path:: PathBuf ;
5
6
use std:: sync:: atomic:: AtomicBool ;
@@ -60,20 +61,19 @@ fn clone_if_needed() {
60
61
}
61
62
62
63
#[ test]
63
- #[ ignore]
64
- fn changes_since_last_fetch ( ) -> crate :: Result {
65
- let ( mut index, _tmp) = index_rw ( ) ?;
64
+ fn changes_since_last_fetch ( ) {
65
+ let ( mut index, _tmp) = index_rw ( ) . unwrap ( ) ;
66
66
let repo = index. repository ( ) ;
67
67
assert ! ( index. last_seen_reference( ) . is_err( ) , "no marker exists" ) ;
68
- let num_changes_since_first_commit = index. fetch_changes ( ) ? . len ( ) ;
68
+ let num_changes_since_first_commit = index. fetch_changes2 ( ) . unwrap ( ) . len ( ) ;
69
69
assert_eq ! (
70
70
num_changes_since_first_commit, NUM_CHANGES_SINCE_EVER ,
71
71
"all changes since ever"
72
72
) ;
73
73
let mut marker = index
74
74
. last_seen_reference ( )
75
75
. expect ( "must be created/update now" ) ;
76
- let remote_main = repo. find_reference ( "refs/remotes/origin/main" ) ? ;
76
+ let remote_main = repo. find_reference ( "refs/remotes/origin/main" ) . unwrap ( ) ;
77
77
assert_eq ! (
78
78
marker. target( ) ,
79
79
remote_main. target( ) ,
@@ -83,15 +83,16 @@ fn changes_since_last_fetch() -> crate::Result {
83
83
// reset to previous one
84
84
marker
85
85
. set_target_id (
86
- repo. rev_parse ( format ! ( "{}~1" , index. seen_ref_name) . as_str ( ) ) ?
86
+ repo. rev_parse ( format ! ( "{}~1" , index. seen_ref_name) . as_str ( ) )
87
+ . unwrap ( )
87
88
. single ( )
88
89
. unwrap ( ) ,
89
90
"resetting to previous commit" ,
90
91
)
91
92
. expect ( "reset success" ) ;
92
- let num_seen_after_reset = index. fetch_changes ( ) ? . len ( ) ;
93
+ let num_seen_after_reset = index. fetch_changes2 ( ) . unwrap ( ) . len ( ) ;
93
94
assert_eq ! (
94
- index. last_seen_reference( ) ? . target( ) ,
95
+ index. last_seen_reference( ) . unwrap ( ) . target( ) ,
95
96
remote_main. target( ) ,
96
97
"seen branch was updated again"
97
98
) ;
@@ -101,26 +102,45 @@ fn changes_since_last_fetch() -> crate::Result {
101
102
) ;
102
103
103
104
assert_eq ! (
104
- index. fetch_changes ( ) ? . len( ) ,
105
+ index. fetch_changes2 ( ) . unwrap ( ) . len( ) ,
105
106
0 ,
106
107
"nothing if there was no change"
107
108
) ;
108
109
109
110
// now the remote has squashed their history, we should still be able to get the correct changes.
110
- git2:: Repository :: open ( repo. git_dir ( ) ) ?. remote ( "local" , repo. git_dir ( ) . to_str ( ) . unwrap ( ) ) ?;
111
- index. remote_name = Some ( "local" ) ;
111
+ let repo_name = "local" ;
112
+ {
113
+ let git_dir = repo. git_dir ( ) . to_owned ( ) ;
114
+ let mut config = index. repository_mut ( ) . config_snapshot_mut ( ) ;
115
+ // TODO: use `remote.save_as_to()` here, requires a way to get the mutable repo ref again.
116
+ config
117
+ . set_raw_value ( "remote" , Some ( repo_name) , "url" , git_dir. to_str ( ) . unwrap ( ) )
118
+ . unwrap ( ) ;
119
+ config
120
+ . set_raw_value (
121
+ "remote" ,
122
+ Some ( repo_name) ,
123
+ "fetch" ,
124
+ "+refs/heads/*:refs/remotes/local/*" ,
125
+ )
126
+ . unwrap ( ) ;
127
+ }
128
+ index. remote_name = Some ( repo_name. into ( ) ) ;
112
129
index
113
130
. repository ( )
114
- . find_reference ( "refs/heads/main" ) ?
115
- . set_target_id (
131
+ . reference (
132
+ "refs/heads/main" ,
116
133
index
117
134
. repository ( )
118
- . rev_parse ( "origin/squashed" ) ?
135
+ . rev_parse ( "origin/squashed" )
136
+ . unwrap ( )
119
137
. single ( )
120
138
. unwrap ( ) ,
139
+ PreviousValue :: Any ,
121
140
"adjust to simulate remote with new squashed history" ,
122
- ) ?;
123
- let changes = index. fetch_changes ( ) ?;
141
+ )
142
+ . unwrap ( ) ;
143
+ let changes = index. fetch_changes2 ( ) . unwrap ( ) ;
124
144
assert_eq ! ( changes. len( ) , 1 ) ;
125
145
assert_eq ! (
126
146
changes
@@ -129,7 +149,6 @@ fn changes_since_last_fetch() -> crate::Result {
129
149
Some ( ( "git-repository" , "1.0.0" ) ) ,
130
150
"there was just one actual changes compared to the previous state"
131
151
) ;
132
- Ok ( ( ) )
133
152
}
134
153
135
154
fn index_ro ( ) -> crate :: Result < Index > {
0 commit comments