Sha256: bc7e52acdf3513b57a4f0f6d9918b7fa4579d3bb51f5a43ad8bb7dada88f937c

Contents?: true

Size: 1.95 KB

Versions: 14

Compression:

Stored size: 1.95 KB

Contents

# frozen_string_literal: true

require "parseconfig"
require "dependabot/dependency"
require "dependabot/file_parsers/base"
require "dependabot/shared_helpers"

module Dependabot
  module FileParsers
    module Git
      class Submodules < Dependabot::FileParsers::Base
        def parse
          SharedHelpers.in_a_temporary_directory do
            File.write(".gitmodules", gitmodules_file.content)

            ParseConfig.new(".gitmodules").params.map do |_, params|
              branch = params["branch"]

              Dependency.new(
                name: params["path"],
                version: submodule_sha(params["path"]),
                package_manager: "submodules",
                requirements: [{
                  requirement: nil,
                  file: ".gitmodules",
                  source: {
                    type: "git",
                    url: absolute_url(params["url"]),
                    branch: branch,
                    ref: branch
                  },
                  groups: []
                }]
              )
            end
          end
        end

        private

        def absolute_url(url)
          # Submodules can be specified with a relative URL (e.g., ../repo.git)
          # which we want to expand out into a full URL if present.
          return url unless url.start_with?("../", "./")

          path = Pathname.new(File.join(source.repo, url))
          "https://#{source.hostname}/#{path.cleanpath}"
        end

        def submodule_sha(path)
          submodule = dependency_files.find { |f| f.name == path }
          raise "Submodule not found #{path}" unless submodule

          submodule.content
        end

        def gitmodules_file
          @gitmodules_file ||= get_original_file(".gitmodules")
        end

        def check_required_files
          %w(.gitmodules).each do |filename|
            raise "No #{filename}!" unless get_original_file(filename)
          end
        end
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
dependabot-core-0.77.2 lib/dependabot/file_parsers/git/submodules.rb
dependabot-core-0.77.1 lib/dependabot/file_parsers/git/submodules.rb
dependabot-core-0.77.0 lib/dependabot/file_parsers/git/submodules.rb
dependabot-core-0.76.11 lib/dependabot/file_parsers/git/submodules.rb
dependabot-core-0.76.10 lib/dependabot/file_parsers/git/submodules.rb
dependabot-core-0.76.9 lib/dependabot/file_parsers/git/submodules.rb
dependabot-core-0.76.8 lib/dependabot/file_parsers/git/submodules.rb
dependabot-core-0.76.7 lib/dependabot/file_parsers/git/submodules.rb
dependabot-core-0.76.6 lib/dependabot/file_parsers/git/submodules.rb
dependabot-core-0.76.5 lib/dependabot/file_parsers/git/submodules.rb
dependabot-core-0.76.4 lib/dependabot/file_parsers/git/submodules.rb
dependabot-core-0.76.3 lib/dependabot/file_parsers/git/submodules.rb
dependabot-core-0.76.2 lib/dependabot/file_parsers/git/submodules.rb
dependabot-core-0.76.1 lib/dependabot/file_parsers/git/submodules.rb