class LicenseAuto::GitModule

Constants

LANGUAGE

Public Class Methods

check_cli() click to toggle source
# File lib/license_auto/package_manager/git_module.rb, line 39
def self.check_cli
  cmd = 'git version'
  stdout_str, stderr_str, _status = Open3.capture3(cmd)
  if stdout_str.include?('git version')
    true
  else
    LicenseAuto.logger.error("stdout_str: #{stdout_str}, stderr_str: #{stderr_str}")
    false
  end
end
new(path) click to toggle source
Calls superclass method LicenseAuto::PackageManager::new
# File lib/license_auto/package_manager/git_module.rb, line 11
def initialize(path)
  super(path)
end

Public Instance Methods

dependency_file_pattern() click to toggle source
# File lib/license_auto/package_manager/git_module.rb, line 15
def dependency_file_pattern
  /#{@path}\/\.gitmodules$/
end
parse_dependencies() click to toggle source
# File lib/license_auto/package_manager/git_module.rb, line 19
def parse_dependencies
  git_module_files = dependency_file_path_names
  if git_module_files.empty?
    LicenseAuto.logger.info("#{LANGUAGE}: #{dependency_file_pattern} file not exist")
    []
  elsif git_module_files.size == 1
    dep_file = git_module_files.first
    LicenseAuto.logger.debug(dep_file)
    modules = parse_modules(dep_file)
    LicenseAuto.logger.debug(modules)
    [
        {
            dep_file: dep_file,
            deps: modules
        }
    ]
  end
  # LicenseAuto.logger.debug(JSON.pretty_generate(dep_files))
end

Private Instance Methods

parse_modules(dep_file) click to toggle source
# File lib/license_auto/package_manager/git_module.rb, line 52
def parse_modules(dep_file)
  lines = File.readlines(dep_file)
  module_pattern = /url\s=\s(?<url>.+)(\.git)?$/
  lines.map {|line|
    matched = module_pattern.match(line)
    if matched
      LicenseAuto.logger.debug("matched: #{matched}, .gitmodule line: #{line}")
      clone_url = matched[:url].gsub(/\.git$/, '')
      {
          name: clone_url,
          # TODO: fetch version infomation from .git/ dir is to complex
          version: nil,
          remote: clone_url
      }
    end
  }.compact
end