Commit 21980029 authored by iannucci@chromium.org's avatar iannucci@chromium.org

Add a tutorial / walkthrough for pure-git workflow.

TBR=agable@chromium.org, szager@chromium.org
BUG=261743

Review URL: https://codereview.chromium.org/225433003

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@263164 0039d316-1c4b-4281-b951-d872f2087c98
parent 2d8c977b
......@@ -768,6 +768,7 @@ ease the develpment workflow.</p></div>
<div class="sect1">
<h2 id="_helper_tools">HELPER TOOLS</h2>
<div class="sectionbody">
<div class="paragraph"><p>A tutorial for these tools can be found at <a href="depot_tools_tutorial.html">depot_tools_tutorial(7)</a>.</p></div>
<div class="dlist"><dl>
<dt class="hdlist1">
<a href="git-freeze.html">git-freeze(1)</a>
......@@ -885,7 +886,7 @@ Print a diff of the current branch, compared to its upstream.
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Last updated 2014-03-26 03:27:50 PDT
Last updated 2014-04-10 14:23:11 PDT
</div>
</div>
</body>
......
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<meta name="generator" content="AsciiDoc 8.6.9" />
<title>depot_tools_tutorial(7)</title>
<style type="text/css">
/* Shared CSS for AsciiDoc xhtml11 and html5 backends */
/* Default font. */
body {
font-family: Georgia,serif;
}
/* Title font. */
h1, h2, h3, h4, h5, h6,
div.title, caption.title,
thead, p.table.header,
#toctitle,
#author, #revnumber, #revdate, #revremark,
#footer {
font-family: Arial,Helvetica,sans-serif;
}
body {
margin: 1em 5% 1em 5%;
}
a {
color: blue;
text-decoration: underline;
}
a:visited {
color: fuchsia;
}
em {
font-style: italic;
color: navy;
}
strong {
font-weight: bold;
color: #083194;
}
h1, h2, h3, h4, h5, h6 {
color: #527bbd;
margin-top: 1.2em;
margin-bottom: 0.5em;
line-height: 1.3;
}
h1, h2, h3 {
border-bottom: 2px solid silver;
}
h2 {
padding-top: 0.5em;
}
h3 {
float: left;
}
h3 + * {
clear: left;
}
h5 {
font-size: 1.0em;
}
div.sectionbody {
margin-left: 0;
}
hr {
border: 1px solid silver;
}
p {
margin-top: 0.5em;
margin-bottom: 0.5em;
}
ul, ol, li > p {
margin-top: 0;
}
ul > li { color: #aaa; }
ul > li > * { color: black; }
.monospaced, code, pre {
font-family: "Courier New", Courier, monospace;
font-size: inherit;
color: navy;
padding: 0;
margin: 0;
}
pre {
white-space: pre-wrap;
}
#author {
color: #527bbd;
font-weight: bold;
font-size: 1.1em;
}
#email {
}
#revnumber, #revdate, #revremark {
}
#footer {
font-size: small;
border-top: 2px solid silver;
padding-top: 0.5em;
margin-top: 4.0em;
}
#footer-text {
float: left;
padding-bottom: 0.5em;
}
#footer-badges {
float: right;
padding-bottom: 0.5em;
}
#preamble {
margin-top: 1.5em;
margin-bottom: 1.5em;
}
div.imageblock, div.exampleblock, div.verseblock,
div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
div.admonitionblock {
margin-top: 1.0em;
margin-bottom: 1.5em;
}
div.admonitionblock {
margin-top: 2.0em;
margin-bottom: 2.0em;
margin-right: 10%;
color: #606060;
}
div.content { /* Block element content. */
padding: 0;
}
/* Block element titles. */
div.title, caption.title {
color: #527bbd;
font-weight: bold;
text-align: left;
margin-top: 1.0em;
margin-bottom: 0.5em;
}
div.title + * {
margin-top: 0;
}
td div.title:first-child {
margin-top: 0.0em;
}
div.content div.title:first-child {
margin-top: 0.0em;
}
div.content + div.title {
margin-top: 0.0em;
}
div.sidebarblock > div.content {
background: #ffffee;
border: 1px solid #dddddd;
border-left: 4px solid #f0f0f0;
padding: 0.5em;
}
div.listingblock > div.content {
border: 1px solid #dddddd;
border-left: 5px solid #f0f0f0;
background: #f8f8f8;
padding: 0.5em;
}
div.quoteblock, div.verseblock {
padding-left: 1.0em;
margin-left: 1.0em;
margin-right: 10%;
border-left: 5px solid #f0f0f0;
color: #888;
}
div.quoteblock > div.attribution {
padding-top: 0.5em;
text-align: right;
}
div.verseblock > pre.content {
font-family: inherit;
font-size: inherit;
}
div.verseblock > div.attribution {
padding-top: 0.75em;
text-align: left;
}
/* DEPRECATED: Pre version 8.2.7 verse style literal block. */
div.verseblock + div.attribution {
text-align: left;
}
div.admonitionblock .icon {
vertical-align: top;
font-size: 1.1em;
font-weight: bold;
text-decoration: underline;
color: #527bbd;
padding-right: 0.5em;
}
div.admonitionblock td.content {
padding-left: 0.5em;
border-left: 3px solid #dddddd;
}
div.exampleblock > div.content {
border-left: 3px solid #dddddd;
padding-left: 0.5em;
}
div.imageblock div.content { padding-left: 0; }
span.image img { border-style: none; vertical-align: text-bottom; }
a.image:visited { color: white; }
dl {
margin-top: 0.8em;
margin-bottom: 0.8em;
}
dt {
margin-top: 0.5em;
margin-bottom: 0;
font-style: normal;
color: navy;
}
dd > *:first-child {
margin-top: 0.1em;
}
ul, ol {
list-style-position: outside;
}
ol.arabic {
list-style-type: decimal;
}
ol.loweralpha {
list-style-type: lower-alpha;
}
ol.upperalpha {
list-style-type: upper-alpha;
}
ol.lowerroman {
list-style-type: lower-roman;
}
ol.upperroman {
list-style-type: upper-roman;
}
div.compact ul, div.compact ol,
div.compact p, div.compact p,
div.compact div, div.compact div {
margin-top: 0.1em;
margin-bottom: 0.1em;
}
tfoot {
font-weight: bold;
}
td > div.verse {
white-space: pre;
}
div.hdlist {
margin-top: 0.8em;
margin-bottom: 0.8em;
}
div.hdlist tr {
padding-bottom: 15px;
}
dt.hdlist1.strong, td.hdlist1.strong {
font-weight: bold;
}
td.hdlist1 {
vertical-align: top;
font-style: normal;
padding-right: 0.8em;
color: navy;
}
td.hdlist2 {
vertical-align: top;
}
div.hdlist.compact tr {
margin: 0;
padding-bottom: 0;
}
.comment {
background: yellow;
}
.footnote, .footnoteref {
font-size: 0.8em;
}
span.footnote, span.footnoteref {
vertical-align: super;
}
#footnotes {
margin: 20px 0 20px 0;
padding: 7px 0 0 0;
}
#footnotes div.footnote {
margin: 0 0 5px 0;
}
#footnotes hr {
border: none;
border-top: 1px solid silver;
height: 1px;
text-align: left;
margin-left: 0;
width: 20%;
min-width: 100px;
}
div.colist td {
padding-right: 0.5em;
padding-bottom: 0.3em;
vertical-align: top;
}
div.colist td img {
margin-top: 0.3em;
}
@media print {
#footer-badges { display: none; }
}
#toc {
margin-bottom: 2.5em;
}
#toctitle {
color: #527bbd;
font-size: 1.1em;
font-weight: bold;
margin-top: 1.0em;
margin-bottom: 0.1em;
}
div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
margin-top: 0;
margin-bottom: 0;
}
div.toclevel2 {
margin-left: 2em;
font-size: 0.9em;
}
div.toclevel3 {
margin-left: 4em;
font-size: 0.9em;
}
div.toclevel4 {
margin-left: 6em;
font-size: 0.9em;
}
span.aqua { color: aqua; }
span.black { color: black; }
span.blue { color: blue; }
span.fuchsia { color: fuchsia; }
span.gray { color: gray; }
span.green { color: green; }
span.lime { color: lime; }
span.maroon { color: maroon; }
span.navy { color: navy; }
span.olive { color: olive; }
span.purple { color: purple; }
span.red { color: red; }
span.silver { color: silver; }
span.teal { color: teal; }
span.white { color: white; }
span.yellow { color: yellow; }
span.aqua-background { background: aqua; }
span.black-background { background: black; }
span.blue-background { background: blue; }
span.fuchsia-background { background: fuchsia; }
span.gray-background { background: gray; }
span.green-background { background: green; }
span.lime-background { background: lime; }
span.maroon-background { background: maroon; }
span.navy-background { background: navy; }
span.olive-background { background: olive; }
span.purple-background { background: purple; }
span.red-background { background: red; }
span.silver-background { background: silver; }
span.teal-background { background: teal; }
span.white-background { background: white; }
span.yellow-background { background: yellow; }
span.big { font-size: 2em; }
span.small { font-size: 0.6em; }
span.underline { text-decoration: underline; }
span.overline { text-decoration: overline; }
span.line-through { text-decoration: line-through; }
div.unbreakable { page-break-inside: avoid; }
/*
* xhtml11 specific
*
* */
div.tableblock {
margin-top: 1.0em;
margin-bottom: 1.5em;
}
div.tableblock > table {
border: 3px solid #527bbd;
}
thead, p.table.header {
font-weight: bold;
color: #527bbd;
}
p.table {
margin-top: 0;
}
/* Because the table frame attribute is overriden by CSS in most browsers. */
div.tableblock > table[frame="void"] {
border-style: none;
}
div.tableblock > table[frame="hsides"] {
border-left-style: none;
border-right-style: none;
}
div.tableblock > table[frame="vsides"] {
border-top-style: none;
border-bottom-style: none;
}
/*
* html5 specific
*
* */
table.tableblock {
margin-top: 1.0em;
margin-bottom: 1.5em;
}
thead, p.tableblock.header {
font-weight: bold;
color: #527bbd;
}
p.tableblock {
margin-top: 0;
}
table.tableblock {
border-width: 3px;
border-spacing: 0px;
border-style: solid;
border-color: #527bbd;
border-collapse: collapse;
}
th.tableblock, td.tableblock {
border-width: 1px;
padding: 4px;
border-style: solid;
border-color: #527bbd;
}
table.tableblock.frame-topbot {
border-left-style: hidden;
border-right-style: hidden;
}
table.tableblock.frame-sides {
border-top-style: hidden;
border-bottom-style: hidden;
}
table.tableblock.frame-none {
border-style: hidden;
}
th.tableblock.halign-left, td.tableblock.halign-left {
text-align: left;
}
th.tableblock.halign-center, td.tableblock.halign-center {
text-align: center;
}
th.tableblock.halign-right, td.tableblock.halign-right {
text-align: right;
}
th.tableblock.valign-top, td.tableblock.valign-top {
vertical-align: top;
}
th.tableblock.valign-middle, td.tableblock.valign-middle {
vertical-align: middle;
}
th.tableblock.valign-bottom, td.tableblock.valign-bottom {
vertical-align: bottom;
}
/*
* manpage specific
*
* */
body.manpage h1 {
padding-top: 0.5em;
padding-bottom: 0.5em;
border-top: 2px solid silver;
border-bottom: 2px solid silver;
}
body.manpage h2 {
border-style: none;
}
body.manpage div.sectionbody {
margin-left: 3em;
}
@media print {
body.manpage div#toc { display: none; }
}
div.listingblock > div.content {
background: rgb(28, 28, 28);
}
div.listingblock > div > pre > code {
color: rgb(187, 187, 187);
}
</style>
<script type="text/javascript">
/*<![CDATA[*/
var asciidoc = { // Namespace.
/////////////////////////////////////////////////////////////////////
// Table Of Contents generator
/////////////////////////////////////////////////////////////////////
/* Author: Mihai Bazon, September 2002
* http://students.infoiasi.ro/~mishoo
*
* Table Of Content generator
* Version: 0.4
*
* Feel free to use this script under the terms of the GNU General Public
* License, as long as you do not remove or alter this notice.
*/
/* modified by Troy D. Hanson, September 2006. License: GPL */
/* modified by Stuart Rackham, 2006, 2009. License: GPL */
// toclevels = 1..4.
toc: function (toclevels) {
function getText(el) {
var text = "";
for (var i = el.firstChild; i != null; i = i.nextSibling) {
if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
text += i.data;
else if (i.firstChild != null)
text += getText(i);
}
return text;
}
function TocEntry(el, text, toclevel) {
this.element = el;
this.text = text;
this.toclevel = toclevel;
}
function tocEntries(el, toclevels) {
var result = new Array;
var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');
// Function that scans the DOM tree for header elements (the DOM2
// nodeIterator API would be a better technique but not supported by all
// browsers).
var iterate = function (el) {
for (var i = el.firstChild; i != null; i = i.nextSibling) {
if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
var mo = re.exec(i.tagName);
if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
}
iterate(i);
}
}
}
iterate(el);
return result;
}
var toc = document.getElementById("toc");
if (!toc) {
return;
}
// Delete existing TOC entries in case we're reloading the TOC.
var tocEntriesToRemove = [];
var i;
for (i = 0; i < toc.childNodes.length; i++) {
var entry = toc.childNodes[i];
if (entry.nodeName.toLowerCase() == 'div'
&& entry.getAttribute("class")
&& entry.getAttribute("class").match(/^toclevel/))
tocEntriesToRemove.push(entry);
}
for (i = 0; i < tocEntriesToRemove.length; i++) {
toc.removeChild(tocEntriesToRemove[i]);
}
// Rebuild TOC entries.
var entries = tocEntries(document.getElementById("content"), toclevels);
for (var i = 0; i < entries.length; ++i) {
var entry = entries[i];
if (entry.element.id == "")
entry.element.id = "_toc_" + i;
var a = document.createElement("a");
a.href = "#" + entry.element.id;
a.appendChild(document.createTextNode(entry.text));
var div = document.createElement("div");
div.appendChild(a);
div.className = "toclevel" + entry.toclevel;
toc.appendChild(div);
}
if (entries.length == 0)
toc.parentNode.removeChild(toc);
},
/////////////////////////////////////////////////////////////////////
// Footnotes generator
/////////////////////////////////////////////////////////////////////
/* Based on footnote generation code from:
* http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
*/
footnotes: function () {
// Delete existing footnote entries in case we're reloading the footnodes.
var i;
var noteholder = document.getElementById("footnotes");
if (!noteholder) {
return;
}
var entriesToRemove = [];
for (i = 0; i < noteholder.childNodes.length; i++) {
var entry = noteholder.childNodes[i];
if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")
entriesToRemove.push(entry);
}
for (i = 0; i < entriesToRemove.length; i++) {
noteholder.removeChild(entriesToRemove[i]);
}
// Rebuild footnote entries.
var cont = document.getElementById("content");
var spans = cont.getElementsByTagName("span");
var refs = {};
var n = 0;
for (i=0; i<spans.length; i++) {
if (spans[i].className == "footnote") {
n++;
var note = spans[i].getAttribute("data-note");
if (!note) {
// Use [\s\S] in place of . so multi-line matches work.
// Because JavaScript has no s (dotall) regex flag.
note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
spans[i].innerHTML =
"[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
"' title='View footnote' class='footnote'>" + n + "</a>]";
spans[i].setAttribute("data-note", note);
}
noteholder.innerHTML +=
"<div class='footnote' id='_footnote_" + n + "'>" +
"<a href='#_footnoteref_" + n + "' title='Return to text'>" +
n + "</a>. " + note + "</div>";
var id =spans[i].getAttribute("id");
if (id != null) refs["#"+id] = n;
}
}
if (n == 0)
noteholder.parentNode.removeChild(noteholder);
else {
// Process footnoterefs.
for (i=0; i<spans.length; i++) {
if (spans[i].className == "footnoteref") {
var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
href = href.match(/#.*/)[0]; // Because IE return full URL.
n = refs[href];
spans[i].innerHTML =
"[<a href='#_footnote_" + n +
"' title='View footnote' class='footnote'>" + n + "</a>]";
}
}
}
},
install: function(toclevels) {
var timerId;
function reinstall() {
asciidoc.footnotes();
if (toclevels) {
asciidoc.toc(toclevels);
}
}
function reinstallAndRemoveTimer() {
clearInterval(timerId);
reinstall();
}
timerId = setInterval(reinstall, 500);
if (document.addEventListener)
document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
else
window.onload = reinstallAndRemoveTimer;
}
}
asciidoc.install();
/*]]>*/
</script>
</head>
<body class="manpage">
<div id="header">
<h1>
depot_tools_tutorial(7) Manual Page
</h1>
<h2>NAME</h2>
<div class="sectionbody">
<p>depot_tools_tutorial -
A tutorial introduction to the Chromium depot_tools git extensions.
</p>
</div>
</div>
<div id="content">
<div class="sect1">
<h2 id="_description">DESCRIPTION</h2>
<div class="sectionbody">
<div class="paragraph"><p>The Chromium <a href="depot_tools.html">depot_tools(7)</a> suite contains many git workflow-enhancing
tools which are designed to work together to enable anyone to wrangle the
Chromium codebase expertly. This tutorial explains how to do development on
Chromium using these tools. This will cover:</p></div>
<div class="ulist"><ul>
<li>
<p>
<a href="#_setting_up">Setting up</a>
</p>
</li>
<li>
<p>
<a href="#_getting_the_code">Getting the code</a>
</p>
</li>
<li>
<p>
<a href="#_tl_dr_walkthrough">TL;DR Walkthrough</a>
</p>
</li>
<li>
<p>
<a href="#_creating_uploading_a_cl">Creating / Uploading a CL</a>
</p>
</li>
<li>
<p>
<a href="#_updating_the_code">Updating the code</a>
</p>
</li>
<li>
<p>
<a href="#_managing_multiple_cls">Managing multiple CLs</a>
</p>
</li>
<li>
<p>
<a href="#_managing_dependent_cls">Managing dependent CLs</a>
</p>
</li>
</ul></div>
<div class="paragraph"><p>Please refer to the manpages (or <code>--help</code> output) for details about any of the
commands mentioned in this tutorial.</p></div>
<div class="admonitionblock">
<table><tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">If your platform does not support manpages (or you prefer something a bit more
expressive than plain text) you can find all documentation in <em>html</em> form in the
<code>[DEPOT_TOOLS]/docs/html</code> folder.</td>
</tr></table>
</div>
<div class="sect2">
<h3 id="_prerequisites">PREREQUISITES</h3>
<div class="paragraph"><p>This tutorial assumes basic familiarity with git terminology and concepts. If you
need to brush up on these, the following are very good resources:</p></div>
<div class="ulist"><ul>
<li>
<p>
<a href="http://think-like-a-git.net/">Think like (a) Git</a> - A lighthearted
overview of git. If you&#8217;re sorta-familiar with git, but not <em>comfortable</em> with
it, then give this a look.
</p>
</li>
<li>
<p>
<a href="http://gitimmersion.com/">Git Immersion Tutorial</a> - An in-depth git
tutorial.
</p>
</li>
<li>
<p>
<a href="http://pcottle.github.io/learnGitBranching">pcottle&#8217;s Visual Git
Branching</a> - An excellent interactive/graphical demo on how git handles
commits, branches, and shows the operations git performs on them.
</p>
</li>
<li>
<p>
<a href="http://git-scm.com/book">Pro Git book</a> - &#8220;The&#8221; book for learning git
from basics to advanced concepts. A bit dry, but very through.
</p>
</li>
</ul></div>
<div class="paragraph"><p>If you&#8217;ve tried these out and are still having some trouble getting started,
there are <em>many</em> other resources online which should help. If you&#8217;re <em>really</em>
<strong><em>really</em></strong> stuck, then chat up one of the Chromium infrastructure team
members for some pointers.</p></div>
<div class="dlist"><dl>
<dt class="hdlist1">
Litmus Test
</dt>
<dd>
<p>
If you know what <code>git add</code>, <code>git status</code>, <code>git commit</code> do and you know
<em>essentially</em> what <code>git rebase</code> does, then you should know enough to follow
along.
</p>
</dd>
</dl></div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_setting_up">SETTING UP</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_get_depot_tools">GET DEPOT TOOLS</h3>
<div class="sect3">
<h4 id="_linux_mac">LINUX / MAC</h4>
<div class="paragraph"><p>Clone the <em>depot_tools</em> repository:</p></div>
<div class="listingblock">
<div class="content">
<pre><code><strong><span class="white">$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools</span></strong></code></pre>
</div></div>
<div class="paragraph"><p>Add <em>depot_tools</em> to the <em>end</em> of your PATH and MANPATH (you will probably want
to put this in your <code>~/.bashrc</code> or <code>~/.zshrc</code>). Assuming you cloned
<em>depot_tools</em> to <code>/path/to/depot_tools</code>:</p></div>
<div class="listingblock">
<div class="content">
<pre><code><strong><span class="white">$ export PATH=$PATH:/path/to/depot_tools</span></strong>
<strong><span class="white">$ export MANPATH=$MANPATH:/path/to/depot_tools/docs</span></strong> <b>&lt;1&gt;</b></code></pre>
</div></div>
<div class="colist arabic"><ol>
<li>
<p>
Observe that this path is <code>depot_tools/</code><strong><code>docs</code></strong>.
</p>
</li>
</ol></div>
</div>
<div class="sect3">
<h4 id="_windows">WINDOWS</h4>
<div class="paragraph"><p>Download the <em>depot_tools</em>
<a href="https://src.chromium.org/svn/trunk/tools/depot_tools.zip">bundle</a> and
extract it somewhere.</p></div>
<div class="admonitionblock">
<table><tr>
<td class="icon">
<div class="title">Warning</div>
</td>
<td class="content"><strong>DO NOT</strong> use drag-n-drop or copy-n-paste extract from Explorer, this will not
extract the hidden &#8220;.git&#8221; folder which is necessary for <em>depot_tools</em> to
autoupdate itself. You can use &#8220;Extract all&#8230;&#8221; from the context menu though.</td>
</tr></table>
</div>
<div class="paragraph"><p>Add <em>depot_tools</em> to the <em>end</em> of your PATH. Assuming you unzipped the
bundle to <code>C:\workspace\depot_tools</code>:</p></div>
<div class="dlist"><dl>
<dt class="hdlist1">
With Administrator access:
</dt>
<dd>
<p>
<strong>Control Panel &#8594; System and Security &#8594; System &#8594; Advanced system settings</strong>
</p>
<div class="paragraph"><p>Modify the PATH system variable to include <code>C:\workspace\depot_tools</code>.</p></div>
</dd>
<dt class="hdlist1">
Without Administrator access:
</dt>
<dd>
<p>
<strong>Control Panel &#8594; User Accounts &#8594; User Accounts &#8594; Change my environment variables</strong>
</p>
<div class="paragraph"><p>Add a PATH user variable: <code>%PATH%;C:\workspace\depot_tools</code>.</p></div>
</dd>
</dl></div>
<div class="paragraph"><p>From a <code>cmd.exe</code> shell, run the command <code>gclient</code> (without arguments). On first
run, gclient will install all the Windows-specific bits needed to work with the
code, including msysgit and python.</p></div>
<div class="admonitionblock">
<table><tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
<div class="ulist"><ul>
<li>
<p>
If you run gclient from a non-cmd shell (e.g., cygwin, PowerShell), it
may appear to run properly, but msysgit, python, and other tools may not get
installed correctly.
</p>
</li>
<li>
<p>
If you see strange errors with the file system on the first run of gclient,
you may want to <a href="http://tortoisesvn.tigris.org/faq.html#cantmove2">disable
Windows Indexing</a>.
</p>
</li>
<li>
<p>
If you are running Windows XP and see errors like &#8220;The system cannot execute
the specified program&#8221;, try installing the
<a href="http://code.google.com/p/chromium/issues/detail?id=75886">&#8220;Microsoft
Visual C++ 2008 Redistributable Package&#8221;</a>.
</p>
</li>
</ul></div>
</td>
</tr></table>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_bootstrapping_configuration">BOOTSTRAPPING CONFIGURATION</h3>
<div class="paragraph"><p>If you have never used git before, you’ll need to set some global git
configurations; substitute your name and email address in the following
commands:</p></div>
<div class="listingblock">
<div class="content">
<pre><code><strong><span class="white">$ git config --global user.name &#8220;John Doe&#8221;</span></strong>
<strong><span class="white">$ git config --global user.email &#8220;jdoe@email.com&#8221;</span></strong>
<strong><span class="white">$ git config --global core.autocrlf false</span></strong>
<strong><span class="white">$ git config --global core.filemode false</span></strong>
<strong><span class="white">$</span></strong> # and for fun!
<strong><span class="white">$ git config --global color.ui true</span></strong></code></pre>
</div></div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_getting_the_code">GETTING THE CODE</h2>
<div class="sectionbody">
<div class="paragraph"><p>Pick an empty directory and run one of the following:</p></div>
<div class="listingblock">
<div class="content">
<pre><code><strong><span class="white">$ fetch chromium</span></strong> # Basic checkout for desktop Chromium
<strong><span class="white">$ fetch blink</span></strong> # Chromium code with Blink checked out to tip-of-tree
<strong><span class="white">$ fetch android</span></strong> # Chromium checkout for Android platform
<strong><span class="white">$ fetch ios</span></strong> # Chromium checkout for iOS platform</code></pre>
</div></div>
<div class="paragraph"><p>When the <code>fetch</code> tool completes you should have the following in your working
directory:</p></div>
<div class="listingblock">
<div class="content">
<pre><code><strong><span class="white">.gclient</span></strong> # A configuration file for you source checkout
<strong><span class="white">src/</span></strong> # Top-level Chromium source checkout.</code></pre>
</div></div>
<div class="paragraph"><p>If you are on linux, then you&#8217;ll need to run:</p></div>
<div class="listingblock">
<div class="content">
<pre><code><strong><span class="white">$ cd src &amp;&amp; ./build/install-build-deps.sh</span></strong></code></pre>
</div></div>
<div class="paragraph"><p>And finally:</p></div>
<div class="listingblock">
<div class="content">
<pre><code><strong><span class="white">$ gclient sync</span></strong> <b>&lt;1&gt;</b></code></pre>
</div></div>
<div class="colist arabic"><ol>
<li>
<p>
This will pull all dependencies of the Chromium src checkout. You will need
to run this any time you update the main src checkout.
</p>
</li>
</ol></div>
</div>
</div>
<div class="sect1">
<h2 id="_tl_dr_walkthrough">TL;DR WALKTHROUGH</h2>
<div class="sectionbody">
<div class="paragraph"><p>This section will demo what a typical workflow looks like when writing, updating,
and committing multiple CLs.</p></div>
<div class="paragraph"><p></p></div><div class="listingblock"><div class="content"><pre><code><span style="font-weight: bold; color: #ffffff">$ fetch chromium</span>
... truncated output ...
<span style="font-weight: bold; color: #ffffff">$ cd src</span>
</code></pre></div></div><p><div class="paragraph"> (only on linux)</p></div><div class="listingblock"><div class="content"><pre><code><span style="font-weight: bold; color: #ffffff">$ ./build/install-build-deps.sh</span>
... truncated output ...
</code></pre></div></div><p><div class="paragraph"> Pull in all dependencies for HEAD</p></div><div class="listingblock"><div class="content"><pre><code><span style="font-weight: bold; color: #ffffff">$ gclient sync</span>
... truncated output ...
</code></pre></div></div><p><div class="paragraph"> Let's fix something!</p></div><div class="listingblock"><div class="content"><pre><code><span style="font-weight: bold; color: #ffffff">$ git new-branch fix_typo</span>
<span style="font-weight: bold; color: #ffffff">$ echo -e '/Banana\ns/Banana/Kuun\nwq' | ed build/whitespace_file.txt</span>
1503
It was a Domo-Banana.
It was a Domo-Kuun.
1501
<span style="font-weight: bold; color: #ffffff">$ git commit -am 'Fix terrible typo.'</span>
[fix_typo 615ffa7] Fix terrible typo.
1 file changed, 1 insertion(+), 1 deletion(-)
<span style="font-weight: bold; color: #ffffff">$ git map</span>
<span style="background-color: #492ee1"></span><span style="font-weight: bold; background-color: #492ee1">* </span><span style="font-weight: bold; color: #e42e16; background-color: #492ee1">615ffa7 </span><span style="color: #19c518"> (</span><span style="color: #33d6e5"></span><span style="font-weight: bold; color: #33d6e5">fix_typo</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ Fix terrible typo.
* <span style="font-weight: bold; color: #e42e16">beec6f4 </span><span style="color: #19c518"> (</span><span style="color: #e42e16">origin/master</span><span style="color: #19c518">, </span><span style="color: #e42e16">origin/HEAD</span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ Make ReflectorImpl use mailboxes<span style="font-weight: bold"></span><span style="font-weight: bold; color: #ffffff"> &lt;(fix_typo)</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span>
* <span style="font-weight: bold; color: #e42e16">41290e0 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ don't use glibc-specific execinfo.h on uclibc builds
* <span style="font-weight: bold; color: #e42e16">a76fde7 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ [fsp] Add requestUnmount() method together with the request manager.
* <span style="font-weight: bold; color: #e42e16">9de7a71 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ linux_aura: Use system configuration for middle clicking the titlebar.
* <span style="font-weight: bold; color: #e42e16">073b0c2 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ ContentView-&gt;ContentViewCore in ContentViewRenderView
* <span style="font-weight: bold; color: #e42e16">2250f53 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ ozone: evdev: Filter devices by path
* <span style="font-weight: bold; color: #e42e16">33a7a74 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Always output seccomp error messages to stderr
<span style="font-weight: bold; color: #ffffff">$ git status</span>
On branch fix_typo
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working directory clean
<span style="font-weight: bold; color: #ffffff">$ git cl upload -r domo@chromium.org --send-mail</span>
... truncated output ...
</code></pre></div></div><p><div class="paragraph"> While we wait for feedback, let's do something else.</p></div><div class="listingblock"><div class="content"><pre><code><span style="font-weight: bold; color: #ffffff">$ git new-branch chap2</span>
<span style="font-weight: bold; color: #ffffff">$ git map-branches</span>
<span style="color: #e42e16"></span><span style="font-weight: bold; color: #e42e16">origin/master
</span><span style="font-weight: bold; color: #33d6e5"></span><span style="font-weight: bold; color: #33d6e5"> chap2 *
</span><span style="font-weight: bold; color: #19c518"></span><span style="color: #19c518"> fix_typo
</span><span style="font-weight: bold; color: #ffffff">$ cat &gt;&gt; build/whitespace_file.txt &lt;&lt;EOF</span>
"You recall what happened on Mulholland drive?" The ceiling fan rotated slowly
overhead, barely disturbing the thick cigarette smoke. No doubt was left about
when the fan was last cleaned.
EOF
<span style="font-weight: bold; color: #ffffff">$ git status</span>
On branch chap2
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add &lt;file&gt;..." to update what will be committed)
(use "git checkout -- &lt;file&gt;..." to discard changes in working directory)
<span style="color: #e42e16">modified: build/whitespace_file.txt</span>
no changes added to commit (use "git add" and/or "git commit -a")
</code></pre></div></div><p><div class="paragraph"> Someone on the code review pointed out that our typo-fix has a typo :( We're still working on 'chap2' but we really want to land 'fix_typo', so let's switch over and fix it.</p></div><div class="listingblock"><div class="content"><pre><code><span style="font-weight: bold; color: #ffffff">$ git freeze</span>
<span style="font-weight: bold; color: #ffffff">$ git checkout fix_typo</span>
Switched to branch 'fix_typo'
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
<span style="font-weight: bold; color: #ffffff">$ echo -e '/Kuun\ns/Kuun/Kun\nwq' | ed build/whitespace_file.txt</span>
1501
It was a Domo-Kuun.
It was a Domo-Kun.
1500
<span style="font-weight: bold; color: #ffffff">$ git upstream-diff --wordwise</span>
<span style="font-weight: bold">diff --git a/build/whitespace_file.txt b/build/whitespace_file.txt</span>
<span style="font-weight: bold">index 3eba355..57cdcee 100644</span>
<span style="font-weight: bold">--- a/build/whitespace_file.txt</span>
<span style="font-weight: bold">+++ b/build/whitespace_file.txt</span>
<span style="color: #33d6e5">@@ -17,7 +17,7 @@</span> swept up the streets (for it is in London that our scene lies), rattling along
the housetops, and fiercely agitating the scanty flame of the lamps that
struggled against the elements. A hooded figure emerged.
It was a Domo-<span style="color: #e42e16">Banana</span><span style="color: #19c518">Kun</span>.
"What took you so long?", inquired his wife.
<span style="font-weight: bold; color: #ffffff">$ git commit -am 'Fix typo for good!'</span>
[fix_typo 2c0ad9c] Fix typo for good!
1 file changed, 1 insertion(+), 1 deletion(-)
<span style="font-weight: bold; color: #ffffff">$ git cl upload</span>
... truncated output ...
</code></pre></div></div><p><div class="paragraph"> Since we got lgtm, let the CQ land it.</p></div><div class="listingblock"><div class="content"><pre><code><span style="font-weight: bold; color: #ffffff">$ git cl set_commit</span>
<span style="font-weight: bold; color: #ffffff">$ git map</span>
* <span style="font-weight: bold; color: #e42e16">0e2e52e </span><span style="color: #19c518"> (</span><span style="color: #19c518"></span><span style="font-weight: bold; color: #19c518">chap2</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ FREEZE.unindexed
<span style="color: #e42e16">|</span> <span style="background-color: #492ee1"></span><span style="font-weight: bold; background-color: #492ee1">* </span><span style="font-weight: bold; color: #e42e16; background-color: #492ee1">2c0ad9c </span><span style="color: #19c518"> (</span><span style="color: #33d6e5"></span><span style="font-weight: bold; color: #33d6e5">fix_typo</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ Fix typo for good!
<span style="color: #e42e16">|</span> * <span style="font-weight: bold; color: #e42e16">615ffa7 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Fix terrible typo.
<span style="color: #e42e16">|</span><span style="color: #e42e16">/</span>
* <span style="font-weight: bold; color: #e42e16">beec6f4 </span><span style="color: #19c518"> (</span><span style="color: #e42e16">origin/master</span><span style="color: #19c518">, </span><span style="color: #e42e16">origin/HEAD</span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ Make ReflectorImpl use mailboxes<span style="font-weight: bold"></span><span style="font-weight: bold; color: #ffffff"> &lt;(chap2, fix_typo)</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span>
* <span style="font-weight: bold; color: #e42e16">41290e0 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ don't use glibc-specific execinfo.h on uclibc builds
* <span style="font-weight: bold; color: #e42e16">a76fde7 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ [fsp] Add requestUnmount() method together with the request manager.
* <span style="font-weight: bold; color: #e42e16">9de7a71 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ linux_aura: Use system configuration for middle clicking the titlebar.
* <span style="font-weight: bold; color: #e42e16">073b0c2 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ ContentView-&gt;ContentViewCore in ContentViewRenderView
* <span style="font-weight: bold; color: #e42e16">2250f53 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ ozone: evdev: Filter devices by path
* <span style="font-weight: bold; color: #e42e16">33a7a74 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Always output seccomp error messages to stderr
</code></pre></div></div><p><div class="paragraph"> Switch back to where we were using the nav* commands (for fun... git checkout would work here too)</p></div><div class="listingblock"><div class="content"><pre><code><span style="font-weight: bold; color: #ffffff">$ git map-branches</span>
<span style="color: #e42e16"></span><span style="color: #e42e16">origin/master
</span><span style="color: #19c518"></span><span style="color: #19c518"> chap2
</span><span style="color: #33d6e5"></span><span style="font-weight: bold; color: #33d6e5"> fix_typo *
</span><span style="font-weight: bold; color: #ffffff">$ git nav-upstream</span>
Note: checking out 'origin/master'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b new_branch_name
HEAD is now at beec6f4... Make ReflectorImpl use mailboxes
<span style="font-weight: bold; color: #ffffff">$ git nav-downstream</span>
Please select a downstream branch
0. chap2
1. fix_typo
Selection (0-1)[0]: 0
Previous HEAD position was beec6f4... Make ReflectorImpl use mailboxes
Switched to branch 'chap2'
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
<span style="font-weight: bold; color: #ffffff">$ git map-branches</span>
<span style="color: #e42e16"></span><span style="color: #e42e16">origin/master
</span><span style="color: #33d6e5"></span><span style="font-weight: bold; color: #33d6e5"> chap2 *
</span><span style="font-weight: bold; color: #19c518"></span><span style="color: #19c518"> fix_typo
</code></pre></div></div><p><div class="paragraph"> Now we can pick up on chapter2 where we left off.</p></div><div class="listingblock"><div class="content"><pre><code></span><span style="font-weight: bold; color: #ffffff">$ git thaw</span>
<span style="font-weight: bold; color: #ffffff">$ git diff</span>
<span style="font-weight: bold">diff --git a/build/whitespace_file.txt b/build/whitespace_file.txt</span>
<span style="font-weight: bold">index 3eba355..9d08d9d 100644</span>
<span style="font-weight: bold">--- a/build/whitespace_file.txt</span>
<span style="font-weight: bold">+++ b/build/whitespace_file.txt</span>
<span style="color: #33d6e5">@@ -34,3 +34,7 @@</span> with his fork, watching the runny jelly spread and pool across his plate,
like the blood of a dying fawn. \"It reminds me of that time --\" he started, as
his wife cut in quickly: \"-- please. I can't bear to hear it.\". A flury of
images coming from the past flowed through his mind.
<span style="color: #19c518">+</span>
<span style="color: #19c518">+</span><span style="color: #19c518">"You recall what happened on Mulholland drive?" The ceiling fan rotated slowly</span>
<span style="color: #19c518">+</span><span style="color: #19c518">overhead, barely disturbing the thick cigarette smoke. No doubt was left about</span>
<span style="color: #19c518">+</span><span style="color: #19c518">when the fan was last cleaned.</span>
<span style="font-weight: bold; color: #ffffff">$ cat &gt;&gt; build/whitespace_file.txt &lt;&lt;EOF</span>
There was an poignant pause.
EOF
<span style="font-weight: bold; color: #ffffff">$ git diff</span>
<span style="font-weight: bold">diff --git a/build/whitespace_file.txt b/build/whitespace_file.txt</span>
<span style="font-weight: bold">index 3eba355..e3a55de 100644</span>
<span style="font-weight: bold">--- a/build/whitespace_file.txt</span>
<span style="font-weight: bold">+++ b/build/whitespace_file.txt</span>
<span style="color: #33d6e5">@@ -34,3 +34,9 @@</span> with his fork, watching the runny jelly spread and pool across his plate,
like the blood of a dying fawn. \"It reminds me of that time --\" he started, as
his wife cut in quickly: \"-- please. I can't bear to hear it.\". A flury of
images coming from the past flowed through his mind.
<span style="color: #19c518">+</span>
<span style="color: #19c518">+</span><span style="color: #19c518">"You recall what happened on Mulholland drive?" The ceiling fan rotated slowly</span>
<span style="color: #19c518">+</span><span style="color: #19c518">overhead, barely disturbing the thick cigarette smoke. No doubt was left about</span>
<span style="color: #19c518">+</span><span style="color: #19c518">when the fan was last cleaned.</span>
<span style="color: #19c518">+</span>
<span style="color: #19c518">+</span><span style="color: #19c518">There was an poignant pause.</span>
<span style="font-weight: bold; color: #ffffff">$ git commit -am 'Finish chapter 2'</span>
[chap2 ceef712] Finish chapter 2
1 file changed, 6 insertions(+)
<span style="font-weight: bold; color: #ffffff">$ git map</span>
<span style="background-color: #492ee1"></span><span style="font-weight: bold; background-color: #492ee1">* </span><span style="font-weight: bold; color: #e42e16; background-color: #492ee1">ceef712 </span><span style="color: #19c518"> (</span><span style="color: #33d6e5"></span><span style="font-weight: bold; color: #33d6e5">chap2</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ Finish chapter 2
<span style="color: #e42e16">|</span> * <span style="font-weight: bold; color: #e42e16">2c0ad9c </span><span style="color: #19c518"> (</span><span style="color: #19c518"></span><span style="font-weight: bold; color: #19c518">fix_typo</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ Fix typo for good!
<span style="color: #e42e16">|</span> * <span style="font-weight: bold; color: #e42e16">615ffa7 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Fix terrible typo.
<span style="color: #e42e16">|</span><span style="color: #e42e16">/</span>
* <span style="font-weight: bold; color: #e42e16">beec6f4 </span><span style="color: #19c518"> (</span><span style="color: #e42e16">origin/master</span><span style="color: #19c518">, </span><span style="color: #e42e16">origin/HEAD</span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ Make ReflectorImpl use mailboxes<span style="font-weight: bold"></span><span style="font-weight: bold; color: #ffffff"> &lt;(chap2, fix_typo)</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span>
* <span style="font-weight: bold; color: #e42e16">41290e0 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ don't use glibc-specific execinfo.h on uclibc builds
* <span style="font-weight: bold; color: #e42e16">a76fde7 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ [fsp] Add requestUnmount() method together with the request manager.
* <span style="font-weight: bold; color: #e42e16">9de7a71 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ linux_aura: Use system configuration for middle clicking the titlebar.
* <span style="font-weight: bold; color: #e42e16">073b0c2 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ ContentView-&gt;ContentViewCore in ContentViewRenderView
* <span style="font-weight: bold; color: #e42e16">2250f53 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ ozone: evdev: Filter devices by path
* <span style="font-weight: bold; color: #e42e16">33a7a74 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Always output seccomp error messages to stderr
<span style="font-weight: bold; color: #ffffff">$ git cl upload -r domo@chromium.org --send-mail</span>
... truncated output ...
</code></pre></div></div><p><div class="paragraph"> We poke a committer until they lgtm :)</p></div><div class="listingblock"><div class="content"><pre><code><span style="font-weight: bold; color: #ffffff">$ git cl set_commit</span>
</code></pre></div></div><p><div class="paragraph"> While that runs through the CQ, let's get started on chapter 3. Since we know that chapter 3 depends on chapter 2, we'll track the current chapter2 branch.</p></div><div class="listingblock"><div class="content"><pre><code><span style="font-weight: bold; color: #ffffff">$ git new-branch --upstream_current chap3</span>
<span style="font-weight: bold; color: #ffffff">$ cat &gt;&gt; build/whitespace_file.txt &lt;&lt;EOF</span>
CHAPTER 3:
Mr. Usagi felt that something wasn't right. Shortly after the Domo-Kun left he
began feeling sick.
EOF
<span style="font-weight: bold; color: #ffffff">$ git commit -am 'beginning of chapter 3'</span>
[chap3 7d4238a] beginning of chapter 3
1 file changed, 4 insertions(+)
<span style="font-weight: bold; color: #ffffff">$ git map</span>
<span style="background-color: #492ee1"></span><span style="font-weight: bold; background-color: #492ee1">* </span><span style="font-weight: bold; color: #e42e16; background-color: #492ee1">7d4238a </span><span style="color: #19c518"> (</span><span style="color: #33d6e5"></span><span style="font-weight: bold; color: #33d6e5">chap3</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ beginning of chapter 3
* <span style="font-weight: bold; color: #e42e16">ceef712 </span><span style="color: #19c518"> (</span><span style="color: #19c518"></span><span style="font-weight: bold; color: #19c518">chap2</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ Finish chapter 2<span style="font-weight: bold"></span><span style="font-weight: bold; color: #ffffff"> &lt;(chap3)</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span>
<span style="color: #e42e16">|</span> * <span style="font-weight: bold; color: #e42e16">2c0ad9c </span><span style="color: #19c518"> (</span><span style="color: #19c518"></span><span style="font-weight: bold; color: #19c518">fix_typo</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ Fix typo for good!
<span style="color: #e42e16">|</span> * <span style="font-weight: bold; color: #e42e16">615ffa7 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Fix terrible typo.
<span style="color: #e42e16">|</span><span style="color: #e42e16">/</span>
* <span style="font-weight: bold; color: #e42e16">beec6f4 </span><span style="color: #19c518"> (</span><span style="color: #e42e16">origin/master</span><span style="color: #19c518">, </span><span style="color: #e42e16">origin/HEAD</span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ Make ReflectorImpl use mailboxes<span style="font-weight: bold"></span><span style="font-weight: bold; color: #ffffff"> &lt;(chap2, fix_typo)</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span>
* <span style="font-weight: bold; color: #e42e16">41290e0 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ don't use glibc-specific execinfo.h on uclibc builds
* <span style="font-weight: bold; color: #e42e16">a76fde7 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ [fsp] Add requestUnmount() method together with the request manager.
* <span style="font-weight: bold; color: #e42e16">9de7a71 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ linux_aura: Use system configuration for middle clicking the titlebar.
* <span style="font-weight: bold; color: #e42e16">073b0c2 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ ContentView-&gt;ContentViewCore in ContentViewRenderView
* <span style="font-weight: bold; color: #e42e16">2250f53 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ ozone: evdev: Filter devices by path
* <span style="font-weight: bold; color: #e42e16">33a7a74 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Always output seccomp error messages to stderr
</code></pre></div></div><p><div class="paragraph"> We haven't updated the code in a while, so let's do that now.</p></div><div class="listingblock"><div class="content"><pre><code><span style="font-weight: bold; color: #ffffff">$ git rebase-update</span>
Fetching origin
From /Users/iannucci/chromium/depot_tools/docs/src/demo_repo
beec6f4..59cdb73 master -&gt; origin/master
Rebasing: chap2
Rebasing: fix_typo
Failed! Attempting to squash fix_typo ... Success!
Rebasing: chap3
Deleted branch fix_typo (was 5d26fec).
Reparented chap3 to track origin/master (was tracking chap2)
Deleted branch chap2 (was 5d26fec).
</code></pre></div></div><p><div class="paragraph"> Well look at that. The CQ landed our typo and chapter2 branches already and git rebase-update cleaned them up for us.</p></div><div class="listingblock"><div class="content"><pre><code><span style="font-weight: bold; color: #ffffff">$ gclient sync</span>
... truncated output ...
<span style="font-weight: bold; color: #ffffff">$ git map</span>
<span style="background-color: #492ee1"></span><span style="font-weight: bold; background-color: #492ee1">* </span><span style="font-weight: bold; color: #e42e16; background-color: #492ee1">93fe917 </span><span style="color: #19c518"> (</span><span style="color: #33d6e5"></span><span style="font-weight: bold; color: #33d6e5">chap3</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ beginning of chapter 3
* <span style="font-weight: bold; color: #e42e16">5d26fec </span><span style="color: #19c518"> (</span><span style="color: #e42e16">origin/master</span><span style="color: #19c518">, </span><span style="color: #e42e16">origin/HEAD</span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ Finish chapter 2<span style="font-weight: bold"></span><span style="font-weight: bold; color: #ffffff"> &lt;(chap3)</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span>
* <span style="font-weight: bold; color: #e42e16">df7fefb </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Revert 255617, due to it not tracking use of the link doctor page properly.
* <span style="font-weight: bold; color: #e42e16">4b39cda </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Fix terrible typo.
* <span style="font-weight: bold; color: #e42e16">248c5b6 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Temporarily CHECK(trial) in ChromeRenderProcessObserver::OnSetFieldTrialGroup.
* <span style="font-weight: bold; color: #e42e16">8171df8 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Remove AMD family check for the flapper crypto accelerator.
* <span style="font-weight: bold; color: #e42e16">d6a30d2 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Change the Pica load benchmark to listen for the polymer-ready event
* <span style="font-weight: bold; color: #e42e16">beec6f4 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Make ReflectorImpl use mailboxes
* <span style="font-weight: bold; color: #e42e16">41290e0 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ don't use glibc-specific execinfo.h on uclibc builds
* <span style="font-weight: bold; color: #e42e16">a76fde7 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ [fsp] Add requestUnmount() method together with the request manager.
* <span style="font-weight: bold; color: #e42e16">9de7a71 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ linux_aura: Use system configuration for middle clicking the titlebar.
* <span style="font-weight: bold; color: #e42e16">073b0c2 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ ContentView-&gt;ContentViewCore in ContentViewRenderView
* <span style="font-weight: bold; color: #e42e16">2250f53 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ ozone: evdev: Filter devices by path
* <span style="font-weight: bold; color: #e42e16">33a7a74 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Always output seccomp error messages to stderr
</code></pre></div></div><p><div class="paragraph"> Someone on IRC mentions that they actually landed a chapter 3 already! We should pull their changes before continuing. Brace for a code conflict!</p></div><div class="listingblock"><div class="content"><pre><code><span style="font-weight: bold; color: #ffffff">$ git rebase-update</span>
Fetching origin
From /Users/iannucci/chromium/depot_tools/docs/src/demo_repo
5d26fec..59cdb73 master -&gt; origin/master
Rebasing: chap2
... lots of output, it's a conflict alright :(...
<span style="font-weight: bold; color: #ffffff">$ git diff</span>
<span style="font-weight: bold">diff --cc build/whitespace_file.txt</span>
<span style="font-weight: bold">index 1293282,f903ea2..0000000</span>
<span style="font-weight: bold">--- a/build/whitespace_file.txt</span>
<span style="font-weight: bold">+++ b/build/whitespace_file.txt</span>
<span style="color: #33d6e5">@@@ -42,4 -42,5 +42,9 @@@</span> when the fan was last cleaned
There was an poignant pause.
CHAPTER 3:
<span style="color: #19c518">++&lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD</span>
<span style="color: #19c518"> +Hilariousness! This chapter is awesome!</span>
<span style="color: #19c518">++=======</span>
<span style="color: #19c518">+ Mr. Usagi felt that something wasn't right. Shortly after the Domo-Kun left he</span>
<span style="color: #19c518">+ began feeling sick.</span>
<span style="color: #19c518">++&gt;&gt;&gt;&gt;&gt;&gt;&gt; beginning of chapter 3</span>
</code></pre></div></div><p><div class="paragraph"> Oh, well, that's not too bad. In fact... that's a terrible chapter 3!</p></div><div class="listingblock"><div class="content"><pre><code><span style="font-weight: bold; color: #ffffff">$ $EDITOR build/whitespace_file.txt</span>
... /me deletes bad chapter 3 ...
<span style="font-weight: bold; color: #ffffff">$ git add build/whitespace_file.txt</span>
<span style="font-weight: bold; color: #ffffff">$ git diff --cached</span>
<span style="font-weight: bold">diff --git a/build/whitespace_file.txt b/build/whitespace_file.txt</span>
<span style="font-weight: bold">index 1293282..f903ea2 100644</span>
<span style="font-weight: bold">--- a/build/whitespace_file.txt</span>
<span style="font-weight: bold">+++ b/build/whitespace_file.txt</span>
<span style="color: #33d6e5">@@ -42,4 +42,5 @@</span> when the fan was last cleaned.
There was an poignant pause.
CHAPTER 3:
<span style="color: #e42e16">-Hilariousness! This chapter is awesome!</span>
<span style="color: #19c518">+</span><span style="color: #19c518">Mr. Usagi felt that something wasn't right. Shortly after the Domo-Kun left he</span>
<span style="color: #19c518">+</span><span style="color: #19c518">began feeling sick.</span>
</code></pre></div></div><p><div class="paragraph"> Much better</p></div><div class="listingblock"><div class="content"><pre><code><span style="font-weight: bold; color: #ffffff">$ git rebase --continue</span>
Applying: beginning of chapter 3
<span style="font-weight: bold; color: #ffffff">$ git rebase-update</span>
Fetching origin
chap3 up-to-date
<span style="font-weight: bold; color: #ffffff">$ gclient sync</span>
... truncated output ...
<span style="font-weight: bold; color: #ffffff">$ git map</span>
<span style="background-color: #492ee1"></span><span style="font-weight: bold; background-color: #492ee1">* </span><span style="font-weight: bold; color: #e42e16; background-color: #492ee1">1cb4f5b </span><span style="color: #19c518"> (</span><span style="color: #33d6e5"></span><span style="font-weight: bold; color: #33d6e5">chap3</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ beginning of chapter 3
* <span style="font-weight: bold; color: #e42e16">59cdb73 </span><span style="color: #19c518"> (</span><span style="color: #e42e16">origin/master</span><span style="color: #19c518">, </span><span style="color: #e42e16">origin/HEAD</span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ Refactor data interchange format.<span style="font-weight: bold"></span><span style="font-weight: bold; color: #ffffff"> &lt;(chap3)</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span>
* <span style="font-weight: bold; color: #e42e16">34676a3 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Ensure FS is exited for all not-in-same-page navigations.
* <span style="font-weight: bold; color: #e42e16">7d4784e </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Add best chapter2 ever!
* <span style="font-weight: bold; color: #e42e16">5d26fec </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Finish chapter 2
* <span style="font-weight: bold; color: #e42e16">df7fefb </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Revert 255617, due to it not tracking use of the link doctor page properly.
* <span style="font-weight: bold; color: #e42e16">4b39cda </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Fix terrible typo.
* <span style="font-weight: bold; color: #e42e16">248c5b6 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Temporarily CHECK(trial) in ChromeRenderProcessObserver::OnSetFieldTrialGroup.
* <span style="font-weight: bold; color: #e42e16">8171df8 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Remove AMD family check for the flapper crypto accelerator.
* <span style="font-weight: bold; color: #e42e16">d6a30d2 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Change the Pica load benchmark to listen for the polymer-ready event
* <span style="font-weight: bold; color: #e42e16">beec6f4 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Make ReflectorImpl use mailboxes
* <span style="font-weight: bold; color: #e42e16">41290e0 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ don't use glibc-specific execinfo.h on uclibc builds
* <span style="font-weight: bold; color: #e42e16">a76fde7 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ [fsp] Add requestUnmount() method together with the request manager.
* <span style="font-weight: bold; color: #e42e16">9de7a71 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ linux_aura: Use system configuration for middle clicking the titlebar.
* <span style="font-weight: bold; color: #e42e16">073b0c2 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ ContentView-&gt;ContentViewCore in ContentViewRenderView
* <span style="font-weight: bold; color: #e42e16">2250f53 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ ozone: evdev: Filter devices by path
* <span style="font-weight: bold; color: #e42e16">33a7a74 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Always output seccomp error messages to stderr
<span style="font-weight: bold; color: #ffffff">$ git cl upload</span>
... truncated output ...
</code></pre></div></div><p><div class="paragraph"></p></div>
<div class="paragraph"><p>So there you have the basic flow. Note that you don&#8217;t <em>have</em> to do chromium
development using these tools. Any git workflow is compatible, as long as
<code>git cl upload</code> is able to upload good patches.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_creating_uploading_a_cl">CREATING / UPLOADING A CL</h2>
<div class="sectionbody">
<div class="admonitionblock">
<table><tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">The remainder of the tutorial assumes that your current working directory
is the <code>src/</code> folder mentioned in <a href="#_getting_the_code">Getting the code</a>.</td>
</tr></table>
</div>
<div class="paragraph"><p>Each CL corresponds exactly with a single branch in git. Any time you want to
begin a new CL, just:</p></div>
<div class="listingblock">
<div class="content">
<pre><code><strong><span class="white">$ git new-branch &lt;branch_name&gt;</span></strong></code></pre>
</div></div>
<div class="paragraph"><p>This will create and checkout a new branch named <code>branch_name</code> which will track
the default upstream (which is <code>origin/master</code>). See <a href="git-new-branch.html">git-new-branch(1)</a>
for more features, such as the ability to track <em>LKGR</em>.</p></div>
<div class="paragraph"><p>Commit as many changes as you like to this branch. When you want to upload it
for review, run:</p></div>
<div class="listingblock">
<div class="content">
<pre><code><strong><span class="white">$ git cl upload</span></strong></code></pre>
</div></div>
<div class="paragraph"><p>This will take the diff of your branch against its upstream (<code>origin/master</code>),
and will post it to the <a href="https://codereview.chromium.org">Chromium code
review site</a>.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_updating_the_code">UPDATING THE CODE</h2>
<div class="sectionbody">
<div class="paragraph"><p>Inevitably, you&#8217;ll want to pull in changes from the main Chromium repo. This is
pretty easy with <em>depot_tools</em>:</p></div>
<div class="listingblock">
<div class="content">
<pre><code><strong><span class="white">$ git rebase-update</span></strong></code></pre>
</div></div>
<div class="paragraph"><p>This command will update all of your CLs to contain the latest code from their
upstreams. It will also automatically clean up CLs which have been committed and
a couple other nice things. See <a href="git-rebase-update.html">git-rebase-update(1)</a> for the full
scoop.</p></div>
<div class="paragraph"><p>One thing to look out for are <em>merge conflicts</em>. These happen for exactly the
same as they do with SVN, but the experience is a little more controllable with
git. <code>git rebase-update</code> will try to rebase all your branches for you, but if it
encounters a merge conflict in one, it will halt and leave you in a rebase
conflict state (see <a href="git-rebase.html">git-rebase(1)</a>). Resolving <code>git rebase</code> merge
conflicts is beyond the scope of this tutorial, but there are many good sources
online (see the <a href="#_prerequisites">Prerequisites</a> for some).</p></div>
<div class="paragraph"><p>Sometimes you&#8217;re pretty certain that you&#8217;ve committed a certain branch, but <code>git
rebase-update</code> isn&#8217;t able to tell that for sure. This is usually because your
branch doesn&#8217;t rebase cleanly. You could just delete the branch with <code>git branch
-D &lt;branch&gt;</code>, but you&#8217;d like to double check the diff of your branch against its
upstream before deleting it. If this is the case you can abort the rebase
started by <code>git rebase-update</code>, and then run <a href="git-squash-branch.html">git-squash-branch(1)</a> to
flatten your branch into a single commit. When you run <code>git rebase-update</code>
again, you&#8217;ll get a (hopefully) much smaller / saner diff. If it turns out you
were wrong about your branch being fully committed, you can use
<a href="git-reflog.html">git-reflog(1)</a> to reset your branch back to where it was before. If the
diff looks inconsequential, you can use <code>git rebase --skip</code> to ignore it, and
then <code>git rebase-update</code> will clean it up for you.</p></div>
<div class="paragraph"><p>Once you&#8217;re done resolving all of the merge conflict, just run <code>git
rebase-update</code>, and it will pick up where it left off. Once the command has
finished updating all of your branches, it will return you back to the branch
you started on.</p></div>
<div class="admonitionblock">
<table><tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">Running <code>git rebase-update</code> will update all your branches, but it will not
automatically run <code>gclient sync</code> to update your dependencies.</td>
</tr></table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_managing_multiple_cls">MANAGING MULTIPLE CLS</h2>
<div class="sectionbody">
<div class="paragraph"><p>Sometimes you want to work on more than one CL at once (say, you have a CL
posted for review and want to work on something else). For each CL that you
want to work on, just use <code>git new-branch &lt;branchname&gt;</code>.</p></div>
<div class="paragraph"><p>Once you start to have more than one CL at a time, it can be easy to lose your
bearings. Fortunately, <em>depot_tools</em> has two tools to help you out:</p></div>
<div class="listingblock">
<div class="content">
<pre><code><strong><span class="white">$ git map</span></strong>
<span class="white blue-background">*</span>&#8203;<strong><span class="blue-background red"> 7dcfe47 </span></strong> <span class="green">(</span>&#8203;<strong><span class="aqua">frozen_changes</span></strong>&#8203;<span class="green">)</span> <span class="yellow">2014-03-12</span> ~ FREEZE.unindexed
* <strong><span class="red">4b0c180</span></strong> <span class="yellow">2014-03-12</span> ~ modfile
* <strong><span class="red">59a7cca</span></strong> <span class="yellow">2014-03-12</span> ~ a deleted file
* <strong><span class="red">6bec695</span></strong> <span class="green">(</span>&#8203;<span class="red">origin/master</span>&#8203;<span class="green">)</span> <span class="yellow">2014-03-11</span> ~ Add neat feature <strong><span class="white">&lt;(frozen_changes)</span></strong>
* <strong><span class="red">d15a38a</span></strong> <span class="yellow">2014-03-11</span> ~ Epic README update
* <strong><span class="red">d559894</span></strong> <span class="green">(</span>&#8203;<strong><span class="lime">master</span></strong>&#8203;<span class="green">)</span> <span class="yellow">2014-03-11</span> ~ Important upstream change
<span class="red">|</span> * <strong><span class="red">9c311fd</span></strong> <span class="green">(</span>&#8203;<strong><span class="lime">cool_feature</span></strong>&#8203;<span class="green">)</span> <span class="yellow">2014-03-11</span> ~ Respond to CL comments
<span class="red">|</span> <span class="green">|</span> * <strong><span class="red">2a1eeb2</span></strong> <span class="green">(</span>&#8203;<strong><span class="lime">subfeature</span></strong>&#8203;<span class="green">)</span> <span class="yellow">2014-03-11</span> ~ integrate with CoolService
<span class="red">|</span> <span class="green">|</span> * <strong><span class="red">d777af6</span></strong> <span class="yellow">2014-03-11</span> ~ slick commenting action
<span class="red">|</span> <span class="green">|/</span>
<span class="red">|</span> * <strong><span class="red">265803a</span></strong> <span class="yellow">2014-03-11</span> ~ another improvement <strong><span class="white">&lt;(subfeature)</span></strong>
<span class="red">|</span> * <strong><span class="red">6d831ac</span></strong> <span class="green">(</span>&#8203;<strong><span class="fuchsia">spleen_tag</span></strong>&#8203;<span class="green">)</span> <span class="yellow">2014-03-11</span> ~ Refactor spleen
<span class="red">|</span> * <strong><span class="red">82e74ab</span></strong> <span class="yellow">2014-03-11</span> ~ Add widget
<span class="red">|/</span>
* <strong><span class="red">d08c5b3</span></strong> <span class="green">(</span>&#8203;<strong><span class="lime">bogus_noparent</span></strong>&#8203;<span class="green">)</span> <span class="yellow">2014-03-11</span> ~ Wonderful beginnings <strong><span class="white">&lt;(cool_feature)</span></strong></code></pre>
</div></div>
<div class="paragraph"><p>Note that this example repo is in dire need of a <a href="git-rebase-update.html">git-rebase-update(1)</a>!</p></div>
<div class="listingblock">
<div class="content">
<pre><code><strong><span class="white">$ git map-branches</span></strong>
<span class="red">origin/master</span>
<span class="green">cool_feature</span>
<span class="green">subfeature</span>
<span class="aqua">frozen_changes *</span>
<span class="green">master</span></code></pre>
</div></div>
<div class="dlist"><dl>
<dt class="hdlist1">
<a href="git-map.html">git-map(1)</a>
</dt>
<dd>
<p>
This tool shows you the history of all of your branches in a pseudo-graphical
format. In particular, it will show you which commits all of your branches
are on, which commit you currently have checked out, and more. Check out the
doc for the full details.
</p>
</dd>
<dt class="hdlist1">
<a href="git-map-branches.html">git-map-branches(1)</a>
</dt>
<dd>
<p>
This tool just shows you which branches you have in your repo, and thier
upstream relationship to each other (as well as which branch you have checked
out at the moment).
</p>
</dd>
</dl></div>
<div class="paragraph"><p>Additionally, sometimes you need to switch between branches, but you&#8217;ve got work
in progress. You could use <a href="git-stash.html">git-stash(1)</a>, but that can be tricky to
manage because you need to remember which branches you stashed what changes on.
Helpfully <em>depot_tools</em> includes two tools which can greatly assist in case:</p></div>
<div class="paragraph"><p><a href="git-freeze.html">git-freeze(1)</a> allows you to put the current branch in 'suspended
animation' by committing your changes to a specially-named commit on the top of
your current branch. When you come back to your branch later, you can just run
<a href="git-thaw.html">git-thaw(1)</a> to get your work-in-progress changes back to what they were.</p></div>
<div class="paragraph"><p>Another useful tool is <a href="git-rename-branch.html">git-rename-branch(1)</a>. Unlike <code>git branch -m &lt;old&gt;
&lt;new&gt;</code>, this tool will correctly preserve the upstream relationships of your
branch compared to its downstreams.</p></div>
<div class="paragraph"><p>Finally, take a look at <a href="git-upstream-diff.html">git-upstream-diff(1)</a>. This will show you the
combined diff for all the commits on your branch against the upstream tracking
branch. This is <em>exactly</em> what <code>git cl upload</code> will push up to code review.
Additionally, consider trying the <code>--wordwise</code> argument to get a colorized
per-word diff (instead of a per-line diff).</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_managing_dependent_cls">MANAGING DEPENDENT CLS</h2>
<div class="sectionbody">
<div class="paragraph"><p>Now that you know how to manage <em>independent</em> CLs, we&#8217;ll see how to manage
<em>dependent</em> CLs. Dependent CLs are useful when your second (or third or fourth
or &#8230;) CL depends on the changes in one of your other CLs (such as: CL 2 won&#8217;t
compile without CL 1, but you want to submit them as two separate reviews).</p></div>
<div class="paragraph"><p>Like all of the other CLs we&#8217;ve created, we use <a href="git-new-branch.html">git-new-branch(1)</a>, but
this time with an extra argument. First, <code>git checkout</code> the branch
you want to base the new one on (i.e. CL 1), and then run:</p></div>
<div class="listingblock">
<div class="content">
<pre><code><strong><span class="white">$ git new-branch --upstream_current &lt;branch_name&gt;</span></strong></code></pre>
</div></div>
<div class="paragraph"><p>This will make a new branch which tracks the <em>current</em> branch as its upstream
(as opposed to <em>origin/master</em>). All changes you commit to this branch will be
in addition to the previous branch, but when you <code>git cl upload</code>, you will only
upload the diff for the dependent (child) branch. You may have as many branches
nested in this fashion as you like.</p></div>
<div class="paragraph"><p><a href="git-map.html">git-map(1)</a> and <a href="git-map-branches.html">git-map-branches(1)</a> are particularly helpful when
you have dependent branches. In addition, there are two helper commands which
let you traverse your working copy up and down this tree of branches:
<a href="git-nav-upstream.html">git-nav-upstream(1)</a> and <a href="git-nav-downstream.html">git-nav-downstream(1)</a>.</p></div>
<div class="paragraph"><p>Sometimes when dealing with dependent CLs, it turns out that you accidentally
based a branch on the wrong upstream, but since then you&#8217;ve committed changes to
it, or even based <em>another</em> branch off of that one. Or you discover that you
have two independent CLs that would actually be much better off as dependent
CLs. In instances like these, you can check out the offending branch and use
<a href="git-reparent-branch.html">git-reparent-branch(1)</a> to move it to track a different parent. Note that
this can also be used to move a branch from tracking <code>origin/master</code> to <code>lkgr</code>
or vice versa.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_conclusion">CONCLUSION</h2>
<div class="sectionbody">
<div class="paragraph"><p>Hopefully that gives you a good starting overview on Chromium development using
<em>depot_tools</em>. If you have questions which weren&#8217;t answered by this tutorial or
the man pages for the tools (see the index of all tools here:
<a href="depot_tools.html">depot_tools(7)</a>), please feel free to ask.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_glossary">GLOSSARY</h2>
<div class="sectionbody">
<div class="dlist"><dl>
<dt class="hdlist1">
CL
</dt>
<dd>
<p>
A <em>change-list</em>. This is a diff which you would like to commit to the
codebase.
</p>
</dd>
<dt class="hdlist1">
DEPS
</dt>
<dd>
<p>
A file in the chromium checkout which <code>gclient sync</code> uses to determine what
dependencies to pull in. This file also contains <em>hooks</em>.
</p>
</dd>
<dt class="hdlist1">
LKGR
</dt>
<dd>
<p>
Last Known Good Revision. This is a <a href="git-tag.html">git-tag(1)</a> which tracks the last
version of <code>origin/master</code> which has passed the full set of testing on the
<a href="http://build.chromium.org">main Chromium waterfall</a>.
</p>
</dd>
</dl></div>
</div>
</div>
<div class="sect1">
<h2 id="_chromium_depot_tools">CHROMIUM DEPOT_TOOLS</h2>
<div class="sectionbody">
<div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_tools(7)</a> suite. These tools are meant to
assist with the development of chromium and related projects. Download the tools
from <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">here</a>.</p></div>
</div>
</div>
</div>
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Last updated 2014-04-10 21:30:33 PDT
</div>
</div>
</body>
</html>
......@@ -778,49 +778,47 @@ time you ran git freeze (freshly modified files, new files, etc.).</p></div>
<div class="sect1">
<h2 id="_example">EXAMPLE</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre><code><strong><span class="white">$ git status --short</span></strong>
<span class="green">A</span> added_file
<span class="green">A</span>&#8203;<span class="red">M</span> added_file_with_unstaged_changes
<span class="green">D</span> deleted_file
<span class="red">M</span> modified_file
<span class="red">D</span> unstaged_deleted_file
<span class="red">??</span> unadded_file
<strong><span class="white">$ git freeze</span></strong>
<strong><span class="white">$ git status --short</span></strong>
<strong><span class="white">$ git log -n 2 --stat</span></strong>
<span class="yellow">commit 182eccae8e385acba21c9ff2713e98ff4b7e17cd</span>
Author: Robert Iannucci &lt;iannucci@chromium.org&gt;
Date: Thu Mar 13 17:42:37 2014 -0700
<div class="paragraph"><p></p></div><div class="listingblock"><div class="content"><pre><code><span style="font-weight: bold; color: #ffffff">$ git status --short</span>
<span style="color: #19c518">A</span> added_file
<span style="color: #19c518">A</span><span style="color: #e42e16">M</span> added_file_with_unstaged_changes
<span style="color: #19c518">D</span> deleted_file
<span style="color: #e42e16">M</span> modified_file
<span style="color: #e42e16">D</span> unstaged_deleted_file
<span style="color: #e42e16">??</span> unadded_file
<span style="font-weight: bold; color: #ffffff">$ git freeze</span>
<span style="font-weight: bold; color: #ffffff">$ git status --short</span>
<span style="font-weight: bold; color: #ffffff">$ git log -n 2 --stat</span>
<span style="color: #e7e71c">commit 2903a59a5323dd12438a9b3912a878a546b5d68a</span>
Author: local &lt;local@chromium.org&gt;
Date: Thu Apr 10 08:54:56 2014 +0000
FREEZE.unindexed
added_file_with_unstaged_changes | 3 <span class="green">++</span>&#8203;<span class="red">-</span>
modified_file | 4 <span class="green">+++</span>&#8203;<span class="red">-</span>
unadded_file | 3 <span class="green">+++</span>
unstaged_deleted_file | 1 <span class="red">-</span>
4 files changed, 8 insertions(+), 3 deletions(-)
added_file_with_unstaged_changes | 1 <span style="color: #19c518">+</span>
modified_file | 1 <span style="color: #19c518">+</span>
unadded_file | 0
unstaged_deleted_file | 1 <span style="color: #e42e16">-</span>
4 files changed, 2 insertions(+), 1 deletion(-)
<span class="yellow">commit ce07bdc49a61f54e6142b4bba5cc517cf6802bd4</span>
Author: Robert Iannucci &lt;iannucci@chromium.org&gt;
Date: Thu Mar 13 17:42:37 2014 -0700
<span style="color: #e7e71c">commit 19e09ed3f4a23417cf46ce0961fc7434132d0295</span>
Author: local &lt;local@chromium.org&gt;
Date: Thu Apr 10 08:54:56 2014 +0000
FREEZE.indexed
added_file | 3 <span class="green">+++</span>
added_file_with_unstaged_changes | 1 <span class="green">+</span>
deleted_file | 1 <span class="red">-</span>
3 files changed, 4 insertions(+), 1 deletion(-)
<strong><span class="white">$ git thaw</span></strong>
<strong><span class="white">$ git status --short</span></strong>
<span class="green">A</span> added_file
<span class="green">A</span>&#8203;<span class="red">M</span> added_file_with_unstaged_changes
<span class="green">D</span> deleted_file
<span class="red">M</span> modified_file
<span class="red">D</span> unstaged_deleted_file
<span class="red">??</span> unadded_file</code></pre>
</div></div>
added_file | 1 <span style="color: #19c518">+</span>
added_file_with_unstaged_changes | 1 <span style="color: #19c518">+</span>
deleted_file | 1 <span style="color: #e42e16">-</span>
3 files changed, 2 insertions(+), 1 deletion(-)
<span style="font-weight: bold; color: #ffffff">$ git thaw</span>
<span style="font-weight: bold; color: #ffffff">$ git status --short</span>
<span style="color: #19c518">A</span> added_file
<span style="color: #19c518">A</span><span style="color: #e42e16">M</span> added_file_with_unstaged_changes
<span style="color: #19c518">D</span> deleted_file
<span style="color: #e42e16">M</span> modified_file
<span style="color: #e42e16">D</span> unstaged_deleted_file
<span style="color: #e42e16">??</span> unadded_file
</code></pre></div></div><p><div class="paragraph"></p></div>
</div>
</div>
<div class="sect1">
......@@ -832,7 +830,7 @@ Date: Thu Mar 13 17:42:37 2014 -0700
<div class="sect1">
<h2 id="_chromium_depot_tools">CHROMIUM DEPOT_TOOLS</h2>
<div class="sectionbody">
<div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_tools(1)</a> suite. These tools are meant to
<div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_tools(7)</a> suite. These tools are meant to
assist with the development of chromium and related projects. Download the tools
from <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">here</a>.</p></div>
</div>
......@@ -841,7 +839,7 @@ from <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Last updated 2014-03-25 15:09:11 PDT
Last updated 2014-04-10 14:23:11 PDT
</div>
</div>
</body>
......
......@@ -819,18 +819,15 @@ Branches which have this as their parent are usually misconfigured, and
<div class="paragraph"><p>Given the hypothetical demo repo in <a href="git-map.html">git-map(1)</a>'s EXAMPLE section, and
assuming that the <code>frozen_changes</code> branch was currently checked out, running
<em>git map-branches</em> would result in an output like:</p></div>
<div class="listingblock">
<div class="content">
<pre><code><strong><span class="white">$ git map-branches</span></strong>
<span class="red">origin/master</span>
<span class="green">cool_feature</span>
<span class="green">subfeature</span>
<span class="aqua">frozen_changes *</span>
<span class="green">master</span>
<span class="fuchsia">{NO UPSTREAM}</span>
<span class="green">bogus_noparent</span>
<span class="aqua">duplicate_cool_feature_no_upstream</span></code></pre>
</div></div>
<div class="paragraph"><p></p></div><div class="listingblock"><div class="content"><pre><code><span style="font-weight: bold; color: #ffffff">$ git map-branches</span>
<span style="color: #e42e16"></span><span style="color: #e42e16">origin/master
</span><span style="color: #19c518"></span><span style="color: #19c518"> cool_feature
</span><span style="color: #19c518"></span><span style="color: #19c518"> subfeature
</span><span style="color: #19c518"></span><span style="color: #19c518"> fixit
</span><span style="color: #33d6e5"></span><span style="font-weight: bold; color: #33d6e5"> frozen_branch *
</span><span style="font-weight: bold; color: #d338d3"></span><span style="color: #d338d3">{NO UPSTREAM}
</span><span style="color: #19c518"></span><span style="color: #19c518"> no_upstream</span>
</code></pre></div></div><p><div class="paragraph"></p></div>
</div>
</div>
<div class="sect1">
......@@ -854,7 +851,7 @@ file.</p></div>
<div class="sect1">
<h2 id="_chromium_depot_tools">CHROMIUM DEPOT_TOOLS</h2>
<div class="sectionbody">
<div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_tools(1)</a> suite. These tools are meant to
<div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_tools(7)</a> suite. These tools are meant to
assist with the development of chromium and related projects. Download the tools
from <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">here</a>.</p></div>
</div>
......@@ -863,7 +860,7 @@ from <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Last updated 2014-03-25 15:09:11 PDT
Last updated 2014-04-10 14:23:11 PDT
</div>
</div>
</body>
......
......@@ -833,26 +833,29 @@ configure this, use git <code>config --add depot-tools.map-extra &lt;value&gt;</
<div class="sect1">
<h2 id="_example">EXAMPLE</h2>
<div class="sectionbody">
<div class="paragraph"><p>Running <em>git map</em> would result in an output something like:</p></div>
<div class="listingblock">
<div class="content">
<pre><code><strong><span class="white">$ git map</span></strong>
<span class="white blue-background">*</span>&#8203;<strong><span class="blue-background red"> 7dcfe47 </span></strong> <span class="green">(</span>&#8203;<strong><span class="aqua">frozen_changes</span></strong>&#8203;<span class="green">)</span> <span class="yellow">2014-03-12</span> ~ FREEZE.unindexed
* <strong><span class="red">4b0c180</span></strong> <span class="yellow">2014-03-12</span> ~ modfile
* <strong><span class="red">59a7cca</span></strong> <span class="yellow">2014-03-12</span> ~ a deleted file
* <strong><span class="red">6bec695</span></strong> <span class="green">(</span>&#8203;<span class="red">origin/master</span>&#8203;<span class="green">)</span> <span class="yellow">2014-03-11</span> ~ Add neat feature <strong><span class="white">&lt;(frozen_changes)</span></strong>
* <strong><span class="red">d15a38a</span></strong> <span class="yellow">2014-03-11</span> ~ Epic README update
* <strong><span class="red">d559894</span></strong> <span class="green">(</span>&#8203;<strong><span class="lime">master</span></strong>&#8203;<span class="green">)</span> <span class="yellow">2014-03-11</span> ~ Important upstream change
<span class="red">|</span> * <strong><span class="red">9c311fd</span></strong> <span class="green">(</span>&#8203;<strong><span class="lime">cool_feature</span></strong>&#8203;<span class="green">)</span> <span class="yellow">2014-03-11</span> ~ Respond to CL comments
<span class="red">|</span> <span class="green">|</span> * <strong><span class="red">2a1eeb2</span></strong> <span class="green">(</span>&#8203;<strong><span class="lime">subfeature</span></strong>&#8203;<span class="green">)</span> <span class="yellow">2014-03-11</span> ~ integrate with CoolService
<span class="red">|</span> <span class="green">|</span> * <strong><span class="red">d777af6</span></strong> <span class="yellow">2014-03-11</span> ~ slick commenting action
<span class="red">|</span> <span class="green">|/</span>
<span class="red">|</span> * <strong><span class="red">265803a</span></strong> <span class="yellow">2014-03-11</span> ~ another improvement <strong><span class="white">&lt;(subfeature)</span></strong>
<span class="red">|</span> * <strong><span class="red">6d831ac</span></strong> <span class="green">(</span>&#8203;<strong><span class="fuchsia">spleen_tag</span></strong>&#8203;<span class="green">)</span> <span class="yellow">2014-03-11</span> ~ Refactor spleen
<span class="red">|</span> * <strong><span class="red">82e74ab</span></strong> <span class="yellow">2014-03-11</span> ~ Add widget
<span class="red">|/</span>
* <strong><span class="red">d08c5b3</span></strong> <span class="green">(</span>&#8203;<strong><span class="lime">bogus_noparent</span></strong>&#8203;<span class="green">)</span> <span class="yellow">2014-03-11</span> ~ Wonderful beginnings <strong><span class="white">&lt;(cool_feature)</span></strong></code></pre>
</div></div>
<div class="paragraph"><p>Running <em>git map</em> would result in an output something like:
</p></div><div class="listingblock"><div class="content"><pre><code><span style="font-weight: bold; color: #ffffff">$ git map</span>
<span style="background-color: #492ee1"></span><span style="font-weight: bold; background-color: #492ee1">* </span><span style="font-weight: bold; color: #e42e16; background-color: #492ee1">a8f0220 </span><span style="color: #19c518"> (</span><span style="color: #33d6e5"></span><span style="font-weight: bold; color: #33d6e5">frozen_branch</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ FREEZE.unindexed
* <span style="font-weight: bold; color: #e42e16">c382556 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ modfile
* <span style="font-weight: bold; color: #e42e16">06e399f </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ a deleted file
* <span style="font-weight: bold; color: #e42e16">20494d2 </span><span style="color: #19c518"> (</span><span style="color: #19c518"></span><span style="font-weight: bold; color: #19c518">fixit</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ Add neat feature<span style="font-weight: bold"></span><span style="font-weight: bold; color: #ffffff"> &lt;(frozen_branch)</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span>
* <span style="font-weight: bold; color: #e42e16">f734bbf </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Epic README update
<span style="color: #e42e16">|</span> * <span style="font-weight: bold; color: #e42e16">983a7b8 </span><span style="color: #19c518"> (</span><span style="color: #19c518"></span><span style="font-weight: bold; color: #19c518">cool_feature</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ Respond to CL comments
<span style="color: #e42e16">|</span> <span style="color: #19c518">|</span> * <span style="font-weight: bold; color: #e42e16">2f53c1f </span><span style="color: #19c518"> (</span><span style="color: #19c518"></span><span style="font-weight: bold; color: #19c518">subfeature</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ integrate with CoolService
<span style="color: #e42e16">|</span> <span style="color: #19c518">|</span> * <span style="font-weight: bold; color: #e42e16">b4e5087 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ slick commenting action
<span style="color: #e42e16">|</span> <span style="color: #19c518">|</span><span style="color: #19c518">/</span>
<span style="color: #e42e16">|</span> * <span style="font-weight: bold; color: #e42e16">ac10591 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ another improvement<span style="font-weight: bold"></span><span style="font-weight: bold; color: #ffffff"> &lt;(subfeature)</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span>
<span style="color: #e42e16">|</span> * <span style="font-weight: bold; color: #e42e16">088691d </span><span style="color: #19c518"> (</span><span style="color: #d338d3"></span><span style="font-weight: bold; color: #d338d3">spleen_tag</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ Refactor spleen
<span style="color: #e42e16">|</span> * <span style="font-weight: bold; color: #e42e16">206ceb2 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Add widget
<span style="color: #e42e16">|</span><span style="color: #e42e16">/</span>
* <span style="font-weight: bold; color: #e42e16">619ccc9 </span><span style="color: #19c518"> (</span><span style="color: #e42e16">origin/master</span><span style="color: #19c518">, </span><span style="color: #e42e16">origin/HEAD</span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ Make ReflectorImpl use mailboxes<span style="font-weight: bold"></span><span style="font-weight: bold; color: #ffffff"> &lt;(cool_feature, fixit)</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span>
* <span style="font-weight: bold; color: #e42e16">40b838e </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ don't use glibc-specific execinfo.h on uclibc builds
* <span style="font-weight: bold; color: #e42e16">65db351 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ [fsp] Add requestUnmount() method together with the request manager.
* <span style="font-weight: bold; color: #e42e16">c1923e0 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ linux_aura: Use system configuration for middle clicking the titlebar.
* <span style="font-weight: bold; color: #e42e16">ccaca03 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ ContentView-&gt;ContentViewCore in ContentViewRenderView
* <span style="font-weight: bold; color: #e42e16">9b1c1ab </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ ozone: evdev: Filter devices by path
* <span style="font-weight: bold; color: #e42e16">a91bbf9 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Always output seccomp error messages to stderr
</code></pre></div></div><p><div class="paragraph"></p></div>
<div class="paragraph"><p>As you can see, the structure of the commit history is visible, particularly
what the parents of each commit are. In order to see the <em>upstream</em>
relationships of the branches (i.e. which branch is tracking which other
......@@ -868,7 +871,7 @@ branch), use the <a href="git-map-branches.html">git-map-branches(1)</a> command
<div class="sect1">
<h2 id="_chromium_depot_tools">CHROMIUM DEPOT_TOOLS</h2>
<div class="sectionbody">
<div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_tools(1)</a> suite. These tools are meant to
<div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_tools(7)</a> suite. These tools are meant to
assist with the development of chromium and related projects. Download the tools
from <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">here</a>.</p></div>
</div>
......@@ -877,7 +880,7 @@ from <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Last updated 2014-03-25 15:09:11 PDT
Last updated 2014-04-10 14:23:11 PDT
</div>
</div>
</body>
......
......@@ -810,7 +810,7 @@ configuration variable for more info on what the merge base markers are for.</p>
<div class="sect1">
<h2 id="_chromium_depot_tools">CHROMIUM DEPOT_TOOLS</h2>
<div class="sectionbody">
<div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_tools(1)</a> suite. These tools are meant to
<div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_tools(7)</a> suite. These tools are meant to
assist with the development of chromium and related projects. Download the tools
from <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">here</a>.</p></div>
</div>
......@@ -819,7 +819,7 @@ from <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Last updated 2014-03-25 15:09:11 PDT
Last updated 2014-04-10 14:23:11 PDT
</div>
</div>
</body>
......
......@@ -772,32 +772,39 @@ command will prompt you with a selection of the branches.</p></div>
<div class="sect1">
<h2 id="_example">EXAMPLE</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre><code><strong><span class="white">$ git map-branches</span></strong>
<strong><span class="red">origin/master *&#8203;</span></strong>
<span class="green">cool_feature</span>
<span class="green">subfeature</span>
<span class="green">frozen_changes</span>
<span class="green">master</span>
<span class="fuchsia">{NO UPSTREAM}</span>
<span class="green">bogus_noparent</span>
<strong><span class="white">$ git nav-downstream</span></strong>
<div class="paragraph"><p></p></div><div class="listingblock"><div class="content"><pre><code><span style="font-weight: bold; color: #ffffff">$ git map-branches</span>
<span style="color: #e42e16"></span><span style="font-weight: bold; color: #e42e16">origin/master *
</span><span style="font-weight: bold; color: #19c518"></span><span style="color: #19c518"> cool_feature
</span><span style="color: #19c518"></span><span style="color: #19c518"> subfeature
</span><span style="color: #19c518"></span><span style="color: #19c518"> fixit
</span><span style="color: #19c518"></span><span style="color: #19c518"> frozen_branch
</span><span style="font-weight: bold; color: #ffffff">$ git nav-downstream</span>
Please select a downstream branch
0. cool_feature
1. frozen_changes
2. master
Selection (0-2)[0]: 0
<strong><span class="white">$ git map-branches</span></strong>
<span class="red">origin/master</span>
<strong><span class="aqua">cool_feature *&#8203;</span></strong>
<span class="green">subfeature</span>
<span class="green">frozen_changes</span>
<span class="green">master</span>
<span class="fuchsia">{NO UPSTREAM}</span>
<span class="green">bogus_noparent</span></code></pre>
</div></div>
1. fixit
Selection (0-1)[0]: 0
Previous HEAD position was 619ccc9... Make ReflectorImpl use mailboxes
Switched to branch 'cool_feature'
Your branch is ahead of 'origin/master' by 4 commits.
(use "git push" to publish your local commits)
<span style="font-weight: bold; color: #ffffff">$ git map-branches</span>
<span style="color: #e42e16"></span><span style="color: #e42e16">origin/master
</span><span style="color: #33d6e5"></span><span style="font-weight: bold; color: #33d6e5"> cool_feature *
</span><span style="font-weight: bold; color: #19c518"></span><span style="color: #19c518"> subfeature
</span><span style="color: #19c518"></span><span style="color: #19c518"> fixit
</span><span style="color: #19c518"></span><span style="color: #19c518"> frozen_branch
</span><span style="font-weight: bold; color: #ffffff">$ git nav-downstream</span>
Switched to branch 'subfeature'
Your branch and 'cool_feature' have diverged,
and have 2 and 1 different commit each, respectively.
(use "git pull" to merge the remote branch into yours)
<span style="font-weight: bold; color: #ffffff">$ git map-branches</span>
<span style="color: #e42e16"></span><span style="color: #e42e16">origin/master
</span><span style="color: #19c518"></span><span style="color: #19c518"> cool_feature
</span><span style="color: #33d6e5"></span><span style="font-weight: bold; color: #33d6e5"> subfeature *
</span><span style="font-weight: bold; color: #19c518"></span><span style="color: #19c518"> fixit
</span><span style="color: #19c518"></span><span style="color: #19c518"> frozen_branch</span>
</code></pre></div></div><p><div class="paragraph"></p></div>
</div>
</div>
<div class="sect1">
......@@ -821,7 +828,7 @@ file.</p></div>
<div class="sect1">
<h2 id="_chromium_depot_tools">CHROMIUM DEPOT_TOOLS</h2>
<div class="sectionbody">
<div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_tools(1)</a> suite. These tools are meant to
<div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_tools(7)</a> suite. These tools are meant to
assist with the development of chromium and related projects. Download the tools
from <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">here</a>.</p></div>
</div>
......@@ -830,7 +837,7 @@ from <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Last updated 2014-03-25 15:09:11 PDT
Last updated 2014-04-10 14:56:15 PDT
</div>
</div>
</body>
......
......@@ -770,26 +770,44 @@ checks that out.</p></div>
<div class="sect1">
<h2 id="_example">EXAMPLE</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre><code><strong><span class="white">$ git map-branches</span></strong>
<span class="red">origin/master</span>
<span class="green">cool_feature</span>
<strong><span class="aqua">subfeature *&#8203;</span></strong>
<span class="green">frozen_changes</span>
<span class="green">master</span>
<span class="fuchsia">{NO UPSTREAM}</span>
<span class="green">bogus_noparent</span>
<strong><span class="white">$ git nav-upstream</span></strong>
<strong><span class="white">$ git map-branches</span></strong>
<span class="red">origin/master</span>
<strong><span class="aqua">cool_feature *&#8203;</span></strong>
<span class="green">subfeature</span>
<span class="green">frozen_changes</span>
<span class="green">master</span>
<span class="fuchsia">{NO UPSTREAM}</span>
<span class="green">bogus_noparent</span></code></pre>
</div></div>
<div class="paragraph"><p></p></div><div class="listingblock"><div class="content"><pre><code><span style="font-weight: bold; color: #ffffff">$ git map-branches</span>
<span style="color: #e42e16"></span><span style="color: #e42e16">origin/master
</span><span style="color: #19c518"></span><span style="color: #19c518"> cool_feature
</span><span style="color: #33d6e5"></span><span style="font-weight: bold; color: #33d6e5"> subfeature *
</span><span style="font-weight: bold; color: #19c518"></span><span style="color: #19c518"> fixit
</span><span style="color: #19c518"></span><span style="color: #19c518"> frozen_branch
</span><span style="font-weight: bold; color: #ffffff">$ git nav-upstream</span>
Switched to branch 'cool_feature'
Your branch is ahead of 'origin/master' by 4 commits.
(use "git push" to publish your local commits)
<span style="font-weight: bold; color: #ffffff">$ git map-branches</span>
<span style="color: #e42e16"></span><span style="color: #e42e16">origin/master
</span><span style="color: #33d6e5"></span><span style="font-weight: bold; color: #33d6e5"> cool_feature *
</span><span style="font-weight: bold; color: #19c518"></span><span style="color: #19c518"> subfeature
</span><span style="color: #19c518"></span><span style="color: #19c518"> fixit
</span><span style="color: #19c518"></span><span style="color: #19c518"> frozen_branch
</span><span style="font-weight: bold; color: #ffffff">$ git nav-upstream</span>
Note: checking out 'origin/master'.
You are in 'detached HEAD' state. You can look around, make experimental</span> <b>&lt;1&gt;</b><span>
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b new_branch_name
HEAD is now at 619ccc9... Make ReflectorImpl use mailboxes
<span style="font-weight: bold; color: #ffffff">$ git map-branches</span>
<span style="color: #e42e16"></span><span style="font-weight: bold; color: #e42e16">origin/master *
</span><span style="font-weight: bold; color: #19c518"></span><span style="color: #19c518"> cool_feature
</span><span style="color: #19c518"></span><span style="color: #19c518"> subfeature
</span><span style="color: #19c518"></span><span style="color: #19c518"> fixit
</span><span style="color: #19c518"></span><span style="color: #19c518"> frozen_branch</span>
</code></pre></div></div><p><div class="paragraph">
1. Note that being in a <em>detached HEAD</em> state is OK. You&#8217;ll just want to create
a <a href="git-new-branch.html">git-new-branch(1)</a> from here.</p></div>
</div>
</div>
<div class="sect1">
......@@ -813,7 +831,7 @@ file.</p></div>
<div class="sect1">
<h2 id="_chromium_depot_tools">CHROMIUM DEPOT_TOOLS</h2>
<div class="sectionbody">
<div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_tools(1)</a> suite. These tools are meant to
<div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_tools(7)</a> suite. These tools are meant to
assist with the development of chromium and related projects. Download the tools
from <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">here</a>.</p></div>
</div>
......@@ -822,7 +840,7 @@ from <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Last updated 2014-03-25 15:09:11 PDT
Last updated 2014-04-10 14:57:27 PDT
</div>
</div>
</body>
......
......@@ -830,44 +830,48 @@ defaults to <em>origin/master</em>. This is considered to be the <em>root</em>
<div class="sect1">
<h2 id="_example">EXAMPLE</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre><code><strong><span class="white">$ git map-branches</span></strong>
<span class="red">origin/master</span>
<span class="green">cool_feature</span>
<span class="green">subfeature</span>
<span class="aqua">frozen_changes *</span>
<strong><span class="white">$ git new-branch independent_cl</span></strong>
<strong><span class="white">$ git map-branches</span></strong>
<span class="red">origin/master</span>
<span class="green">cool_feature</span>
<span class="green">subfeature</span>
<span class="green">frozen_changes</span>
<span class="aqua">independent_cl *</span>
<strong><span class="white">$ git new-branch --upstream subfeature nested_cl</span></strong>
<strong><span class="white">$ git map-branches</span></strong>
<span class="red">origin/master</span>
<span class="green">cool_feature</span>
<span class="aqua">subfeature</span> <b>&lt;1&gt;</b>
<span class="aqua">nested_cl *</span>
<span class="green">frozen_changes</span>
<span class="green">independent_cl</span>
<strong><span class="white">$ git checkout cool_feature</span></strong>
<strong><span class="white">$ git new-branch --upstream_current cl_depends_on_cool_feature</span></strong>
<strong><span class="white">$ git map-branches</span></strong>
<span class="red">origin/master</span>
<span class="aqua">cool_feature</span>
<span class="aqua">cl_depends_on_cool_feature *</span>
<span class="green">subfeature</span>
<span class="green">nested_cl</span>
<span class="green">frozen_changes</span>
<span class="green">independent_cl</span></code></pre>
</div></div>
<div class="colist arabic"><ol>
<div class="paragraph"><p></p></div><div class="listingblock"><div class="content"><pre><code><span style="font-weight: bold; color: #ffffff">$ git map-branches</span>
<span style="color: #e42e16"></span><span style="color: #e42e16">origin/master
</span><span style="color: #19c518"></span><span style="color: #19c518"> cool_feature
</span><span style="color: #19c518"></span><span style="color: #19c518"> subfeature
</span><span style="color: #19c518"></span><span style="color: #19c518"> fixit
</span><span style="color: #33d6e5"></span><span style="font-weight: bold; color: #33d6e5"> frozen_branch *
</span><span style="font-weight: bold; color: #ffffff">$ git new-branch independent_cl</span>
<span style="font-weight: bold; color: #ffffff">$ git map-branches</span>
<span style="color: #e42e16"></span><span style="font-weight: bold; color: #e42e16">origin/master
</span><span style="font-weight: bold; color: #19c518"></span><span style="color: #19c518"> cool_feature
</span><span style="color: #19c518"></span><span style="color: #19c518"> subfeature
</span><span style="color: #19c518"></span><span style="color: #19c518"> fixit
</span><span style="color: #19c518"></span><span style="color: #19c518"> frozen_branch
</span><span style="color: #33d6e5"></span><span style="font-weight: bold; color: #33d6e5"> independent_cl *
</span><span style="font-weight: bold; color: #ffffff">$ git new-branch --upstream subfeature nested_cl</span>
<span style="font-weight: bold; color: #ffffff">$ git map-branches</span>
<span style="color: #e42e16"></span><span style="color: #e42e16">origin/master
</span><span style="color: #19c518"></span><span style="color: #19c518"> cool_feature
</span><span style="color: #33d6e5"></span><span style="font-weight: bold; color: #33d6e5"> subfeature</span> <b>&lt;1&gt;</b><span>
</span><span style="font-weight: bold; color: #33d6e5"></span><span style="font-weight: bold; color: #33d6e5"> nested_cl *
</span><span style="font-weight: bold; color: #19c518"></span><span style="color: #19c518"> fixit
</span><span style="color: #19c518"></span><span style="color: #19c518"> frozen_branch
</span><span style="color: #19c518"></span><span style="color: #19c518"> independent_cl
</span><span style="font-weight: bold; color: #ffffff">$ git checkout cool_feature</span>
Your branch is ahead of 'origin/master' by 4 commits.
(use "git push" to publish your local commits)
<span style="font-weight: bold; color: #ffffff">$ git new-branch --upstream_current cl_depends_on_cool_feature</span>
<span style="font-weight: bold; color: #ffffff">$ git map-branches</span>
<span style="color: #e42e16"></span><span style="color: #e42e16">origin/master
</span><span style="color: #33d6e5"></span><span style="font-weight: bold; color: #33d6e5"> cool_feature
</span><span style="font-weight: bold; color: #33d6e5"></span><span style="font-weight: bold; color: #33d6e5"> cl_depends_on_cool_feature *
</span><span style="font-weight: bold; color: #19c518"></span><span style="color: #19c518"> subfeature
</span><span style="color: #19c518"></span><span style="color: #19c518"> nested_cl
</span><span style="color: #19c518"></span><span style="color: #19c518"> fixit
</span><span style="color: #19c518"></span><span style="color: #19c518"> frozen_branch
</span><span style="color: #19c518"></span><span style="color: #19c518"> independent_cl</span>
</code></pre></div></div><p><div class="paragraph"></p></div>
<div class="olist arabic"><ol class="arabic">
<li>
<p>
Note that both branches are cyan because they are currently the same
<em>commit</em> object. See <a href=":git-map-branches.html">:git-map-branches(1)</a> for more detail.
<em>commit</em> object. See <a href="git-map-branches.html">git-map-branches(1)</a> for more detail.
</p>
</li>
</ol></div>
......@@ -903,7 +907,7 @@ mnemonic: tb &#8594; "track branch"
<div class="sect1">
<h2 id="_chromium_depot_tools">CHROMIUM DEPOT_TOOLS</h2>
<div class="sectionbody">
<div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_tools(1)</a> suite. These tools are meant to
<div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_tools(7)</a> suite. These tools are meant to
assist with the development of chromium and related projects. Download the tools
from <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">here</a>.</p></div>
</div>
......@@ -912,7 +916,7 @@ from <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Last updated 2014-03-25 15:09:11 PDT
Last updated 2014-04-10 14:23:11 PDT
</div>
</div>
</body>
......
......@@ -921,7 +921,7 @@ file.</p></div>
<div class="sect1">
<h2 id="_chromium_depot_tools">CHROMIUM DEPOT_TOOLS</h2>
<div class="sectionbody">
<div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_tools(1)</a> suite. These tools are meant to
<div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_tools(7)</a> suite. These tools are meant to
assist with the development of chromium and related projects. Download the tools
from <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">here</a>.</p></div>
</div>
......@@ -930,7 +930,7 @@ from <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Last updated 2014-03-25 15:09:11 PDT
Last updated 2014-04-10 14:23:11 PDT
</div>
</div>
</body>
......
......@@ -778,7 +778,7 @@ tracking information to preserve inter-branch dependencies.</p></div>
<div class="sect1">
<h2 id="_chromium_depot_tools">CHROMIUM DEPOT_TOOLS</h2>
<div class="sectionbody">
<div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_tools(1)</a> suite. These tools are meant to
<div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_tools(7)</a> suite. These tools are meant to
assist with the development of chromium and related projects. Download the tools
from <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">here</a>.</p></div>
</div>
......@@ -787,7 +787,7 @@ from <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Last updated 2014-03-25 15:09:11 PDT
Last updated 2014-04-10 14:23:11 PDT
</div>
</div>
</body>
......
......@@ -831,7 +831,7 @@ file.</p></div>
<div class="sect1">
<h2 id="_chromium_depot_tools">CHROMIUM DEPOT_TOOLS</h2>
<div class="sectionbody">
<div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_tools(1)</a> suite. These tools are meant to
<div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_tools(7)</a> suite. These tools are meant to
assist with the development of chromium and related projects. Download the tools
from <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">here</a>.</p></div>
</div>
......@@ -840,7 +840,7 @@ from <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Last updated 2014-03-25 15:09:11 PDT
Last updated 2014-04-10 14:23:11 PDT
</div>
</div>
</body>
......
......@@ -800,40 +800,48 @@ verify that the conflict diff is what you expected (and then skip it with
<div class="sect1">
<h2 id="_example">EXAMPLE</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre><code><strong><span class="white">$ git map</span></strong>
<span class="white blue-background">*</span>&#8203;<strong><span class="blue-background red"> 7dcfe47 </span></strong> <span class="green">(</span>&#8203;<strong><span class="aqua">frozen_changes</span></strong>&#8203;<span class="green">)</span> <span class="yellow">2014-03-12</span> ~ FREEZE.unindexed
* <strong><span class="red">4b0c180</span></strong> <span class="yellow">2014-03-12</span> ~ modfile
* <strong><span class="red">59a7cca</span></strong> <span class="yellow">2014-03-12</span> ~ a deleted file
* <strong><span class="red">6bec695</span></strong> <span class="green">(</span>&#8203;<span class="red">origin/master</span>&#8203;<span class="green">)</span> <span class="yellow">2014-03-11</span> ~ Add neat feature <strong><span class="white">&lt;(frozen_changes)</span></strong>
* <strong><span class="red">d15a38a</span></strong> <span class="yellow">2014-03-11</span> ~ Epic README update
* <strong><span class="red">d559894</span></strong> <span class="green">(</span>&#8203;<strong><span class="lime">master</span></strong>&#8203;<span class="green">)</span> <span class="yellow">2014-03-11</span> ~ Important upstream change
<span class="red">|</span> * <strong><span class="red">9c311fd</span></strong> <span class="green">(</span>&#8203;<strong><span class="lime">cool_feature</span></strong>&#8203;<span class="green">)</span> <span class="yellow">2014-03-11</span> ~ Respond to CL comments
<span class="red">|</span> <span class="green">|</span> * <strong><span class="red">2a1eeb2</span></strong> <span class="green">(</span>&#8203;<strong><span class="lime">subfeature</span></strong>&#8203;<span class="green">)</span> <span class="yellow">2014-03-11</span> ~ integrate with CoolService
<span class="red">|</span> <span class="green">|</span> * <strong><span class="red">d777af6</span></strong> <span class="yellow">2014-03-11</span> ~ slick commenting action
<span class="red">|</span> <span class="green">|/</span>
<span class="red">|</span> * <strong><span class="red">265803a</span></strong> <span class="yellow">2014-03-11</span> ~ another improvement <strong><span class="white">&lt;(subfeature)</span></strong>
<span class="red">|</span> * <strong><span class="red">6d831ac</span></strong> <span class="green">(</span>&#8203;<strong><span class="fuchsia">spleen_tag</span></strong>&#8203;<span class="green">)</span> <span class="yellow">2014-03-11</span> ~ Refactor spleen
<span class="red">|</span> * <strong><span class="red">82e74ab</span></strong> <span class="yellow">2014-03-11</span> ~ Add widget
<span class="red">|/</span>
* <strong><span class="red">d08c5b3</span></strong> <span class="green">(</span>&#8203;<strong><span class="lime">bogus_noparent</span></strong>&#8203;<span class="green">)</span> <span class="yellow">2014-03-11</span> ~ Wonderful beginnings <strong><span class="white">&lt;(cool_feature)</span></strong>
<strong><span class="white">$ git squash-branch "cool squash demo"</span></strong>
<strong><span class="white">$ git map</span></strong>
<span class="white blue-background">*</span>&#8203;<strong><span class="blue-background red"> 2c81508 </span></strong> <span class="green">(</span>&#8203;<strong><span class="aqua">frozen_changes</span></strong>&#8203;<span class="green">)</span> <span class="yellow">2014-03-22</span> ~ cool squash demo
* <strong><span class="red">6bec695</span></strong> <span class="green">(</span>&#8203;<span class="red">origin/master</span>&#8203;<span class="green">)</span> <span class="yellow">2014-03-11</span> ~ Add neat feature <strong><span class="white">&lt;(frozen_changes)</span></strong>
* <strong><span class="red">d15a38a</span></strong> <span class="yellow">2014-03-11</span> ~ Epic README update
* <strong><span class="red">d559894</span></strong> <span class="green">(</span>&#8203;<strong><span class="lime">master</span></strong>&#8203;<span class="green">)</span> <span class="yellow">2014-03-11</span> ~ Important upstream change
<span class="red">|</span> * <strong><span class="red">9c311fd</span></strong> <span class="green">(</span>&#8203;<strong><span class="lime">cool_feature</span></strong>&#8203;<span class="green">)</span> <span class="yellow">2014-03-11</span> ~ Respond to CL comments
<span class="red">|</span> <span class="green">|</span> * <strong><span class="red">2a1eeb2</span></strong> <span class="green">(</span>&#8203;<strong><span class="lime">subfeature</span></strong>&#8203;<span class="green">)</span> <span class="yellow">2014-03-11</span> ~ integrate with CoolService
<span class="red">|</span> <span class="green">|</span> * <strong><span class="red">d777af6</span></strong> <span class="yellow">2014-03-11</span> ~ slick commenting action
<span class="red">|</span> <span class="green">|/</span>
<span class="red">|</span> * <strong><span class="red">265803a</span></strong> <span class="yellow">2014-03-11</span> ~ another improvement <strong><span class="white">&lt;(subfeature)</span></strong>
<span class="red">|</span> * <strong><span class="red">6d831ac</span></strong> <span class="green">(</span>&#8203;<strong><span class="fuchsia">spleen_tag</span></strong>&#8203;<span class="green">)</span> <span class="yellow">2014-03-11</span> ~ Refactor spleen
<span class="red">|</span> * <strong><span class="red">82e74ab</span></strong> <span class="yellow">2014-03-11</span> ~ Add widget
<span class="red">|/</span>
* <strong><span class="red">d08c5b3</span></strong> <span class="green">(</span>&#8203;<strong><span class="lime">bogus_noparent</span></strong>&#8203;<span class="green">)</span> <span class="yellow">2014-03-11</span> ~ Wonderful beginnings <strong><span class="white">&lt;(cool_feature)</span></strong></code></pre>
</div></div>
<div class="paragraph"><p></p></div><div class="listingblock"><div class="content"><pre><code><span style="font-weight: bold; color: #ffffff">$ git map</span>
<span style="background-color: #492ee1"></span><span style="font-weight: bold; background-color: #492ee1">* </span><span style="font-weight: bold; color: #e42e16; background-color: #492ee1">a8f0220 </span><span style="color: #19c518"> (</span><span style="color: #33d6e5"></span><span style="font-weight: bold; color: #33d6e5">frozen_branch</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ FREEZE.unindexed
* <span style="font-weight: bold; color: #e42e16">c382556 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ modfile
* <span style="font-weight: bold; color: #e42e16">06e399f </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ a deleted file
* <span style="font-weight: bold; color: #e42e16">20494d2 </span><span style="color: #19c518"> (</span><span style="color: #19c518"></span><span style="font-weight: bold; color: #19c518">fixit</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ Add neat feature<span style="font-weight: bold"></span><span style="font-weight: bold; color: #ffffff"> &lt;(frozen_branch)</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span>
* <span style="font-weight: bold; color: #e42e16">f734bbf </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Epic README update
<span style="color: #e42e16">|</span> * <span style="font-weight: bold; color: #e42e16">983a7b8 </span><span style="color: #19c518"> (</span><span style="color: #19c518"></span><span style="font-weight: bold; color: #19c518">cool_feature</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ Respond to CL comments
<span style="color: #e42e16">|</span> <span style="color: #19c518">|</span> * <span style="font-weight: bold; color: #e42e16">2f53c1f </span><span style="color: #19c518"> (</span><span style="color: #19c518"></span><span style="font-weight: bold; color: #19c518">subfeature</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ integrate with CoolService
<span style="color: #e42e16">|</span> <span style="color: #19c518">|</span> * <span style="font-weight: bold; color: #e42e16">b4e5087 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ slick commenting action
<span style="color: #e42e16">|</span> <span style="color: #19c518">|</span><span style="color: #19c518">/</span>
<span style="color: #e42e16">|</span> * <span style="font-weight: bold; color: #e42e16">ac10591 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ another improvement<span style="font-weight: bold"></span><span style="font-weight: bold; color: #ffffff"> &lt;(subfeature)</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span>
<span style="color: #e42e16">|</span> * <span style="font-weight: bold; color: #e42e16">088691d </span><span style="color: #19c518"> (</span><span style="color: #d338d3"></span><span style="font-weight: bold; color: #d338d3">spleen_tag</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ Refactor spleen
<span style="color: #e42e16">|</span> * <span style="font-weight: bold; color: #e42e16">206ceb2 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Add widget
<span style="color: #e42e16">|</span><span style="color: #e42e16">/</span>
* <span style="font-weight: bold; color: #e42e16">619ccc9 </span><span style="color: #19c518"> (</span><span style="color: #e42e16">origin/master</span><span style="color: #19c518">, </span><span style="color: #e42e16">origin/HEAD</span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ Make ReflectorImpl use mailboxes<span style="font-weight: bold"></span><span style="font-weight: bold; color: #ffffff"> &lt;(cool_feature, fixit)</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span>
* <span style="font-weight: bold; color: #e42e16">40b838e </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ don't use glibc-specific execinfo.h on uclibc builds
* <span style="font-weight: bold; color: #e42e16">65db351 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ [fsp] Add requestUnmount() method together with the request manager.
* <span style="font-weight: bold; color: #e42e16">c1923e0 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ linux_aura: Use system configuration for middle clicking the titlebar.
* <span style="font-weight: bold; color: #e42e16">ccaca03 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ ContentView-&gt;ContentViewCore in ContentViewRenderView
* <span style="font-weight: bold; color: #e42e16">9b1c1ab </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ ozone: evdev: Filter devices by path
* <span style="font-weight: bold; color: #e42e16">a91bbf9 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Always output seccomp error messages to stderr
<span style="font-weight: bold; color: #ffffff">$ git squash-branch -m 'cool squash demo'</span>
<span style="font-weight: bold; color: #ffffff">$ git map</span>
<span style="background-color: #492ee1"></span><span style="font-weight: bold; background-color: #492ee1">* </span><span style="font-weight: bold; color: #e42e16; background-color: #492ee1">5b451bd </span><span style="color: #19c518"> (</span><span style="color: #33d6e5"></span><span style="font-weight: bold; color: #33d6e5">frozen_branch</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ cool squash demo
* <span style="font-weight: bold; color: #e42e16">20494d2 </span><span style="color: #19c518"> (</span><span style="color: #19c518"></span><span style="font-weight: bold; color: #19c518">fixit</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ Add neat feature<span style="font-weight: bold"></span><span style="font-weight: bold; color: #ffffff"> &lt;(frozen_branch)</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span>
* <span style="font-weight: bold; color: #e42e16">f734bbf </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Epic README update
<span style="color: #e42e16">|</span> * <span style="font-weight: bold; color: #e42e16">983a7b8 </span><span style="color: #19c518"> (</span><span style="color: #19c518"></span><span style="font-weight: bold; color: #19c518">cool_feature</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ Respond to CL comments
<span style="color: #e42e16">|</span> <span style="color: #19c518">|</span> * <span style="font-weight: bold; color: #e42e16">2f53c1f </span><span style="color: #19c518"> (</span><span style="color: #19c518"></span><span style="font-weight: bold; color: #19c518">subfeature</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ integrate with CoolService
<span style="color: #e42e16">|</span> <span style="color: #19c518">|</span> * <span style="font-weight: bold; color: #e42e16">b4e5087 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ slick commenting action
<span style="color: #e42e16">|</span> <span style="color: #19c518">|</span><span style="color: #19c518">/</span>
<span style="color: #e42e16">|</span> * <span style="font-weight: bold; color: #e42e16">ac10591 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ another improvement<span style="font-weight: bold"></span><span style="font-weight: bold; color: #ffffff"> &lt;(subfeature)</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span>
<span style="color: #e42e16">|</span> * <span style="font-weight: bold; color: #e42e16">088691d </span><span style="color: #19c518"> (</span><span style="color: #d338d3"></span><span style="font-weight: bold; color: #d338d3">spleen_tag</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ Refactor spleen
<span style="color: #e42e16">|</span> * <span style="font-weight: bold; color: #e42e16">206ceb2 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Add widget
<span style="color: #e42e16">|</span><span style="color: #e42e16">/</span>
* <span style="font-weight: bold; color: #e42e16">619ccc9 </span><span style="color: #19c518"> (</span><span style="color: #e42e16">origin/master</span><span style="color: #19c518">, </span><span style="color: #e42e16">origin/HEAD</span><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ Make ReflectorImpl use mailboxes<span style="font-weight: bold"></span><span style="font-weight: bold; color: #ffffff"> &lt;(cool_feature, fixit)</span><span style="font-weight: bold"></span><span style="font-weight: bold"></span>
* <span style="font-weight: bold; color: #e42e16">40b838e </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ don't use glibc-specific execinfo.h on uclibc builds
* <span style="font-weight: bold; color: #e42e16">65db351 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ [fsp] Add requestUnmount() method together with the request manager.
* <span style="font-weight: bold; color: #e42e16">c1923e0 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ linux_aura: Use system configuration for middle clicking the titlebar.
* <span style="font-weight: bold; color: #e42e16">ccaca03 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ ContentView-&gt;ContentViewCore in ContentViewRenderView
* <span style="font-weight: bold; color: #e42e16">9b1c1ab </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ ozone: evdev: Filter devices by path
* <span style="font-weight: bold; color: #e42e16">a91bbf9 </span><span style="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Always output seccomp error messages to stderr
</code></pre></div></div><p><div class="paragraph"></p></div>
</div>
</div>
<div class="sect1">
......@@ -857,7 +865,7 @@ file.</p></div>
<div class="sect1">
<h2 id="_chromium_depot_tools">CHROMIUM DEPOT_TOOLS</h2>
<div class="sectionbody">
<div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_tools(1)</a> suite. These tools are meant to
<div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_tools(7)</a> suite. These tools are meant to
assist with the development of chromium and related projects. Download the tools
from <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">here</a>.</p></div>
</div>
......@@ -866,7 +874,7 @@ from <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Last updated 2014-03-25 15:09:11 PDT
Last updated 2014-04-10 14:23:11 PDT
</div>
</div>
</body>
......
......@@ -778,7 +778,7 @@ freeze), <code>git thaw</code> will thaw all of the freezes.</p></div>
<div class="sect1">
<h2 id="_chromium_depot_tools">CHROMIUM DEPOT_TOOLS</h2>
<div class="sectionbody">
<div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_tools(1)</a> suite. These tools are meant to
<div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_tools(7)</a> suite. These tools are meant to
assist with the development of chromium and related projects. Download the tools
from <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">here</a>.</p></div>
</div>
......@@ -787,7 +787,7 @@ from <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Last updated 2014-03-25 15:09:11 PDT
Last updated 2014-04-10 14:23:11 PDT
</div>
</div>
</body>
......
......@@ -871,7 +871,7 @@ file.</p></div>
<div class="sect1">
<h2 id="_chromium_depot_tools">CHROMIUM DEPOT_TOOLS</h2>
<div class="sectionbody">
<div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_tools(1)</a> suite. These tools are meant to
<div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_tools(7)</a> suite. These tools are meant to
assist with the development of chromium and related projects. Download the tools
from <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">here</a>.</p></div>
</div>
......@@ -880,7 +880,7 @@ from <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Last updated 2014-03-25 15:03:05 PDT
Last updated 2014-04-10 14:23:11 PDT
</div>
</div>
</body>
......
......@@ -2,12 +2,12 @@
.\" Title: git-freeze
.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
.\" Date: 03/25/2014
.\" Date: 04/10/2014
.\" Manual: Chromium depot_tools Manual
.\" Source: depot_tools 207bff1
.\" Source: depot_tools 68b1017
.\" Language: English
.\"
.TH "GIT\-FREEZE" "1" "03/25/2014" "depot_tools 207bff1" "Chromium depot_tools Manual"
.TH "GIT\-FREEZE" "1" "04/10/2014" "depot_tools 68b1017" "Chromium depot_tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
......@@ -41,6 +41,8 @@ git freeze works a lot like git stash, in that it stores the current changes in
.sp
git freeze will make up to 2 commits on your branch\&. A commit with the message FREEZE\&.indexed will contain all changes which you\(cqve added to your index (like with \fIgit add\fR, \fIgit mv\fR, \fIgit rm\fR, etc\&.)\&. A commit with the message FREEZE\&.unindexed will contain all changes which were not in your index at the time you ran git freeze (freshly modified files, new files, etc\&.)\&.
.SH "EXAMPLE"
.sp
.sp
.if n \{\
.RS 4
......@@ -48,7 +50,7 @@ git freeze will make up to 2 commits on your branch\&. A commit with the message
.nf
\fB$ git status \-\-short\fR
A added_file
A\:M added_file_with_unstaged_changes
AM added_file_with_unstaged_changes
D deleted_file
M modified_file
D unstaged_deleted_file
......@@ -56,32 +58,32 @@ D deleted_file
\fB$ git freeze\fR
\fB$ git status \-\-short\fR
\fB$ git log \-n 2 \-\-stat\fR
commit 182eccae8e385acba21c9ff2713e98ff4b7e17cd
Author: Robert Iannucci <iannucci@chromium\&.org>
Date: Thu Mar 13 17:42:37 2014 \-0700
commit bed4472f2ad34bebabd7cf79f3155ebc6d86707d
Author: local <local@chromium\&.org>
Date: Thu Apr 10 08:54:56 2014 +0000
FREEZE\&.unindexed
added_file_with_unstaged_changes | 3 ++\:\-
modified_file | 4 +++\:\-
unadded_file | 3 +++
added_file_with_unstaged_changes | 1 +
modified_file | 1 +
unadded_file | 0
unstaged_deleted_file | 1 \-
4 files changed, 8 insertions(+), 3 deletions(\-)
4 files changed, 2 insertions(+), 1 deletion(\-)
commit ce07bdc49a61f54e6142b4bba5cc517cf6802bd4
Author: Robert Iannucci <iannucci@chromium\&.org>
Date: Thu Mar 13 17:42:37 2014 \-0700
commit cde1eb5500ede60053ae47b3fb1231e9e62be793
Author: local <local@chromium\&.org>
Date: Thu Apr 10 08:54:56 2014 +0000
FREEZE\&.indexed
added_file | 3 +++
added_file | 1 +
added_file_with_unstaged_changes | 1 +
deleted_file | 1 \-
3 files changed, 4 insertions(+), 1 deletion(\-)
3 files changed, 2 insertions(+), 1 deletion(\-)
\fB$ git thaw\fR
\fB$ git status \-\-short\fR
A added_file
A\:M added_file_with_unstaged_changes
AM added_file_with_unstaged_changes
D deleted_file
M modified_file
D unstaged_deleted_file
......@@ -96,7 +98,7 @@ D deleted_file
\fBgit-thaw\fR(1)
.SH "CHROMIUM DEPOT_TOOLS"
.sp
Part of the chromium \fBdepot_tools\fR(1) suite\&. These tools are meant to assist with the development of chromium and related projects\&. Download the tools from \m[blue]\fBhere\fR\m[]\&\s-2\u[1]\d\s+2\&.
Part of the chromium \fBdepot_tools\fR(7) suite\&. These tools are meant to assist with the development of chromium and related projects\&. Download the tools from \m[blue]\fBhere\fR\m[]\&\s-2\u[1]\d\s+2\&.
.SH "NOTES"
.IP " 1." 4
here
......
......@@ -2,12 +2,12 @@
.\" Title: git-map-branches
.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
.\" Date: 03/25/2014
.\" Date: 04/10/2014
.\" Manual: Chromium depot_tools Manual
.\" Source: depot_tools 207bff1
.\" Source: depot_tools 68b1017
.\" Language: English
.\"
.TH "GIT\-MAP\-BRANCHES" "1" "03/25/2014" "depot_tools 207bff1" "Chromium depot_tools Manual"
.TH "GIT\-MAP\-BRANCHES" "1" "04/10/2014" "depot_tools 68b1017" "Chromium depot_tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
......@@ -129,6 +129,8 @@ If multiple branches are on the same commit, they will all be cyan\&.
.SH "EXAMPLE"
.sp
Given the hypothetical demo repo in \fBgit-map\fR(1)\*(Aqs EXAMPLE section, and assuming that the frozen_changes branch was currently checked out, running \fIgit map\-branches\fR would result in an output like:
.sp
.sp
.if n \{\
.RS 4
......@@ -138,11 +140,10 @@ Given the hypothetical demo repo in \fBgit-map\fR(1)\*(Aqs EXAMPLE section, and
origin/master
cool_feature
subfeature
frozen_changes *
master
{NO UPSTREAM}
bogus_noparent
duplicate_cool_feature_no_upstream
fixit
\fB frozen_branch *
\fR{NO UPSTREAM}
no_upstream
.fi
.if n \{\
.RE
......@@ -168,7 +169,7 @@ Some common short\-hand aliases\&. Feel free to add these to your \fI~/\&.gitcon
\fBgit-map\fR(1)
.SH "CHROMIUM DEPOT_TOOLS"
.sp
Part of the chromium \fBdepot_tools\fR(1) suite\&. These tools are meant to assist with the development of chromium and related projects\&. Download the tools from \m[blue]\fBhere\fR\m[]\&\s-2\u[1]\d\s+2\&.
Part of the chromium \fBdepot_tools\fR(7) suite\&. These tools are meant to assist with the development of chromium and related projects\&. Download the tools from \m[blue]\fBhere\fR\m[]\&\s-2\u[1]\d\s+2\&.
.SH "NOTES"
.IP " 1." 4
here
......
......@@ -2,12 +2,12 @@
.\" Title: git-map
.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
.\" Date: 03/25/2014
.\" Date: 04/10/2014
.\" Manual: Chromium depot_tools Manual
.\" Source: depot_tools 207bff1
.\" Source: depot_tools 68b1017
.\" Language: English
.\"
.TH "GIT\-MAP" "1" "03/25/2014" "depot_tools 207bff1" "Chromium depot_tools Manual"
.TH "GIT\-MAP" "1" "04/10/2014" "depot_tools 68b1017" "Chromium depot_tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
......@@ -138,21 +138,26 @@ Running \fIgit map\fR would result in an output something like:
.\}
.nf
\fB$ git map\fR
*\:\fB 7dcfe47 \fR (\:\fBfrozen_changes\fR\:) 2014\-03\-12 ~ FREEZE\&.unindexed
* \fB4b0c180\fR 2014\-03\-12 ~ modfile
* \fB59a7cca\fR 2014\-03\-12 ~ a deleted file
* \fB6bec695\fR (\:origin/master\:) 2014\-03\-11 ~ Add neat feature \fB<(frozen_changes)\fR
* \fBd15a38a\fR 2014\-03\-11 ~ Epic README update
* \fBd559894\fR (\:\fBmaster\fR\:) 2014\-03\-11 ~ Important upstream change
| * \fB9c311fd\fR (\:\fBcool_feature\fR\:) 2014\-03\-11 ~ Respond to CL comments
| | * \fB2a1eeb2\fR (\:\fBsubfeature\fR\:) 2014\-03\-11 ~ integrate with CoolService
| | * \fBd777af6\fR 2014\-03\-11 ~ slick commenting action
\fB* a8f0220 \fR (\fBfrozen_branch\fR) 2014\-04\-10 ~ FREEZE\&.unindexed
* \fBc382556 \fR 2014\-04\-10 ~ modfile
* \fB06e399f \fR 2014\-04\-10 ~ a deleted file
* \fB20494d2 \fR (\fBfixit\fR) 2014\-04\-10 ~ Add neat feature\fB <(frozen_branch)\fR
* \fBf734bbf \fR 2014\-04\-10 ~ Epic README update
| * \fB983a7b8 \fR (\fBcool_feature\fR) 2014\-04\-10 ~ Respond to CL comments
| | * \fB2f53c1f \fR (\fBsubfeature\fR) 2014\-04\-10 ~ integrate with CoolService
| | * \fBb4e5087 \fR 2014\-04\-10 ~ slick commenting action
| |/
| * \fB265803a\fR 2014\-03\-11 ~ another improvement \fB<(subfeature)\fR
| * \fB6d831ac\fR (\:\fBspleen_tag\fR\:) 2014\-03\-11 ~ Refactor spleen
| * \fB82e74ab\fR 2014\-03\-11 ~ Add widget
| * \fBac10591 \fR 2014\-04\-10 ~ another improvement\fB <(subfeature)\fR
| * \fB088691d \fR (\fBspleen_tag\fR) 2014\-04\-10 ~ Refactor spleen
| * \fB206ceb2 \fR 2014\-04\-10 ~ Add widget
|/
* \fBd08c5b3\fR (\:\fBbogus_noparent\fR\:) 2014\-03\-11 ~ Wonderful beginnings \fB<(cool_feature)\fR
* \fB619ccc9 \fR (origin/master, origin/HEAD) 2014\-04\-10 ~ Make ReflectorImpl use mailboxes\fB <(cool_feature, fixit)\fR
* \fB40b838e \fR 2014\-04\-10 ~ don\*(Aqt use glibc\-specific execinfo\&.h on uclibc builds
* \fB65db351 \fR 2014\-04\-10 ~ [fsp] Add requestUnmount() method together with the request manager\&.
* \fBc1923e0 \fR 2014\-04\-10 ~ linux_aura: Use system configuration for middle clicking the titlebar\&.
* \fBccaca03 \fR 2014\-04\-10 ~ ContentView\->ContentViewCore in ContentViewRenderView
* \fB9b1c1ab \fR 2014\-04\-10 ~ ozone: evdev: Filter devices by path
* \fBa91bbf9 \fR 2014\-04\-10 ~ Always output seccomp error messages to stderr
.fi
.if n \{\
.RE
......@@ -165,7 +170,7 @@ As you can see, the structure of the commit history is visible, particularly wha
\fBgit-map-branches\fR(1)
.SH "CHROMIUM DEPOT_TOOLS"
.sp
Part of the chromium \fBdepot_tools\fR(1) suite\&. These tools are meant to assist with the development of chromium and related projects\&. Download the tools from \m[blue]\fBhere\fR\m[]\&\s-2\u[1]\d\s+2\&.
Part of the chromium \fBdepot_tools\fR(7) suite\&. These tools are meant to assist with the development of chromium and related projects\&. Download the tools from \m[blue]\fBhere\fR\m[]\&\s-2\u[1]\d\s+2\&.
.SH "NOTES"
.IP " 1." 4
here
......
......@@ -2,12 +2,12 @@
.\" Title: git-mark-merge-base
.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
.\" Date: 03/25/2014
.\" Date: 04/10/2014
.\" Manual: Chromium depot_tools Manual
.\" Source: depot_tools 207bff1
.\" Source: depot_tools 68b1017
.\" Language: English
.\"
.TH "GIT\-MARK\-MERGE\-BA" "1" "03/25/2014" "depot_tools 207bff1" "Chromium depot_tools Manual"
.TH "GIT\-MARK\-MERGE\-BA" "1" "04/10/2014" "depot_tools 68b1017" "Chromium depot_tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
......@@ -60,7 +60,7 @@ The new value to set for the current branch\(cqs merge\-base marker\&.
\fBgit-rebase-update\fR(1), \fBgit-reparent-branch\fR(1), \fBgit-rename-branch\fR(1), \fBgit-upstream-diff\fR(1)
.SH "CHROMIUM DEPOT_TOOLS"
.sp
Part of the chromium \fBdepot_tools\fR(1) suite\&. These tools are meant to assist with the development of chromium and related projects\&. Download the tools from \m[blue]\fBhere\fR\m[]\&\s-2\u[1]\d\s+2\&.
Part of the chromium \fBdepot_tools\fR(7) suite\&. These tools are meant to assist with the development of chromium and related projects\&. Download the tools from \m[blue]\fBhere\fR\m[]\&\s-2\u[1]\d\s+2\&.
.SH "NOTES"
.IP " 1." 4
here
......
......@@ -2,12 +2,12 @@
.\" Title: git-nav-downstream
.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
.\" Date: 03/25/2014
.\" Date: 04/10/2014
.\" Manual: Chromium depot_tools Manual
.\" Source: depot_tools 207bff1
.\" Source: depot_tools 1ce0237
.\" Language: English
.\"
.TH "GIT\-NAV\-DOWNSTREAM" "1" "03/25/2014" "depot_tools 207bff1" "Chromium depot_tools Manual"
.TH "GIT\-NAV\-DOWNSTREAM" "1" "04/10/2014" "depot_tools 1ce0237" "Chromium depot_tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
......@@ -39,34 +39,45 @@ git-nav-downstream \- Checkout a downstream branch of the currently checked out
.sp
\fIgit\-nav\-downstream\fR takes the current branch and discovers all branches downstream of it\&. If there is only one branch downstream of the current branch, the command will check that out\&. If there\*(Aqs more than one downstream branch, the command will prompt you with a selection of the branches\&.
.SH "EXAMPLE"
.sp
.sp
.if n \{\
.RS 4
.\}
.nf
\fB$ git map\-branches\fR
\fBorigin/master *\:\fR
cool_feature
\fBorigin/master *
\fR cool_feature
subfeature
frozen_changes
master
{NO UPSTREAM}
bogus_noparent
fixit
frozen_branch
\fB$ git nav\-downstream\fR
Please select a downstream branch
0\&. cool_feature
1\&. frozen_changes
2\&. master
Selection (0\-2)[0]: 0
1\&. fixit
Selection (0\-1)[0]: 0
Previous HEAD position was 619ccc9\&.\&.\&. Make ReflectorImpl use mailboxes
Switched to branch \*(Aqcool_feature\*(Aq
Your branch is ahead of \*(Aqorigin/master\*(Aq by 4 commits\&.
(use "git push" to publish your local commits)
\fB$ git map\-branches\fR
origin/master
\fBcool_feature *\:\fR
subfeature
frozen_changes
master
{NO UPSTREAM}
bogus_noparent
\fB cool_feature *
\fR subfeature
fixit
frozen_branch
\fB$ git nav\-downstream\fR
Switched to branch \*(Aqsubfeature\*(Aq
Your branch and \*(Aqcool_feature\*(Aq have diverged,
and have 2 and 1 different commit each, respectively\&.
(use "git pull" to merge the remote branch into yours)
\fB$ git map\-branches\fR
origin/master
cool_feature
\fB subfeature *
\fR fixit
frozen_branch
.fi
.if n \{\
.RE
......@@ -92,7 +103,7 @@ Some common short\-hand aliases\&. Feel free to add these to your \fI~/\&.gitcon
\fBgit-map-branches\fR(1), \fBgit-nav-upstream\fR(1)
.SH "CHROMIUM DEPOT_TOOLS"
.sp
Part of the chromium \fBdepot_tools\fR(1) suite\&. These tools are meant to assist with the development of chromium and related projects\&. Download the tools from \m[blue]\fBhere\fR\m[]\&\s-2\u[1]\d\s+2\&.
Part of the chromium \fBdepot_tools\fR(7) suite\&. These tools are meant to assist with the development of chromium and related projects\&. Download the tools from \m[blue]\fBhere\fR\m[]\&\s-2\u[1]\d\s+2\&.
.SH "NOTES"
.IP " 1." 4
here
......
......@@ -2,12 +2,12 @@
.\" Title: git-nav-upstream
.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
.\" Date: 03/25/2014
.\" Date: 04/10/2014
.\" Manual: Chromium depot_tools Manual
.\" Source: depot_tools 207bff1
.\" Source: depot_tools 1ce0237
.\" Language: English
.\"
.TH "GIT\-NAV\-UPSTREAM" "1" "03/25/2014" "depot_tools 207bff1" "Chromium depot_tools Manual"
.TH "GIT\-NAV\-UPSTREAM" "1" "04/10/2014" "depot_tools 1ce0237" "Chromium depot_tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
......@@ -39,6 +39,8 @@ git-nav-upstream \- Checkout the upstream branch of the currently checked out br
.sp
\fIgit\-nav\-upstream\fR takes the current branch, finds it\*(Aqs upstream branch, and checks that out\&.
.SH "EXAMPLE"
.sp
.sp
.if n \{\
.RS 4
......@@ -47,25 +49,44 @@ git-nav-upstream \- Checkout the upstream branch of the currently checked out br
\fB$ git map\-branches\fR
origin/master
cool_feature
\fBsubfeature *\:\fR
frozen_changes
master
{NO UPSTREAM}
bogus_noparent
\fB subfeature *
\fR fixit
frozen_branch
\fB$ git nav\-upstream\fR
Switched to branch \*(Aqcool_feature\*(Aq
Your branch is ahead of \*(Aqorigin/master\*(Aq by 4 commits\&.
(use "git push" to publish your local commits)
\fB$ git map\-branches\fR
origin/master
\fBcool_feature *\:\fR
\fB cool_feature *
\fR subfeature
fixit
frozen_branch
\fB$ git nav\-upstream\fR
Note: checking out \*(Aqorigin/master\*(Aq\&.
You are in \*(Aqdetached HEAD\*(Aq state\&. You can look around, make experimental \fB(1)\fR
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout\&.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using \-b with the checkout command again\&. Example:
git checkout \-b new_branch_name
HEAD is now at 619ccc9\&.\&.\&. Make ReflectorImpl use mailboxes
\fB$ git map\-branches\fR
\fBorigin/master *
\fR cool_feature
subfeature
frozen_changes
master
{NO UPSTREAM}
bogus_noparent
fixit
frozen_branch
.fi
.if n \{\
.RE
.\}
.sp
1\&. Note that being in a \fIdetached HEAD\fR state is OK\&. You\(cqll just want to create a \fBgit-new-branch\fR(1) from here\&.
.SH "SUGGESTED ALIASES"
.sp
Some common short\-hand aliases\&. Feel free to add these to your \fI~/\&.gitconfig\fR file\&.
......@@ -86,7 +107,7 @@ Some common short\-hand aliases\&. Feel free to add these to your \fI~/\&.gitcon
\fBgit-map-branches\fR(1), \fBgit-nav-downstream\fR(1)
.SH "CHROMIUM DEPOT_TOOLS"
.sp
Part of the chromium \fBdepot_tools\fR(1) suite\&. These tools are meant to assist with the development of chromium and related projects\&. Download the tools from \m[blue]\fBhere\fR\m[]\&\s-2\u[1]\d\s+2\&.
Part of the chromium \fBdepot_tools\fR(7) suite\&. These tools are meant to assist with the development of chromium and related projects\&. Download the tools from \m[blue]\fBhere\fR\m[]\&\s-2\u[1]\d\s+2\&.
.SH "NOTES"
.IP " 1." 4
here
......
......@@ -2,12 +2,12 @@
.\" Title: git-new-branch
.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
.\" Date: 03/25/2014
.\" Date: 04/10/2014
.\" Manual: Chromium depot_tools Manual
.\" Source: depot_tools 207bff1
.\" Source: depot_tools 68b1017
.\" Language: English
.\"
.TH "GIT\-NEW\-BRANCH" "1" "03/25/2014" "depot_tools 207bff1" "Chromium depot_tools Manual"
.TH "GIT\-NEW\-BRANCH" "1" "04/10/2014" "depot_tools 68b1017" "Chromium depot_tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
......@@ -70,6 +70,8 @@ The name for the new branch\&.
.sp
This configures the default \fIupstream\fR for all new branches\&. If it is unset, it defaults to \fIorigin/master\fR\&. This is considered to be the \fIroot\fR branch\&.
.SH "EXAMPLE"
.sp
.sp
.if n \{\
.RS 4
......@@ -79,44 +81,59 @@ This configures the default \fIupstream\fR for all new branches\&. If it is unse
origin/master
cool_feature
subfeature
frozen_changes *
\fB$ git new\-branch independent_cl\fR
fixit
\fB frozen_branch *
$ git new\-branch independent_cl\fR
\fB$ git map\-branches\fR
origin/master
cool_feature
\fBorigin/master
\fR cool_feature
subfeature
frozen_changes
independent_cl *
\fB$ git new\-branch \-\-upstream subfeature nested_cl\fR
fixit
frozen_branch
\fB independent_cl *
$ git new\-branch \-\-upstream subfeature nested_cl\fR
\fB$ git map\-branches\fR
origin/master
cool_feature
subfeature \fB(1)\fR
\fB subfeature \fR\fB\fB(1)\fR\fR\fB
nested_cl *
frozen_changes
\fR fixit
frozen_branch
independent_cl
\fB$ git checkout cool_feature\fR
Your branch is ahead of \*(Aqorigin/master\*(Aq by 4 commits\&.
(use "git push" to publish your local commits)
\fB$ git new\-branch \-\-upstream_current cl_depends_on_cool_feature\fR
\fB$ git map\-branches\fR
origin/master
cool_feature
\fB cool_feature
cl_depends_on_cool_feature *
subfeature
\fR subfeature
nested_cl
frozen_changes
fixit
frozen_branch
independent_cl
.fi
.if n \{\
.RE
.\}
.sp
.sp
\fB1. \fRNote that both branches are cyan because they are currently the same
.RS 4
.ie n \{\
\h'-04' 1.\h'+01'\c
.\}
.el \{\
.sp -1
.IP " 1." 4.2
.\}
Note that both branches are cyan because they are currently the same
\fIcommit\fR
object\&. See
\fB:git-map-branches\fR(1)
\fBgit-map-branches\fR(1)
for more detail\&.
.br
.RE
.SH "SUGGESTED ALIASES"
.sp
Some common short\-hand aliases\&. Feel free to add these to your \fI~/\&.gitconfig\fR file\&.
......@@ -141,7 +158,7 @@ Some common short\-hand aliases\&. Feel free to add these to your \fI~/\&.gitcon
\fBgit-rebase-update\fR(1), \fBgit-reparent-branch\fR(1), \fBgit-rename-branch\fR(1), \fBgit-upstream-diff\fR(1)
.SH "CHROMIUM DEPOT_TOOLS"
.sp
Part of the chromium \fBdepot_tools\fR(1) suite\&. These tools are meant to assist with the development of chromium and related projects\&. Download the tools from \m[blue]\fBhere\fR\m[]\&\s-2\u[1]\d\s+2\&.
Part of the chromium \fBdepot_tools\fR(7) suite\&. These tools are meant to assist with the development of chromium and related projects\&. Download the tools from \m[blue]\fBhere\fR\m[]\&\s-2\u[1]\d\s+2\&.
.SH "NOTES"
.IP " 1." 4
here
......
......@@ -2,12 +2,12 @@
.\" Title: git-rebase-update
.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
.\" Date: 03/25/2014
.\" Date: 04/10/2014
.\" Manual: Chromium depot_tools Manual
.\" Source: depot_tools 207bff1
.\" Source: depot_tools 68b1017
.\" Language: English
.\"
.TH "GIT\-REBASE\-UPDATE" "1" "03/25/2014" "depot_tools 207bff1" "Chromium depot_tools Manual"
.TH "GIT\-REBASE\-UPDATE" "1" "04/10/2014" "depot_tools 68b1017" "Chromium depot_tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
......@@ -156,7 +156,7 @@ Some common short\-hand aliases\&. Feel free to add these to your \fI~/\&.gitcon
\fBgit-new-branch\fR(1), \fBgit-reparent-branch\fR(1), \fBgit-rename-branch\fR(1), \fBgit-upstream-diff\fR(1), \fBgit-freeze\fR(1), \fBgit-mark-merge-base\fR(1)
.SH "CHROMIUM DEPOT_TOOLS"
.sp
Part of the chromium \fBdepot_tools\fR(1) suite\&. These tools are meant to assist with the development of chromium and related projects\&. Download the tools from \m[blue]\fBhere\fR\m[]\&\s-2\u[1]\d\s+2\&.
Part of the chromium \fBdepot_tools\fR(7) suite\&. These tools are meant to assist with the development of chromium and related projects\&. Download the tools from \m[blue]\fBhere\fR\m[]\&\s-2\u[1]\d\s+2\&.
.SH "NOTES"
.IP " 1." 4
here
......
......@@ -2,12 +2,12 @@
.\" Title: git-rename-branch
.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
.\" Date: 03/25/2014
.\" Date: 04/10/2014
.\" Manual: Chromium depot_tools Manual
.\" Source: depot_tools 207bff1
.\" Source: depot_tools 68b1017
.\" Language: English
.\"
.TH "GIT\-RENAME\-BRANCH" "1" "03/25/2014" "depot_tools 207bff1" "Chromium depot_tools Manual"
.TH "GIT\-RENAME\-BRANCH" "1" "04/10/2014" "depot_tools 68b1017" "Chromium depot_tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
......@@ -44,7 +44,7 @@ Rename the current (or specified) branch, then update all dowstream branches\*(A
\fBgit-rebase-update\fR(1), \fBgit-reparent-branch\fR(1), \fBgit-new-branch\fR(1), \fBgit-upstream-diff\fR(1)
.SH "CHROMIUM DEPOT_TOOLS"
.sp
Part of the chromium \fBdepot_tools\fR(1) suite\&. These tools are meant to assist with the development of chromium and related projects\&. Download the tools from \m[blue]\fBhere\fR\m[]\&\s-2\u[1]\d\s+2\&.
Part of the chromium \fBdepot_tools\fR(7) suite\&. These tools are meant to assist with the development of chromium and related projects\&. Download the tools from \m[blue]\fBhere\fR\m[]\&\s-2\u[1]\d\s+2\&.
.SH "NOTES"
.IP " 1." 4
here
......
......@@ -2,12 +2,12 @@
.\" Title: git-reparent-branch
.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
.\" Date: 03/25/2014
.\" Date: 04/10/2014
.\" Manual: Chromium depot_tools Manual
.\" Source: depot_tools 207bff1
.\" Source: depot_tools 68b1017
.\" Language: English
.\"
.TH "GIT\-REPARENT\-BRANC" "1" "03/25/2014" "depot_tools 207bff1" "Chromium depot_tools Manual"
.TH "GIT\-REPARENT\-BRANC" "1" "04/10/2014" "depot_tools 68b1017" "Chromium depot_tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
......@@ -84,7 +84,7 @@ Some common short\-hand aliases\&. Feel free to add these to your \fI~/\&.gitcon
\fBgit-rebase-update\fR(1), \fBgit-rename-branch\fR(1), \fBgit-new-branch\fR(1), \fBgit-upstream-diff\fR(1)
.SH "CHROMIUM DEPOT_TOOLS"
.sp
Part of the chromium \fBdepot_tools\fR(1) suite\&. These tools are meant to assist with the development of chromium and related projects\&. Download the tools from \m[blue]\fBhere\fR\m[]\&\s-2\u[1]\d\s+2\&.
Part of the chromium \fBdepot_tools\fR(7) suite\&. These tools are meant to assist with the development of chromium and related projects\&. Download the tools from \m[blue]\fBhere\fR\m[]\&\s-2\u[1]\d\s+2\&.
.SH "NOTES"
.IP " 1." 4
here
......
......@@ -2,12 +2,12 @@
.\" Title: git-squash-branch
.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
.\" Date: 03/25/2014
.\" Date: 04/10/2014
.\" Manual: Chromium depot_tools Manual
.\" Source: depot_tools 207bff1
.\" Source: depot_tools 68b1017
.\" Language: English
.\"
.TH "GIT\-SQUASH\-BRANCH" "1" "03/25/2014" "depot_tools 207bff1" "Chromium depot_tools Manual"
.TH "GIT\-SQUASH\-BRANCH" "1" "04/10/2014" "depot_tools 68b1017" "Chromium depot_tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
......@@ -47,42 +47,54 @@ Squashing branches is useful when trying to rebase\-update over branches which w
Optional message to use for the first line of the squashed commit\&. If omitted, it defaults to "git squash commit\&."\&.
.RE
.SH "EXAMPLE"
.sp
.sp
.if n \{\
.RS 4
.\}
.nf
\fB$ git map\fR
*\:\fB 7dcfe47 \fR (\:\fBfrozen_changes\fR\:) 2014\-03\-12 ~ FREEZE\&.unindexed
* \fB4b0c180\fR 2014\-03\-12 ~ modfile
* \fB59a7cca\fR 2014\-03\-12 ~ a deleted file
* \fB6bec695\fR (\:origin/master\:) 2014\-03\-11 ~ Add neat feature \fB<(frozen_changes)\fR
* \fBd15a38a\fR 2014\-03\-11 ~ Epic README update
* \fBd559894\fR (\:\fBmaster\fR\:) 2014\-03\-11 ~ Important upstream change
| * \fB9c311fd\fR (\:\fBcool_feature\fR\:) 2014\-03\-11 ~ Respond to CL comments
| | * \fB2a1eeb2\fR (\:\fBsubfeature\fR\:) 2014\-03\-11 ~ integrate with CoolService
| | * \fBd777af6\fR 2014\-03\-11 ~ slick commenting action
\fB* a8f0220 \fR (\fBfrozen_branch\fR) 2014\-04\-10 ~ FREEZE\&.unindexed
* \fBc382556 \fR 2014\-04\-10 ~ modfile
* \fB06e399f \fR 2014\-04\-10 ~ a deleted file
* \fB20494d2 \fR (\fBfixit\fR) 2014\-04\-10 ~ Add neat feature\fB <(frozen_branch)\fR
* \fBf734bbf \fR 2014\-04\-10 ~ Epic README update
| * \fB983a7b8 \fR (\fBcool_feature\fR) 2014\-04\-10 ~ Respond to CL comments
| | * \fB2f53c1f \fR (\fBsubfeature\fR) 2014\-04\-10 ~ integrate with CoolService
| | * \fBb4e5087 \fR 2014\-04\-10 ~ slick commenting action
| |/
| * \fB265803a\fR 2014\-03\-11 ~ another improvement \fB<(subfeature)\fR
| * \fB6d831ac\fR (\:\fBspleen_tag\fR\:) 2014\-03\-11 ~ Refactor spleen
| * \fB82e74ab\fR 2014\-03\-11 ~ Add widget
| * \fBac10591 \fR 2014\-04\-10 ~ another improvement\fB <(subfeature)\fR
| * \fB088691d \fR (\fBspleen_tag\fR) 2014\-04\-10 ~ Refactor spleen
| * \fB206ceb2 \fR 2014\-04\-10 ~ Add widget
|/
* \fBd08c5b3\fR (\:\fBbogus_noparent\fR\:) 2014\-03\-11 ~ Wonderful beginnings \fB<(cool_feature)\fR
\fB$ git squash\-branch "cool squash demo"\fR
* \fB619ccc9 \fR (origin/master, origin/HEAD) 2014\-04\-10 ~ Make ReflectorImpl use mailboxes\fB <(cool_feature, fixit)\fR
* \fB40b838e \fR 2014\-04\-10 ~ don\*(Aqt use glibc\-specific execinfo\&.h on uclibc builds
* \fB65db351 \fR 2014\-04\-10 ~ [fsp] Add requestUnmount() method together with the request manager\&.
* \fBc1923e0 \fR 2014\-04\-10 ~ linux_aura: Use system configuration for middle clicking the titlebar\&.
* \fBccaca03 \fR 2014\-04\-10 ~ ContentView\->ContentViewCore in ContentViewRenderView
* \fB9b1c1ab \fR 2014\-04\-10 ~ ozone: evdev: Filter devices by path
* \fBa91bbf9 \fR 2014\-04\-10 ~ Always output seccomp error messages to stderr
\fB$ git squash\-branch \-m \*(Aqcool squash demo\*(Aq\fR
\fB$ git map\fR
*\:\fB 2c81508 \fR (\:\fBfrozen_changes\fR\:) 2014\-03\-22 ~ cool squash demo
* \fB6bec695\fR (\:origin/master\:) 2014\-03\-11 ~ Add neat feature \fB<(frozen_changes)\fR
* \fBd15a38a\fR 2014\-03\-11 ~ Epic README update
* \fBd559894\fR (\:\fBmaster\fR\:) 2014\-03\-11 ~ Important upstream change
| * \fB9c311fd\fR (\:\fBcool_feature\fR\:) 2014\-03\-11 ~ Respond to CL comments
| | * \fB2a1eeb2\fR (\:\fBsubfeature\fR\:) 2014\-03\-11 ~ integrate with CoolService
| | * \fBd777af6\fR 2014\-03\-11 ~ slick commenting action
\fB* 5b451bd \fR (\fBfrozen_branch\fR) 2014\-04\-10 ~ cool squash demo
* \fB20494d2 \fR (\fBfixit\fR) 2014\-04\-10 ~ Add neat feature\fB <(frozen_branch)\fR
* \fBf734bbf \fR 2014\-04\-10 ~ Epic README update
| * \fB983a7b8 \fR (\fBcool_feature\fR) 2014\-04\-10 ~ Respond to CL comments
| | * \fB2f53c1f \fR (\fBsubfeature\fR) 2014\-04\-10 ~ integrate with CoolService
| | * \fBb4e5087 \fR 2014\-04\-10 ~ slick commenting action
| |/
| * \fB265803a\fR 2014\-03\-11 ~ another improvement \fB<(subfeature)\fR
| * \fB6d831ac\fR (\:\fBspleen_tag\fR\:) 2014\-03\-11 ~ Refactor spleen
| * \fB82e74ab\fR 2014\-03\-11 ~ Add widget
| * \fBac10591 \fR 2014\-04\-10 ~ another improvement\fB <(subfeature)\fR
| * \fB088691d \fR (\fBspleen_tag\fR) 2014\-04\-10 ~ Refactor spleen
| * \fB206ceb2 \fR 2014\-04\-10 ~ Add widget
|/
* \fBd08c5b3\fR (\:\fBbogus_noparent\fR\:) 2014\-03\-11 ~ Wonderful beginnings \fB<(cool_feature)\fR
* \fB619ccc9 \fR (origin/master, origin/HEAD) 2014\-04\-10 ~ Make ReflectorImpl use mailboxes\fB <(cool_feature, fixit)\fR
* \fB40b838e \fR 2014\-04\-10 ~ don\*(Aqt use glibc\-specific execinfo\&.h on uclibc builds
* \fB65db351 \fR 2014\-04\-10 ~ [fsp] Add requestUnmount() method together with the request manager\&.
* \fBc1923e0 \fR 2014\-04\-10 ~ linux_aura: Use system configuration for middle clicking the titlebar\&.
* \fBccaca03 \fR 2014\-04\-10 ~ ContentView\->ContentViewCore in ContentViewRenderView
* \fB9b1c1ab \fR 2014\-04\-10 ~ ozone: evdev: Filter devices by path
* \fBa91bbf9 \fR 2014\-04\-10 ~ Always output seccomp error messages to stderr
.fi
.if n \{\
.RE
......@@ -108,7 +120,7 @@ Some common short\-hand aliases\&. Feel free to add these to your \fI~/\&.gitcon
\fBgit-rebase-update\fR(1)
.SH "CHROMIUM DEPOT_TOOLS"
.sp
Part of the chromium \fBdepot_tools\fR(1) suite\&. These tools are meant to assist with the development of chromium and related projects\&. Download the tools from \m[blue]\fBhere\fR\m[]\&\s-2\u[1]\d\s+2\&.
Part of the chromium \fBdepot_tools\fR(7) suite\&. These tools are meant to assist with the development of chromium and related projects\&. Download the tools from \m[blue]\fBhere\fR\m[]\&\s-2\u[1]\d\s+2\&.
.SH "NOTES"
.IP " 1." 4
here
......
......@@ -2,12 +2,12 @@
.\" Title: git-thaw
.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
.\" Date: 03/25/2014
.\" Date: 04/10/2014
.\" Manual: Chromium depot_tools Manual
.\" Source: depot_tools 207bff1
.\" Source: depot_tools 68b1017
.\" Language: English
.\"
.TH "GIT\-THAW" "1" "03/25/2014" "depot_tools 207bff1" "Chromium depot_tools Manual"
.TH "GIT\-THAW" "1" "04/10/2014" "depot_tools 68b1017" "Chromium depot_tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
......@@ -45,7 +45,7 @@ If you freeze a branch multiple times (i\&.e\&. change files, freeze, change fil
\fBgit-freeze\fR(1)
.SH "CHROMIUM DEPOT_TOOLS"
.sp
Part of the chromium \fBdepot_tools\fR(1) suite\&. These tools are meant to assist with the development of chromium and related projects\&. Download the tools from \m[blue]\fBhere\fR\m[]\&\s-2\u[1]\d\s+2\&.
Part of the chromium \fBdepot_tools\fR(7) suite\&. These tools are meant to assist with the development of chromium and related projects\&. Download the tools from \m[blue]\fBhere\fR\m[]\&\s-2\u[1]\d\s+2\&.
.SH "NOTES"
.IP " 1." 4
here
......
......@@ -2,12 +2,12 @@
.\" Title: git-upstream-diff
.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
.\" Date: 03/25/2014
.\" Date: 04/10/2014
.\" Manual: Chromium depot_tools Manual
.\" Source: depot_tools 207bff1
.\" Source: depot_tools 68b1017
.\" Language: English
.\"
.TH "GIT\-UPSTREAM\-DIFF" "1" "03/25/2014" "depot_tools 207bff1" "Chromium depot_tools Manual"
.TH "GIT\-UPSTREAM\-DIFF" "1" "04/10/2014" "depot_tools 68b1017" "Chromium depot_tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
......@@ -110,7 +110,7 @@ Some common short\-hand aliases\&. Feel free to add these to your \fI~/\&.gitcon
\fBgit-rebase-update\fR(1)
.SH "CHROMIUM DEPOT_TOOLS"
.sp
Part of the chromium \fBdepot_tools\fR(1) suite\&. These tools are meant to assist with the development of chromium and related projects\&. Download the tools from \m[blue]\fBhere\fR\m[]\&\s-2\u[1]\d\s+2\&.
Part of the chromium \fBdepot_tools\fR(7) suite\&. These tools are meant to assist with the development of chromium and related projects\&. Download the tools from \m[blue]\fBhere\fR\m[]\&\s-2\u[1]\d\s+2\&.
.SH "NOTES"
.IP " 1." 4
here
......
'\" t
.\" Title: depot_tools
.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
.\" Date: 03/26/2014
.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
.\" Date: 04/10/2014
.\" Manual: Chromium depot_tools Manual
.\" Source: depot_tools 9c0c59f
.\" Source: depot_tools 68b1017
.\" Language: English
.\"
.TH "DEPOT_TOOLS" "7" "03/26/2014" "depot_tools 9c0c59f" "Chromium depot_tools Manual"
.TH "DEPOT_TOOLS" "7" "04/10/2014" "depot_tools 68b1017" "Chromium depot_tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
......@@ -39,6 +39,8 @@ Other tools are merely \fIhelper\fR tools\&. Not required, but they can substant
.sp
A listing of both categories of tools follows\&.
.SH "HELPER TOOLS"
.sp
A tutorial for these tools can be found at \fBdepot_tools_tutorial\fR(7)\&.
.PP
\fBgit-freeze\fR(1)
.RS 4
......
'\" t
.\" Title: depot_tools_tutorial
.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
.\" Date: 04/10/2014
.\" Manual: Chromium depot_tools Manual
.\" Source: depot_tools bec7be9
.\" Language: English
.\"
.TH "DEPOT_TOOLS_TUTORIAL" "7" "04/10/2014" "depot_tools bec7be9" "Chromium depot_tools Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.\" http://bugs.debian.org/507673
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
depot_tools_tutorial \- A tutorial introduction to the Chromium depot_tools git extensions\&.
.SH "DESCRIPTION"
.sp
The Chromium \fBdepot_tools\fR(7) suite contains many git workflow\-enhancing tools which are designed to work together to enable anyone to wrangle the Chromium codebase expertly\&. This tutorial explains how to do development on Chromium using these tools\&. This will cover:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Setting up
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Getting the code
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
TL;DR Walkthrough
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Creating / Uploading a CL
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Updating the code
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Managing multiple CLs
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Managing dependent CLs
.RE
.sp
Please refer to the manpages (or \-\-help output) for details about any of the commands mentioned in this tutorial\&.
.if n \{\
.sp
.\}
.RS 4
.it 1 an-trap
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
.ps +1
\fBNote\fR
.ps -1
.br
.sp
If your platform does not support manpages (or you prefer something a bit more expressive than plain text) you can find all documentation in \fIhtml\fR form in the [DEPOT_TOOLS]/docs/html folder\&.
.sp .5v
.RE
.SS "PREREQUISITES"
.sp
This tutorial assumes basic familiarity with git terminology and concepts\&. If you need to brush up on these, the following are very good resources:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\m[blue]\fBThink like (a) Git\fR\m[]\&\s-2\u[1]\d\s+2
\- A lighthearted overview of git\&. If you\(cqre sorta\-familiar with git, but not
\fIcomfortable\fR
with it, then give this a look\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\m[blue]\fBGit Immersion Tutorial\fR\m[]\&\s-2\u[2]\d\s+2
\- An in\-depth git tutorial\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\m[blue]\fBpcottle\(cqs Visual Git Branching\fR\m[]\&\s-2\u[3]\d\s+2
\- An excellent interactive/graphical demo on how git handles commits, branches, and shows the operations git performs on them\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\m[blue]\fBPro Git book\fR\m[]\&\s-2\u[4]\d\s+2
\- \(lqThe\(rq book for learning git from basics to advanced concepts\&. A bit dry, but very through\&.
.RE
.sp
If you\(cqve tried these out and are still having some trouble getting started, there are \fImany\fR other resources online which should help\&. If you\(cqre \fIreally\fR \fB\fIreally\fR\fR stuck, then chat up one of the Chromium infrastructure team members for some pointers\&.
.PP
Litmus Test
.RS 4
If you know what
git add,
git status,
git commit
do and you know
\fIessentially\fR
what
git rebase
does, then you should know enough to follow along\&.
.RE
.SH "SETTING UP"
.SS "GET DEPOT TOOLS"
.sp
Clone the \fIdepot_tools\fR repository:
.sp
.if n \{\
.RS 4
.\}
.nf
\fB$ git clone https://chromium\&.googlesource\&.com/chromium/tools/depot_tools\fR
.fi
.if n \{\
.RE
.\}
.sp
.sp
Add \fIdepot_tools\fR to the \fIend\fR of your PATH and MANPATH (you will probably want to put this in your ~/\&.bashrc or ~/\&.zshrc)\&. Assuming you cloned \fIdepot_tools\fR to /path/to/depot_tools:
.sp
.if n \{\
.RS 4
.\}
.nf
\fB$ export PATH=$PATH:/path/to/depot_tools\fR
\fB$ export MANPATH=$MANPATH:/path/to/depot_tools/docs\fR \fB(1)\fR
.fi
.if n \{\
.RE
.\}
.sp
.sp
\fB1. \fRObserve that this path is
depot_tools/\fBdocs\fR\&.
.br
.SS "BOOTSTRAPPING CONFIGURATION"
.sp
If you have never used git before, you\(cqll need to set some global git configurations; substitute your name and email address in the following commands:
.sp
.if n \{\
.RS 4
.\}
.nf
\fB$ git config \-\-global user\&.name \(lqJohn Doe\(rq\fR
\fB$ git config \-\-global user\&.email \(lqjdoe@email\&.com\(rq\fR
\fB$ git config \-\-global core\&.autocrlf false\fR
\fB$ git config \-\-global core\&.filemode false\fR
\fB$\fR # and for fun!
\fB$ git config \-\-global color\&.ui true\fR
.fi
.if n \{\
.RE
.\}
.sp
.SH "GETTING THE CODE"
.sp
Pick an empty directory and run one of the following:
.sp
.if n \{\
.RS 4
.\}
.nf
\fB$ fetch chromium\fR # Basic checkout for desktop Chromium
\fB$ fetch blink\fR # Chromium code with Blink checked out to tip\-of\-tree
\fB$ fetch android\fR # Chromium checkout for Android platform
\fB$ fetch ios\fR # Chromium checkout for iOS platform
.fi
.if n \{\
.RE
.\}
.sp
.sp
When the fetch tool completes you should have the following in your working directory:
.sp
.if n \{\
.RS 4
.\}
.nf
\fB\&.gclient\fR # A configuration file for you source checkout
\fBsrc/\fR # Top\-level Chromium source checkout\&.
.fi
.if n \{\
.RE
.\}
.sp
.sp
If you are on linux, then you\(cqll need to run:
.sp
.if n \{\
.RS 4
.\}
.nf
\fB$ cd src && \&./build/install\-build\-deps\&.sh\fR
.fi
.if n \{\
.RE
.\}
.sp
.sp
And finally:
.sp
.if n \{\
.RS 4
.\}
.nf
\fB$ gclient sync\fR \fB(1)\fR
.fi
.if n \{\
.RE
.\}
.sp
.sp
\fB1. \fRThis will pull all dependencies of the Chromium src checkout\&. You will need to run this any time you update the main src checkout\&.
.br
.SH "TL;DR WALKTHROUGH"
.sp
This section will demo what a typical workflow looks like when writing, updating, and committing multiple CLs\&.
.sp
.sp
.if n \{\
.RS 4
.\}
.nf
\fB$ fetch chromium\fR
\&.\&.\&. truncated output \&.\&.\&.
\fB$ cd src\fR
.fi
.if n \{\
.RE
.\}
.sp
(only on linux)
.sp
.if n \{\
.RS 4
.\}
.nf
\fB$ \&./build/install\-build\-deps\&.sh\fR
\&.\&.\&. truncated output \&.\&.\&.
.fi
.if n \{\
.RE
.\}
.sp
Pull in all dependencies for HEAD
.sp
.if n \{\
.RS 4
.\}
.nf
\fB$ gclient sync\fR
\&.\&.\&. truncated output \&.\&.\&.
.fi
.if n \{\
.RE
.\}
.sp
Let\*(Aqs fix something!
.sp
.if n \{\
.RS 4
.\}
.nf
\fB$ git new\-branch fix_typo\fR
\fB$ echo \-e \*(Aq/Banana\ens/Banana/Kuun\enwq\*(Aq | ed build/whitespace_file\&.txt\fR
1503
It was a Domo\-Banana\&.
It was a Domo\-Kuun\&.
1501
\fB$ git commit \-am \*(AqFix terrible typo\&.\*(Aq\fR
[fix_typo 615ffa7] Fix terrible typo\&.
1 file changed, 1 insertion(+), 1 deletion(\-)
\fB$ git map\fR
\fB* 615ffa7 \fR (\fBfix_typo\fR) 2014\-04\-10 ~ Fix terrible typo\&.
* \fBbeec6f4 \fR (origin/master, origin/HEAD) 2014\-04\-10 ~ Make ReflectorImpl use mailboxes\fB <(fix_typo)\fR
* \fB41290e0 \fR 2014\-04\-10 ~ don\*(Aqt use glibc\-specific execinfo\&.h on uclibc builds
* \fBa76fde7 \fR 2014\-04\-10 ~ [fsp] Add requestUnmount() method together with the request manager\&.
* \fB9de7a71 \fR 2014\-04\-10 ~ linux_aura: Use system configuration for middle clicking the titlebar\&.
* \fB073b0c2 \fR 2014\-04\-10 ~ ContentView\->ContentViewCore in ContentViewRenderView
* \fB2250f53 \fR 2014\-04\-10 ~ ozone: evdev: Filter devices by path
* \fB33a7a74 \fR 2014\-04\-10 ~ Always output seccomp error messages to stderr
\fB$ git status\fR
On branch fix_typo
Your branch is ahead of \*(Aqorigin/master\*(Aq by 1 commit\&.
(use "git push" to publish your local commits)
nothing to commit, working directory clean
\fB$ git cl upload \-r domo@chromium\&.org \-\-send\-mail\fR
\&.\&.\&. truncated output \&.\&.\&.
.fi
.if n \{\
.RE
.\}
.sp
While we wait for feedback, let\*(Aqs do something else\&.
.sp
.if n \{\
.RS 4
.\}
.nf
\fB$ git new\-branch chap2\fR
\fB$ git map\-branches\fR
\fBorigin/master
chap2 *
\fR fix_typo
\fB$ cat >> build/whitespace_file\&.txt <<EOF\fR
"You recall what happened on Mulholland drive?" The ceiling fan rotated slowly
overhead, barely disturbing the thick cigarette smoke\&. No doubt was left about
when the fan was last cleaned\&.
EOF
\fB$ git status\fR
On branch chap2
Your branch is up\-to\-date with \*(Aqorigin/master\*(Aq\&.
Changes not staged for commit:
(use "git add <file>\&.\&.\&." to update what will be committed)
(use "git checkout \-\- <file>\&.\&.\&." to discard changes in working directory)
modified: build/whitespace_file\&.txt
no changes added to commit (use "git add" and/or "git commit \-a")
.fi
.if n \{\
.RE
.\}
.sp
Someone on the code review pointed out that our typo\-fix has a typo :( We\*(Aqre still working on \*(Aqchap2\*(Aq but we really want to land \*(Aqfix_typo\*(Aq, so let\*(Aqs switch over and fix it\&.
.sp
.if n \{\
.RS 4
.\}
.nf
\fB$ git freeze\fR
\fB$ git checkout fix_typo\fR
Switched to branch \*(Aqfix_typo\*(Aq
Your branch is ahead of \*(Aqorigin/master\*(Aq by 1 commit\&.
(use "git push" to publish your local commits)
\fB$ echo \-e \*(Aq/Kuun\ens/Kuun/Kun\enwq\*(Aq | ed build/whitespace_file\&.txt\fR
1501
It was a Domo\-Kuun\&.
It was a Domo\-Kun\&.
1500
\fB$ git upstream\-diff \-\-wordwise\fR
\fBdiff \-\-git a/build/whitespace_file\&.txt b/build/whitespace_file\&.txt\fR
\fBindex 3eba355\&.\&.57cdcee 100644\fR
\fB\-\-\- a/build/whitespace_file\&.txt\fR
\fB+++ b/build/whitespace_file\&.txt\fR
@@ \-17,7 +17,7 @@ swept up the streets (for it is in London that our scene lies), rattling along
the housetops, and fiercely agitating the scanty flame of the lamps that
struggled against the elements\&. A hooded figure emerged\&.
It was a Domo\-BananaKun\&.
"What took you so long?", inquired his wife\&.
\fB$ git commit \-am \*(AqFix typo for good!\*(Aq\fR
[fix_typo 2c0ad9c] Fix typo for good!
1 file changed, 1 insertion(+), 1 deletion(\-)
\fB$ git cl upload\fR
\&.\&.\&. truncated output \&.\&.\&.
.fi
.if n \{\
.RE
.\}
.sp
Since we got lgtm, let the CQ land it\&.
.sp
.if n \{\
.RS 4
.\}
.nf
\fB$ git cl set_commit\fR
\fB$ git map\fR
* \fB0e2e52e \fR (\fBchap2\fR) 2014\-04\-10 ~ FREEZE\&.unindexed
| \fB* 2c0ad9c \fR (\fBfix_typo\fR) 2014\-04\-10 ~ Fix typo for good!
| * \fB615ffa7 \fR 2014\-04\-10 ~ Fix terrible typo\&.
|/
* \fBbeec6f4 \fR (origin/master, origin/HEAD) 2014\-04\-10 ~ Make ReflectorImpl use mailboxes\fB <(chap2, fix_typo)\fR
* \fB41290e0 \fR 2014\-04\-10 ~ don\*(Aqt use glibc\-specific execinfo\&.h on uclibc builds
* \fBa76fde7 \fR 2014\-04\-10 ~ [fsp] Add requestUnmount() method together with the request manager\&.
* \fB9de7a71 \fR 2014\-04\-10 ~ linux_aura: Use system configuration for middle clicking the titlebar\&.
* \fB073b0c2 \fR 2014\-04\-10 ~ ContentView\->ContentViewCore in ContentViewRenderView
* \fB2250f53 \fR 2014\-04\-10 ~ ozone: evdev: Filter devices by path
* \fB33a7a74 \fR 2014\-04\-10 ~ Always output seccomp error messages to stderr
.fi
.if n \{\
.RE
.\}
.sp
Switch back to where we were using the nav* commands (for fun\&.\&.\&. git checkout would work here too)
.sp
.if n \{\
.RS 4
.\}
.nf
\fB$ git map\-branches\fR
origin/master
chap2
\fB fix_typo *
$ git nav\-upstream\fR
Note: checking out \*(Aqorigin/master\*(Aq\&.
You are in \*(Aqdetached HEAD\*(Aq state\&. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout\&.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using \-b with the checkout command again\&. Example:
git checkout \-b new_branch_name
HEAD is now at beec6f4\&.\&.\&. Make ReflectorImpl use mailboxes
\fB$ git nav\-downstream\fR
Please select a downstream branch
0\&. chap2
1\&. fix_typo
Selection (0\-1)[0]: 0
Previous HEAD position was beec6f4\&.\&.\&. Make ReflectorImpl use mailboxes
Switched to branch \*(Aqchap2\*(Aq
Your branch is ahead of \*(Aqorigin/master\*(Aq by 1 commit\&.
(use "git push" to publish your local commits)
\fB$ git map\-branches\fR
origin/master
\fB chap2 *
\fR fix_typo
.fi
.if n \{\
.RE
.\}
.sp
Now we can pick up on chapter2 where we left off\&.
.sp
.if n \{\
.RS 4
.\}
.nf
\fB$ git thaw\fR
\fB$ git diff\fR
\fBdiff \-\-git a/build/whitespace_file\&.txt b/build/whitespace_file\&.txt\fR
\fBindex 3eba355\&.\&.9d08d9d 100644\fR
\fB\-\-\- a/build/whitespace_file\&.txt\fR
\fB+++ b/build/whitespace_file\&.txt\fR
@@ \-34,3 +34,7 @@ with his fork, watching the runny jelly spread and pool across his plate,
like the blood of a dying fawn\&. \e"It reminds me of that time \-\-\e" he started, as
his wife cut in quickly: \e"\-\- please\&. I can\*(Aqt bear to hear it\&.\e"\&. A flury of
images coming from the past flowed through his mind\&.
+
+"You recall what happened on Mulholland drive?" The ceiling fan rotated slowly
+overhead, barely disturbing the thick cigarette smoke\&. No doubt was left about
+when the fan was last cleaned\&.
\fB$ cat >> build/whitespace_file\&.txt <<EOF\fR
There was an poignant pause\&.
EOF
\fB$ git diff\fR
\fBdiff \-\-git a/build/whitespace_file\&.txt b/build/whitespace_file\&.txt\fR
\fBindex 3eba355\&.\&.e3a55de 100644\fR
\fB\-\-\- a/build/whitespace_file\&.txt\fR
\fB+++ b/build/whitespace_file\&.txt\fR
@@ \-34,3 +34,9 @@ with his fork, watching the runny jelly spread and pool across his plate,
like the blood of a dying fawn\&. \e"It reminds me of that time \-\-\e" he started, as
his wife cut in quickly: \e"\-\- please\&. I can\*(Aqt bear to hear it\&.\e"\&. A flury of
images coming from the past flowed through his mind\&.
+
+"You recall what happened on Mulholland drive?" The ceiling fan rotated slowly
+overhead, barely disturbing the thick cigarette smoke\&. No doubt was left about
+when the fan was last cleaned\&.
+
+There was an poignant pause\&.
\fB$ git commit \-am \*(AqFinish chapter 2\*(Aq\fR
[chap2 ceef712] Finish chapter 2
1 file changed, 6 insertions(+)
\fB$ git map\fR
\fB* ceef712 \fR (\fBchap2\fR) 2014\-04\-10 ~ Finish chapter 2
| * \fB2c0ad9c \fR (\fBfix_typo\fR) 2014\-04\-10 ~ Fix typo for good!
| * \fB615ffa7 \fR 2014\-04\-10 ~ Fix terrible typo\&.
|/
* \fBbeec6f4 \fR (origin/master, origin/HEAD) 2014\-04\-10 ~ Make ReflectorImpl use mailboxes\fB <(chap2, fix_typo)\fR
* \fB41290e0 \fR 2014\-04\-10 ~ don\*(Aqt use glibc\-specific execinfo\&.h on uclibc builds
* \fBa76fde7 \fR 2014\-04\-10 ~ [fsp] Add requestUnmount() method together with the request manager\&.
* \fB9de7a71 \fR 2014\-04\-10 ~ linux_aura: Use system configuration for middle clicking the titlebar\&.
* \fB073b0c2 \fR 2014\-04\-10 ~ ContentView\->ContentViewCore in ContentViewRenderView
* \fB2250f53 \fR 2014\-04\-10 ~ ozone: evdev: Filter devices by path
* \fB33a7a74 \fR 2014\-04\-10 ~ Always output seccomp error messages to stderr
\fB$ git cl upload \-r domo@chromium\&.org \-\-send\-mail\fR
\&.\&.\&. truncated output \&.\&.\&.
.fi
.if n \{\
.RE
.\}
.sp
We poke a committer until they lgtm :)
.sp
.if n \{\
.RS 4
.\}
.nf
\fB$ git cl set_commit\fR
.fi
.if n \{\
.RE
.\}
.sp
While that runs through the CQ, let\*(Aqs get started on chapter 3\&. Since we know that chapter 3 depends on chapter 2, we\*(Aqll track the current chapter2 branch\&.
.sp
.if n \{\
.RS 4
.\}
.nf
\fB$ git new\-branch \-\-upstream_current chap3\fR
\fB$ cat >> build/whitespace_file\&.txt <<EOF\fR
CHAPTER 3:
Mr\&. Usagi felt that something wasn\*(Aqt right\&. Shortly after the Domo\-Kun left he
began feeling sick\&.
EOF
\fB$ git commit \-am \*(Aqbeginning of chapter 3\*(Aq\fR
[chap3 7d4238a] beginning of chapter 3
1 file changed, 4 insertions(+)
\fB$ git map\fR
\fB* 7d4238a \fR (\fBchap3\fR) 2014\-04\-10 ~ beginning of chapter 3
* \fBceef712 \fR (\fBchap2\fR) 2014\-04\-10 ~ Finish chapter 2\fB <(chap3)\fR
| * \fB2c0ad9c \fR (\fBfix_typo\fR) 2014\-04\-10 ~ Fix typo for good!
| * \fB615ffa7 \fR 2014\-04\-10 ~ Fix terrible typo\&.
|/
* \fBbeec6f4 \fR (origin/master, origin/HEAD) 2014\-04\-10 ~ Make ReflectorImpl use mailboxes\fB <(chap2, fix_typo)\fR
* \fB41290e0 \fR 2014\-04\-10 ~ don\*(Aqt use glibc\-specific execinfo\&.h on uclibc builds
* \fBa76fde7 \fR 2014\-04\-10 ~ [fsp] Add requestUnmount() method together with the request manager\&.
* \fB9de7a71 \fR 2014\-04\-10 ~ linux_aura: Use system configuration for middle clicking the titlebar\&.
* \fB073b0c2 \fR 2014\-04\-10 ~ ContentView\->ContentViewCore in ContentViewRenderView
* \fB2250f53 \fR 2014\-04\-10 ~ ozone: evdev: Filter devices by path
* \fB33a7a74 \fR 2014\-04\-10 ~ Always output seccomp error messages to stderr
.fi
.if n \{\
.RE
.\}
.sp
We haven\*(Aqt updated the code in a while, so let\*(Aqs do that now\&.
.sp
.if n \{\
.RS 4
.\}
.nf
\fB$ git rebase\-update\fR
Fetching origin
From /Users/iannucci/chromium/depot_tools/docs/src/demo_repo
beec6f4\&.\&.59cdb73 master \-> origin/master
Rebasing: chap2
Rebasing: fix_typo
Failed! Attempting to squash fix_typo \&.\&.\&. Success!
Rebasing: chap3
Deleted branch fix_typo (was 5d26fec)\&.
Reparented chap3 to track origin/master (was tracking chap2)
Deleted branch chap2 (was 5d26fec)\&.
.fi
.if n \{\
.RE
.\}
.sp
Well look at that\&. The CQ landed our typo and chapter2 branches already and git rebase\-update cleaned them up for us\&.
.sp
.if n \{\
.RS 4
.\}
.nf
\fB$ gclient sync\fR
\&.\&.\&. truncated output \&.\&.\&.
\fB$ git map\fR
\fB* 93fe917 \fR (\fBchap3\fR) 2014\-04\-10 ~ beginning of chapter 3
* \fB5d26fec \fR (origin/master, origin/HEAD) 2014\-04\-10 ~ Finish chapter 2\fB <(chap3)\fR
* \fBdf7fefb \fR 2014\-04\-10 ~ Revert 255617, due to it not tracking use of the link doctor page properly\&.
* \fB4b39cda \fR 2014\-04\-10 ~ Fix terrible typo\&.
* \fB248c5b6 \fR 2014\-04\-10 ~ Temporarily CHECK(trial) in ChromeRenderProcessObserver::OnSetFieldTrialGroup\&.
* \fB8171df8 \fR 2014\-04\-10 ~ Remove AMD family check for the flapper crypto accelerator\&.
* \fBd6a30d2 \fR 2014\-04\-10 ~ Change the Pica load benchmark to listen for the polymer\-ready event
* \fBbeec6f4 \fR 2014\-04\-10 ~ Make ReflectorImpl use mailboxes
* \fB41290e0 \fR 2014\-04\-10 ~ don\*(Aqt use glibc\-specific execinfo\&.h on uclibc builds
* \fBa76fde7 \fR 2014\-04\-10 ~ [fsp] Add requestUnmount() method together with the request manager\&.
* \fB9de7a71 \fR 2014\-04\-10 ~ linux_aura: Use system configuration for middle clicking the titlebar\&.
* \fB073b0c2 \fR 2014\-04\-10 ~ ContentView\->ContentViewCore in ContentViewRenderView
* \fB2250f53 \fR 2014\-04\-10 ~ ozone: evdev: Filter devices by path
* \fB33a7a74 \fR 2014\-04\-10 ~ Always output seccomp error messages to stderr
.fi
.if n \{\
.RE
.\}
.sp
Someone on IRC mentions that they actually landed a chapter 3 already! We should pull their changes before continuing\&. Brace for a code conflict!
.sp
.if n \{\
.RS 4
.\}
.nf
\fB$ git rebase\-update\fR
Fetching origin
From /Users/iannucci/chromium/depot_tools/docs/src/demo_repo
5d26fec\&.\&.59cdb73 master \-> origin/master
Rebasing: chap2
\&.\&.\&. lots of output, it\*(Aqs a conflict alright :(\&.\&.\&.
\fB$ git diff\fR
\fBdiff \-\-cc build/whitespace_file\&.txt\fR
\fBindex 1293282,f903ea2\&.\&.0000000\fR
\fB\-\-\- a/build/whitespace_file\&.txt\fR
\fB+++ b/build/whitespace_file\&.txt\fR
@@@ \-42,4 \-42,5 +42,9 @@@ when the fan was last cleaned
There was an poignant pause\&.
CHAPTER 3:
++<<<<<<< HEAD
+Hilariousness! This chapter is awesome!
++=======
+ Mr\&. Usagi felt that something wasn\*(Aqt right\&. Shortly after the Domo\-Kun left he
+ began feeling sick\&.
++>>>>>>> beginning of chapter 3
.fi
.if n \{\
.RE
.\}
.sp
Oh, well, that\*(Aqs not too bad\&. In fact\&.\&.\&. that\*(Aqs a terrible chapter 3!
.sp
.if n \{\
.RS 4
.\}
.nf
\fB$ $EDITOR build/whitespace_file\&.txt\fR
\&.\&.\&. /me deletes bad chapter 3 \&.\&.\&.
\fB$ git add build/whitespace_file\&.txt\fR
\fB$ git diff \-\-cached\fR
\fBdiff \-\-git a/build/whitespace_file\&.txt b/build/whitespace_file\&.txt\fR
\fBindex 1293282\&.\&.f903ea2 100644\fR
\fB\-\-\- a/build/whitespace_file\&.txt\fR
\fB+++ b/build/whitespace_file\&.txt\fR
@@ \-42,4 +42,5 @@ when the fan was last cleaned\&.
There was an poignant pause\&.
CHAPTER 3:
\-Hilariousness! This chapter is awesome!
+Mr\&. Usagi felt that something wasn\*(Aqt right\&. Shortly after the Domo\-Kun left he
+began feeling sick\&.
.fi
.if n \{\
.RE
.\}
.sp
Much better
.sp
.if n \{\
.RS 4
.\}
.nf
\fB$ git rebase \-\-continue\fR
Applying: beginning of chapter 3
\fB$ git rebase\-update\fR
Fetching origin
chap3 up\-to\-date
\fB$ gclient sync\fR
\&.\&.\&. truncated output \&.\&.\&.
\fB$ git map\fR
\fB* 1cb4f5b \fR (\fBchap3\fR) 2014\-04\-10 ~ beginning of chapter 3
* \fB59cdb73 \fR (origin/master, origin/HEAD) 2014\-04\-10 ~ Refactor data interchange format\&.\fB <(chap3)\fR
* \fB34676a3 \fR 2014\-04\-10 ~ Ensure FS is exited for all not\-in\-same\-page navigations\&.
* \fB7d4784e \fR 2014\-04\-10 ~ Add best chapter2 ever!
* \fB5d26fec \fR 2014\-04\-10 ~ Finish chapter 2
* \fBdf7fefb \fR 2014\-04\-10 ~ Revert 255617, due to it not tracking use of the link doctor page properly\&.
* \fB4b39cda \fR 2014\-04\-10 ~ Fix terrible typo\&.
* \fB248c5b6 \fR 2014\-04\-10 ~ Temporarily CHECK(trial) in ChromeRenderProcessObserver::OnSetFieldTrialGroup\&.
* \fB8171df8 \fR 2014\-04\-10 ~ Remove AMD family check for the flapper crypto accelerator\&.
* \fBd6a30d2 \fR 2014\-04\-10 ~ Change the Pica load benchmark to listen for the polymer\-ready event
* \fBbeec6f4 \fR 2014\-04\-10 ~ Make ReflectorImpl use mailboxes
* \fB41290e0 \fR 2014\-04\-10 ~ don\*(Aqt use glibc\-specific execinfo\&.h on uclibc builds
* \fBa76fde7 \fR 2014\-04\-10 ~ [fsp] Add requestUnmount() method together with the request manager\&.
* \fB9de7a71 \fR 2014\-04\-10 ~ linux_aura: Use system configuration for middle clicking the titlebar\&.
* \fB073b0c2 \fR 2014\-04\-10 ~ ContentView\->ContentViewCore in ContentViewRenderView
* \fB2250f53 \fR 2014\-04\-10 ~ ozone: evdev: Filter devices by path
* \fB33a7a74 \fR 2014\-04\-10 ~ Always output seccomp error messages to stderr
\fB$ git cl upload\fR
\&.\&.\&. truncated output \&.\&.\&.
.fi
.if n \{\
.RE
.\}
.sp
.sp
So there you have the basic flow\&. Note that you don\(cqt \fIhave\fR to do chromium development using these tools\&. Any git workflow is compatible, as long as git cl upload is able to upload good patches\&.
.SH "CREATING / UPLOADING A CL"
.if n \{\
.sp
.\}
.RS 4
.it 1 an-trap
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
.ps +1
\fBNote\fR
.ps -1
.br
.sp
The remainder of the tutorial assumes that your current working directory is the src/ folder mentioned in Getting the code\&.
.sp .5v
.RE
.sp
Each CL corresponds exactly with a single branch in git\&. Any time you want to begin a new CL, just:
.sp
.if n \{\
.RS 4
.\}
.nf
\fB$ git new\-branch <branch_name>\fR
.fi
.if n \{\
.RE
.\}
.sp
.sp
This will create and checkout a new branch named branch_name which will track the default upstream (which is origin/master)\&. See \fBgit-new-branch\fR(1) for more features, such as the ability to track \fILKGR\fR\&.
.sp
Commit as many changes as you like to this branch\&. When you want to upload it for review, run:
.sp
.if n \{\
.RS 4
.\}
.nf
\fB$ git cl upload\fR
.fi
.if n \{\
.RE
.\}
.sp
.sp
This will take the diff of your branch against its upstream (origin/master), and will post it to the \m[blue]\fBChromium code review site\fR\m[]\&\s-2\u[5]\d\s+2\&.
.SH "UPDATING THE CODE"
.sp
Inevitably, you\(cqll want to pull in changes from the main Chromium repo\&. This is pretty easy with \fIdepot_tools\fR:
.sp
.if n \{\
.RS 4
.\}
.nf
\fB$ git rebase\-update\fR
.fi
.if n \{\
.RE
.\}
.sp
.sp
This command will update all of your CLs to contain the latest code from their upstreams\&. It will also automatically clean up CLs which have been committed and a couple other nice things\&. See \fBgit-rebase-update\fR(1) for the full scoop\&.
.sp
One thing to look out for are \fImerge conflicts\fR\&. These happen for exactly the same as they do with SVN, but the experience is a little more controllable with git\&. git rebase\-update will try to rebase all your branches for you, but if it encounters a merge conflict in one, it will halt and leave you in a rebase conflict state (see \fBgit-rebase\fR(1))\&. Resolving git rebase merge conflicts is beyond the scope of this tutorial, but there are many good sources online (see the Prerequisites for some)\&.
.sp
Sometimes you\(cqre pretty certain that you\(cqve committed a certain branch, but git rebase\-update isn\(cqt able to tell that for sure\&. This is usually because your branch doesn\(cqt rebase cleanly\&. You could just delete the branch with git branch \-D <branch>, but you\(cqd like to double check the diff of your branch against its upstream before deleting it\&. If this is the case you can abort the rebase started by git rebase\-update, and then run \fBgit-squash-branch\fR(1) to flatten your branch into a single commit\&. When you run git rebase\-update again, you\(cqll get a (hopefully) much smaller / saner diff\&. If it turns out you were wrong about your branch being fully committed, you can use \fBgit-reflog\fR(1) to reset your branch back to where it was before\&. If the diff looks inconsequential, you can use git rebase \-\-skip to ignore it, and then git rebase\-update will clean it up for you\&.
.sp
Once you\(cqre done resolving all of the merge conflict, just run git rebase\-update, and it will pick up where it left off\&. Once the command has finished updating all of your branches, it will return you back to the branch you started on\&.
.if n \{\
.sp
.\}
.RS 4
.it 1 an-trap
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
.ps +1
\fBNote\fR
.ps -1
.br
.sp
Running git rebase\-update will update all your branches, but it will not automatically run gclient sync to update your dependencies\&.
.sp .5v
.RE
.SH "MANAGING MULTIPLE CLS"
.sp
Sometimes you want to work on more than one CL at once (say, you have a CL posted for review and want to work on something else)\&. For each CL that you want to work on, just use git new\-branch <branchname>\&.
.sp
Once you start to have more than one CL at a time, it can be easy to lose your bearings\&. Fortunately, \fIdepot_tools\fR has two tools to help you out:
.sp
.if n \{\
.RS 4
.\}
.nf
\fB$ git map\fR
*\:\fB 7dcfe47 \fR (\:\fBfrozen_changes\fR\:) 2014\-03\-12 ~ FREEZE\&.unindexed
* \fB4b0c180\fR 2014\-03\-12 ~ modfile
* \fB59a7cca\fR 2014\-03\-12 ~ a deleted file
* \fB6bec695\fR (\:origin/master\:) 2014\-03\-11 ~ Add neat feature \fB<(frozen_changes)\fR
* \fBd15a38a\fR 2014\-03\-11 ~ Epic README update
* \fBd559894\fR (\:\fBmaster\fR\:) 2014\-03\-11 ~ Important upstream change
| * \fB9c311fd\fR (\:\fBcool_feature\fR\:) 2014\-03\-11 ~ Respond to CL comments
| | * \fB2a1eeb2\fR (\:\fBsubfeature\fR\:) 2014\-03\-11 ~ integrate with CoolService
| | * \fBd777af6\fR 2014\-03\-11 ~ slick commenting action
| |/
| * \fB265803a\fR 2014\-03\-11 ~ another improvement \fB<(subfeature)\fR
| * \fB6d831ac\fR (\:\fBspleen_tag\fR\:) 2014\-03\-11 ~ Refactor spleen
| * \fB82e74ab\fR 2014\-03\-11 ~ Add widget
|/
* \fBd08c5b3\fR (\:\fBbogus_noparent\fR\:) 2014\-03\-11 ~ Wonderful beginnings \fB<(cool_feature)\fR
.fi
.if n \{\
.RE
.\}
.sp
.sp
Note that this example repo is in dire need of a \fBgit-rebase-update\fR(1)!
.sp
.if n \{\
.RS 4
.\}
.nf
\fB$ git map\-branches\fR
origin/master
cool_feature
subfeature
frozen_changes *
master
.fi
.if n \{\
.RE
.\}
.sp
.PP
\fBgit-map\fR(1)
.RS 4
This tool shows you the history of all of your branches in a pseudo\-graphical format\&. In particular, it will show you which commits all of your branches are on, which commit you currently have checked out, and more\&. Check out the doc for the full details\&.
.RE
.PP
\fBgit-map-branches\fR(1)
.RS 4
This tool just shows you which branches you have in your repo, and thier upstream relationship to each other (as well as which branch you have checked out at the moment)\&.
.RE
.sp
Additionally, sometimes you need to switch between branches, but you\(cqve got work in progress\&. You could use \fBgit-stash\fR(1), but that can be tricky to manage because you need to remember which branches you stashed what changes on\&. Helpfully \fIdepot_tools\fR includes two tools which can greatly assist in case:
.sp
\fBgit-freeze\fR(1) allows you to put the current branch in \*(Aqsuspended animation\*(Aq by committing your changes to a specially\-named commit on the top of your current branch\&. When you come back to your branch later, you can just run \fBgit-thaw\fR(1) to get your work\-in\-progress changes back to what they were\&.
.sp
Another useful tool is \fBgit-rename-branch\fR(1)\&. Unlike git branch \-m <old> <new>, this tool will correctly preserve the upstream relationships of your branch compared to its downstreams\&.
.sp
Finally, take a look at \fBgit-upstream-diff\fR(1)\&. This will show you the combined diff for all the commits on your branch against the upstream tracking branch\&. This is \fIexactly\fR what git cl upload will push up to code review\&. Additionally, consider trying the \-\-wordwise argument to get a colorized per\-word diff (instead of a per\-line diff)\&.
.SH "MANAGING DEPENDENT CLS"
.sp
Now that you know how to manage \fIindependent\fR CLs, we\(cqll see how to manage \fIdependent\fR CLs\&. Dependent CLs are useful when your second (or third or fourth or \&...) CL depends on the changes in one of your other CLs (such as: CL 2 won\(cqt compile without CL 1, but you want to submit them as two separate reviews)\&.
.sp
Like all of the other CLs we\(cqve created, we use \fBgit-new-branch\fR(1), but this time with an extra argument\&. First, git checkout the branch you want to base the new one on (i\&.e\&. CL 1), and then run:
.sp
.if n \{\
.RS 4
.\}
.nf
\fB$ git new\-branch \-\-upstream_current <branch_name>\fR
.fi
.if n \{\
.RE
.\}
.sp
.sp
This will make a new branch which tracks the \fIcurrent\fR branch as its upstream (as opposed to \fIorigin/master\fR)\&. All changes you commit to this branch will be in addition to the previous branch, but when you git cl upload, you will only upload the diff for the dependent (child) branch\&. You may have as many branches nested in this fashion as you like\&.
.sp
\fBgit-map\fR(1) and \fBgit-map-branches\fR(1) are particularly helpful when you have dependent branches\&. In addition, there are two helper commands which let you traverse your working copy up and down this tree of branches: \fBgit-nav-upstream\fR(1) and \fBgit-nav-downstream\fR(1)\&.
.sp
Sometimes when dealing with dependent CLs, it turns out that you accidentally based a branch on the wrong upstream, but since then you\(cqve committed changes to it, or even based \fIanother\fR branch off of that one\&. Or you discover that you have two independent CLs that would actually be much better off as dependent CLs\&. In instances like these, you can check out the offending branch and use \fBgit-reparent-branch\fR(1) to move it to track a different parent\&. Note that this can also be used to move a branch from tracking origin/master to lkgr or vice versa\&.
.SH "CONCLUSION"
.sp
Hopefully that gives you a good starting overview on Chromium development using \fIdepot_tools\fR\&. If you have questions which weren\(cqt answered by this tutorial or the man pages for the tools (see the index of all tools here: \fBdepot_tools\fR(7)), please feel free to ask\&.
.SH "GLOSSARY"
.PP
CL
.RS 4
A
\fIchange\-list\fR\&. This is a diff which you would like to commit to the codebase\&.
.RE
.PP
DEPS
.RS 4
A file in the chromium checkout which
gclient sync
uses to determine what dependencies to pull in\&. This file also contains
\fIhooks\fR\&.
.RE
.PP
LKGR
.RS 4
Last Known Good Revision\&. This is a
\fBgit-tag\fR(1)
which tracks the last version of
origin/master
which has passed the full set of testing on the
\m[blue]\fBmain Chromium waterfall\fR\m[]\&\s-2\u[6]\d\s+2\&.
.RE
.SH "CHROMIUM DEPOT_TOOLS"
.sp
Part of the chromium \fBdepot_tools\fR(7) suite\&. These tools are meant to assist with the development of chromium and related projects\&. Download the tools from \m[blue]\fBhere\fR\m[]\&\s-2\u[7]\d\s+2\&.
.SH "NOTES"
.IP " 1." 4
Think like (a) Git
.RS 4
\%http://think-like-a-git.net/
.RE
.IP " 2." 4
Git Immersion Tutorial
.RS 4
\%http://gitimmersion.com/
.RE
.IP " 3." 4
pcottle\(cqs Visual Git Branching
.RS 4
\%http://pcottle.github.io/learnGitBranching
.RE
.IP " 4." 4
Pro Git book
.RS 4
\%http://git-scm.com/book
.RE
.IP " 5." 4
Chromium code review site
.RS 4
\%https://codereview.chromium.org
.RE
.IP " 6." 4
main Chromium waterfall
.RS 4
\%http://build.chromium.org
.RE
.IP " 7." 4
here
.RS 4
\%https://chromium.googlesource.com/chromium/tools/depot_tools.git
.RE
git
asciidoc
__*.txt
\ No newline at end of file
demo_repo
ansi2html
__*.txt
CHROMIUM DEPOT_TOOLS
--------------------
Part of the chromium linkgit:depot_tools[1] suite. These tools are meant to
Part of the chromium linkgit:depot_tools[7] suite. These tools are meant to
assist with the development of chromium and related projects. Download the tools
from link:{sys3:git config remote.origin.url}[here].
......
A tutorial for these tools can be found at linkgit:depot_tools_tutorial[7].
#!/bin/bash
REMOTE=$(pwd)/demo_repo
unset GIT_DIR
# Helper functions
set_user() {
export GIT_AUTHOR_EMAIL="$1@chromium.org"
export GIT_AUTHOR_NAME="$1"
export GIT_COMMITTER_EMAIL="$1@chromium.org"
export GIT_COMMITTER_NAME="$1"
}
set_user 'local'
# increment time by X seconds
TIME=1397119976
tick() {
TIME=$[$TIME + $1]
export GIT_COMMITTER_DATE="$TIME +0000"
export GIT_AUTHOR_DATE="$TIME +0000"
}
tick 0
# a commit
c() {
silent git commit --allow-empty -m "$1"
tick 10
}
praw() {
echo -e "\x1B[37;1m$ $@\x1B[m"
}
# print a visible command (but don't run it)
pcommand() {
praw "$(python -c '\
import sys, pipes; \
print " ".join(map(pipes.quote, sys.argv[1:]))' "$@")"
}
# run a visible command
run() {
pcommand "$@"
"$@"
}
comment() {
echo "# $@"
}
# run a silent command
silent() {
if [[ $DEBUG ]]
then
"$@"
else
"$@" > /dev/null 2> /dev/null
fi
}
# add a file with optionally content
add() {
local CONTENT=$2
if [[ ! $CONTENT ]]
then
CONTENT=$(python -c 'import random, string; \
print "".join(random.sample(string.lowercase, 16))')
fi
echo "$CONTENT" > $1
silent git add $1
}
# Add a special callout marker at the given line offset to indicate to
# filter_demo_output.py to add a callout at that offset.
callout() {
echo -e "\x1b[${1}c"
}
#!/bin/bash
. common_demo_functions.sh
TDIR=$(mktemp --tmpdir -d demo_repo.XXXXXXXXXX)
trap "rm -rf $TDIR" EXIT
cd $TDIR
silent git clone "$REMOTE" .
silent git reset --hard stage_1
silent git update-ref refs/remotes/origin/master stage_1
silent git tag -d $(git tag -l 'stage_*')
silent git checkout origin/master
silent git branch -d master
silent git config color.ui always
if [[ ! "$BLANK_DEMO" ]]
then
silent git new-branch cool_feature
c "Add widget"
c "Refactor spleen"
silent git tag spleen_tag
c "another improvement"
silent git new-branch --upstream_current subfeature
c "slick commenting action"
c "integrate with CoolService"
silent git checkout cool_feature
c "Respond to CL comments"
silent git new-branch fixit
c "Epic README update"
c "Add neat feature"
silent git new-branch --upstream_current frozen_branch
c "a deleted file"
c "modfile"
c "FREEZE.unindexed"
fi
#!/bin/bash
BLANK_DEMO=1
. demo_repo.sh
trunc() {
echo ... truncated output ...
}
trunc_command() {
pcommand "$@"
trunc
}
WS=build/whitespace_file.txt
add_ws() {
praw cat '>>' $WS '<<EOF'
echo -e "$1"
echo EOF
echo -e "$1" >> $WS
}
ed_ws() {
echo -ne "\x1B[37;1m$ echo -e "
echo -n "'$1'"
echo -e " | ed $WS\x1B[m"
echo -e "$1" | ed $WS
}
# needs an extra echo afterwards
map() {
run git map
echo
}
ED1='/Banana\ns/Banana/Kuun\nwq'
ADD1="
\"You recall what happened on Mulholland drive?\" The ceiling fan rotated slowly
overhead, barely disturbing the thick cigarette smoke. No doubt was left about
when the fan was last cleaned."
ED2='/Kuun\ns/Kuun/Kun\nwq'
ADD2="
There was an poignant pause."
ADD3="
CHAPTER 3:
Mr. Usagi felt that something wasn't right. Shortly after the Domo-Kun left he
began feeling sick."
trunc_command fetch chromium
pcommand cd src
comment "(only on linux)"
trunc_command ./build/install-build-deps.sh
comment "Pull in all dependencies for HEAD"
trunc_command gclient sync
comment "Let's fix something!"
run git new-branch fix_typo
ed_ws "$ED1"
run git commit -am 'Fix terrible typo.'
map
run git status
trunc_command git cl upload -r domo@chromium.org --send-mail
comment "While we wait for feedback, let's do something else."
run git new-branch chap2
run git map-branches
add_ws "$ADD1"
run git status
comment "Someone on the code review pointed out that our typo-fix has a typo :("
comment "We're still working on 'chap2' but we really want to land"
comment "'fix_typo', so let's switch over and fix it."
run git freeze
run git checkout fix_typo 2>&1
ed_ws "$ED2"
run git upstream-diff --wordwise
run git commit -am 'Fix typo for good!'
trunc_command git cl upload
comment "Since we got lgtm, let the CQ land it."
pcommand git cl set_commit
map
comment "Switch back to where we were using the nav* commands (for fun..."
comment "git checkout would work here too)"
run git map-branches
run git nav-upstream 2>&1
pcommand git nav-downstream
git nav-downstream --pick 0 2>&1
run git map-branches
comment "Now we can pick up on chapter2 where we left off."
run git thaw
run git diff
add_ws "$ADD2"
run git diff
run git commit -am 'Finish chapter 2'
map
trunc_command git cl upload -r domo@chromium.org --send-mail
comment "We poke a committer until they lgtm :)"
pcommand git cl set_commit
comment "While that runs through the CQ, let's get started on chapter 3."
comment "Since we know that chapter 3 depends on chapter 2, we'll track the"
comment "current chapter2 branch."
run git new-branch --upstream_current chap3
add_ws "$ADD3"
run git commit -am 'beginning of chapter 3'
map
comment "We haven't updated the code in a while, so let's do that now."
pcommand git rebase-update
echo Fetching origin
git fetch origin 2>&1 | grep -v 'stage'
silent git update-ref refs/remotes/origin/master stage_2
silent git tag -d $(git tag -l 'stage_*')
git rebase-update --no_fetch
comment "Well look at that. The CQ landed our typo and chapter2 branches "
comment "already and git rebase-update cleaned them up for us."
trunc_command gclient sync
map
comment "Someone on IRC mentions that they actually landed a chapter 3 already!"
comment "We should pull their changes before continuing. Brace for"
comment "a code conflict!"
pcommand git rebase-update
echo Fetching origin
git fetch origin 2>&1 | grep -v 'stage'
silent git tag -d $(git tag -l 'stage_*')
echo Rebasing: chap2
silent git rebase-update
echo ... lots of output, it\'s a conflict alright :\(...
run git diff
comment "Oh, well, that's not too bad. In fact... that's a terrible chapter 3!"
praw \$EDITOR "$WS"
echo "... /me deletes bad chapter 3 ..."
silent git checkout --theirs -- "$WS"
run git add "$WS"
run git diff --cached
comment "Much better"
run git rebase --continue
run git rebase-update
silent git tag -d $(git tag -l 'stage_*')
trunc_command gclient sync
map
trunc_command git cl upload
depot_tools_tutorial(7)
=======================
NAME
----
depot_tools_tutorial - A tutorial introduction to the Chromium depot_tools git
extensions.
DESCRIPTION
-----------
The Chromium linkgit:depot_tools[7] suite contains many git workflow-enhancing
tools which are designed to work together to enable anyone to wrangle the
Chromium codebase expertly. This tutorial explains how to do development on
Chromium using these tools. This will cover:
* <<_setting_up,Setting up>>
* <<_getting_the_code,Getting the code>>
* <<_tl_dr_walkthrough,TL;DR Walkthrough>>
* <<_creating_uploading_a_cl,Creating / Uploading a CL>>
* <<_updating_the_code,Updating the code>>
* <<_managing_multiple_cls,Managing multiple CLs>>
* <<_managing_dependent_cls,Managing dependent CLs>>
Please refer to the manpages (or `--help` output) for details about any of the
commands mentioned in this tutorial.
[NOTE]
If your platform does not support manpages (or you prefer something a bit more
expressive than plain text) you can find all documentation in 'html' form in the
`[DEPOT_TOOLS]/docs/html` folder.
PREREQUISITES
~~~~~~~~~~~~~
This tutorial assumes basic familiarity with git terminology and concepts. If you
need to brush up on these, the following are very good resources:
* link:http://think-like-a-git.net/[Think like (a) Git] - A lighthearted
overview of git. If you're sorta-familiar with git, but not 'comfortable' with
it, then give this a look.
* link:http://gitimmersion.com/[Git Immersion Tutorial] - An in-depth git
tutorial.
* link:http://pcottle.github.io/learnGitBranching[pcottle's Visual Git
Branching] - An excellent interactive/graphical demo on how git handles
commits, branches, and shows the operations git performs on them.
* link:http://git-scm.com/book[Pro Git book] - ``The'' book for learning git
from basics to advanced concepts. A bit dry, but very through.
If you've tried these out and are still having some trouble getting started,
there are 'many' other resources online which should help. If you're 'really'
**'really'** stuck, then chat up one of the Chromium infrastructure team
members for some pointers.
Litmus Test::
If you know what `git add`, `git status`, `git commit` do and you know
'essentially' what `git rebase` does, then you should know enough to follow
along.
SETTING UP
----------
GET DEPOT TOOLS
~~~~~~~~~~~~~~~
ifdef::backend-xhtml11[]
LINUX / MAC
^^^^^^^^^^^
endif::backend-xhtml11[]
Clone the 'depot_tools' repository:
[subs="quotes"]
----
[white]**$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools**
----
Add 'depot_tools' to the 'end' of your PATH and MANPATH (you will probably want
to put this in your `~/.bashrc` or `~/.zshrc`). Assuming you cloned
'depot_tools' to `/path/to/depot_tools`:
[postsubs="quotes"]
----
[white]**$ export PATH=$PATH:/path/to/depot_tools**
[white]**$ export MANPATH=$MANPATH:/path/to/depot_tools/docs** <1>
----
<1> Observe that this path is +depot_tools/+**+docs+**.
// No need to show the Windows stuff on the manpage output.
ifdef::backend-xhtml11[]
WINDOWS
^^^^^^^
Download the 'depot_tools'
link:https://src.chromium.org/svn/trunk/tools/depot_tools.zip[bundle] and
extract it somewhere.
[WARNING]
*DO NOT* use drag-n-drop or copy-n-paste extract from Explorer, this will not
extract the hidden ``.git'' folder which is necessary for 'depot_tools' to
autoupdate itself. You can use ``Extract all...'' from the context menu though.
Add 'depot_tools' to the 'end' of your PATH. Assuming you unzipped the
bundle to `C:\workspace\depot_tools`:
With Administrator access: ::
*Control Panel -> System and Security -> System -> Advanced system settings*
+
Modify the PATH system variable to include `C:\workspace\depot_tools`.
Without Administrator access: ::
*Control Panel -> User Accounts -> User Accounts -> Change my environment variables*
+
Add a PATH user variable: `%PATH%;C:\workspace\depot_tools`.
From a `cmd.exe` shell, run the command `gclient` (without arguments). On first
run, gclient will install all the Windows-specific bits needed to work with the
code, including msysgit and python.
[NOTE]
=====
* If you run gclient from a non-cmd shell (e.g., cygwin, PowerShell), it
may appear to run properly, but msysgit, python, and other tools may not get
installed correctly.
* If you see strange errors with the file system on the first run of gclient,
you may want to link:http://tortoisesvn.tigris.org/faq.html#cantmove2[disable
Windows Indexing].
* If you are running Windows XP and see errors like ``The system cannot execute
the specified program'', try installing the
link:http://code.google.com/p/chromium/issues/detail?id=75886[``Microsoft
Visual C++ 2008 Redistributable Package''].
=====
endif::backend-xhtml11[]
BOOTSTRAPPING CONFIGURATION
~~~~~~~~~~~~~~~~~~~~~~~~~~~
If you have never used git before, you’ll need to set some global git
configurations; substitute your name and email address in the following
commands:
[subs="quotes,attributes"]
----
[white]**$ git config --global user.name ``John Doe''**
[white]**$ git config --global user.email ``jdoe@email.com''**
[white]**$ git config --global core.autocrlf false**
[white]**$ git config --global core.filemode false**
[white]**$** # and for fun!
[white]**$ git config --global color.ui true**
----
GETTING THE CODE
----------------
Pick an empty directory and run one of the following:
[subs="quotes"]
----
[white]**$ fetch chromium** # Basic checkout for desktop Chromium
[white]**$ fetch blink** # Chromium code with Blink checked out to tip-of-tree
[white]**$ fetch android** # Chromium checkout for Android platform
[white]**$ fetch ios** # Chromium checkout for iOS platform
----
When the `fetch` tool completes you should have the following in your working
directory:
[subs="quotes"]
----
[white]**.gclient** # A configuration file for you source checkout
[white]**src/** # Top-level Chromium source checkout.
----
If you are on linux, then you'll need to run:
[subs="specialcharacters,quotes"]
----
[white]**$ cd src && ./build/install-build-deps.sh**
----
And finally:
[postsubs="quotes"]
----
[white]**$ gclient sync** <1>
----
<1> This will pull all dependencies of the Chromium src checkout. You will need
to run this any time you update the main src checkout.
TL;DR WALKTHROUGH
-----------------
This section will demo what a typical workflow looks like when writing, updating,
and committing multiple CLs.
demo:tldr[]
So there you have the basic flow. Note that you don't 'have' to do chromium
development using these tools. Any git workflow is compatible, as long as
`git cl upload` is able to upload good patches.
CREATING / UPLOADING A CL
-------------------------
NOTE: The remainder of the tutorial assumes that your current working directory
is the `src/` folder mentioned in <<_getting_the_code,Getting the code>>.
Each CL corresponds exactly with a single branch in git. Any time you want to
begin a new CL, just:
[subs="specialcharacters,quotes"]
----
[white]**$ git new-branch <branch_name>**
----
This will create and checkout a new branch named `branch_name` which will track
the default upstream (which is `origin/master`). See linkgit:git-new-branch[1]
for more features, such as the ability to track 'LKGR'.
Commit as many changes as you like to this branch. When you want to upload it
for review, run:
[subs="quotes"]
----
[white]**$ git cl upload**
----
This will take the diff of your branch against its upstream (`origin/master`),
and will post it to the link:https://codereview.chromium.org[Chromium code
review site].
UPDATING THE CODE
-----------------
Inevitably, you'll want to pull in changes from the main Chromium repo. This is
pretty easy with 'depot_tools':
[subs="quotes"]
----
[white]**$ git rebase-update**
----
This command will update all of your CLs to contain the latest code from their
upstreams. It will also automatically clean up CLs which have been committed and
a couple other nice things. See linkgit:git-rebase-update[1] for the full
scoop.
One thing to look out for are 'merge conflicts'. These happen for exactly the
same as they do with SVN, but the experience is a little more controllable with
git. `git rebase-update` will try to rebase all your branches for you, but if it
encounters a merge conflict in one, it will halt and leave you in a rebase
conflict state (see linkgit:git-rebase[1]). Resolving `git rebase` merge
conflicts is beyond the scope of this tutorial, but there are many good sources
online (see the <<_prerequisites,Prerequisites>> for some).
Sometimes you're pretty certain that you've committed a certain branch, but `git
rebase-update` isn't able to tell that for sure. This is usually because your
branch doesn't rebase cleanly. You could just delete the branch with `git branch
-D <branch>`, but you'd like to double check the diff of your branch against its
upstream before deleting it. If this is the case you can abort the rebase
started by `git rebase-update`, and then run linkgit:git-squash-branch[1] to
flatten your branch into a single commit. When you run `git rebase-update`
again, you'll get a (hopefully) much smaller / saner diff. If it turns out you
were wrong about your branch being fully committed, you can use
linkgit:git-reflog[1] to reset your branch back to where it was before. If the
diff looks inconsequential, you can use `git rebase --skip` to ignore it, and
then `git rebase-update` will clean it up for you.
Once you're done resolving all of the merge conflict, just run `git
rebase-update`, and it will pick up where it left off. Once the command has
finished updating all of your branches, it will return you back to the branch
you started on.
[NOTE]
Running `git rebase-update` will update all your branches, but it will not
automatically run `gclient sync` to update your dependencies.
MANAGING MULTIPLE CLS
---------------------
Sometimes you want to work on more than one CL at once (say, you have a CL
posted for review and want to work on something else). For each CL that you
want to work on, just use `git new-branch <branchname>`.
Once you start to have more than one CL at a time, it can be easy to lose your
bearings. Fortunately, 'depot_tools' has two tools to help you out:
[subs="specialcharacters,quotes,attributes"]
----
[white]**$ git map**
[white blue-background]##*##{zwsp}[blue-background red]** 7dcfe47 ** [green]##(##{zwsp}[aqua]**frozen_changes**{zwsp}[green]##)## [yellow]##2014-03-12## \~ FREEZE.unindexed
* [red]**4b0c180** [yellow]##2014-03-12## \~ modfile
* [red]**59a7cca** [yellow]##2014-03-12## \~ a deleted file
* [red]**6bec695** [green]##(##{zwsp}[red]##origin/master##{zwsp}[green]##)## [yellow]##2014-03-11## \~ Add neat feature [white]**<(frozen_changes)**
* [red]**d15a38a** [yellow]##2014-03-11## \~ Epic README update
* [red]**d559894** [green]##(##{zwsp}[lime]**master**{zwsp}[green]##)## [yellow]##2014-03-11## \~ Important upstream change
[red]##|## * [red]**9c311fd** [green]##(##{zwsp}[lime]**cool_feature**{zwsp}[green]##)## [yellow]##2014-03-11## \~ Respond to CL comments
[red]##|## [green]##|## * [red]**2a1eeb2** [green]##(##{zwsp}[lime]**subfeature**{zwsp}[green]##)## [yellow]##2014-03-11## \~ integrate with CoolService
[red]##|## [green]##|## * [red]**d777af6** [yellow]##2014-03-11## \~ slick commenting action
[red]##|## [green]##|/##
[red]##|## * [red]**265803a** [yellow]##2014-03-11## \~ another improvement [white]**<(subfeature)**
[red]##|## * [red]**6d831ac** [green]##(##{zwsp}[fuchsia]**spleen_tag**{zwsp}[green]##)## [yellow]##2014-03-11## \~ Refactor spleen
[red]##|## * [red]**82e74ab** [yellow]##2014-03-11## \~ Add widget
[red]##|/##
* [red]**d08c5b3** [green]##(##{zwsp}[lime]**bogus_noparent**{zwsp}[green]##)## [yellow]##2014-03-11## ~ Wonderful beginnings [white]**<(cool_feature)**
----
Note that this example repo is in dire need of a linkgit:git-rebase-update[1]!
[subs="quotes"]
----
[white]**$ git map-branches**
[red]#origin/master#
[green]#cool_feature#
[green]#subfeature#
[aqua]#frozen_changes *#
[green]#master#
----
linkgit:git-map[1]::
This tool shows you the history of all of your branches in a pseudo-graphical
format. In particular, it will show you which commits all of your branches
are on, which commit you currently have checked out, and more. Check out the
doc for the full details.
linkgit:git-map-branches[1]::
This tool just shows you which branches you have in your repo, and thier
upstream relationship to each other (as well as which branch you have checked
out at the moment).
Additionally, sometimes you need to switch between branches, but you've got work
in progress. You could use linkgit:git-stash[1], but that can be tricky to
manage because you need to remember which branches you stashed what changes on.
Helpfully 'depot_tools' includes two tools which can greatly assist in case:
linkgit:git-freeze[1] allows you to put the current branch in \'suspended
animation' by committing your changes to a specially-named commit on the top of
your current branch. When you come back to your branch later, you can just run
linkgit:git-thaw[1] to get your work-in-progress changes back to what they were.
Another useful tool is linkgit:git-rename-branch[1]. Unlike `git branch -m <old>
<new>`, this tool will correctly preserve the upstream relationships of your
branch compared to its downstreams.
Finally, take a look at linkgit:git-upstream-diff[1]. This will show you the
combined diff for all the commits on your branch against the upstream tracking
branch. This is 'exactly' what `git cl upload` will push up to code review.
Additionally, consider trying the `--wordwise` argument to get a colorized
per-word diff (instead of a per-line diff).
MANAGING DEPENDENT CLS
----------------------
Now that you know how to manage 'independent' CLs, we'll see how to manage
'dependent' CLs. Dependent CLs are useful when your second (or third or fourth
or ...) CL depends on the changes in one of your other CLs (such as: CL 2 won't
compile without CL 1, but you want to submit them as two separate reviews).
Like all of the other CLs we've created, we use linkgit:git-new-branch[1], but
this time with an extra argument. First, `git checkout` the branch
you want to base the new one on (i.e. CL 1), and then run:
[subs="specialcharacters,quotes"]
----
[white]**$ git new-branch --upstream_current <branch_name>**
----
This will make a new branch which tracks the 'current' branch as its upstream
(as opposed to 'origin/master'). All changes you commit to this branch will be
in addition to the previous branch, but when you `git cl upload`, you will only
upload the diff for the dependent (child) branch. You may have as many branches
nested in this fashion as you like.
linkgit:git-map[1] and linkgit:git-map-branches[1] are particularly helpful when
you have dependent branches. In addition, there are two helper commands which
let you traverse your working copy up and down this tree of branches:
linkgit:git-nav-upstream[1] and linkgit:git-nav-downstream[1].
Sometimes when dealing with dependent CLs, it turns out that you accidentally
based a branch on the wrong upstream, but since then you've committed changes to
it, or even based 'another' branch off of that one. Or you discover that you
have two independent CLs that would actually be much better off as dependent
CLs. In instances like these, you can check out the offending branch and use
linkgit:git-reparent-branch[1] to move it to track a different parent. Note that
this can also be used to move a branch from tracking `origin/master` to `lkgr`
or vice versa.
CONCLUSION
----------
Hopefully that gives you a good starting overview on Chromium development using
'depot_tools'. If you have questions which weren't answered by this tutorial or
the man pages for the tools (see the index of all tools here:
linkgit:depot_tools[7]), please feel free to ask.
GLOSSARY
--------
CL::
A 'change-list'. This is a diff which you would like to commit to the
codebase.
DEPS::
A file in the chromium checkout which `gclient sync` uses to determine what
dependencies to pull in. This file also contains 'hooks'.
LKGR::
Last Known Good Revision. This is a linkgit:git-tag[1] which tracks the last
version of `origin/master` which has passed the full set of testing on the
link:http://build.chromium.org[main Chromium waterfall].
include::_footer.txt[]
// vim: ft=asciidoc:
#!/usr/bin/env python
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import collections
import os
import re
import sys
from xml.sax.saxutils import escape
from cStringIO import StringIO
if not os.path.exists('ansi2html'):
print 'You must run ./make_docs.sh once before running this script.'
sys.exit(1)
# This dependency is pulled in by make_docs.sh
# if it doesn't exist, run ./make_docs.sh first
sys.path.insert(0, 'ansi2html')
import ansi2html # pylint: disable=F0401, W0611
import ansi2html.converter # pylint: disable=F0401, W0611
def simpleXML(string):
BRIGHT = 1
DIM = 2
NORMAL = 22
RESET = 0
ESC_RE = re.compile('(\x1B\\[[^m]*?)m')
ret = StringIO()
boldstate = False
for tok in ESC_RE.split(string):
if not tok:
continue
if tok[0] == '\x1b':
codes = map(int, filter(bool, tok[2:].split(';')))
if not codes:
codes = [RESET]
for code in codes:
# only care about Bright
if code == BRIGHT and boldstate is False:
boldstate = True
ret.write('<emphasis role="strong">')
elif code in (DIM, NORMAL, RESET) and boldstate:
boldstate = False
ret.write('</emphasis>')
else:
ret.write(escape(tok))
if boldstate:
ret.write('</emphasis>')
return ret.getvalue()
def main():
ansi2html.converter.SCHEME['custom'] = (
"#000000", "#e42e16", "#19c518", "#e7e71c", "#492ee1",
"#d338d3", "#33d6e5", "#ffffff",
)
backend = sys.argv[1]
output = sys.stdin.read().rstrip()
callout_re = re.compile('\x1b\[(\d+)c\n')
callouts = collections.defaultdict(int)
for i, line in enumerate(output.splitlines(True)):
m = callout_re.match(line)
if m:
callouts[i + int(m.group(1)) - len(callouts)] += 1
output = callout_re.sub('', output)
w = sys.stdout.write
callout_counter = 1
if backend == 'xhtml11':
preamble = (
'</p></div><div class="listingblock"><div class="content"><pre><code>'
)
postamble = '</code></pre></div></div><p><div class="paragraph">'
c = ansi2html.Ansi2HTMLConverter(inline=True, scheme='custom')
in_code = False
body = c.convert(output, full=False)
for i, line in enumerate(body.splitlines()):
if line.startswith('# '):
if in_code:
w(postamble)
in_code = False
w(line[1:])
else:
if not in_code:
w(preamble)
in_code = True
ext = ''
for _ in xrange(callouts[i]):
if not ext:
ext += '</span>'
ext += ' <b>&lt;%d&gt;</b>' % callout_counter
callout_counter += 1
if ext:
ext += '<span>'
w(line + ext + '\n')
if in_code:
w(postamble)
else:
preamble = '</simpara><literallayout class="monospaced">'
postamble = '</literallayout><simpara>'
in_code = False
body = simpleXML(output)
for i, line in enumerate(body.splitlines()):
if line.startswith('# '):
if in_code:
w(postamble)
in_code = False
w(line[1:])
else:
if not in_code:
w(preamble)
in_code = True
ext = ''
for _ in xrange(callouts[i]):
ext += ' <emphasis role="strong">(%d)</emphasis>' % callout_counter
callout_counter += 1
w(line + ext + '\n')
if in_code:
w(postamble)
if __name__ == '__main__':
main()
#!/bin/sh
. demo_repo.sh
add deleted_file
add unstaged_deleted_file
add modified_file
c "demo changes"
add added_file_with_unstaged_changes
echo bob >> added_file_with_unstaged_changes
add added_file
echo bob >> modified_file
silent git rm deleted_file
rm unstaged_deleted_file
touch unadded_file
run git status --short
run git freeze
run git status --short
run git log -n 2 --stat
run git thaw
run git status --short
......@@ -28,50 +28,7 @@ time you ran git freeze (freshly modified files, new files, etc.).
EXAMPLE
-------
[subs="specialcharacters,quotes,attributes"]
----
[white]**$ git status --short**
[green]##A## added_file
[green]##A##{zwsp}[red]##M## added_file_with_unstaged_changes
[green]##D## deleted_file
[red]##M## modified_file
[red]##D## unstaged_deleted_file
[red]##??## unadded_file
[white]**$ git freeze**
[white]**$ git status --short**
[white]**$ git log -n 2 --stat**
[yellow]##commit 182eccae8e385acba21c9ff2713e98ff4b7e17cd##
Author: Robert Iannucci <iannucci@chromium.org>
Date: Thu Mar 13 17:42:37 2014 -0700
FREEZE.unindexed
added_file_with_unstaged_changes | 3 [green]##\+\+##{zwsp}[red]##-##
modified_file | 4 [green]##\+\+\+##{zwsp}[red]##-##
unadded_file | 3 [green]##\+\+\+##
unstaged_deleted_file | 1 [red]##-##
4 files changed, 8 insertions(\+), 3 deletions(-)
[yellow]##commit ce07bdc49a61f54e6142b4bba5cc517cf6802bd4##
Author: Robert Iannucci <iannucci@chromium.org>
Date: Thu Mar 13 17:42:37 2014 -0700
FREEZE.indexed
added_file | 3 [green]##\+\+\+##
added_file_with_unstaged_changes | 1 [green]##\+##
deleted_file | 1 [red]##-##
3 files changed, 4 insertions(+), 1 deletion(-)
[white]**$ git thaw**
[white]**$ git status --short**
[green]##A## added_file
[green]##A##{zwsp}[red]##M## added_file_with_unstaged_changes
[green]##D## deleted_file
[red]##M## modified_file
[red]##D## unstaged_deleted_file
[red]##??## unadded_file
----
demo:1[]
SEE ALSO
--------
......
#!/bin/sh
. demo_repo.sh
silent git branch no_upstream HEAD~
run git map-branches
......@@ -35,18 +35,7 @@ Given the hypothetical demo repo in linkgit:git-map[1]\'s EXAMPLE section, and
assuming that the `frozen_changes` branch was currently checked out, running
'git map-branches' would result in an output like:
[subs="quotes"]
----
[white]**$ git map-branches**
[red]#origin/master#
[green]#cool_feature#
[green]#subfeature#
[aqua]#frozen_changes *#
[green]#master#
[fuchsia]#{NO UPSTREAM}#
[green]#bogus_noparent#
[aqua]#duplicate_cool_feature_no_upstream#
----
demo:1[]
include::_aliases.txt[]
......@@ -61,4 +50,4 @@ linkgit:git-map[1]
include::_footer.txt[]
// vim: ft=asciidoc:
\ No newline at end of file
// vim: ft=asciidoc:
#!/bin/sh
. demo_repo.sh
run git map
......@@ -51,26 +51,7 @@ EXAMPLE
-------
Running 'git map' would result in an output something like:
[subs="specialcharacters,quotes,attributes"]
----
[white]**$ git map**
[white blue-background]##*##{zwsp}[blue-background red]** 7dcfe47 ** [green]##(##{zwsp}[aqua]**frozen_changes**{zwsp}[green]##)## [yellow]##2014-03-12## \~ FREEZE.unindexed
* [red]**4b0c180** [yellow]##2014-03-12## \~ modfile
* [red]**59a7cca** [yellow]##2014-03-12## \~ a deleted file
* [red]**6bec695** [green]##(##{zwsp}[red]##origin/master##{zwsp}[green]##)## [yellow]##2014-03-11## \~ Add neat feature [white]**<(frozen_changes)**
* [red]**d15a38a** [yellow]##2014-03-11## \~ Epic README update
* [red]**d559894** [green]##(##{zwsp}[lime]**master**{zwsp}[green]##)## [yellow]##2014-03-11## \~ Important upstream change
[red]##|## * [red]**9c311fd** [green]##(##{zwsp}[lime]**cool_feature**{zwsp}[green]##)## [yellow]##2014-03-11## \~ Respond to CL comments
[red]##|## [green]##|## * [red]**2a1eeb2** [green]##(##{zwsp}[lime]**subfeature**{zwsp}[green]##)## [yellow]##2014-03-11## \~ integrate with CoolService
[red]##|## [green]##|## * [red]**d777af6** [yellow]##2014-03-11## \~ slick commenting action
[red]##|## [green]##|/##
[red]##|## * [red]**265803a** [yellow]##2014-03-11## \~ another improvement [white]**<(subfeature)**
[red]##|## * [red]**6d831ac** [green]##(##{zwsp}[fuchsia]**spleen_tag**{zwsp}[green]##)## [yellow]##2014-03-11## \~ Refactor spleen
[red]##|## * [red]**82e74ab** [yellow]##2014-03-11## \~ Add widget
[red]##|/##
* [red]**d08c5b3** [green]##(##{zwsp}[lime]**bogus_noparent**{zwsp}[green]##)## [yellow]##2014-03-11## ~ Wonderful beginnings [white]**<(cool_feature)**
----
demo:1[]
As you can see, the structure of the commit history is visible, particularly
what the parents of each commit are. In order to see the 'upstream'
......@@ -83,4 +64,4 @@ linkgit:git-map-branches[1]
include::_footer.txt[]
// vim: ft=asciidoc:
\ No newline at end of file
// vim: ft=asciidoc:
#!/bin/sh
. demo_repo.sh
silent git checkout origin/master
run git map-branches
pcommand git nav-downstream
git nav-downstream --pick 0 2>&1
run git map-branches
run git nav-downstream 2>&1
run git map-branches
......@@ -21,33 +21,7 @@ command will prompt you with a selection of the branches.
EXAMPLE
-------
[subs="quotes,attributes"]
----
[white]**$ git map-branches**
[red]**origin/master *{zwsp}**
[green]#cool_feature#
[green]#subfeature#
[green]#frozen_changes#
[green]#master#
[fuchsia]#{NO UPSTREAM}#
[green]#bogus_noparent#
[white]**$ git nav-downstream**
Please select a downstream branch
0. cool_feature
1. frozen_changes
2. master
Selection (0-2)[0]: 0
[white]**$ git map-branches**
[red]##origin/master##
[aqua]**cool_feature *{zwsp}**
[green]#subfeature#
[green]#frozen_changes#
[green]#master#
[fuchsia]#{NO UPSTREAM}#
[green]#bogus_noparent#
----
demo:1[]
include::_aliases.txt[]
......
#!/bin/sh
. demo_repo.sh
silent git checkout subfeature
run git map-branches
run git nav-upstream 2>&1
run git map-branches
callout 3
run git nav-upstream 2>&1
run git map-branches
......@@ -19,27 +19,9 @@ checks that out.
EXAMPLE
-------
[subs="quotes,attributes"]
----
[white]**$ git map-branches**
[red]##origin/master##
[green]#cool_feature#
[aqua]**subfeature *{zwsp}**
[green]#frozen_changes#
[green]#master#
[fuchsia]#{NO UPSTREAM}#
[green]#bogus_noparent#
[white]**$ git nav-upstream**
[white]**$ git map-branches**
[red]##origin/master##
[aqua]**cool_feature *{zwsp}**
[green]#subfeature#
[green]#frozen_changes#
[green]#master#
[fuchsia]#{NO UPSTREAM}#
[green]#bogus_noparent#
----
demo:1[]
1. Note that being in a 'detached HEAD' state is OK. You'll just want to create
a linkgit:git-new-branch[1] from here.
include::_aliases.txt[]
......
#!/bin/sh
. demo_repo.sh
run git map-branches
run git new-branch independent_cl
run git map-branches
run git new-branch --upstream subfeature nested_cl
callout 3
run git map-branches
run git checkout cool_feature
run git new-branch --upstream_current cl_depends_on_cool_feature
run git map-branches
......@@ -56,42 +56,10 @@ defaults to 'origin/master'. This is considered to be the 'root' branch.
EXAMPLE
-------
demo:1[]
[subs="specialcharacters,quotes,attributes,callouts"]
----
[white]**$ git map-branches**
[red]#origin/master#
[green]#cool_feature#
[green]#subfeature#
[aqua]#frozen_changes *#
[white]**$ git new-branch independent_cl**
[white]**$ git map-branches**
[red]#origin/master#
[green]#cool_feature#
[green]#subfeature#
[green]#frozen_changes#
[aqua]#independent_cl *#
[white]**$ git new-branch --upstream subfeature nested_cl**
[white]**$ git map-branches**
[red]#origin/master#
[green]#cool_feature#
[aqua]#subfeature# <1>
[aqua]#nested_cl *#
[green]#frozen_changes#
[green]#independent_cl#
[white]**$ git checkout cool_feature**
[white]**$ git new-branch --upstream_current cl_depends_on_cool_feature**
[white]**$ git map-branches**
[red]#origin/master#
[aqua]#cool_feature#
[aqua]#cl_depends_on_cool_feature *#
[green]#subfeature#
[green]#nested_cl#
[green]#frozen_changes#
[green]#independent_cl#
----
<1> Note that both branches are cyan because they are currently the same
'commit' object. See linkgit::git-map-branches[1] for more detail.
1. Note that both branches are cyan because they are currently the same
'commit' object. See linkgit:git-map-branches[1] for more detail.
include::_aliases.txt[]
......
#!/bin/sh
. demo_repo.sh
run git map
echo
# since these are all empty commits, pretend there's something there
pcommand git squash-branch -m "cool squash demo"
git squash-branch -m "cool squash demo" > /dev/null 2> /dev/null
c "cool squash demo"
run git map
......@@ -39,41 +39,8 @@ OPTIONS
EXAMPLE
-------
demo:1[]
[subs="specialcharacters,quotes,attributes"]
----
[white]**$ git map**
[white blue-background]##\*##{zwsp}[blue-background red]** 7dcfe47 ** [green]##(##{zwsp}[aqua]**frozen_changes**{zwsp}[green]##)## [yellow]##2014-03-12## \~ FREEZE.unindexed
* [red]**4b0c180** [yellow]##2014-03-12## \~ modfile
* [red]**59a7cca** [yellow]##2014-03-12## \~ a deleted file
* [red]**6bec695** [green]##(##{zwsp}[red]##origin/master##{zwsp}[green]##)## [yellow]##2014-03-11## \~ Add neat feature [white]**<(frozen_changes)**
* [red]**d15a38a** [yellow]##2014-03-11## \~ Epic README update
* [red]**d559894** [green]##(##{zwsp}[lime]**master**{zwsp}[green]##)## [yellow]##2014-03-11## \~ Important upstream change
[red]##|## * [red]**9c311fd** [green]##(##{zwsp}[lime]**cool_feature**{zwsp}[green]##)## [yellow]##2014-03-11## \~ Respond to CL comments
[red]##|## [green]##|## * [red]**2a1eeb2** [green]##(##{zwsp}[lime]**subfeature**{zwsp}[green]##)## [yellow]##2014-03-11## \~ integrate with CoolService
[red]##|## [green]##|## * [red]**d777af6** [yellow]##2014-03-11## \~ slick commenting action
[red]##|## [green]##|/##
[red]##|## * [red]**265803a** [yellow]##2014-03-11## \~ another improvement [white]**<(subfeature)**
[red]##|## * [red]**6d831ac** [green]##(##{zwsp}[fuchsia]**spleen_tag**{zwsp}[green]##)## [yellow]##2014-03-11## \~ Refactor spleen
[red]##|## * [red]**82e74ab** [yellow]##2014-03-11## \~ Add widget
[red]##|/##
* [red]**d08c5b3** [green]##(##{zwsp}[lime]**bogus_noparent**{zwsp}[green]##)## [yellow]##2014-03-11## \~ Wonderful beginnings [white]**<(cool_feature)**
[white]**$ git squash-branch "cool squash demo"**
[white]**$ git map**
[white blue-background]##*##{zwsp}[blue-background red]** 2c81508 ** [green]##(##{zwsp}[aqua]**frozen_changes**{zwsp}[green]##)## [yellow]##2014-03-22## \~ cool squash demo
* [red]**6bec695** [green]##(##{zwsp}[red]##origin/master##{zwsp}[green]##)## [yellow]##2014-03-11## \~ Add neat feature [white]**<(frozen_changes)**
* [red]**d15a38a** [yellow]##2014-03-11## \~ Epic README update
* [red]**d559894** [green]##(##{zwsp}[lime]**master**{zwsp}[green]##)## [yellow]##2014-03-11## \~ Important upstream change
[red]##|## * [red]**9c311fd** [green]##(##{zwsp}[lime]**cool_feature**{zwsp}[green]##)## [yellow]##2014-03-11## \~ Respond to CL comments
[red]##|## [green]##|## * [red]**2a1eeb2** [green]##(##{zwsp}[lime]**subfeature**{zwsp}[green]##)## [yellow]##2014-03-11## \~ integrate with CoolService
[red]##|## [green]##|## * [red]**d777af6** [yellow]##2014-03-11## \~ slick commenting action
[red]##|## [green]##|/##
[red]##|## * [red]**265803a** [yellow]##2014-03-11## \~ another improvement [white]**<(subfeature)**
[red]##|## * [red]**6d831ac** [green]##(##{zwsp}[fuchsia]**spleen_tag**{zwsp}[green]##)## [yellow]##2014-03-11## \~ Refactor spleen
[red]##|## * [red]**82e74ab** [yellow]##2014-03-11## \~ Add widget
[red]##|/##
* [red]**d08c5b3** [green]##(##{zwsp}[lime]**bogus_noparent**{zwsp}[green]##)## [yellow]##2014-03-11## ~ Wonderful beginnings [white]**<(cool_feature)**
----
include::_aliases.txt[]
......
......@@ -41,7 +41,25 @@ then
fi
echo Asciidoc up to date at $ASCIIDOC_HASH \($BRANCH\)
export PATH=`pwd`/asciidoc:$PATH
# We pull ansi2hash to convert demo script output
BRANCH=1.0.6
ANSI2HTML_HASH=6282ab7a24a5a7eab2e0b23bb0055234c533a6e9
if [[ ! -d ansi2html || $(git -C ansi2html rev-parse HEAD) != $ANSI2HTML_HASH ]]
then
echo Cloning ansi2html
rm -rf ansi2html
git clone --single-branch --branch $BRANCH --depth 1 \
https://github.com/ralphbean/ansi2html.git 2> /dev/null
curl https://bitbucket.org/gutworth/six/raw/a875ac34c777fe801569c6c5299bf1a35aa578cd/six.py > \
ansi2html/ansi2html/six.py
ed ansi2html/ansi2html/converter.py <<EOF
/version_str
s/pkg.*$/'cool version bro'
wq
EOF
fi
echo ansi2html up to date at $ANSI2HTML_HASH \($BRANCH\)
# We pull git to get its documentation toolchain
BRANCH=v1.9.0
......@@ -103,11 +121,25 @@ a
-1
j
wq
EOF
cat >> git/Documentation/asciidoc.conf <<EOF
[macros]
(?su)[\\\\]?(?P<name>demo):(?P<target>\S*?)\[\]=
[demo-inlinemacro]
{sys3:cd $(pwd); ./{docname}.demo.{target}.sh | python filter_demo_output.py {backend} }
EOF
fi
echo Git up to date at $GITHASH \($BRANCH\)
if [[ ! -d demo_repo ]]
then
./prep_demo_repo.sh
fi
# build directory files for 'essential' and 'helper' sections of the depot_tools
# manpage.
for category in helper essential
......@@ -130,6 +162,7 @@ do
echo -n -
done
echo
cat _${category}_prefix.txt 2> /dev/null || true
echo
fi
......@@ -145,9 +178,10 @@ do
} > __${category}.txt
done
JOBS=0
JOBS=1
HTML_TARGETS=()
MAN_TARGETS=()
MAN1_TARGETS=()
MAN7_TARGETS=()
for x in *.txt *.css
do
TO="git/Documentation/$x"
......@@ -155,22 +189,30 @@ do
then
echo \'$x\' differs
cp $x "$TO"
fi
# Exclude files beginning with _ from the target list. This is useful to have
# includable snippet files.
if [[ ${x:0:1} != _ && ${x:(-4)} == .txt ]]
then
HTML_TARGETS+=("${x%%.txt}.html")
if [[ ${x:0:3} == git ]]
# Exclude files beginning with _ from the target list. This is useful to
# have includable snippet files.
if [[ ${x:0:1} != _ && ${x:(-4)} == .txt ]]
then
MAN1_TARGETS+=("${x%%.txt}.1")
else
MAN7_TARGETS+=("${x%%.txt}.7")
HTML_TARGETS+=("${x%%.txt}.html")
if [[ ! "$NOMAN" ]]
then
if [[ ${x:0:3} == git ]]
then
MAN1_TARGETS+=("${x%%.txt}.1")
else
MAN7_TARGETS+=("${x%%.txt}.7")
fi
fi
JOBS=$[$JOBS + 2]
fi
JOBS=$[$JOBS + 2]
fi
done
if [[ ${#HTML_TARGETS} == 0 && ${#MAN1_TARGETS} == 0 && ${#MAN7_TARGETS} == 0 ]]
then
exit
fi
VER="v$(git rev-parse --short HEAD)"
if [[ ! -f git/version ]] || ! cmp --silent git/version <(echo "$VER")
then
......@@ -203,4 +245,4 @@ for x in "${MAN7_TARGETS[@]}"
do
echo Copying ../man7/$x
cp "git/Documentation/$x" ../man7
done
\ No newline at end of file
done
#!/bin/bash
NO_AUTOPREP=True
. common_demo_functions.sh
rm -rf $REMOTE
mkdir -p $REMOTE
cd $REMOTE
set_user "remote"
silent git init
WS=build/whitespace_file.txt
mkdir build
cat > "$WS" <<EOF
Copyright 2014 The Chromium Authors. All rights reserved.
Use of this useless file is governed by a BSD-style license that can be
found in the LICENSE file.
This file is used for making non-code changes to trigger buildbot cycles. Make
any modification below this line.
=====================================================================
Let's make a story. Add one sentence for every commit:
CHÄPTER 1:
It was a dark and blinky night; the rain fell in torrents -- except at
occasional intervals, when it was checked by a violent gust of wind which
swept up the streets (for it is in London that our scene lies), rattling along
the housetops, and fiercely agitating the scanty flame of the lamps that
struggled against the elements. A hooded figure emerged.
It was a Domo-Banana.
"What took you so long?", inquired his wife.
Silence. Oblivious to his silence, she continued, "Did Mr. Usagi enjoy the
waffles you brought him?" "You know him, he's not one to forego a waffle,
no matter how burnt," he snickered.
The pause was filled with the sound of compile errors.
CHAPTER 2:
The jelly was as dark as night, and just as runny.
The Domo-Kun shuddered, remembering the way Mr. Usagi had speared his waffles
with his fork, watching the runny jelly spread and pool across his plate,
like the blood of a dying fawn. \"It reminds me of that time --\" he started, as
his wife cut in quickly: \"-- please. I can't bear to hear it.\". A flury of
images coming from the past flowed through his mind.
EOF
git add "$WS"
c "Always output seccomp error messages to stderr"
c "ozone: evdev: Filter devices by path"
c "ContentView->ContentViewCore in ContentViewRenderView"
c "linux_aura: Use system configuration for middle clicking the titlebar."
c "[fsp] Add requestUnmount() method together with the request manager."
c "don't use glibc-specific execinfo.h on uclibc builds"
c "Make ReflectorImpl use mailboxes"
git tag stage_1
c "Change the Pica load benchmark to listen for the polymer-ready event"
c "Remove AMD family check for the flapper crypto accelerator."
c "Temporarily CHECK(trial) in ChromeRenderProcessObserver::OnSetFieldTrialGroup."
echo -e '/Banana\ns/Banana/Kun\nwq' | silent ed "$WS"
git add "$WS"
set_user 'local'
c "Fix terrible typo."
set_user 'remote'
c "Revert 255617, due to it not tracking use of the link doctor page properly."
cat >> "$WS" <<EOF
"You recall what happened on Mulholland drive?" The ceiling fan rotated slowly
overhead, barely disturbing the thick cigarette smoke. No doubt was left about
when the fan was last cleaned.
There was an poignant pause.
EOF
git add "$WS"
set_user 'local'
c 'Finish chapter 2'
git tag stage_2
cat >> "$WS" <<EOF
CHAPTER 3:
Hilariousness! This chapter is awesome!
EOF
git add "$WS"
set_user 'remote'
c "Add best chapter2 ever!"
c "Ensure FS is exited for all not-in-same-page navigations."
c "Refactor data interchange format."
......@@ -473,7 +473,7 @@ def run_stream(*cmd, **kwargs):
"""
kwargs.setdefault('stderr', subprocess2.VOID)
kwargs.setdefault('stdout', subprocess2.PIPE)
cmd = (GIT_EXE,) + cmd
cmd = (GIT_EXE, '-c', 'color.ui=never') + cmd
proc = subprocess2.Popen(cmd, **kwargs)
return proc.stdout
......@@ -493,7 +493,7 @@ def run_with_stderr(*cmd, **kwargs):
autostrip = kwargs.pop('autostrip', True)
indata = kwargs.pop('indata', None)
cmd = (GIT_EXE,) + cmd
cmd = (GIT_EXE, '-c', 'color.ui=never') + cmd
proc = subprocess2.Popen(cmd, **kwargs)
ret, err = proc.communicate(indata)
retcode = proc.wait()
......
......@@ -9,13 +9,20 @@ is more than one downstream branch, then this script will prompt you to select
which branch.
"""
import argparse
import sys
from git_common import current_branch, branches, upstream, run, hash_one
from git_common import current_branch, branches, upstream, run_stream, hash_one
def main(argv):
assert len(argv) == 1, "No arguments expected"
def main(args):
parser = argparse.ArgumentParser()
parser.add_argument('--pick',
help=(
'The number to pick if this command would '
'prompt'))
opts = parser.parse_args(args)
upfn = upstream
cur = current_branch()
if cur == 'HEAD':
......@@ -29,21 +36,26 @@ def main(argv):
if not downstreams:
return "No downstream branches"
elif len(downstreams) == 1:
run('checkout', downstreams[0])
run_stream('checkout', downstreams[0], stdout=sys.stdout, stderr=sys.stderr)
else:
high = len(downstreams) - 1
print
while True:
print "Please select a downstream branch"
for i, b in enumerate(downstreams):
print " %d. %s" % (i, b)
r = raw_input("Selection (0-%d)[0]: " % high).strip() or '0'
prompt = "Selection (0-%d)[0]: " % high
r = opts.pick
if r:
print prompt + r
else:
r = raw_input(prompt).strip() or '0'
if not r.isdigit() or (0 > int(r) > high):
print "Invalid choice."
else:
run('checkout', downstreams[int(r)])
run_stream('checkout', downstreams[int(r)], stdout=sys.stdout,
stderr=sys.stderr)
break
if __name__ == '__main__':
sys.exit(main(sys.argv))
sys.exit(main(sys.argv[1:]))
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment