class BigKeeper::GradleFileOperator

Public Class Methods

new(path, user) click to toggle source
# File lib/big_keeper/util/gradle_file_operator.rb, line 8
def initialize(path, user)
  @path = path
  @user = user
end

Public Instance Methods

generate_version_name(type) click to toggle source
# File lib/big_keeper/util/gradle_file_operator.rb, line 282
def generate_version_name(type)
  branch_name = GitOperator.new.current_branch(@path)
  version_name = ''
  if OperateType::FINISH == type
    version_name = branch_name.sub(/([\s\S]*)\/(\d+.\d+.\d+)_([\s\S]*)/){ $2 }
  else
    version_name = branch_name.sub(/([\s\S]*)\/([\s\S]*)/){ $2 }
    version_name = version_name.gsub('_', '-')
  end
  version_name
end
get_home_depends() click to toggle source
# File lib/big_keeper/util/gradle_file_operator.rb, line 123
def get_home_depends()
  path_modules = ModuleCacheOperator.new(@path).all_path_modules
  git_modules = ModuleCacheOperator.new(@path).all_git_modules
  path_modules | git_modules
end
get_module_depends(build_file, module_name) click to toggle source
# File lib/big_keeper/util/gradle_file_operator.rb, line 13
def get_module_depends(build_file, module_name)
  Logger.highlight("get module #{module_name} depends ...")
  depend_modules = []
  modules = ModuleCacheOperator.new(@path).all_path_modules
  File.open(build_file, 'r') do |file|
    file.each_line do |line|
      modules.each do |name|
        if line.strip().index('//') != 0 && !line.include?(BigkeeperParser.module_maven(module_name)) && !depend_modules.include?(name) && line.include?(BigkeeperParser.module_maven(name))
          depend_modules << name
        end
      end
    end
  end
  print "module #{module_name} depends: "
  p depend_modules
  depend_modules
end
has_bigkeeper_config(file) click to toggle source
# File lib/big_keeper/util/gradle_file_operator.rb, line 327
def has_bigkeeper_config(file)
  File.open(file, 'r') do |file|
    file.each_line do |line|
      if line.include?('bigkeeper config start')
        return true
      end
    end
  end
  false
end
recover_bigkeeper_config_file(bigkeeper_config_file) click to toggle source
# File lib/big_keeper/util/gradle_file_operator.rb, line 294
def recover_bigkeeper_config_file(bigkeeper_config_file)
  if !File.exist?(bigkeeper_config_file)
    return
  end
  temp_file = Tempfile.new('.bigkeeper_config.tmp', :encoding => 'UTF-8')
  isBigkeeperScript = false
  isBigkeeperBackupScript = false
  begin
    File.open(bigkeeper_config_file, 'r') do |file|
      file.each_line do |line|
        if line.include?('bigkeeper config start')
          isBigkeeperScript = true
        elsif line.include?('bigkeeper config end')
          isBigkeeperScript = false
        elsif line.include?('bigkeeper config backup start')
          isBigkeeperBackupScript = true
        elsif line.include?('bigkeeper config backup end')
          isBigkeeperBackupScript = false
        elsif isBigkeeperBackupScript
          temp_file.puts(line.sub('//',''))
        elsif !isBigkeeperScript
          temp_file.puts(line)
        end
      end
    end
    temp_file.close
    FileUtils.mv(temp_file.path, bigkeeper_config_file)
  ensure
    temp_file.close
    temp_file.unlink
  end
