#!/usr/bin/env ruby require 'rubygems' require 'active_record' require 'fileutils' #require 'trac4r' ROOT = File.expand_path(File.dirname(__FILE__) + "/../") TIME_FILE = "#{ROOT}/sync-timestamp" NEW_PORTS = "#{ROOT}/bin/new_ports" PORT_INDEX = "/opt/local/var/macports/sources/rsync.macports.org/release/tarballs/ports" RAILS_ROOT = "#{ROOT}" MODE = 'production' require File.expand_path(RAILS_ROOT + '/app/models/category.rb', __FILE__) require File.expand_path(RAILS_ROOT + '/app/models/port.rb', __FILE__) if File.exists?(TIME_FILE) $mtime = File.stat(TIME_FILE).mtime.to_i else $mtime = 0 end FileUtils.touch(TIME_FILE) $ports = Array.new $hashed_data = Hash.new db_info = YAML.load_file(File.expand_path(RAILS_ROOT + '/config/database.yml', __FILE__)) #db_info['development']['database'] = RAILS_ROOT + "/" + db_info['development']['database'] #puts db_info[MODE].to_yaml ActiveRecord::Base.establish_connection(db_info[MODE]) #trac = Trac.new(TRAC_URL, TRAC_USER, TRAC_PASS) fp = IO.popen("#{NEW_PORTS} -m #{$mtime} #{PORT_INDEX}") new_ports = fp.read.split("\n") if new_ports.count > 0 new_ports << "" #add last blank line end new_ports.each do |line| unless (line == "") data = line.match(/(\S+):\s+\{?(.+)\}?$/) unless data.nil? #field missing, should record this if it happens $hashed_data[data[1].to_sym] = data[2] end else category_name = $hashed_data[:categories].try(:split, " ").try(:[], 0) $category = Category.find_by_name(category_name) if $category.nil? $category = Category.new({:name => category_name}) $category.save end port = Port.find_by_name($hashed_data[:name]) if port.nil? port = Port.new end port[:name] = $hashed_data[:name] port[:path] = $hashed_data[:portdir] port[:version] = $hashed_data[:version] port[:description] = $hashed_data[:description] port[:licenses] = $hashed_data[:license] port[:category_id] = $category.id port[:variants] = $hashed_data[:variants] port[:maintainers] = $hashed_data[:maintainers] port[:platforms] = $hashed_data[:platforms] port[:categories] = $hashed_data[:categories] $ports << [$hashed_data, port] port.save puts "Saved #{port[:name]}, version #{port[:version]}" $hashed_data = {} end end