From 2aeeb1ff8714b70e543b09418d703816aac64684 Mon Sep 17 00:00:00 2001 From: uu59 Date: Wed, 5 Nov 2014 13:11:23 +0900 Subject: [PATCH 1/3] Add dep:list task to help packaging td-agent-ui --- lib/tasks/dep.rake | 48 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 lib/tasks/dep.rake diff --git a/lib/tasks/dep.rake b/lib/tasks/dep.rake new file mode 100644 index 0000000..652a9f7 --- /dev/null +++ b/lib/tasks/dep.rake @@ -0,0 +1,48 @@ +namespace :dep do + desc "list dependency gems order by less referenced" + task :list do + require "set" + deps = Set.new + context = false + current_parent = false + versions = { + "bundler" => "1.7.4" # bundler version does not appear in Gemfile.lock + } + lock_file = ENV["GEMFILE_LOCK"] || "Gemfile.production.lock" + File.open(lock_file).each_line do |line| + # GEM + # remote: https://rubygems.org/ + # specs: + # foo_gem (0.1.2) + # foo_dep1 (>= 1.0.0) + # foo_dep2 + # bar_gem (1.2.1) + # bar_dep1 + # ... + # ... + if line == " specs:\n" + context = true + next + end + gem_name = line[/[^ \n]+/, 0] # " foo_gem (0.1.2)\n" => "foo_gem" + if line.match(/^ {4}[^ ]/) # " foo_gem (0.1.2)" + current_parent = gem_name + versions[current_parent] = line[/\((.*?)\)/, 1] # foobar (1.2.3) => 1.2.3 + next + elsif line.match(/^ {6}[^ ]/) # " foo_dep1 (>= 1.0.0)" + deps.add([current_parent, gem_name]) + else + context = false + end + end + rank = {} + deps.to_a.each do |(parent, child)| + rank[parent] ||= 0 + rank[child] ||= 0 + rank[parent] += 1 + end + rank.to_a.sort_by {|(name, score)| score }.each do |(name, score)| + puts %Q|download "#{name}", "#{versions[name]}"| + end + end +end From 467085af4055e5c4746ec4147ed3ac26045e454c Mon Sep 17 00:00:00 2001 From: uu59 Date: Wed, 5 Nov 2014 13:28:07 +0900 Subject: [PATCH 2/3] Ensure Gemfile.produciton.lock is up to date before processing --- lib/tasks/dep.rake | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/tasks/dep.rake b/lib/tasks/dep.rake index 652a9f7..997130e 100644 --- a/lib/tasks/dep.rake +++ b/lib/tasks/dep.rake @@ -8,7 +8,10 @@ namespace :dep do versions = { "bundler" => "1.7.4" # bundler version does not appear in Gemfile.lock } - lock_file = ENV["GEMFILE_LOCK"] || "Gemfile.production.lock" + lock_file = "Gemfile.production.lock" + unless ENV["SKIP_BUNDLE_INSTALL"] + system("bundle install --gemfile Gemfile.production", out: STDERR) # ensure lock file is up to date + end File.open(lock_file).each_line do |line| # GEM # remote: https://rubygems.org/ From 81225a288a1c8c2cf8b9d58572ac4bc7d33617f4 Mon Sep 17 00:00:00 2001 From: uu59 Date: Wed, 5 Nov 2014 13:46:07 +0900 Subject: [PATCH 3/3] Skip fluentd gem --- lib/tasks/dep.rake | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/tasks/dep.rake b/lib/tasks/dep.rake index 997130e..d82c0c6 100644 --- a/lib/tasks/dep.rake +++ b/lib/tasks/dep.rake @@ -8,10 +8,12 @@ namespace :dep do versions = { "bundler" => "1.7.4" # bundler version does not appear in Gemfile.lock } + skip_gems = %w(fluentd) lock_file = "Gemfile.production.lock" unless ENV["SKIP_BUNDLE_INSTALL"] system("bundle install --gemfile Gemfile.production", out: STDERR) # ensure lock file is up to date end + File.open(lock_file).each_line do |line| # GEM # remote: https://rubygems.org/ @@ -29,10 +31,16 @@ namespace :dep do end gem_name = line[/[^ \n]+/, 0] # " foo_gem (0.1.2)\n" => "foo_gem" if line.match(/^ {4}[^ ]/) # " foo_gem (0.1.2)" + if skip_gems.include?(gem_name) + current_parent = nil + next + end current_parent = gem_name versions[current_parent] = line[/\((.*?)\)/, 1] # foobar (1.2.3) => 1.2.3 next elsif line.match(/^ {6}[^ ]/) # " foo_dep1 (>= 1.0.0)" + next if skip_gems.include?(gem_name) + next if current_parent.blank? deps.add([current_parent, gem_name]) else context = false