end
update_home_build(build_file, depend_modules, version_name) click to toggle source
# File lib/big_keeper/util/gradle_file_operator.rb, line 175
def update_home_build(build_file, depend_modules, version_name)
  cache_path = File.expand_path("#{@path}/.bigkeeper")
  big_build_file = "#{cache_path}/bigkeeper_build.gradle"

  if depend_modules.empty? && !File.exist?(big_build_file)
    return
  end

  result = "configurations.all {\n\tresolutionStrategy {\n"
  depend_modules.each do |module_name|
    module_maven = BigkeeperParser.module_maven(module_name)
    result << "\t\tforce \'#{module_maven}:#{version_name}-SNAPSHOT\'\n"
  end
  result << "\t}\n}\n"

  dest_path = File.dirname(big_build_file)
  FileUtils.mkdir_p(dest_path) unless File.exist?(dest_path)
  file = File.new(big_build_file, 'w')
  begin
    file << result
    file.close
  ensure
    file.close
  end

  if has_bigkeeper_config(build_file)
    return
  end

  temp_file = Tempfile.new('.build.gradle.tmp')
  begin
    File.open(build_file, 'r') do |file|
      file.each_line do |line|
        temp_file.puts(line)
      end
    end
    temp_file.puts(GradleConentGenerator.generate_bigkeeper_build_gradle_content())
    temp_file.close
    FileUtils.mv(temp_file.path, build_file)
  ensure
    temp_file.close
    temp_file.unlink
  end
end
update_home_depends(build_file, settings_file, type) click to toggle source
# File lib/big_keeper/util/gradle_file_operator.rb, line 276
def update_home_depends(build_file, settings_file, type)
  depend_modules = get_home_depends()
  update_home_settings(settings_file, depend_modules)
  update_home_build(build_file, depend_modules, generate_version_name(type))
end
update_home_settings(settings_file, depend_modules) click to toggle source
# File lib/big_keeper/util/gradle_file_operator.rb, line 129
def update_home_settings(settings_file, depend_modules)
  cache_path = File.expand_path("#{@path}/.bigkeeper")
  big_settings_file = "#{cache_path}/bigkeeper_settings.gradle"

  if depend_modules.empty? && !File.exist?(big_settings_file)
    return
  end

  result = ''
  depend_modules.each do |name|
    artifact_id = BigkeeperParser.module_maven(name).split(':')[1]
    path = BigkeeperParser.module_full_path(@path, @user, name)
    source = BigkeeperParser.module_source(name)
    result << "include \':module:#{artifact_id}\'\nproject(':module:#{artifact_id}').projectDir = new File(rootProject.projectDir, '../#{name}/#{source}')\n"
  end

  dest_path = File.dirname(big_settings_file)
  FileUtils.mkdir_p(dest_path) unless File.exist?(dest_path)
  file = File.new(big_settings_file, 'w')
  begin
    file << result
    file.close
  ensure
    file.close
  end

  if has_bigkeeper_config(settings_file)
    return
  end

  temp_file = Tempfile.new('.settings.gradle.tmp')
  begin
    File.open(settings_file, 'r') do |file|
      file.each_line do |line|
        temp_file.puts(line)
      end
    end
    temp_file.puts(GradleConentGenerator.generate_bigkeeper_settings_gradle_content())
    temp_file.close
    FileUtils.mv(temp_file.path, settings_file)
  ensure
    temp_file.close
    temp_file.unlink
  end
end
update_module_build(build_file, module_name, depend_modules, version_name) click to toggle source
# File lib/big_keeper/util/gradle_file_operator.rb, line 77
def update_module_build(build_file, module_name, depend_modules, version_name)
  module_full_path = BigkeeperParser.module_full_path(@path, @user, module_name)
  cache_path = File.expand_path("#{module_full_path}/.bigkeeper")
  big_build_file = "#{cache_path}/bigkeeper_build.gradle"

  if depend_modules.empty? && !File.exist?(big_build_file)
    return
  end

  result = "configurations.all {\n\tresolutionStrategy {\n"
  depend_modules.each do |name|
    module_maven = BigkeeperParser.module_maven(name)
    result << "\t\tforce \'#{module_maven}:#{version_name}-SNAPSHOT\'\n"
  end
  result << "\t}\n}\n"

  dest_path = File.dirname(big_build_file)
  FileUtils.mkdir_p(dest_path) unless File.exist?(dest_path)
  file = File.new(big_build_file, 'w', :encoding => 'UTF-8')
  begin
    file << result
    file.close
  ensure
    file.close
  end

  if has_bigkeeper_config(build_file)
    return
  end

  temp_file = Tempfile.new('.build.gradle.tmp')
  begin
    File.open(build_file, 'r') do |file|
      file.each_line do |line|
        temp_file.puts(line)
      end
    end
    temp_file.puts(GradleConentGenerator.generate_bigkeeper_build_gradle_content())
    temp_file.close
    FileUtils.mv(temp_file.path, build_file)
  ensure
    temp_file.close
    temp_file.unlink
  end
