{% extends "basebuilddetailpage.html" %}

{% load projecttags %}

{% block title %} {{object.name}}_{{object.version}} - {{build.target_set.all|dictsort:"target"|join:", "}} {{build.machine}} - {{build.project.name}} - Toaster {% endblock %}
{% block localbreadcrumb %}
<li><a href="{% url 'recipes' build.pk %}">Recipes</a></li>
<li>{{object.name}}_{{object.version}} </li>
{% endblock %}

{% block pagedetailinfomain %}

<!-- Begin container -->

<div class="row span11">
    <div class="page-header">
        <h1>{{object.name}}_{{object.version}}</h1>
    </div>
</div>

<div class="row span7 tabbable">
    <ul class="nav nav-pills">
        <li class="{{tab_states.1}}">
            <a href="#information" data-toggle="tab">
                <i class="icon-question-sign get-help" title="Build-related information about the recipe"></i>
                Recipe details
            </a>
        </li>
        <li>
             <a href="{% url "recipe_packages" build.pk object.id %}">
                <i class="icon-question-sign get-help" title="The packaged output resulting from building the recipe"></i>
                Packages ({{package_count}})
            </a>
        </li>
        <li class="{{tab_states.3}}">
            <a href="#dependencies" data-toggle="tab">
                <i class="icon-question-sign get-help" title="The recipe build-time dependencies (i.e. other recipes)"></i>
                Build dependencies ({{object.r_dependencies_recipe.all.count}})
            </a>
        </li>
        <li class="{{tab_states.4}}">
            <a href="#brought-in-by" data-toggle="tab">
                <i class="icon-question-sign get-help" title="The recipe build-time reverse dependencies (i.e. the recipes that depend on this recipe)"></i>
                Reverse build dependencies ({{object.r_dependencies_depends.all.count}})
            </a>
        </li>
    </ul>
    <div class="tab-content">
        <div class="tab-pane {{tab_states.1}}" id="information">
            <dl class="dl-horizontal">
                <dt>
                    <i class="icon-question-sign get-help" title="The name of the layer providing the recipe"></i>
                    Layer
                </dt>
                <dd>{{layer.name}}</dd>

                <dt>
                    <i class="icon-question-sign get-help" title="Path to the recipe .bb file"></i>
                    Recipe file
                </dt>
                <dd><code>{{object.file_path}} {% if object.pathflags %}<i>({{object.pathflags}})</i>{% endif %}</code></dd>
                {% if layer_version.branch %}
                <dt>
                    <i class="icon-question-sign get-help" title="The Git branch of the layer providing the recipe"></i>
                    Layer branch
                </dt>
                <dd>{{layer_version.branch}}</dd>
                {% endif %}
                <dt>
                    <i class="icon-question-sign get-help" title="The Git commit of the layer providing the recipe"></i>
                    Layer commit
                </dt>
                <dd class="iscommit">{{layer_version.commit}}</dd>
                {% if object.provides_set.all %}
                <dt>
                    <i class="icon-question-sign get-help"
                     title="A list of aliases by which a particular recipe can be known. The additional aliases are
                           synonyms for the recipe and can be useful satisfying dependencies of other recipes during
                           the build"></i>
                    PROVIDES
                </dt>
                 <dd><code>{% for provider in object.provides_set.all %}{{ provider.name }}&nbsp;{% endfor %}</code></dd>
                {% endif %}
            </dl>

            <h2 class="details">Tasks</h2>
            {% if not tasks %}
            <div class="alert alert-info">
                <strong>{{object.name}}_{{object.version}}</strong> does not have any tasks in this build.
            </div>
            {% else %}
            <table class="table table-bordered table-hover">
                <thead>
		  <tr>
                    <th>
                        <i class="icon-question-sign get-help" title="The running sequence of each task in the build"></i>
                        Order
                    </th>
                    <th>
                        <i class="icon-question-sign get-help" title="The name of the task"></i>
                        Task
                    </th>
                    <th>
                        <i class="icon-question-sign get-help" title="This value tells you if a task had to run (executed) in order to generate the task output, or if the output was provided by another task and therefore the task didn't need to run (not executed)"></i>
                        Executed
                    </th>
                    <th>
                        <i class="icon-question-sign get-help" title="This column tells you if 'executed' tasks succeeded or failed. The column also tells you why 'not executed' tasks did not need to run"></i>
                        Outcome
                    </th>
                    <th>
                        <i class="icon-question-sign get-help" title="This column tells you if a task tried to restore output from the <code>sstate-cache</code> directory or mirrors, and reports the result: Succeeded, Failed or File not in cache"></i>
                        Cache attempt
                    </th>
		  </tr>
                </thead>
                <tbody>

                    {% for task in tasks %}

                    <tr {{ task|task_color }} >

                    <td><a {{ task|task_color }} href="{% url "task" build.pk task.pk %}">{{task.order}}</a></td>
                    <td>
                        <a {{ task|task_color }} href="{% url "task" build.pk task.pk %}">{{task.task_name}}</a>
                        {% if task.get_description %}<i class="icon-question-sign get-help hover-help" title="" data-original-title="{{task.get_description}}"></i> {% endif %}
                    </td>

                    <td><a {{ task|task_color }} href="{% url "task" build.pk task.pk %}">{{task.get_executed_display}}</a></td>

                    <td>
                        <a {{ task|task_color }} href="{% url "task" build.pk task.pk %}">{{task.get_outcome_display}} </a>
                        {% if task.outcome = task.OUTCOME_FAILED %}
                            <a href="{% url 'build_artifact' build.pk "tasklogfile" task.pk %}">
                                <i class="icon-download-alt" title="Download task log file"></i>
                            </a>
                        {% endif %}
                        <i class="icon-question-sign get-help hover-help" title="{{task.get_outcome_help}}"></i>
                    </td>
                    <td>
                        {% ifnotequal task.sstate_result task.SSTATE_NA %}
                        <a {{ task|task_color }} href="{% url "task" build.pk task.pk %}">{{task.get_sstate_result_display}}</a>
                        {% endifnotequal %}
                    </td>

                    </tr>

                    {% endfor %}
                </tbody>
            </table>
            {% endif %}
        </div>
        <div class="tab-pane {{tab_states.3}}" id="dependencies">

            {% if not object.r_dependencies_recipe.all %}
            <div class="alert alert-info">
                <strong>{{object.name}}_{{object.version}}</strong> has no build dependencies.
            </div>
            {% else %}
            <table class="table table-bordered table-hover">
                <thead>
                    <tr>
                        <th>
                            Recipe
                        </th>
                        <th>
                            Version
                        </th>
                    </tr>
                </thead>
                <tbody>

                    {% for rr in object.r_dependencies_recipe.all|dictsort:"depends_on.name" %}
                    <tr>
                        <td><a href="{% url "recipe" build.pk rr.depends_on.pk %}">{{rr.depends_on.name}}</a>
                            {% if rr.via %}
                                <span class="muted">satisfied via {{rr.via.name}}</span>
                                <i class="icon-question-sign get-help hover-help"
                                 title="This dependency is satisfied by the PROVIDES value
                                       {{rr.via.name}} in the {{rr.depends_on.name}} recipe"></i>
                            {% endif %}
                        </td>
                        <td><a href="{% url "recipe" build.pk rr.depends_on.pk %}">{{rr.depends_on.version}}</a></td>
                    </tr>
                    {% endfor %}

                </tbody>
            </table>
            {% endif %}

        </div>
        <div class="tab-pane {{tab_states.4}}" id="brought-in-by">

            {% if not object.r_dependencies_depends.all %}
            <div class="alert alert-info">
                <strong>{{object.name}}_{{object.version}}</strong> has no reverse build dependencies.
            </div>
            {% else %}
            <table class="table table-bordered table-hover">
                <thead>
                    <tr>
                        <th>
                            Recipe
                        </th>
                        <th>
                            Version
                        </th>
                    </tr>
                </thead>
                <tbody>

                    {% for rr in object.r_dependencies_depends.all|dictsort:"recipe.name" %}
                    <tr>
                        <td><a href="{% url "recipe" build.pk rr.recipe.pk %}">{{rr.recipe.name}}</a>
                        {% if rr.via %}
                            <span class="muted"> satisfied via {{rr.via.name}}</span>
                            <i class="icon-question-sign get-help hover-help"
                             title="This dependency is satisfied by the PROVIDES value
                            {{rr.via.name}} in the {{rr.depends_on.name}} recipe"></i>
                        {% endif %}
                        </td>
                        <td><a href="{% url "recipe" build.pk rr.recipe.pk %}">{{rr.recipe.version}}</a></td>
                    </tr>
                    {% endfor %}

                </tbody>
            </table>
            {% endif %}

        </div>
    </div>
</div>

<div class="row span4 well">
    <h2>About {{object.name}}</h2>
    <dl class="item-info">
        {% if object.summary %}
            <dt>Summary</dt>
            <dd>{{object.summary}}</dd>
        {% endif %}
        {% if object.description %}
            <dt>Description</dt>
            <dd>{{object.description}}</dd>
        {% endif %}
        {% if object.homepage %}
            <dt>Homepage</dt>
            <dd><a href="{{object.homepage}}">{{object.homepage}}</a></dd>
        {% endif %}
        {% if object.bugtracker %}
            <dt>Bugtracker</dt>
            <dd><a href="{{object.bugtracker}}">{{object.bugtracker}}</a></dd>
        {% endif %}
        {% if object.section %}
            <dt>
            Section
            <i class="icon-question-sign get-help" title="The section in which recipes should be categorized"></i>
            </dt>
            <dd>{{object.section}}</dd>
        {% endif %}
        {% if object.license %}
            <dt>License</dt>
            <dd>{{object.license}}</dd>
        {% endif %}
    </dl>
</div>

{% endblock %}
