def set_file_names
if self.manifest_text_changed?
- self.file_names = Collection.manifest_files self.manifest_text
+ self.file_names = manifest_files
end
true
end
- def self.manifest_files manifest_text
+ def manifest_files
names = ''
- if manifest_text
- manifest_text.scan(/ \d+:\d+:(\S+)/) do |name|
- names << name.first.gsub('\040',' ') + "\n"
+ if self.manifest_text
+ self.manifest_text.scan(/ \d+:\d+:(\S+)/) do |name|
+ names << name.first.gsub('\040',' ') + "\n"
break if names.length > 2**13
end
end
- if manifest_text and names.length < 2**13
- manifest_text.scan(/^\.\/(\S+)/m) do |stream_name|
- names << stream_name.first.gsub('\040',' ') + "\n"
+ if self.manifest_text and names.length < 2**13
+ self.manifest_text.scan(/^\.\/(\S+)/m) do |stream_name|
+ names << stream_name.first.gsub('\040',' ') + "\n"
break if names.length > 2**13
end
end
add_column :collections, :file_names, :string, :limit => 2**13
act_as_system_user do
- Collection.all.each do |c|
- if c.manifest_text
- file_names = Collection.manifest_files c.manifest_text
- update_sql "UPDATE collections SET file_names = '#{file_names}' WHERE uuid = '#{c.uuid}'"
- end
+ Collection.find_each(batch_size: 20) do |c|
+ file_names = c.manifest_files
+ update_sql "UPDATE collections
+ SET file_names = #{ActiveRecord::Base.connection.quote(file_names)}
+ WHERE uuid = '#{c.uuid}'"
end
end
end