class LicenseAuto::Gradle

Constants

DEPENDENCY_PATTERN
LANGUAGE
REMOTE

Public Class Methods

check_cli() click to toggle source
# File lib/license_auto/package_manager/gradle.rb, line 41
def self.check_cli
  cmd = 'gradle --version'
  stdout_str, stderr_str, _status = Open3.capture3(cmd)
  if stdout_str.include?('Gradle 2.8')
    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/gradle.rb, line 14
def initialize(path)
  super(path)
end

Public Instance Methods

collect_dependencies() click to toggle source
# File lib/license_auto/package_manager/gradle.rb, line 81
def collect_dependencies
  root_deps = list_dependencies
  projects = list_projects
  projects.each {|project_name|
    deps = list_dependencies(project_name)
    root_deps.merge(deps)
  }
  root_deps.map {|dep|
    group, name, version_range = dep.split(':')
    version = filter_version(version_range)
    {
        name: [group, name].join(':'),
        version: version,
        remote: REMOTE
    }
  }
end
dependency_file_pattern() click to toggle source
# File lib/license_auto/package_manager/gradle.rb, line 18
def dependency_file_pattern
  /#{@path}\/build.gradle$/i
end
filter_version(version_range) click to toggle source
# File lib/license_auto/package_manager/gradle.rb, line 99
def filter_version(version_range)
  # 'junit:junit:3.8.2 -> 4.11'
  range_arrow_pattern = /(?<min_ver>.*)\s->\s(?<max_ver>.*)/
  matched = range_arrow_pattern.match(version_range)
  if matched
    version_range = matched[:max_ver]
  end

  # 'org.apache.ant:ant:1.8.3 (*)'
  star_pattern = /\s\(\*\)/
  version_range.gsub(star_pattern, '')
end
list_dependencies(project_name=nil) click to toggle source

@return sample:

Set.new(["commons-beanutils:commons-beanutils:1.8.3", "commons-logging:commons-logging:1.1.1", "junit:junit:4.8.2"])
# File lib/license_auto/package_manager/gradle.rb, line 114
def list_dependencies(project_name=nil)
  Dir.chdir(@path) do
    deps = Set.new
    cmd = if project_name
            "gradle -q #{project_name}:dependencies"
          else
            "gradle -q dependencies"
          end
    LicenseAuto.logger.debug("cmd: #{cmd}")

    stdout_str, stderr_str, _status = Open3.capture3(cmd)
    if stdout_str.length > 0
      LicenseAuto.logger.debug("stdout_str: #{stdout_str}")
      stdout_str.split("\n").each {|line|
        matched = DEPENDENCY_PATTERN.match(line)
        # LicenseAuto.logger.debug("#{line}, matched: #{matched}")
        if matched
          group_name_version = matched.to_s.gsub(/\\---\s/, '')
          # External dependencies
          # DOC: https://docs.gradle.org/current/userguide/artifact_dependencies_tutorial.html#N105E1
          deps.add(group_name_version)
        end
      }
    else
      LicenseAuto.logger.error("stderr_str: #{stderr_str}")
    end
    LicenseAuto.logger.debug(deps)
    deps
  end
end
list_projects() click to toggle source

Out put sample:


Root project


Root project 'maven-gradle-comparison-dependency-simplest' No sub-projects

# File lib/license_auto/package_manager/gradle.rb, line 59
def list_projects
  cmd = "gradle -q project"
  LicenseAuto.logger.debug(@path)
  projects = []
  Dir.chdir(@path) do
    stdout_str, stderr_str, _status = Open3.capture3(cmd)
    if stdout_str.length > 0
      LicenseAuto.logger.debug(stdout_str)
      stdout_str.split("\n").each {|line|
        sub_project_pattern = /Project\s\'(:)?(?<project_name>.+)\'/
        matched = sub_project_pattern.match(line)
        if matched
          projects.push(match_result[:project_name])
        end
      }
    else
      LicenseAuto.logger.error(stderr_str)
    end
    projects
  end
end
parse_dependencies() click to toggle source
# File lib/license_auto/package_manager/gradle.rb, line 22
def parse_dependencies
  build_files = dependency_file_path_names
  if build_files.empty?
    LicenseAuto.logger.info("#{LANGUAGE}: #{dependency_file_pattern} file not exist")
    []
    # TODO: check his sub dir has `build.gradle` or not
  else
    build_files.map {|dep_file|
      LicenseAuto.logger.debug(dep_file)

      {
          dep_file: dep_file,
          deps: collect_dependencies
      }
    }
  end
  # LicenseAuto.logger.debug(JSON.pretty_generate(dep_files))
end