Check that a cached dependency matches a manifest request
The manifest dependency only contains partial information (what’s requested), while the cached dependency always stores a commit hash because it’s built after the repo is available (saved as git_descriptor%revision==revision). So, comparing against the descriptor is not reliable
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(git_target_t), | intent(in) | :: | cached |
Two input git targets |
||
type(git_target_t), | intent(in) | :: | manifest |
Two input git targets |
||
integer, | intent(in) | :: | verbosity | |||
integer, | intent(in) | :: | iunit |
logical function git_matches_manifest(cached,manifest,verbosity,iunit)
!> Two input git targets
type(git_target_t), intent(in) :: cached,manifest
integer, intent(in) :: verbosity,iunit
git_matches_manifest = cached%url == manifest%url
if (.not.git_matches_manifest) then
if (verbosity>1) write(iunit,out_fmt) "GIT URL has changed: ",cached%url," vs. ", manifest%url
return
endif
!> The manifest dependency only contains partial information (what's requested),
!> while the cached dependency always stores a commit hash because it's built
!> after the repo is available (saved as git_descriptor%revision==revision).
!> So, comparing against the descriptor is not reliable
git_matches_manifest = allocated(cached%object) .eqv. allocated(manifest%object)
if (git_matches_manifest .and. allocated(cached%object)) &
git_matches_manifest = cached%object == manifest%object
if (.not.git_matches_manifest) then
if (verbosity>1) write(iunit,out_fmt) "GIT OBJECT has changed: ",cached%object," vs. ", manifest%object
end if
end function git_matches_manifest