Class: Dependabot::Bazel::FileFetcher::DirectoryTreeFetcher

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/dependabot/bazel/file_fetcher/directory_tree_fetcher.rb

Overview

Fetches entire directory trees, typically for local_path_override directories. Includes BUILD files to make directories valid Bazel packages.

Constant Summary collapse

SKIP_DIRECTORIES =
T.let(%w(.git .bazel-* bazel-* node_modules .github).freeze, T::Array[String])

Instance Method Summary collapse

Constructor Details

#initialize(fetcher:) ⇒ DirectoryTreeFetcher

Returns a new instance of DirectoryTreeFetcher.



18
19
20
# File 'lib/dependabot/bazel/file_fetcher/directory_tree_fetcher.rb', line 18

def initialize(fetcher:)
  @fetcher = fetcher
end

Instance Method Details

#fetch_build_files_for_directories(directories) ⇒ Object



51
52
53
54
55
56
57
58
59
# File 'lib/dependabot/bazel/file_fetcher/directory_tree_fetcher.rb', line 51

def fetch_build_files_for_directories(directories)
  files = T.let([], T::Array[DependencyFile])
  directories.each do |dir|
    build_file = @fetcher.send(:fetch_file_if_present, "#{dir}/BUILD") ||
                 @fetcher.send(:fetch_file_if_present, "#{dir}/BUILD.bazel")
    files << build_file if build_file
  end
  files
end

#fetch_directory_tree(directory) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/dependabot/bazel/file_fetcher/directory_tree_fetcher.rb', line 23

def fetch_directory_tree(directory)
  return [] if should_skip_directory?(directory)

  files = T.let([], T::Array[DependencyFile])

  begin
    repo_contents = @fetcher.send(:repo_contents, dir: directory)

    repo_contents.each do |item|
      path = item.path
      next if path.nil? || should_skip_directory?(path)

      case item.type
      when "file"
        fetched_file = @fetcher.send(:fetch_file_if_present, path)
        files << fetched_file if fetched_file
      when "dir"
        files += fetch_directory_tree(path)
      end
    end
  rescue Octokit::NotFound, Dependabot::RepoNotFound, Dependabot::DependencyFileNotFound => e
    Dependabot.logger.warn("Skipping inaccessible directory '#{directory}': #{e.message}")
  end

  files
end