@@ -30,7 +30,8 @@ subroutine collect_package_dependencies(testsuite)
30
30
& new_unittest(" cache-load-dump" , test_cache_load_dump), &
31
31
& new_unittest(" cache-dump-load" , test_cache_dump_load), &
32
32
& new_unittest(" status-after-load" , test_status), &
33
- & new_unittest(" add-dependencies" , test_add_dependencies)]
33
+ & new_unittest(" add-dependencies" , test_add_dependencies), &
34
+ & new_unittest(" update-dependencies" ,test_update_dependencies)]
34
35
35
36
end subroutine collect_package_dependencies
36
37
@@ -213,6 +214,83 @@ subroutine test_add_dependencies(error)
213
214
214
215
end subroutine test_add_dependencies
215
216
217
+ subroutine test_update_dependencies (error )
218
+
219
+ ! > Error handling
220
+ type (error_t), allocatable , intent (out ) :: error
221
+
222
+ type (toml_table) :: cache,manifest
223
+ type (toml_table), pointer :: ptr
224
+ type (toml_key), allocatable :: list(:)
225
+ type (dependency_tree_t) :: deps,cached_deps
226
+ integer :: ii
227
+
228
+ ! Create a dummy cache
229
+ cache = toml_table()
230
+ call add_table(cache, " dep1" , ptr)
231
+ call set_value(ptr, " version" , " 1.1.0" )
232
+ call set_value(ptr, " proj-dir" , " fpm-tmp1-dir" )
233
+ call add_table(cache, " dep2" , ptr)
234
+ call set_value(ptr, " git" , " https://gitlab.com/fortran-lang/lin2" )
235
+ call set_value(ptr, " rev" , " c0ffee" )
236
+ call set_value(ptr, " proj-dir" , " fpm-tmp1-dir" )
237
+ call add_table(cache, " dep3" , ptr)
238
+ call set_value(ptr, " git" , " https://gitlab.com/fortran-lang/pkg3" )
239
+ call set_value(ptr, " rev" , " t4a" )
240
+ call set_value(ptr, " proj-dir" , " fpm-tmp1-dir" )
241
+ call add_table(cache, " dep4" , ptr)
242
+ call set_value(ptr, " version" , " 1.0.0" )
243
+ call set_value(ptr, " proj-dir" , " fpm-tmp1-dir" )
244
+
245
+ ! Load into a dependency tree
246
+ call new_dependency_tree(cached_deps)
247
+ call cached_deps% load(cache, error)
248
+ call cache% destroy()
249
+ if (allocated (error)) return
250
+
251
+ ! Create a dummy manifest, with different version
252
+ manifest = toml_table()
253
+ call add_table(manifest, " dep1" , ptr)
254
+ call set_value(ptr, " version" , " 1.1.1" )
255
+ call set_value(ptr, " proj-dir" , " fpm-tmp1-dir" )
256
+ call add_table(manifest, " dep2" , ptr)
257
+ call set_value(ptr, " git" , " https://gitlab.com/fortran-lang/lin4" )
258
+ call set_value(ptr, " rev" , " c0ffee" )
259
+ call set_value(ptr, " proj-dir" , " fpm-tmp1-dir" )
260
+ call add_table(manifest, " dep3" , ptr)
261
+ call set_value(ptr, " git" , " https://gitlab.com/fortran-lang/pkg3" )
262
+ call set_value(ptr, " rev" , " l4tte" )
263
+ call set_value(ptr, " proj-dir" , " fpm-tmp1-dir" )
264
+
265
+ ! Load dependencies from manifest
266
+ call new_dependency_tree(deps)
267
+ call deps% load(manifest, error)
268
+ call manifest% destroy()
269
+ if (allocated (error)) return
270
+
271
+ ! Add manifest dependencies
272
+ do ii= 1 ,cached_deps% ndep
273
+ call deps% add(cached_deps% dep(ii),error)
274
+ if (allocated (error)) return
275
+ end do
276
+
277
+ ! Test that all dependencies are flagged as "update"
278
+ if (.not. deps% dep(1 )% update) then
279
+ call test_failed(error, " Updated dependency (different version) not detected" )
280
+ return
281
+ end if
282
+ if (.not. deps% dep(2 )% update) then
283
+ call test_failed(error, " Updated dependency (git address) not detected" )
284
+ return
285
+ end if
286
+ if (.not. deps% dep(3 )% update) then
287
+ call test_failed(error, " Updated dependency (git rev) not detected" )
288
+ return
289
+ end if
290
+
291
+
292
+ end subroutine test_update_dependencies
293
+
216
294
217
295
! > Resolve a single dependency node
218
296
subroutine resolve_dependency_once (self , dependency , root , error )
0 commit comments