def clone_or_fetch(dependency)
      if dependency.config_entry.repo.exists?
        check_repo_validity(dependency)
        
        Console.log_substep("Working copy '#{dependency.config_entry.repo.path}' already exists, fetching...") 
        ExtraOutput.progress("Fetching #{dependency.config_entry.repo.basename}") if @ci
        fetch_repo(dependency)
      else
        Console.log_substep("Cloning #{dependency.config_entry.url} into '#{dependency.config_entry.repo.path}'")
        ExtraOutput.progress("Cloning into #{dependency.config_entry.repo.basename}") if @ci
        clone_repo(dependency)
      end
    end
def clone_or_fetch(dependency)
      if dependency.config_entry.repo.exists?
        check_repo_validity(dependency)
        
        Console.log_substep("Working copy '#{dependency.config_entry.repo.path}' already exists, fetching...") 
        ExtraOutput.progress("Fetching #{dependency.config_entry.repo.basename}") if @ci
        fetch_repo(dependency)
      else
        Console.log_substep("Cloning #{dependency.config_entry.url} into '#{dependency.config_entry.repo.path}'")
        ExtraOutput.progress("Cloning into #{dependency.config_entry.repo.basename}") if @ci
        clone_repo(dependency)
      end
    end
Repo operations