cmd_update Subroutine

public subroutine cmd_update(settings)

Entry point for the update subcommand

Arguments

Type IntentOptional Attributes Name
type(fpm_update_settings), intent(in) :: settings

Representation of the command line arguments


Source Code

  subroutine cmd_update(settings)
    !> Representation of the command line arguments
    type(fpm_update_settings), intent(in) :: settings

    type(package_config_t) :: package
    type(dependency_tree_t) :: deps
    type(error_t), allocatable :: error
    integer :: ii
    character(len=:), allocatable :: cache

    call get_package_data(package, "fpm.toml", error, apply_defaults=.true.)
    call handle_error(error)

    if (.not. exists("build")) then
      call mkdir("build")
      call filewrite(join_path("build", ".gitignore"),["*"])
    end if

    cache = join_path("build", "cache.toml")
    if (settings%clean) call delete_file(cache)

    call new_dependency_tree(deps, cache=cache, &
      verbosity=merge(2, 1, settings%verbose))

    call deps%add(package, error)
    call handle_error(error)

    ! Force-update all dependencies if `--clean`
    if (settings%clean) then
        do ii = 1, deps%ndep
            deps%dep(ii)%update = .true.
        end do
    end if

    if (settings%fetch_only) return

    if (size(settings%name) == 0) then
      call deps%update(error)
      call handle_error(error)
    else
      do ii = 1, size(settings%name)
        call deps%update(trim(settings%name(ii)), error)
        call handle_error(error)
      end do
    end if

    if (len_trim(settings%dump)>0) then
        call deps%dump(trim(settings%dump), error, json=name_is_json(trim(settings%dump)))
        call handle_error(error)
    end if

  end subroutine cmd_update