blob: 87d54cd4f0f033d97a04603d5a89de1b4cfc4fff [file] [log] [blame]
luqui@chromium.org0b887622014-09-03 02:31:03 +00001<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
2 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
4<head>
5<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
6<meta name="generator" content="AsciiDoc 8.6.9" />
mmoss@chromium.org873a9d02014-09-09 22:09:53 +00007<title>git-footers(1)</title>
luqui@chromium.org0b887622014-09-03 02:31:03 +00008<style type="text/css">
9/* Shared CSS for AsciiDoc xhtml11 and html5 backends */
10
11/* Default font. */
12body {
13 font-family: Georgia,serif;
14}
15
16/* Title font. */
17h1, h2, h3, h4, h5, h6,
18div.title, caption.title,
19thead, p.table.header,
20#toctitle,
21#author, #revnumber, #revdate, #revremark,
22#footer {
23 font-family: Arial,Helvetica,sans-serif;
24}
25
26body {
27 margin: 1em 5% 1em 5%;
28}
29
30a {
31 color: blue;
32 text-decoration: underline;
33}
34a:visited {
35 color: fuchsia;
36}
37
38em {
39 font-style: italic;
40 color: navy;
41}
42
43strong {
44 font-weight: bold;
45 color: #083194;
46}
47
48h1, h2, h3, h4, h5, h6 {
49 color: #527bbd;
50 margin-top: 1.2em;
51 margin-bottom: 0.5em;
52 line-height: 1.3;
53}
54
55h1, h2, h3 {
56 border-bottom: 2px solid silver;
57}
58h2 {
59 padding-top: 0.5em;
60}
61h3 {
62 float: left;
63}
64h3 + * {
65 clear: left;
66}
67h5 {
68 font-size: 1.0em;
69}
70
71div.sectionbody {
72 margin-left: 0;
73}
74
75hr {
76 border: 1px solid silver;
77}
78
79p {
80 margin-top: 0.5em;
81 margin-bottom: 0.5em;
82}
83
84ul, ol, li > p {
85 margin-top: 0;
86}
87ul > li { color: #aaa; }
88ul > li > * { color: black; }
89
90.monospaced, code, pre {
91 font-family: "Courier New", Courier, monospace;
92 font-size: inherit;
93 color: navy;
94 padding: 0;
95 margin: 0;
96}
97pre {
98 white-space: pre-wrap;
99}
100
101#author {
102 color: #527bbd;
103 font-weight: bold;
104 font-size: 1.1em;
105}
106#email {
107}
108#revnumber, #revdate, #revremark {
109}
110
111#footer {
112 font-size: small;
113 border-top: 2px solid silver;
114 padding-top: 0.5em;
115 margin-top: 4.0em;
116}
117#footer-text {
118 float: left;
119 padding-bottom: 0.5em;
120}
121#footer-badges {
122 float: right;
123 padding-bottom: 0.5em;
124}
125
126#preamble {
127 margin-top: 1.5em;
128 margin-bottom: 1.5em;
129}
130div.imageblock, div.exampleblock, div.verseblock,
131div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
132div.admonitionblock {
133 margin-top: 1.0em;
134 margin-bottom: 1.5em;
135}
136div.admonitionblock {
137 margin-top: 2.0em;
138 margin-bottom: 2.0em;
139 margin-right: 10%;
140 color: #606060;
141}
142
143div.content { /* Block element content. */
144 padding: 0;
145}
146
147/* Block element titles. */
148div.title, caption.title {
149 color: #527bbd;
150 font-weight: bold;
151 text-align: left;
152 margin-top: 1.0em;
153 margin-bottom: 0.5em;
154}
155div.title + * {
156 margin-top: 0;
157}
158
159td div.title:first-child {
160 margin-top: 0.0em;
161}
162div.content div.title:first-child {
163 margin-top: 0.0em;
164}
165div.content + div.title {
166 margin-top: 0.0em;
167}
168
169div.sidebarblock > div.content {
170 background: #ffffee;
171 border: 1px solid #dddddd;
172 border-left: 4px solid #f0f0f0;
173 padding: 0.5em;
174}
175
176div.listingblock > div.content {
177 border: 1px solid #dddddd;
178 border-left: 5px solid #f0f0f0;
179 background: #f8f8f8;
180 padding: 0.5em;
181}
182
183div.quoteblock, div.verseblock {
184 padding-left: 1.0em;
185 margin-left: 1.0em;
186 margin-right: 10%;
187 border-left: 5px solid #f0f0f0;
188 color: #888;
189}
190
191div.quoteblock > div.attribution {
192 padding-top: 0.5em;
193 text-align: right;
194}
195
196div.verseblock > pre.content {
197 font-family: inherit;
198 font-size: inherit;
199}
200div.verseblock > div.attribution {
201 padding-top: 0.75em;
202 text-align: left;
203}
204/* DEPRECATED: Pre version 8.2.7 verse style literal block. */
205div.verseblock + div.attribution {
206 text-align: left;
207}
208
209div.admonitionblock .icon {
210 vertical-align: top;
211 font-size: 1.1em;
212 font-weight: bold;
213 text-decoration: underline;
214 color: #527bbd;
215 padding-right: 0.5em;
216}
217div.admonitionblock td.content {
218 padding-left: 0.5em;
219 border-left: 3px solid #dddddd;
220}
221
222div.exampleblock > div.content {
223 border-left: 3px solid #dddddd;
224 padding-left: 0.5em;
225}
226
227div.imageblock div.content { padding-left: 0; }
228span.image img { border-style: none; vertical-align: text-bottom; }
229a.image:visited { color: white; }
230
231dl {
232 margin-top: 0.8em;
233 margin-bottom: 0.8em;
234}
235dt {
236 margin-top: 0.5em;
237 margin-bottom: 0;
238 font-style: normal;
239 color: navy;
240}
241dd > *:first-child {
242 margin-top: 0.1em;
243}
244
245ul, ol {
246 list-style-position: outside;
247}
248ol.arabic {
249 list-style-type: decimal;
250}
251ol.loweralpha {
252 list-style-type: lower-alpha;
253}
254ol.upperalpha {
255 list-style-type: upper-alpha;
256}
257ol.lowerroman {
258 list-style-type: lower-roman;
259}
260ol.upperroman {
261 list-style-type: upper-roman;
262}
263
264div.compact ul, div.compact ol,
265div.compact p, div.compact p,
266div.compact div, div.compact div {
267 margin-top: 0.1em;
268 margin-bottom: 0.1em;
269}
270
271tfoot {
272 font-weight: bold;
273}
274td > div.verse {
275 white-space: pre;
276}
277
278div.hdlist {
279 margin-top: 0.8em;
280 margin-bottom: 0.8em;
281}
282div.hdlist tr {
283 padding-bottom: 15px;
284}
285dt.hdlist1.strong, td.hdlist1.strong {
286 font-weight: bold;
287}
288td.hdlist1 {
289 vertical-align: top;
290 font-style: normal;
291 padding-right: 0.8em;
292 color: navy;
293}
294td.hdlist2 {
295 vertical-align: top;
296}
297div.hdlist.compact tr {
298 margin: 0;
299 padding-bottom: 0;
300}
301
302.comment {
303 background: yellow;
304}
305
306.footnote, .footnoteref {
307 font-size: 0.8em;
308}
309
310span.footnote, span.footnoteref {
311 vertical-align: super;
312}
313
314#footnotes {
315 margin: 20px 0 20px 0;
316 padding: 7px 0 0 0;
317}
318
319#footnotes div.footnote {
320 margin: 0 0 5px 0;
321}
322
323#footnotes hr {
324 border: none;
325 border-top: 1px solid silver;
326 height: 1px;
327 text-align: left;
328 margin-left: 0;
329 width: 20%;
330 min-width: 100px;
331}
332
333div.colist td {
334 padding-right: 0.5em;
335 padding-bottom: 0.3em;
336 vertical-align: top;
337}
338div.colist td img {
339 margin-top: 0.3em;
340}
341
342@media print {
343 #footer-badges { display: none; }
344}
345
346#toc {
347 margin-bottom: 2.5em;
348}
349
350#toctitle {
351 color: #527bbd;
352 font-size: 1.1em;
353 font-weight: bold;
354 margin-top: 1.0em;
355 margin-bottom: 0.1em;
356}
357
358div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
359 margin-top: 0;
360 margin-bottom: 0;
361}
362div.toclevel2 {
363 margin-left: 2em;
364 font-size: 0.9em;
365}
366div.toclevel3 {
367 margin-left: 4em;
368 font-size: 0.9em;
369}
370div.toclevel4 {
371 margin-left: 6em;
372 font-size: 0.9em;
373}
374
375span.aqua { color: aqua; }
376span.black { color: black; }
377span.blue { color: blue; }
378span.fuchsia { color: fuchsia; }
379span.gray { color: gray; }
380span.green { color: green; }
381span.lime { color: lime; }
382span.maroon { color: maroon; }
383span.navy { color: navy; }
384span.olive { color: olive; }
385span.purple { color: purple; }
386span.red { color: red; }
387span.silver { color: silver; }
388span.teal { color: teal; }
389span.white { color: white; }
390span.yellow { color: yellow; }
391
392span.aqua-background { background: aqua; }
393span.black-background { background: black; }
394span.blue-background { background: blue; }
395span.fuchsia-background { background: fuchsia; }
396span.gray-background { background: gray; }
397span.green-background { background: green; }
398span.lime-background { background: lime; }
399span.maroon-background { background: maroon; }
400span.navy-background { background: navy; }
401span.olive-background { background: olive; }
402span.purple-background { background: purple; }
403span.red-background { background: red; }
404span.silver-background { background: silver; }
405span.teal-background { background: teal; }
406span.white-background { background: white; }
407span.yellow-background { background: yellow; }
408
409span.big { font-size: 2em; }
410span.small { font-size: 0.6em; }
411
412span.underline { text-decoration: underline; }
413span.overline { text-decoration: overline; }
414span.line-through { text-decoration: line-through; }
415
416div.unbreakable { page-break-inside: avoid; }
417
418
419/*
420 * xhtml11 specific
421 *
422 * */
423
424div.tableblock {
425 margin-top: 1.0em;
426 margin-bottom: 1.5em;
427}
428div.tableblock > table {
429 border: 3px solid #527bbd;
430}
431thead, p.table.header {
432 font-weight: bold;
433 color: #527bbd;
434}
435p.table {
436 margin-top: 0;
437}
438/* Because the table frame attribute is overriden by CSS in most browsers. */
439div.tableblock > table[frame="void"] {
440 border-style: none;
441}
442div.tableblock > table[frame="hsides"] {
443 border-left-style: none;
444 border-right-style: none;
445}
446div.tableblock > table[frame="vsides"] {
447 border-top-style: none;
448 border-bottom-style: none;
449}
450
451
452/*
453 * html5 specific
454 *
455 * */
456
457table.tableblock {
458 margin-top: 1.0em;
459 margin-bottom: 1.5em;
460}
461thead, p.tableblock.header {
462 font-weight: bold;
463 color: #527bbd;
464}
465p.tableblock {
466 margin-top: 0;
467}
468table.tableblock {
469 border-width: 3px;
470 border-spacing: 0px;
471 border-style: solid;
472 border-color: #527bbd;
473 border-collapse: collapse;
474}
475th.tableblock, td.tableblock {
476 border-width: 1px;
477 padding: 4px;
478 border-style: solid;
479 border-color: #527bbd;
480}
481
482table.tableblock.frame-topbot {
483 border-left-style: hidden;
484 border-right-style: hidden;
485}
486table.tableblock.frame-sides {
487 border-top-style: hidden;
488 border-bottom-style: hidden;
489}
490table.tableblock.frame-none {
491 border-style: hidden;
492}
493
494th.tableblock.halign-left, td.tableblock.halign-left {
495 text-align: left;
496}
497th.tableblock.halign-center, td.tableblock.halign-center {
498 text-align: center;
499}
500th.tableblock.halign-right, td.tableblock.halign-right {
501 text-align: right;
502}
503
504th.tableblock.valign-top, td.tableblock.valign-top {
505 vertical-align: top;
506}
507th.tableblock.valign-middle, td.tableblock.valign-middle {
508 vertical-align: middle;
509}
510th.tableblock.valign-bottom, td.tableblock.valign-bottom {
511 vertical-align: bottom;
512}
513
514
515/*
516 * manpage specific
517 *
518 * */
519
520body.manpage h1 {
521 padding-top: 0.5em;
522 padding-bottom: 0.5em;
523 border-top: 2px solid silver;
524 border-bottom: 2px solid silver;
525}
526body.manpage h2 {
527 border-style: none;
528}
529body.manpage div.sectionbody {
530 margin-left: 3em;
531}
532
533@media print {
534 body.manpage div#toc { display: none; }
535}
536
537
538div.listingblock > div.content {
539 background: rgb(28, 28, 28);
540}
541
542div.listingblock > div > pre > code {
543 color: rgb(187, 187, 187);
544}
545</style>
546<script type="text/javascript">
547/*<![CDATA[*/
548var asciidoc = { // Namespace.
549
550/////////////////////////////////////////////////////////////////////
551// Table Of Contents generator
552/////////////////////////////////////////////////////////////////////
553
554/* Author: Mihai Bazon, September 2002
555 * http://students.infoiasi.ro/~mishoo
556 *
557 * Table Of Content generator
558 * Version: 0.4
559 *
560 * Feel free to use this script under the terms of the GNU General Public
561 * License, as long as you do not remove or alter this notice.
562 */
563
564 /* modified by Troy D. Hanson, September 2006. License: GPL */
565 /* modified by Stuart Rackham, 2006, 2009. License: GPL */
566
567// toclevels = 1..4.
568toc: function (toclevels) {
569
570 function getText(el) {
571 var text = "";
572 for (var i = el.firstChild; i != null; i = i.nextSibling) {
573 if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
574 text += i.data;
575 else if (i.firstChild != null)
576 text += getText(i);
577 }
578 return text;
579 }
580
581 function TocEntry(el, text, toclevel) {
582 this.element = el;
583 this.text = text;
584 this.toclevel = toclevel;
585 }
586
587 function tocEntries(el, toclevels) {
588 var result = new Array;
589 var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');
590 // Function that scans the DOM tree for header elements (the DOM2
591 // nodeIterator API would be a better technique but not supported by all
592 // browsers).
593 var iterate = function (el) {
594 for (var i = el.firstChild; i != null; i = i.nextSibling) {
595 if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
596 var mo = re.exec(i.tagName);
597 if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
598 result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
599 }
600 iterate(i);
601 }
602 }
603 }
604 iterate(el);
605 return result;
606 }
607
608 var toc = document.getElementById("toc");
609 if (!toc) {
610 return;
611 }
612
613 // Delete existing TOC entries in case we're reloading the TOC.
614 var tocEntriesToRemove = [];
615 var i;
616 for (i = 0; i < toc.childNodes.length; i++) {
617 var entry = toc.childNodes[i];
618 if (entry.nodeName.toLowerCase() == 'div'
619 && entry.getAttribute("class")
620 && entry.getAttribute("class").match(/^toclevel/))
621 tocEntriesToRemove.push(entry);
622 }
623 for (i = 0; i < tocEntriesToRemove.length; i++) {
624 toc.removeChild(tocEntriesToRemove[i]);
625 }
626
627 // Rebuild TOC entries.
628 var entries = tocEntries(document.getElementById("content"), toclevels);
629 for (var i = 0; i < entries.length; ++i) {
630 var entry = entries[i];
631 if (entry.element.id == "")
632 entry.element.id = "_toc_" + i;
633 var a = document.createElement("a");
634 a.href = "#" + entry.element.id;
635 a.appendChild(document.createTextNode(entry.text));
636 var div = document.createElement("div");
637 div.appendChild(a);
638 div.className = "toclevel" + entry.toclevel;
639 toc.appendChild(div);
640 }
641 if (entries.length == 0)
642 toc.parentNode.removeChild(toc);
643},
644
645
646/////////////////////////////////////////////////////////////////////
647// Footnotes generator
648/////////////////////////////////////////////////////////////////////
649
650/* Based on footnote generation code from:
651 * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
652 */
653
654footnotes: function () {
655 // Delete existing footnote entries in case we're reloading the footnodes.
656 var i;
657 var noteholder = document.getElementById("footnotes");
658 if (!noteholder) {
659 return;
660 }
661 var entriesToRemove = [];
662 for (i = 0; i < noteholder.childNodes.length; i++) {
663 var entry = noteholder.childNodes[i];
664 if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")
665 entriesToRemove.push(entry);
666 }
667 for (i = 0; i < entriesToRemove.length; i++) {
668 noteholder.removeChild(entriesToRemove[i]);
669 }
670
671 // Rebuild footnote entries.
672 var cont = document.getElementById("content");
673 var spans = cont.getElementsByTagName("span");
674 var refs = {};
675 var n = 0;
676 for (i=0; i<spans.length; i++) {
677 if (spans[i].className == "footnote") {
678 n++;
679 var note = spans[i].getAttribute("data-note");
680 if (!note) {
681 // Use [\s\S] in place of . so multi-line matches work.
682 // Because JavaScript has no s (dotall) regex flag.
683 note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
684 spans[i].innerHTML =
685 "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
686 "' title='View footnote' class='footnote'>" + n + "</a>]";
687 spans[i].setAttribute("data-note", note);
688 }
689 noteholder.innerHTML +=
690 "<div class='footnote' id='_footnote_" + n + "'>" +
691 "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
692 n + "</a>. " + note + "</div>";
693 var id =spans[i].getAttribute("id");
694 if (id != null) refs["#"+id] = n;
695 }
696 }
697 if (n == 0)
698 noteholder.parentNode.removeChild(noteholder);
699 else {
700 // Process footnoterefs.
701 for (i=0; i<spans.length; i++) {
702 if (spans[i].className == "footnoteref") {
703 var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
704 href = href.match(/#.*/)[0]; // Because IE return full URL.
705 n = refs[href];
706 spans[i].innerHTML =
707 "[<a href='#_footnote_" + n +
708 "' title='View footnote' class='footnote'>" + n + "</a>]";
709 }
710 }
711 }
712},
713
714install: function(toclevels) {
715 var timerId;
716
717 function reinstall() {
718 asciidoc.footnotes();
719 if (toclevels) {
720 asciidoc.toc(toclevels);
721 }
722 }
723
724 function reinstallAndRemoveTimer() {
725 clearInterval(timerId);
726 reinstall();
727 }
728
729 timerId = setInterval(reinstall, 500);
730 if (document.addEventListener)
731 document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
732 else
733 window.onload = reinstallAndRemoveTimer;
734}
735
736}
737asciidoc.install();
738/*]]>*/
739</script>
740</head>
741<body class="manpage">
742<div id="header">
743<h1>
mmoss@chromium.org873a9d02014-09-09 22:09:53 +0000744git-footers(1) Manual Page
luqui@chromium.org0b887622014-09-03 02:31:03 +0000745</h1>
746<h2>NAME</h2>
747<div class="sectionbody">
748<p>git-footers -
749 Extract meta-information expressed as footers in a commit message.
750</p>
751</div>
752</div>
753<div id="content">
754<div class="sect1">
755<h2 id="_synopsis">SYNOPSIS</h2>
756<div class="sectionbody">
757<div class="verseblock">
758<pre class="content"><em>git footers</em> [--key FOOTER] REF
759<em>git footers</em> [--position | --position-ref | --position-num] REF</pre>
760<div class="attribution">
761</div></div>
762</div>
763</div>
764<div class="sect1">
765<h2 id="_description">DESCRIPTION</h2>
766<div class="sectionbody">
767<div class="paragraph"><p><code>git footers</code> extracts information included in commit messages as "footers",
768which are roughly like HTTP headers except they are at the end. For example, a
769commit might look like:</p></div>
770<div class="literalblock">
771<div class="content">
772<pre><code>This is a fancy commit message.</code></pre>
773</div></div>
774<div class="literalblock">
775<div class="content">
776<pre><code>Cr-Commit-Position: refs/heads/master@{#292272}
777Tech-Debt-Introduced: 17 nanoMSOffices</code></pre>
778</div></div>
779<div class="paragraph"><p><code>git footers</code> knows how to extract this information.</p></div>
780<div class="paragraph"><p>Footers are order-independent and can appear more than once. Thus they are
781treated as a multimap.</p></div>
782</div>
783</div>
784<div class="sect1">
785<h2 id="_options">OPTIONS</h2>
786<div class="sectionbody">
787<div class="paragraph"><p>If no options are given, all footers are printed, with their names
788case-normalized.</p></div>
789<div class="dlist"><dl>
790<dt class="hdlist1">
791--key FOOTER
792</dt>
793<dd>
794<p>
795 Extract all the headers associated with the given key, and print one per
796 line. If there are no footers with this key, produces no output and exits
797 successfully.
798</p>
799</dd>
800<dt class="hdlist1">
801--position
802</dt>
803<dd>
804<p>
805 Extract the Chrome commit position from the footers. This first attempts
806 to get the value of the <code>Cr-Commit-Position</code> footer. If that doesn&#8217;t exist
807 then it tries a heuristic based on <code>Git-Svn-Id</code>. Output is in one of the
808 following forms:
809</p>
810<div class="literalblock">
811<div class="content">
812<pre><code>refs/heads/master@{#292272}
813refs/branch-heads/branchname</code></pre>
814</div></div>
815</dd>
816<dt class="hdlist1">
817--position-num
818</dt>
819<dd>
820<p>
821 Extracts and prints the Chrome commit position number only (292272 in the
822 example above). Exits with an error if one cannot be found.
823</p>
824</dd>
825<dt class="hdlist1">
826--position-ref
827</dt>
828<dd>
829<p>
830 Extracts and prints the Chrome commit position ref name only
831 (<code>ref/heads/master</code> or <code>refs/branch-heads/branchname</code> in the example above).
832</p>
833</dd>
834</dl></div>
835</div>
836</div>
837<div class="sect1">
838<h2 id="_example">EXAMPLE</h2>
839<div class="sectionbody">
840<div class="paragraph"><p></p></div><div class="listingblock"><div class="content"><pre><code><span style="font-weight: bold; color: #ffffff">$ git footers HEAD</span>
841Tech-Debt-Introduced: -4 microMSOffices
842Tech-Debt-Introduced: 17 microMSOffices
843Cr-Commit-Position: refs/heads/master@{#292272}
844<span style="font-weight: bold; color: #ffffff">$ git footers --key Tech-Debt-Introduced HEAD</span>
845-4 microMSOffices
84617 microMSOffices
847<span style="font-weight: bold; color: #ffffff">$ git footers --position HEAD</span>
848refs/heads/master@{#292272}
849<span style="font-weight: bold; color: #ffffff">$ git footers --position-num HEAD</span>
850292272
851<span style="font-weight: bold; color: #ffffff">$ git footers --position-ref HEAD</span>
852refs/heads/master
853</code></pre></div></div><p><div class="paragraph"></p></div>
854</div>
855</div>
856<div class="sect1">
857<h2 id="_see_also">SEE ALSO</h2>
858<div class="sectionbody">
859<div class="paragraph"><p><a href="git-number.html">git-number(1)</a></p></div>
860</div>
861</div>
862<div class="sect1">
863<h2 id="_chromium_depot_tools">CHROMIUM DEPOT_TOOLS</h2>
864<div class="sectionbody">
865<div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_tools(7)</a> suite. These tools are meant to
866assist with the development of chromium and related projects. Download the tools
Quinten Yearsley442fb642016-12-15 15:38:27 -0800867from <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">here</a>.</p></div>
luqui@chromium.org0b887622014-09-03 02:31:03 +0000868</div>
869</div>
870</div>
871<div id="footnotes"><hr /></div>
872<div id="footer">
873<div id="footer-text">
Daniel McArdle43c083d2019-05-03 18:02:45 +0000874Last updated 2019-05-03 10:40:16 EDT
luqui@chromium.org0b887622014-09-03 02:31:03 +0000875</div>
876</div>
877</body>
878</html>