<html>
<head>
  <title>Changelog</title>
  <meta name="description" content="Get the changelog between two COS builds">
  <link rel="stylesheet" href="/static/css/base.css">
  <link rel="stylesheet" href="/static/css/changelog.css">
</head>
<body>
  <div class="navbar">
    <p class="navbar-title">Container Optimized OS</p>
    <a class="signout" href="/signout/?redirect=/changelog/">Sign Out</a>
  </div>
  <div class="sidenav">
    <a href="/">Home</a>
    <a class="active" href="/changelog/">Changelog</a>
    <a href="/findbuild/">Find Build</a>
    <a href="/findreleasedbuild/">Find Released Build</a>
    <a href="/readme/">Readme</a>
  </div>
  <div class="main">
    <h1>Changelog</h1>
    <p class="feature-info">Retrieve a list of commits and sysctl changes between two
      Container-Optimized OS builds.<br>
      Example Input: <b>cos-rc-85-13310-1034-0</b> or <b>13310.1034.0</b>
    </p>
    <p class="feature-info"><b>Note:</b>
      <a href="https://crosland.corp.google.com/" target="_blank">
        go/crosland
      </a>
      should be used for pre-cusky builds
    </p>
    <form class="changelog-form" action="/changelog">
      <div class="text">
        <label>From </label>
        {{if (ne .Source "")}}
          <input type="text" class="source" name="source" placeholder="Image Name or Build Number" value={{.Source}} required>
        {{else}}
          <input type="text" class="source" name="source" placeholder="Image Name or Build Number" required>
        {{end}}
        <label> to </label>
        {{if (ne .Target "")}}
          <input type="text" class="target" name="target" placeholder="Image Name or Build Number" value={{.Target}} required>
        {{else}}
          <input type="text" class="target" name="target" placeholder="Image Name or Build Number" required>
        {{end}}
        <input type="hidden" name="n" value={{.QuerySize}}>
      </div>
      <div class="text">
        <label>From </label>
        {{if (ne .SourceMilestone "")}}
          <input type="text" class="source" name="source-milestone" placeholder="Milestone Number" value={{.SourceMilestone}} required>
        {{else}}
          <input type="text" class="source" name="source-milestone" placeholder="Milestone Number" required>
        {{end}}
        <label> to </label>
        {{if (ne .TargetMilestone "")}}
          <input type="text" class="target" name="target-milestone" placeholder="Milestone Number" value={{.TargetMilestone}} required>
        {{else}}
          <input type="text" class="target" name="target-milestone" placeholder="Milestone Number" required>
        {{end}}
        <input class="submit" type="submit" value="Submit"><br>
      </div>
      <div class="text">
        <label>From </label>
        {{if (ne .SourceBoard "")}}
          <input type="text" class="source" name="source-board" placeholder="Board Name" value={{.SourceBoard}}>
        {{else}}
          <input type="text" class="source" name="source-board" placeholder="Board Name">
        {{end}}
        <label> to </label>
        {{if (ne .TargetBoard "")}}
          <input type="text" class="target" name="target-board" placeholder="Board Name" value={{.TargetBoard}}>
        {{else}}
          <input type="text" class="target" name="target-board" placeholder="Board Name">
        {{end}}
        The default board is "lakitu".
      </div>
      <div class="radio">
        {{if .Internal}}
          <label>
            <input type="radio" class="internal" name="internal" value="true" checked>
            Internal
          </label>
          <label>
            <input type="radio" class="external" name="internal" value="false">
            External
          </label>
        {{else}}
          <label>
            <input type="radio" class="internal" name="internal" value="true">
            Internal
          </label>
          <label>
            <input type="radio" class="external" name="internal" value="false" checked>
            External
          </label>
        {{end}}
      </div>
    </form>
    {{if (and (ne .Target "") (ne .Source ""))}}
      <div class="sha-legend">
        <div class="legend-row">
          <div class="circle addition"></div>
          <span>
            Commits present in <b>{{.Target}}</b> but not in <b>{{.Source}}</b>
          </span><br>
        </div>
        <div class="legend-row">
          <div class="circle removal"></div>
          <span>
            Commits present in <b>{{.Source}}</b> but not in <b>{{.Target}}</b>
          </span>
        </div>
        <a href="/readme/">Read more</a>
      </div>
    {{end}}
    {{range $table := .RepoTables}}
    <h2 class="repo-header"> {{$table.Name}} </h2>
    <table class="repo-table">
      <tr>
        <th class="commit-sha">SHA</th>
        <th class="commit-subject">Subject</th>
        <th class="commit-bugs">Bugs</th>
        <th class="commit-author">Author</th>
        <th class="commit-committer">Committer</th>
        <th class="commit-time">Committer Date</th>
        <th class="commit-release-notes">Release Notes</th>
      </tr>
    </table>
    <table class="repo-table">
      {{range $commit := $table.Additions}}
      <tr>
        <td class="commit-sha addition">
          <a href={{$commit.SHA.URL}}  target="_blank">{{$commit.SHA.Name}}</a>
        </td>
        <td class="commit-subject">{{$commit.Subject}}</td>
        <td class="commit-bugs">
          {{range $bugAttr := $commit.Bugs}}
          <a href={{$bugAttr.URL}}  target="_blank">{{$bugAttr.Name}}</a>
          {{end}}
        </td>
        <td class="commit-author">{{$commit.AuthorName}}</td>
        <td class="commit-committer">{{$commit.CommitterName}}</td>
        <td class="commit-time">{{$commit.CommitTime}}</td>
        <td class="commit-release-notes">{{$commit.ReleaseNote}}</td>
      </tr>
      {{end}}
    </table>
    {{if (ne $table.AdditionsLink "")}}
      <a class="gob-link" href={{$table.AdditionsLink}} target="_blank">
        Show more commits
      </a>
    {{end}}
    <table class="repo-table">
      {{range $commit := $table.Removals}}
      <tr>
        <td class="commit-sha removal">
          <a href={{$commit.SHA.URL}} target="_blank">{{$commit.SHA.Name}}</a>
        </td>
        <td class="commit-subject">{{$commit.Subject}}</td>
        <td class="commit-bugs">
          {{range $bugAttr := $commit.Bugs}}
          <a href={{$bugAttr.URL}}  target="_blank">{{$bugAttr.Name}}</a>
          {{end}}
        </td>
        <td class="commit-author">{{$commit.AuthorName}}</td>
        <td class="commit-committer">{{$commit.CommitterName}}</td>
        <td class="commit-time">{{$commit.CommitTime}}</td>
        <td class="commit-release-notes">{{$commit.ReleaseNote}}</td>
      </tr>
      {{end}}
    </table>
    {{if (ne $table.RemovalsLink "")}}
      <a class="gob-link" href={{$table.RemovalsLink}} target="_blank">
        Show more commits
      </a>
    {{end}}
    {{end}}
    {{if .Sysctl.NotEmpty}}
    <h2>Runtime Sysctl Changes:</h2>
      <table class="repo-table">
        <tr>
          <th class="sysctl">Sysctl</th>
          <th class="sysctl">Old Value</th>
          <th class="sysctl">New Value</th>
        </tr>
        {{range $sysctl := .Sysctl.Changes}}
        <tr>
          <td>{{index $sysctl 0}}</td>
          <td class="sysctl removal">{{index $sysctl 1}}</td>
          <td class="sysctl addition">{{index $sysctl 2}}</td>
        </tr>
        {{end}}
      </table>
      <div>{{.Sysctl.NotFound}}</div>
    {{end}}
  </table>
  </div>
</body>
</html>