end
update_module_depends(build_file, settings_file, module_name, version_name) click to toggle source
# File lib/big_keeper/util/gradle_file_operator.rb, line 270
def update_module_depends(build_file, settings_file, module_name, version_name)
  depend_modules = get_module_depends(build_file, module_name)
  update_module_settings(module_name, settings_file, depend_modules)
  update_module_build(build_file, module_name, depend_modules, version_name)
end
update_module_settings(module_name, settings_file, depend_modules) click to toggle source
# File lib/big_keeper/util/gradle_file_operator.rb, line 31
def update_module_settings(module_name, settings_file, depend_modules)
  module_full_path = BigkeeperParser.module_full_path(@path, @user, module_name)
  cache_path = File.expand_path("#{module_full_path}/.bigkeeper")
  big_settings_file = "#{cache_path}/bigkeeper_settings.gradle"

  if depend_modules.empty? && !File.exist?(big_settings_file)
    return
  end

  result = ''
  depend_modules.each do |name|
    artifact_id = BigkeeperParser.module_maven_artifact(name)
    source = BigkeeperParser.module_source(name)
    result << "include \':module:#{artifact_id}\'\nproject(':module:#{artifact_id}').projectDir = new File(rootProject.projectDir, '../#{name}/#{source}')\n"
  end

  dest_path = File.dirname(big_settings_file)
  FileUtils.mkdir_p(dest_path) unless File.exist?(dest_path)
  file = File.new(big_settings_file, 'w', :encoding => 'UTF-8')
  begin
    file << result
    file.close
  ensure
    file.close
  end

  if has_bigkeeper_config(settings_file)
    return
  end

  temp_file = Tempfile.new('.settings.gradle.tmp', :encoding => 'UTF-8')
  begin
    File.open(settings_file, 'r', :encoding => 'UTF-8') do |file|
      file.each_line do |line|
        temp_file.puts(line)
      end
    end
    temp_file.puts(GradleConentGenerator.generate_bigkeeper_settings_gradle_content())
    temp_file.close
    FileUtils.mv(temp_file.path, settings_file)
  ensure
    temp_file.close
    temp_file.unlink
  end
end
update_module_version_name(build_file, version_name) click to toggle source
# File lib/big_keeper/util/gradle_file_operator.rb, line 220
def update_module_version_name(build_file, version_name)
  temp_file = Tempfile.new('.build.gradle.tmp')
  isModifyPom = false
  isBigkeeperScript = false
  isBigkeeperBackupScript = false
  hasBigkeeperBackup = false
  begin
    File.open(build_file, 'r') do |file|
      file.each_line do |line|
        if line.include?('modifyPom')
          isModifyPom = true
        elsif line.include?('bigkeeper config start')
          isBigkeeperScript = true
        elsif line.include?('bigkeeper config end')
          isBigkeeperScript = false
        elsif line.include?('bigkeeper config backup start')
          isBigkeeperBackupScript = true
          hasBigkeeperBackup = true
        elsif line.include?('bigkeeper config backup end')
          isBigkeeperBackupScript = false
        end

        if isModifyPom && !isBigkeeperBackupScript && line.match(/[\s\S]*version[\s\S]*/)
          if !hasBigkeeperBackup
            temp_file.puts("\t\t//bigkeeper config backup start")
            temp_file.puts("\t\t//"+line.strip)
            temp_file.puts("\t\t//bigkeeper config backup end")
          end

          if isBigkeeperScript
            temp_file.puts("\t\tversion \'#{version_name}\'")
          else
            temp_file.puts("\t\t//bigkeeper config start")
            temp_file.puts("\t\tversion \'#{version_name}\'")
            temp_file.puts("\t\t//bigkeeper config end")
          end
          isModifyPom = false
        else
          temp_file.puts(line)
        end
      end
    end
    temp_file.close
    FileUtils.mv(temp_file.path, build_file)
  ensure
    temp_file.close
    temp_file.unlink
  end
end