class LocalMerge

Constants

OUT_DIR

Public Class Methods

new(config, options) click to toggle source
# File lib/github_merge/local.rb, line 5
def initialize(config, options)
  @config = config
  @options = options
end

Public Instance Methods

beginning_sha() click to toggle source
# File lib/github_merge/local.rb, line 61
def beginning_sha
  if @options.all_svn?
    `git log --pretty=format:%H --reverse`.split("\n")[1]
  else
    `git log --pretty=format:%H --reverse`.split("\n").first
  end
end
clone_repos() click to toggle source
# File lib/github_merge/local.rb, line 20
def clone_repos
  @config["repositories"].each do |repo|
    `git clone #{repo["url"]} #{repo["sub directory"]}`
  end
end
create_empty_merged_repo() click to toggle source
# File lib/github_merge/local.rb, line 32
def create_empty_merged_repo
  puts 'Creating merged repository'
  `git init #{merge_repo_name}`
end
git_filter_branch_move(subdir) click to toggle source
# File lib/github_merge/local.rb, line 48
def git_filter_branch_move(subdir)
  puts "Moving repository #{subdir} to subdirectory #{subdir}..."

  sed = sed_command_to_use
  Dir.chdir subdir do
    %x[git filter-branch --index-filter \
      'git ls-files -s | #{sed} "s@\t@&#{subdir}/@" |
              GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
                      git update-index --index-info &&
       mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"' #{beginning_sha}..HEAD]
  end
end
merge!() click to toggle source
# File lib/github_merge/local.rb, line 10
def merge!
  FileUtils.mkdir_p OUT_DIR
  Dir.chdir OUT_DIR do
    clone_repos
    move_repos_to_subdir
    create_empty_merged_repo
    merge_repositories
  end
end
merge_repo_name() click to toggle source
# File lib/github_merge/local.rb, line 77
def merge_repo_name
  @config["merged repository"]
end
merge_repositories() click to toggle source
# File lib/github_merge/local.rb, line 37
def merge_repositories
  Dir.chdir merge_repo_name do
    @config["repositories"].each_with_index do |repo, index|
      repo_name = repo["sub directory"]
      `git remote add #{repo_name} ../#{repo_name}`
      `git fetch #{repo_name}`
      `git merge --no-edit #{repo_name}/master`
    end
  end
end
merged?() click to toggle source
# File lib/github_merge/local.rb, line 81
def merged?
  merge_repo_dir = "#{OUT_DIR}/#{merge_repo_name}"
  return false unless Dir.exist? merge_repo_dir
  Dir.chdir merge_repo_dir do
    return false unless Dir.exists? '.git'
    return `git log`.split("\n").size > 0
  end
end
move_repos_to_subdir() click to toggle source
# File lib/github_merge/local.rb, line 26
def move_repos_to_subdir
  @config["repositories"].each do |repo|
    git_filter_branch_move(repo["sub directory"])
  end
end
sed_command_to_use() click to toggle source
# File lib/github_merge/local.rb, line 69
def sed_command_to_use
  if RbConfig::CONFIG['host_os'] =~ /darwin/
    'gsed'
  else
    'sed'
  end
end