@sourcedata = {params[:uuid] => {uuid: params[:uuid]}}
@protected = {}
- # TODO: compile provenance data using Job.where(...)
+ colorindex = -1
+ any_hope_left = true
+ while any_hope_left
+ any_hope_left = false
+ Job.where(output: @sourcedata.keys).sort_by { |a| a.finished_at || a.created_at }.reverse.each do |job|
+ if !@output2colorindex[job.output]
+ any_hope_left = true
+ @output2colorindex[job.output] = (colorindex += 1) % 10
+ @provenance << {job: job, output: job.output}
+ @sourcedata.delete job.output
+ @output2job[job.output] = job
+ job.dependencies.each do |new_source_data|
+ unless @output2colorindex[new_source_data]
+ @sourcedata[new_source_data] = {uuid: new_source_data}
+ end
+ end
+ end
+ end
+ end
Link.where(head_uuid: @sourcedata.keys | @output2job.keys).each do |link|
if link.link_class == 'resources' and link.name == 'wants'
<% j.script_parameters.each do |k,v| %>
<tr>
<td style="width: 60%">
- <% re = v.match(/^([0-9a-f]+)/) %>
- <% justhash = (re and re[1].length == 32) ? re[1] : nil %>
- <% if justhash and @output2job.has_key? justhash %>
+ <% if v and @output2job.has_key? v %>
<tt class="label colorseries-10-<%= @output2colorindex[v] %>"><%= v %></tt>
- <% elsif justhash %>
- <tt class="label colorseries-nil"><%= justhash %></tt><br /><span class="deemphasize"><%= v %></span>
+ <% elsif v %>
+ <tt class="label colorseries-nil"><%= v %></tt><br /><span class="deemphasize"><%= v %></span>
<% else %>
<span class="deemphasize"><%= v %></span>
<% end %>
</td><td style="text-align: center; width: 20%">
- <% if justhash
- if @protected[justhash]
+ <% if v
+ if @protected[v]
labelclass = 'success'
labeltext = 'keep'
else
self.script_parameters.values.each do |v|
next unless v.is_a? String
v.match(/^(([0-9a-f]{32})\b(\+[^,]+)?,?)*$/) do |locator|
- bare_locator = locator[0].gsub(/\+[^,]+/,'')
- deps[bare_locator] = true
+ deps[locator] = true
end
end
deps.keys