Sha256: 0ba16f50ba64ff3cc97d2d1566a1631fa234499ce8572b8f6696ad5672d227ea

Contents?: true

Size: 1.92 KB

Versions: 1

Compression:

Stored size: 1.92 KB

Contents

require_relative './highline_cli.rb'
require_relative './local_code.rb'

module GitHelper
  class ChangeRemote
    attr_accessor :old_owner, :new_owner

    def initialize(old_owner, new_owner)
      @old_owner = old_owner
      @new_owner = new_owner
    end

    def execute
      original_dir = Dir.pwd
      nested_dirs = Dir.entries(original_dir).select do |entry|
        entry_dir = File.join(original_dir, entry)
        File.directory?(entry_dir) && !(entry == '.' || entry == '..')
      end

      nested_dirs.each do |nested_dir|
        process_dir(nested_dir, original_dir)
      end
    end

    private def process_dir(current_dir, original_dir)
      Dir.chdir(current_dir)

      if File.exist?('.git')
        process_git_repository if cli.process_directory_remotes?(current_dir)
      end

      Dir.chdir(original_dir)
    end

    private def process_git_repository
      local_code.remotes.each do |remote|
        if remote.include?(old_owner)
          process_remote(remote)
        else
          puts "  Found remote is not pointing to #{old_owner}."
        end
      end
      puts "\n"
    end

    private def process_remote(remote)
      remote_name = local_code.remote_name(remote)

      if local_code.ssh_remote?(remote)
        repo = local_code.remote_project(remote)
        source_name = local_code.remote_source(remote)
        remote_url = "git@#{source_name}:#{new_owner}/#{repo}.git"
      elsif local_code.https_remote?(remote)
        repo = local_code.remote_project(remote)
        source_name = local_code.remote_source(remote)
        remote_url = "https://#{source_name}/#{new_owner}/#{repo}.git"
      end

      puts "  Changing the remote URL #{remote_name} to be '#{remote_url}'."
      local_code.change_remote(remote_name, remote_url)
    end

    private def local_code
      @local_code ||= GitHelper::LocalCode.new
    end

    private def cli
      @cli ||= GitHelper::HighlineCli.new
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
git_helper-2.0.0 lib/git_helper/change_remote.rb