<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>I am the blog of Hal Fire, and I bring you...</title>
	<atom:link href="http://blog.mozilla.org/halfire/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.mozilla.org/halfire</link>
	<description>... interesting tidbits of release engineering.</description>
	<lastBuildDate>Sat, 23 Mar 2013 16:28:01 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>The Evolution of the Landing Cycle</title>
		<link>http://blog.mozilla.org/halfire/2012/04/10/the_dev_cycle-3/</link>
		<comments>http://blog.mozilla.org/halfire/2012/04/10/the_dev_cycle-3/#comments</comments>
		<pubDate>Tue, 10 Apr 2012 18:03:42 +0000</pubDate>
		<dc:creator>Hal Wine</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[DVCS]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://blog.mozilla.org/halfire/?p=153</guid>
		<description><![CDATA[The canonical commit/push/land cycle at Mozilla [This is an experiment in publishing a doc piece by piece as blog entries. Please refer to the main page for additional context.] Untangling the terminology In the old days, before DVCS, &#8220;commit&#8221; only &#8230; <a href="http://blog.mozilla.org/halfire/2012/04/10/the_dev_cycle-3/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div class="section" id="the-canonical-commit-push-land-cycle-at-mozilla">
<h1>The canonical commit/push/land cycle at Mozilla</h1>
<p><em>[This is an experiment in publishing a doc piece by piece as blog entries. Please refer to the</em> <a class="reference external" href="releng_and_git_project">main page</a> <em>for additional context.]</em></p>
<div class="section" id="untangling-the-terminology">
<h2>Untangling the terminology</h2>
<p>In the old days, before DVCS, &#8220;commit&#8221; only had only one real purpose. It was how you published your work to the rest of the world (or your project&#8217;s world at least). With DVCS, you are likely committing quite often, but still only occasionally publishing.</p>
<p>In the early days of hg at Mozilla, you would &#8220;push your changes&#8221;. But with the advent of social coding sites such as <a class="reference external" href="https://bitbucket.org">bitbucket</a> &amp; <a class="reference external" href="https://github.com">github</a>, you often push your changes there as well. Or you push to our try servers.</p>
<p>Informally, Mozillian&#8217;s use the term &#8220;landing&#8221; to describe committing a change to one of the official repositories (also known as &#8220;repository of record&#8221; or RoR).  So while most of the online documentation refers to &#8220;commit&#8221;, I&#8217;ll use the less ambiguous term &#8220;landing&#8221; here.</p>
</p></div>
<div class="section" id="the-evolvolution-of-the-landing-cycle">
<h2>The Evolvolution of the Landing Cycle</h2>
<p>It happened slowly, so we may not have noticed it, but the distinctions between &#8220;commit&#8221; and &#8220;land&#8221; have changed over time. Can we benefit from embracing these changes and extending them further? I believe so, even though that might require us to view our toolsets differently.</p>
<div class="section" id="the-old-version">
<h3>The old version</h3>
<p>With centralized VCS, the cycle was roughly like:</p>
<p class="graphviz"> <img src="http://dtor.com/.images/the_dev_cycle-diagram_01.svg" alt='digraph old_cycle {     rankdir="BT"     RoR_1 [label="RoR T(0)"]     RoR_2 [label="RoR T(1..n-2)"]     RoR_3 [label="RoR T(n-1)"]     RoR_n [label="RoR T(n)"]      { rank=same         other_pc [label="everyone else&squot;s PC"]         dev_pc [label="Dev&squot;s PC", fontcolor="green", color="green"]     }      { rank=same         edge [style="dotted", color="blue"]         RoR_1 -&gt; RoR_2 -&gt; RoR_3         RoR_n     }      {         RoR_1 -&gt; other_pc [style="invis", weight="50"]         edge [penwidth="1", style="dashed", color="cyan"]         other_pc -&gt; RoR_2         other_pc -&gt; RoR_2         other_pc -&gt; RoR_2         other_pc -&gt; RoR_3     }      edge [penwidth="4", color="green", fontcolor="green"]     RoR_1 -&gt;  dev_pc [label="initial checkout"]     RoR_3 -&gt;  dev_pc [label="update\nbefore landing"]     dev_pc -&gt; RoR_n  [label="landing change"] }' /> </p>
</p></div>
<div class="section" id="the-new-version">
<h3>The new version</h3>
<p>With DVCS, the cycle has been expanded to account for all the &#8220;social coding&#8221; that goes on between developers directly and indirectly via (public or private) hosted repositories.</p>
<div class="admonition-note admonition">
<p class="first admonition-title"><strong>NOTE</strong></p>
<p class="last">Nothing has changed w.r.t. how developers interact with the RoR!</p>
</p></div>
<p class="graphviz"> <img src="http://dtor.com/.images/the_dev_cycle-diagram_02.svg" alt='digraph new_cycle {     rankdir="BT"     RoR_1 [label="RoR T(0)"]     RoR_2 [label="RoR T(1..n-2)"]     RoR_3 [label="RoR T(n-1)"]     RoR_n [label="RoR T(n)"]      { rank=same         edge [style="dotted", color="blue"]         RoR_1 -&gt; RoR_2 -&gt; RoR_3         RoR_n     }      { rank=same         other_pc [label="everyone else&squot;s PC"]         dev_pc [label="Dev&squot;s PC", fontcolor="green", color="green"]     }      { rank=same         bitbucket [label="Bitbucket", color="crimson"]         github [label="GitHub", color="crimson"]     }      {         RoR_1 -&gt; other_pc [style="invis", weight="50"]         edge [penwidth="1", style="dashed", color="cyan"]         other_pc -&gt; RoR_2         other_pc -&gt; RoR_2         other_pc -&gt; RoR_2         other_pc -&gt; RoR_3     }      {         edge [penwidth="4", color="green", fontcolor="green"]         RoR_1 -&gt;  dev_pc [label="initial checkout"]         RoR_3 -&gt;  dev_pc [label="update\nbefore landing"]         dev_pc -&gt; RoR_n  [label="landing change"]     }      {         edge [color="crimson"]         other_pc -&gt; bitbucket         bitbucket -&gt; other_pc         other_pc -&gt; bitbucket         github -&gt; other_pc         other_pc -&gt; github         github -&gt; other_pc         dev_pc -&gt; github         dev_pc -&gt; bitbucket         dev_pc -&gt; other_pc         other_pc -&gt; dev_pc     } }' /> </p>
</p></div>
</p></div>
<div class="section" id="so-what">
<h2>So What?</h2>
<p>Besides demonstrating my skill level at <a class="reference external" href="http://www.graphviz.org/">graphviz</a>, what can be learned from these diagrams? I think something very special:</p>
<blockquote><div><strong>There are two separate work flows here, and they interact only in well defined ways.</strong></div>
</blockquote>
<p>or</p>
<blockquote><div><strong>The work flow of a development is distinct from the workflow of landing changes into the official repositories.</strong></div>
</blockquote>
<p>I assert that we can make the following conclusion from that observation:</p>
<div class="admonition-conclusion admonition">
<p class="first admonition-title">Conclusion</p>
<p class="last">There is no hard requirement that both the developer and the official repositories use identical tooling.  What <em>is</em> the hard requirement is that the contract between the two continues to be met.</p>
</p></div>
<p>This really shouldn&#8217;t be news worthy &#8211; it is actually the way things have always been. Before DVCS, every developer did their own source code management on their computer. Maybe it was multiple checkouts, tarballs, patch sets, but chances are it had nothing to do with the tool used for the RoR. Developers even managed to exchange information with each other, again via tarballs, emailed patches, directory permissions and a host of other methods outside of the RoR tooling.  (Personally, my first production use of <a class="reference external" href="http://mercurial.selenic.com/">hg</a> was to follow the pattern Mozilla documented for <a class="reference external" href="https://wiki.mozilla.org/Using_Mercurial_locally_with_CVS">using hg with CVS</a>. That was wonderfully freeing, as it gave me the safety net of local commits and local branches. As a developer, I <em>wanted</em> and could make good use of far more flexibility than any well designed release system would let me have.)</p>
<div class="section" id="but-wait-there-s-more">
<h3>But wait, there&#8217;s more</h3>
<p>What isn&#8217;t shown above is that there is another interface on the other side of the repositories of record. That interface is the contract for using the buildfarm/testfarm/tbpl/L10N machinery that is being run by various groups, all pulling from the repositories of record. (For a zoomed view of this diagram, see <a class="reference external" href="http://blog.mozilla.org/halfire/2012/02/01/releng_as-is_snapshot/#the-picture">this post</a>.)</p>
<p class="graphviz"> <img src="http://dtor.com/.images/the_dev_cycle-diagram_03.svg" alt='digraph layers {     node [shape="octagon"]     dev_world     repositories_of_record [shape=rectangle]     buildbot_world      dev_world -&gt; repositories_of_record [label="landing work flow",                                          arrowhead="vee"]     repositories_of_record -&gt; dev_world [arrowhead="vee"]     repositories_of_record -&gt; buildbot_world [label="buildbot work flows",                                               arrowhead="vee"]     buildbot_world -&gt; repositories_of_record [arrowhead="vee"]  }' /> </p>
<p>Because this &#8220;backend API&#8221; exists, even if we change the tooling used to land changesets, it would have to be done in a manner that continues to support the automated usage of the RoRs. That workflow is not a &#8220;natural fit&#8221; for any DVCS (arguably especially not git). <a class="footnote-reference" href="#fn01" id="id3">[1]</a></p>
<p>Another way to position that is, if we can find a clean, quick, way for developers to continue using hg as the only repository of record, we isolate them from tracking and complying with changes in the RoR -&gt; buildbot contract. That&#8217;s the path I&#8217;m currently following.</p>
<p>Decoupling. It&#8217;s a good thing!</p>
<p class="rubric">Footnotes:</p>
<table class="docutils footnote" frame="void" id="fn01" rules="none">
<colgroup>
<col class="label" />
<col /></colgroup>
<tbody valign="top">
<tr>
<td class="label"><a class="fn-backref" href="#id3">[1]</a></td>
<td>
<p class="first">Yes, the &#8220;backend API&#8221; could, theoretically, be changed. At the very least, that is a large (hence long term &#8211; possibly years) project, due to both the number of systems involved, and the need to keep those systems up 24x7x365.</p>
<p class="last">To provide more timely improvements in the process, I&#8217;m focussed on shorter term deliveries.</p>
</td>
</tr>
</tbody>
</table></div>
</p></div>
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.org/halfire/2012/04/10/the_dev_cycle-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>… proposed changes to commit workflow</title>
		<link>http://blog.mozilla.org/halfire/2012/03/08/proposed-changes-to-commit-workflow/</link>
		<comments>http://blog.mozilla.org/halfire/2012/03/08/proposed-changes-to-commit-workflow/#comments</comments>
		<pubDate>Fri, 09 Mar 2012 01:56:03 +0000</pubDate>
		<dc:creator>Hal Wine</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[DVCS]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://blog.mozilla.org/halfire/?p=124</guid>
		<description><![CDATA[[This is an experiment in publishing a doc piece by piece as blog entries. Please refer to the main page for additional context.] With all the changes to support git, how will that affect a committer&#8217;s workflow? (For developer impact, &#8230; <a href="http://blog.mozilla.org/halfire/2012/03/08/proposed-changes-to-commit-workflow/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[
<p><em>[This is an experiment in publishing a doc piece by piece as blog entries. Please refer to the</em> <a class="reference external" href="/halfire/releng_and_git_project/">main page</a> <em>for additional context.]</em></p>
<p>With all the changes to support git, how will that affect a committer&#8217;s workflow? (For developer impact, see <a class="reference external" href="/halfire/2012/03/07/proposed-changes-to-dev-workflow/">this post</a>.)</p>
<p><strong>The primary goal is to work within the existing Mozilla commit policy</strong> <a class="footnote-reference" href="#f3" id="id3">[1]</a>. Working within that constraint, the idea is &quot;as little as possible&quot;, and this post will try to describe how big &quot;as little&quot; is.</p>
<p><strong>Remember: all existing ways of working with hg will continue to work!</strong> These are just going to be some additional options for folks who prefer to use github &amp; bitbucket.</p>
<div class="section" id="introduction">
<h1>Introduction</h1>
<p>To start things off, here are the simplified workflows that describe how things currently work with the Mercurial repositories on hg.m.o and following commit policy. The major differences between the committer&#8217;s workflow and the <a class="reference external" href="/halfire/2012/03/07/proposed-changes-to-dev-workflow/">developer&#8217;s workflow</a> are:</p>
<ul class="simple">
<li>the source of the changes (could be patches from developers without commit access, in addition to development work done directly by the committer).</li>
<li>the ultimate destination repository is the repository of record hosted on hg.mozilla.org.</li>
</ul>
<p>The following table should match today&#8217;s workflow for landing someone else&#8217;s (or their own) approved patch:</p>
<table border="1" class="docutils">
<colgroup>
<col width="31%" />
<col width="35%" />
<col width="35%" /> </colgroup>
<thead valign="bottom">
<tr>
<th class="head">Committer Action</th>
<th class="head">Steps Involved</th>
<th class="head">Pseudo Commands</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td rowspan="4">First time checkout <a class="footnote-reference" href="#f5" id="id5">[2]</a></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>get personal copy</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>get copy on PC</td>
<td>hg clone hg.m.o PC</td>
</tr>
<tr>
<td>tweak for 1 step commit to hg</td>
<td>add hg.m.o as pushable path</td>
</tr>
<tr>
<td rowspan="4">Work Cycle</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>incorporate r+ work <a class="footnote-reference" href="#f6" id="id6">[3]</a></td>
<td>hg patch <em>OR pull from github or bitbucket</em> (may not match r+ attachment) <a class="footnote-reference" href="#f7" id="id7">[4]</a></td>
</tr>
<tr>
<td>resolve conflicts</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>local work</td>
<td>hg commit</td>
</tr>
<tr>
<td rowspan="2">Commit Process</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>hg push hg.m.o</td>
</tr>
</tbody>
</table></div>
<div class="section" id="changes-for-bitbucket">
<h1>Changes for Bitbucket</h1>
<p>As bitbucket uses mercurial as it&#8217;s primary DVCS, you might expect there to be not too many changes. That&#8217;s correct &#8211; there is just some additional steps on bitbucket so other users can see your work.</p>
<p>The changes from hg.m.o are <em>italicized</em>.</p>
<table border="1" class="docutils">
<colgroup>
<col width="28%" />
<col width="36%" />
<col width="36%" /> </colgroup>
<thead valign="bottom">
<tr>
<th class="head">Committer Action</th>
<th class="head">Steps Involved</th>
<th class="head">Pseudo Commands</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td rowspan="4">First time checkout <a class="footnote-reference" href="#f5" id="id8">[2]</a></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>get personal copy</td>
<td>bitbucket fork</td>
</tr>
<tr>
<td>get copy on PC</td>
<td>hg clone bitbucket PC</td>
</tr>
<tr>
<td>tweak for 1 step commit to hg</td>
<td>add hg.m.o as pushable path</td>
</tr>
<tr>
<td rowspan="4">Work Cycle</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>incorporate r+ work <a class="footnote-reference" href="#f6" id="id9">[3]</a></td>
<td>hg patch <em>OR pull from github or bitbucket</em> (may not match r+ attachment) <a class="footnote-reference" href="#f7" id="id10">[4]</a></td>
</tr>
<tr>
<td>resolve conflicts</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>local work</td>
<td>hg commit</td>
</tr>
<tr>
<td rowspan="2">Commit Process</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>hg push hg.m.o</td>
</tr>
</tbody>
</table></div>
<div class="section" id="changes-for-github">
<h1>Changes for Github</h1>
<p>For github, there are a few additional steps that will be supported by scripts. As above, the differences from hg.m.o are <em>italicized</em>.</p>
<table border="1" class="docutils">
<colgroup>
<col width="27%" />
<col width="35%" />
<col width="37%" /> </colgroup>
<thead valign="bottom">
<tr>
<th class="head">Committer Action</th>
<th class="head">Steps Involved</th>
<th class="head">Pseudo Commands</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td rowspan="4">First time checkout <a class="footnote-reference" href="#f5" id="id11">[2]</a></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>get personal copy</td>
<td>github fork</td>
</tr>
<tr>
<td>get copy on PC</td>
<td>git clone github PC</td>
</tr>
<tr>
<td>tweak for 1 step commit to hg</td>
<td><em>run script to setup hg repo &amp; git post commit hooks &amp; magic_refs</em> <a class="footnote-reference" href="#f4" id="id12">[5]</a></td>
</tr>
<tr>
<td rowspan="4">Work Cycle</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>incorporate r+ work <a class="footnote-reference" href="#f6" id="id13">[3]</a></td>
<td>apply patch manually <em>OR pull from github or bitbucket</em> (but may not match r+ attachment) <a class="footnote-reference" href="#f7" id="id14">[4]</a></td>
</tr>
<tr>
<td>resolve conflicts</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>local work</td>
<td>git commit</td>
</tr>
<tr>
<td rowspan="2">Commit Process</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td><em>git push magic_ref</em> <a class="footnote-reference" href="#f4" id="id15">[5]</a></td>
</tr>
</tbody>
</table>
<div class="admonition-notes admonition">
<p class="first admonition-title">Notes</p>
<table class="docutils footnote" frame="void" id="f3" rules="none">
<colgroup>
<col class="label" />
<col /></colgroup>
<tbody valign="top">
<tr>
<td class="label"><a class="fn-backref" href="#id3">[1]</a></td>
<td>There is a strong case to be made for revising the commit policy to account for both new tooling (e.g. github/bitbucket) and new Mozilla projects (e.g. everything beyond Firefox/Thunderbird). A policy discussion involves a lot more groups, and is explicitly out of scope of this effort.</td>
</tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="f5" rules="none">
<colgroup>
<col class="label" />
<col /></colgroup>
<tbody valign="top">
<tr>
<td class="label">[2]</td>
<td><em>(<a class="fn-backref" href="#id5">1</a>, <a class="fn-backref" href="#id8">2</a>, <a class="fn-backref" href="#id11">3</a>)</em> assumes committer keeps &quot;clean repo&quot; for all push to moz actions (best practice)</td>
</tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="f6" rules="none">
<colgroup>
<col class="label" />
<col /></colgroup>
<tbody valign="top">
<tr>
<td class="label">[3]</td>
<td><em>(<a class="fn-backref" href="#id6">1</a>, <a class="fn-backref" href="#id9">2</a>, <a class="fn-backref" href="#id13">3</a>)</em> due to patch rot, the committer may need to make adjustments to the patch. It&#8217;s up to the authorized committer to decide if such changes require re-approval.</td>
</tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="f7" rules="none">
<colgroup>
<col class="label" />
<col /></colgroup>
<tbody valign="top">
<tr>
<td class="label">[4]</td>
<td><em>(<a class="fn-backref" href="#id7">1</a>, <a class="fn-backref" href="#id10">2</a>, <a class="fn-backref" href="#id14">3</a>)</em> directly incorporating a pull request (from either github, bitbucket, or any other hosting service) is straightforward with the hg-git extension installed in Mercurial, if the other repo was based on the same original. This requires coordination among the team members.</td>
</tr>
</tbody>
</table>
<table class="last docutils footnote" frame="void" id="f4" rules="none">
<colgroup>
<col class="label" />
<col /></colgroup>
<tbody valign="top">
<tr>
<td class="label">[5]</td>
<td><em>(<a class="fn-backref" href="#id12">1</a>, <a class="fn-backref" href="#id15">2</a>)</em> This is how several developers now work, what&#8217;s new is the wrapper script to make it easy to setup. See the <a class="reference external" href="/halfire/2012/01/26/releng_and_git_project/#related-reference-material">reference section</a> of the <a class="reference external" href="/halfire/2012/01/26/releng_and_git_project/">main project page</a> for links to their original code (which will be the basis for this project).</td>
</tr>
</tbody>
</table></div>
<p> <!-- .. [#f1] these actions affect the local repository only and may         actually be 'mq' operations for hg and 'developer branch'         operations for git. The workflow for commit to the master         respository will be in a following post. .. [#f2] a number of existing developers have already developed         scripts to support this. These will be unified and         documented as part of the roll out --> </div>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.org/halfire/2012/03/08/proposed-changes-to-commit-workflow/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>&#8230; proposed changes to dev workflow</title>
		<link>http://blog.mozilla.org/halfire/2012/03/07/proposed-changes-to-dev-workflow/</link>
		<comments>http://blog.mozilla.org/halfire/2012/03/07/proposed-changes-to-dev-workflow/#comments</comments>
		<pubDate>Wed, 07 Mar 2012 14:51:22 +0000</pubDate>
		<dc:creator>Hal Wine</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[DVCS]]></category>

		<guid isPermaLink="false">http://blog.mozilla.org/halfire/?p=115</guid>
		<description><![CDATA[[Refer to the main page for additional context.] With all the changes to support git, how will that affect a developer&#8217;s workflow? (The committer&#8217;s workflow will be covered in a future post.) The idea is &#34;not much at all&#34;, and &#8230; <a href="http://blog.mozilla.org/halfire/2012/03/07/proposed-changes-to-dev-workflow/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[
<p>[Refer to the <a class="reference external" href="/halfire/releng_and_git_project/">main page</a> for additional context.]</p>
<p>With all the changes to support git, how will that affect a developer&#8217;s workflow? (The committer&#8217;s workflow will be covered in a future post.)</p>
<p>The idea is &quot;not much at all&quot;, and this post will try to define &quot;not much&quot;.</p>
<p><strong>Remember: all existing ways of working with hg will continue to work!</strong> These are just going to be some additional options for folks who prefer to use github &amp; bitbucket.</p>
<div class="section" id="introduction">
<h1>Introduction</h1>
<p>To start things off, here are the simplified workflows that describe how things currently work with the Mercurial repositories on hg.m.o and following commit policy.</p>
<p>This should match today&#8217;s workflow for devlopment (not commit):</p>
<table border="1" class="docutils">
<colgroup>
<col width="27%" />
<col width="40%" />
<col width="33%" /> </colgroup>
<thead valign="bottom">
<tr>
<th class="head">Developer Action</th>
<th class="head">Steps Involved</th>
<th class="head">Pseudo Commands</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td rowspan="3">First time checkout</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>get copy on PC</td>
<td>hg clone hg.m.o PC</td>
</tr>
<tr>
<td>tweak for 1 step push to try</td>
<td>add try as pushable path</td>
</tr>
<tr>
<td rowspan="3">Work Cycle</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>local work <a class="footnote-reference" href="#f1" id="id2">[1]</a></td>
<td>hg commit</td>
</tr>
<tr>
<td>push to try <a class="footnote-reference" href="#f1" id="id3">[1]</a></td>
<td>hg push magic_try_path</td>
</tr>
<tr>
<td rowspan="2">Review Process</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>create patch</td>
<td>attach patch to bug</td>
</tr>
<tr>
<td rowspan="2">Commit Process</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>nag committer</td>
<td>&nbsp;</td>
</tr>
</tbody>
</table></div>
<div class="section" id="changes-for-bitbucket">
<h1>Changes for Bitbucket</h1>
<p>As bitbucket uses mercurial as it&#8217;s primary DVCS, you might expect there to be not too many changes. That&#8217;s correct &#8211; there is just some additional steps on bitbucket so other users can see your work.</p>
<p>The changes from hg.m.o are <em>italicized</em>.</p>
<table border="1" class="docutils">
<colgroup>
<col width="17%" />
<col width="32%" />
<col width="52%" /> </colgroup>
<thead valign="bottom">
<tr>
<th class="head">Developer Action</th>
<th class="head">Steps Involved</th>
<th class="head">Pseudo Commands</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td>First time checkout</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td rowspan="3">&nbsp;</td>
<td>get personal copy</td>
<td><em>fork on bitbucket</em></td>
</tr>
<tr>
<td>get copy on PC</td>
<td>hg clone bitbucket PC</td>
</tr>
<tr>
<td>tweak for 1 step push to try</td>
<td>add try as pushable path</td>
</tr>
<tr>
<td rowspan="3">Work Cycle</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>local work <a class="footnote-reference" href="#f1" id="id4">[1]</a></td>
<td>hg commit</td>
</tr>
<tr>
<td>push to try <a class="footnote-reference" href="#f1" id="id5">[1]</a></td>
<td>hg push magic_try_path</td>
</tr>
<tr>
<td rowspan="2">Review Process</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>create patch</td>
<td>attach patch to bug <em>OR hg push bitbucket and bitbucket pull request</em></td>
</tr>
<tr>
<td rowspan="2">Commit Process</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>nag committer</td>
<td>&nbsp;</td>
</tr>
</tbody>
</table></div>
<div class="section" id="changes-for-github">
<h1>Changes for Github</h1>
<p>For github, there are a few additional steps that will be supported by scripts. As above, the differences from hg.m.o are <em>italicized</em>.</p>
<table border="1" class="docutils">
<colgroup>
<col width="17%" />
<col width="26%" />
<col width="56%" /> </colgroup>
<tbody valign="top">
<tr>
<td>Developer Action</td>
<td>Steps Involved</td>
<td>Pseudo Commands</td>
</tr>
<tr>
<td rowspan="4">First time checkout</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>get personal copy</td>
<td><em>github fork</em></td>
</tr>
<tr>
<td>get copy on PC</td>
<td>git clone github PC</td>
</tr>
<tr>
<td>tweak for 1 step push to try</td>
<td><em>run script to setup hg repo &amp; git post commit hooks &amp; refs</em> <a class="footnote-reference" href="#f2" id="id6">[2]</a></td>
</tr>
<tr>
<td rowspan="3">Work Cycle</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>local work <a class="footnote-reference" href="#f1" id="id7">[1]</a></td>
<td>git commit</td>
</tr>
<tr>
<td>push to try <a class="footnote-reference" href="#f1" id="id8">[1]</a></td>
<td>git push magic_try_remote</td>
</tr>
<tr>
<td rowspan="2">Review Process</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>create patch</td>
<td>attach patch to bug <em>OR git push github and github pull request</em></td>
</tr>
<tr>
<td rowspan="2">Commit Process</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>nag committer</td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
<div class="admonition-notes admonition">
<p class="first admonition-title">Notes</p>
<table class="docutils footnote" frame="void" id="f1" rules="none">
<colgroup>
<col class="label" />
<col /></colgroup>
<tbody valign="top">
<tr>
<td class="label">[1]</td>
<td><em>(<a class="fn-backref" href="#id2">1</a>, <a class="fn-backref" href="#id3">2</a>, <a class="fn-backref" href="#id4">3</a>, <a class="fn-backref" href="#id5">4</a>, <a class="fn-backref" href="#id7">5</a>, <a class="fn-backref" href="#id8">6</a>)</em> these actions affect the local repository only and may actually be &#8216;mq&#8217; operations for hg and &#8216;developer branch&#8217; operations for git. The workflow for commit to the master respository will be in a following post.</td>
</tr>
</tbody>
</table>
<table class="last docutils footnote" frame="void" id="f2" rules="none">
<colgroup>
<col class="label" />
<col /></colgroup>
<tbody valign="top">
<tr>
<td class="label"><a class="fn-backref" href="#id6">[2]</a></td>
<td>a number of existing developers have already developed scripts to support this. These will be unified and documented as part of the roll out</td>
</tr>
</tbody>
</table></div>
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.org/halfire/2012/03/07/proposed-changes-to-dev-workflow/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title></title>
		<link>http://blog.mozilla.org/halfire/2012/03/05/108/</link>
		<comments>http://blog.mozilla.org/halfire/2012/03/05/108/#comments</comments>
		<pubDate>Mon, 05 Mar 2012 18:35:57 +0000</pubDate>
		<dc:creator>Hal Wine</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[MediaWiki]]></category>

		<guid isPermaLink="false">http://blog.mozilla.org/halfire/?p=108</guid>
		<description><![CDATA[Ooohh, just found a nice way to keep the length of a media-wiki page manageable &#8211; you can collapse tables with {&#124; class="wikitable collapsible collapsed" style="width: 100%" An example use of this is the new Security page meeting section. Much &#8230; <a href="http://blog.mozilla.org/halfire/2012/03/05/108/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Ooohh, just found a nice way to keep the length of a media-wiki page manageable &#8211; you can collapse tables with</p>
<blockquote><p><code>{| class="wikitable collapsible collapsed" style="width: 100%"</code></p></blockquote>
<p>An example use of this is the new <a href="https://wiki.mozilla.org/Security#Meeting_Notes">Security page meeting section</a>. Much nicer! (s/a <a href="https://meta.wikimedia.org/wiki/Help:Collapsing">more syntax details</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.org/halfire/2012/03/05/108/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8230;DVCS Survey Summary</title>
		<link>http://blog.mozilla.org/halfire/2012/03/02/dvcs-survey-summary/</link>
		<comments>http://blog.mozilla.org/halfire/2012/03/02/dvcs-survey-summary/#comments</comments>
		<pubDate>Fri, 02 Mar 2012 19:23:12 +0000</pubDate>
		<dc:creator>Hal Wine</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[DVCS]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://blog.mozilla.org/halfire/?p=102</guid>
		<description><![CDATA[[Refer to the main page for additional context.] Summary A long time ago (December of 2011), I sent out a brief survey on DVCS usage to Mozilla folks (and asked them to spread wider). While there were only 42 responses, &#8230; <a href="http://blog.mozilla.org/halfire/2012/03/02/dvcs-survey-summary/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>[Refer to the <a href="/halfire/2012/01/26/releng_and_git_project/" title="Releng &#038; Git Project Overview">main page</a> for additional context.]</p>
<div class="section" id="summary">
<h1>Summary</h1>
<p>A long time ago (December of 2011), I sent out a brief survey on DVCS usage to Mozilla folks (and asked them to spread wider). While there were only 42 responses, there were some interesting patterns.</p>
<div class="admonition-disclaimer admonition">
<p class="first admonition-title">Disclaimer!</p>
<p class="last">I am neither a statistician nor a psychometrician.</p>
</p></div>
<p>I believe you can see the raw summary at via <a class="reference external" href="https://docs.google.com/spreadsheet/viewanalytics?formkey=dEg5LW1XRkNSYWVVSlhFVXRtblA0LXc6MA#gid=0">this link</a>. What follows are the informal inferences I drew from the results (remember the disclaimer).</p>
<div class="section" id="commit-to-git-is-not-the-issue">
<h2>Commit to git is not the issue:</h2>
<blockquote><ul class="simple">
<li>Several level 3 committers volunteered <a class="footnote-reference" href="#fn01" id="id1">[1]</a> the information that commit to git would be of little benefit to their productivity, due to tooling they have.</li>
<li>There are several developer written toolkits being used to ease working with hg.m.o. They include transparent push-to-try from git.</li>
</ul>
</blockquote></div>
<div class="section" id="git-is-not-the-issue">
<h2>Git is not the issue:</h2>
<blockquote><ul class="simple">
<li>The number of &quot;passionate for git&quot; is about equal to &quot;passionate for hg&quot; (small survey size).</li>
<li>One respondent volunteered <a class="footnote-reference" href="#fn01" id="id2">[1]</a> that he found git very difficult to explain to new community members, others felt the opposite.</li>
</ul>
</blockquote></div>
</p></div>
<div class="section" id="the-issue-is">
<h1>The Issue Is&#8230;</h1>
<p>The issue is some level of official support of social coding sites:</p>
<blockquote><ul class="simple">
<li>86% mentioned &quot;pull requests&quot; as a better review process than patch submittal.</li>
<li>A number of volunteered comments expressed some level of confusion, including which github repo to use, how to start a new project, what workflows to use to interact with hg.m.o, etc.</li>
</ul>
</blockquote></div>
<div class="section" id="a-plan">
<h1>A Plan</h1>
<p>These survey results, plus some technical investigation into what was possible with given tools, led to forming the (very agressive) 2012 Q1 goal captured in <a class="reference external" href="https://bugzilla.mozilla.org/show_bug.cgi?id=713782">bug 713782</a>. A looser summary of that follows.</p>
<div class="section" id="end-the-confusion">
<h2>End the confusion!</h2>
<blockquote><ul class="simple">
<li>Provide an officially supported repositories for releng supported prodcuts on github &amp; bitbucket</li>
<li>Coordinate tooling to allow git to work with hg.m.o</li>
<li>Document &quot;how to set up git to work with releng&quot; <a class="footnote-reference" href="#fn02" id="id3">[2]</a></li>
</ul>
</blockquote></div>
<div class="section" id="prepare-for-disaster">
<h2>Prepare for disaster</h2>
<blockquote><ul class="simple">
<li>ensure every releng supported product has an inside-the-firewall repository of record.</li>
</ul>
</blockquote>
<div class="admonition-notes admonition">
<p class="first admonition-title">Notes</p>
<table class="docutils footnote" frame="void" id="fn01" rules="none">
<colgroup>
<col class="label" />
<col /></colgroup>
<tbody valign="top">
<tr>
<td class="label">[1]</td>
<td><em>(<a class="fn-backref" href="#id1">1</a>, <a class="fn-backref" href="#id2">2</a>)</em> When the survey allowed text input, and responses were specific beyond the question, I count that as a &quot;volunteered&quot; answer of greater &quot;weight&quot; than a checkbox response.</td>
</tr>
</tbody>
</table>
<table class="last docutils footnote" frame="void" id="fn02" rules="none">
<colgroup>
<col class="label" />
<col /></colgroup>
<tbody valign="top">
<tr>
<td class="label"><a class="fn-backref" href="#id3">[2]</a></td>
<td>There are several categories of Mozilla source code on github: Product code, SAAS code, and experimental code are the big ones. The scope of these recomendations is only for product code that will be built, tested, and released by the releng machinery.</td>
</tr>
</tbody>
</table></div>
</p></div>
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.org/halfire/2012/03/02/dvcs-survey-summary/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Wowza! That&#8217;s a Feature!</title>
		<link>http://blog.mozilla.org/halfire/2012/02/21/wowza_prepending_history/</link>
		<comments>http://blog.mozilla.org/halfire/2012/02/21/wowza_prepending_history/#comments</comments>
		<pubDate>Wed, 22 Feb 2012 04:13:32 +0000</pubDate>
		<dc:creator>Hal Wine</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[DVCS]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://blog.mozilla.org/halfire/?p=91</guid>
		<description><![CDATA[&#160; tl;dr Wowza! I found the killer feature in git &#8211; you can have your cake and eat it, too! Every time I&#8217;ve had to move to a new VCS, there&#8217;s never been enough time available to move the complete &#8230; <a href="http://blog.mozilla.org/halfire/2012/02/21/wowza_prepending_history/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>&nbsp;</p>
<h3 class="title">tl;dr</h3>
<p>Wowza! I found the killer feature in git &#8211; you can have your cake and eat it, too!</p>
<p>Every time I&#8217;ve had to move to a new VCS, there&#8217;s never been enough time available to move the complete history correctly. Linux had this problem in spades when they moved off BitKeeper onto git in a very-short-time.</p>
<p>The solution? Take your time to convert the history correctly (or not, you can correct later), then allow developers who want it to prepend it on their machines, without making their repo &#8220;different&#8221; from the latest one.</p>
<p>I only found a reference to this feature last Friday &#8211; it used to require breaking the warranty, but is not supported as a first class command. More later, but to see how (and create you&#8217;re own prepended history), see: <a class="reference external" href="https://github.com/hwine/git_playground/tree/master/prepend_history">https://github.com/hwine/git_playground/tree/master/prepend_history</a></p>
<p>Much thanks to Scott Chacon and his writeup on &#8220;git replace&#8221; at <a class="reference external" href="http://progit.org/2010/03/17/replace.html">http://progit.org/2010/03/17/replace.html</a></p>
<p>As my README shows, I have some more details to learn, but for now, just WOWZA!!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.org/halfire/2012/02/21/wowza_prepending_history/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Release &#8220;As-Is&#8221; at high level</title>
		<link>http://blog.mozilla.org/halfire/2012/02/01/releng_as-is_snapshot/</link>
		<comments>http://blog.mozilla.org/halfire/2012/02/01/releng_as-is_snapshot/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 23:50:44 +0000</pubDate>
		<dc:creator>Hal Wine</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[DVCS]]></category>

		<guid isPermaLink="false">http://blog.mozilla.org/halfire/?p=75</guid>
		<description><![CDATA[[Refer to the main page for additional context.] Where we are in January 2012 The purpose of this post is to present a very high level picture of the current Firefox build &#38; release process as a set of requirements. &#8230; <a href="http://blog.mozilla.org/halfire/2012/02/01/releng_as-is_snapshot/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[
<p>[Refer to the <a class="reference external" href="/halfire/releng_and_git_project/">main page</a> for additional context.]</p>
<div class="section" id="where-we-are-in-january-2012">
<h1>Where we are in January 2012</h1>
<p>The purpose of this post is to present a very high level picture of the current Firefox build &amp; release process as a set of requirements.  Some of these services are provided or supported by groups outside of releng (particularly it &amp; webdev). This diagram will be useful in understanding the impact of changes.</p>
</p></div>
<div class="section" id="system-scope">
<h1>System Scope</h1>
<p>Here is how I&#8217;m defining the boundaries of the current system:</p>
<ul class="simple">
<li>Applies to anything &amp; everything involved in producing artifacts that are directly installed on an end user&#8217;s device.
<ul>
<li>In: Firefox, Thunderbird, Seamonkey</li>
<li>Not in: services such as browser id, sync, the addons.m.o., apps, and other code that executes on Mozilla&#8217;s servers.</li>
<li>Not in: extensions themselves (they are installed into FF/TB, not directly onto the end user&#8217;s device). Yes, that is a hair I want to split. <a class="footnote-reference" href="#f01" id="id1">[1]</a></li>
</ul>
</li>
<li>But only if the entire process happens &quot;inside the Mozilla firewall&quot;. (For example, the download mirrors are not in scope.)</li>
</ul>
<table class="docutils footnote" frame="void" id="f01" rules="none">
<colgroup>
<col class="label" />
<col /></colgroup>
<tbody valign="top">
<tr>
<td class="label"><a class="fn-backref" href="#id1">[1]</a></td>
<td>There may be some extensions, such as the Thunderbird Lightening, that cross this line. For now, I&#8217;ll ignore those.</td>
</tr>
</tbody>
</table></div>
<div class="section" id="the-developer-services">
<h1>The Developer Services</h1>
<p><em>N.B. these are only repository related services that a devloper commonly accesses.</em></p>
<p>With this setup, there is official support for:</p>
<ul class="simple">
<li>pulling from Mercurial repositories hosted at mozilla.org (hg.m.o)</li>
<li>commit access from developer&#8217;s own clone of the Mercurial repository (with committer policy enforcement)</li>
<li>&quot;try server&quot; access from developer&#8217;s own clone of the Mercurial repository</li>
<li>continuous integration based on commits to hg.m.o</li>
<li>tracking of results of commit compilation &amp; testing, via tbpl.m.o.</li>
<li>web viewing of repositories</li>
<li>web cross reference of many repositories on mxr.m.o</li>
</ul></div>
<div class="section" id="the-picture">
<h1>The Picture</h1>
<p> <img alt="Block diagram" class="aligncenter size-full wp-image-80" src="/halfire/files/2012/02/DVCSAs-Is2.png" swidth="1243" height="651" /> </div>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.org/halfire/2012/02/01/releng_as-is_snapshot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Ideal DVCS Goal</title>
		<link>http://blog.mozilla.org/halfire/2012/01/26/dvcs_end_result/</link>
		<comments>http://blog.mozilla.org/halfire/2012/01/26/dvcs_end_result/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 02:45:10 +0000</pubDate>
		<dc:creator>Hal Wine</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[DVCS]]></category>

		<guid isPermaLink="false">http://blog.mozilla.org/halfire/?p=67</guid>
		<description><![CDATA[[Refer to the main page for additional context.] Based on discussions to date, everyone seems to have similar ideas about what &#34;supporting git for releng&#34; means. Later posts will highlight the work needed to ensure the ideal can be achieved, &#8230; <a href="http://blog.mozilla.org/halfire/2012/01/26/dvcs_end_result/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[
<p>[Refer to the <a class="reference external" href="./releng_and_git_project/">main page</a> for additional context.]</p>
<p>Based on discussions to date, everyone seems to have similar ideas about what &quot;supporting git for releng&quot; means. Later posts will highlight the work needed to ensure the ideal can be achieved, and how to arrive there.</p>
<p>For this post, I intend to limit the viewpoint and scope to that of the developer impact. Release notions (such as &quot;system of record&quot;) and scaling issues won&#8217;t be mentioned here. (N.B. Those concerns will be a key part of the path to verifying feasibility, but do not change the goal.)</p>
<p>As a reminder, I&#8217;m just talking about repositories that are used to produce products. <a class="footnote-reference" href="#f1" id="id1">[1]</a></p>
<div class="section" id="the-ideal-future">
<h1>The Ideal Future</h1>
<p>The Ideal: In the future, each contributor will be as free to choose their DVCS of choice as they currently are to choose a text editor.</p>
<p>Since that&#8217;s a pretty general statement, let me limit it a bit with some caveats that I expect will apply.</p>
<ul class="simple">
<li>This may only be true at a technical level, as various teams might have social conventions or alternate tooling that will limit DVCS choices.</li>
<li>Initial planning will be for products <a class="footnote-reference" href="#f1" id="id2">[1]</a> that are released via the Release Engineering team. <a class="footnote-reference" href="#f2" id="id3">[2]</a></li>
<li>The current set of supported DVCS would be <cite>hg</cite> and <cite>git</cite>. By supported, I think folks roughly mean:
<ul>
<li>an officially supported way get the latest revision of any official branch/repository, without any extra work on the part of the developer.</li>
<li>an officially supported way to interact with existing Mozilla hosted tools, such as the try server, tbpl, etc.</li>
<li>an officially supported way to commit from the DVCS, that supports the current commit workflow (and policy).</li>
</ul>
</li>
<li>There will be support of social coding sites. I think support means providing an officially supported mechanism to keep &quot;current&quot; instances of each official branch in the social coding sites. The goal would be to allow developers to utilize the enhanced services offered by those sites to view, clone, and share work prior to doing an official commit.</li>
</ul></div>
<div class="section" id="next-steps">
<h1>Next Steps</h1>
<ol class="arabic simple">
<li>This post will help validate that the above vision has a wider consensus. Please pass this link along and add your comments below.</li>
<li>Keep an eye on the <a class="reference external" href="./releng_and_git_project.html">main page</a> for more material.</li>
</ol>
<hr class="docutils" />
<table class="docutils footnote" frame="void" id="f1" rules="none">
<colgroup>
<col class="label" />
<col /></colgroup>
<tbody valign="top">
<tr>
<td class="label">[1]</td>
<td><em>(<a class="fn-backref" href="#id1">1</a>, <a class="fn-backref" href="#id2">2</a>)</em> I&#8217;m using &quot;products&quot; to distinquish binaries Mozilla provides to the end users to install on their computers from &quot;services&quot; Mozilla hosts. Product examples include Firefox and Thunderbird. Service examples include Sync and BrowserID.</td>
</tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="f2" rules="none">
<colgroup>
<col class="label" />
<col /></colgroup>
<tbody valign="top">
<tr>
<td class="label"><a class="fn-backref" href="#id3">[2]</a></td>
<td>The rationale for starting with existing products is that is where the majority of our developers work. Additionally, the existing continuous build &amp; test infrastructure will place some constraints on DVCS workflows. Once those constraints are documented, other projects can make informed decisions on their usage.</td>
</tr>
</tbody>
</table></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.org/halfire/2012/01/26/dvcs_end_result/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Releng &amp; Git Project Overview</title>
		<link>http://blog.mozilla.org/halfire/2012/01/26/releng_and_git_project/</link>
		<comments>http://blog.mozilla.org/halfire/2012/01/26/releng_and_git_project/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 01:05:04 +0000</pubDate>
		<dc:creator>Hal Wine</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[DVCS]]></category>

		<guid isPermaLink="false">http://blog.mozilla.org/halfire/?p=63</guid>
		<description><![CDATA[Contents Posts in the Series Glossary Related &#38; Reference Material This is the first in a series of posts about the &#34;support git in releng&#34; project. The goal of this project, as stated in bug 713782, is: &#8230; The idea &#8230; <a href="http://blog.mozilla.org/halfire/2012/01/26/releng_and_git_project/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[
<div class="contents topic" id="contents">
<p class="topic-title first">Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#posts-in-the-series" id="id2">Posts in the Series</a></li>
<li><a class="reference internal" href="#glossary" id="id3">Glossary</a></li>
<li><a class="reference internal" href="#related-reference-material" id="id4">Related &amp; Reference Material</a></li>
</ul></div>
<p>This is the first in a series of posts about the &quot;support git in releng&quot; project. The goal of this project, as stated in <a class="reference external" href="https://bugzilla.mozilla.org/show_bug.cgi?id=713782">bug 713782</a>, is:</p>
<blockquote><p> &#8230; The idea here is to see if we can support git in Mozilla&#8217;s RelEng infrastructure, to at least the same standard (or better) as we already currently support hg.</p></blockquote>
<p>My hope is that blog posts will be a better forum for discussion than the tracking <a class="reference external" href="https://bugzilla.mozilla.org/show_bug.cgi?id=713782">bug 713782</a>, or a wiki page, at this stage.</p>
<p>These posts will highlight the various issues, so that the vague definitions above become clear, as do the intermediate steps needed to achieve completion.</p>
<div class="section" id="posts-in-the-series">
<h1><a class="toc-backref" href="#id2">Posts in the Series</a></h1>
<p>Overview &amp; context:</p>
<blockquote><ul class="simple">
<li><a class="reference external" href="/halfire/dvcs_end_result/">Where we want to end up</a></li>
<li><a class="reference external" href="/halfire/releng_as-is_snapshot/">Where we are today</a></li>
<li><a class="reference external" href="/halfire/2012/03/02/dvcs-survey-summary/">What&#8217;s the first step?</a></li>
<li><a class="reference external" href="/halfire/2012/04/10/the_dev_cycle-3/">Other benefits to the first step</a></li>
</ul>
</blockquote>
<p>Implementation Details:</p>
<blockquote><ul class="simple">
<li><a class="reference external" href="/halfire/proposed-changes-to-dev-workflow/">Changes to developer workflow</a></li>
<li><a class="reference external" href="/halfire/proposed-changes-to-commit-workflow/">Changes to committer workflow</a></li>
</ul>
</blockquote></div>
<div class="section" id="glossary">
<h1><a class="toc-backref" href="#id3">Glossary</a></h1>
<p><em>The project goal (above) has a few terms that need defining, so they mean the same thing to all of us. And the discussion will introduce some terms as well. As these come up, they will be added here.</em></p>
<blockquote><dl class="docutils">
<dt><em>Mozilla Products</em></dt>
<dd>Software delivered to the end user for installation directly on their computer.</dd>
<dt><em>Releng Infrastructure</em></dt>
<dd>The processes &amp; machines that are used to produce Mozilla Products, from the source code repository through continuous integration and testing to the product binaries ready for the end user.</dd>
</dl>
</blockquote></div>
<div class="section" id="related-reference-material">
<h1><a class="toc-backref" href="#id4">Related &amp; Reference Material</a></h1>
<ul class="simple">
<li>Master tracking is occurring in <a class="reference external" href="https://bugzilla.mozilla.org/show_bug.cgi?id=713782">bug 713782</a></li>
<li>John O&#8217;Duinn&#8217;s post &quot;<a class="reference external" href="http://oduinn.com/blog/2011/12/29/is-it-git-or-is-it-github/">is it git or is it github</a>&quot;</li>
</ul>
<p>What folks have already done:</p>
<blockquote><ul class="simple">
<li>doublec&#8217;s mozilla-central on github <a class="reference external" href="https://github.com/doublec/mozilla-central">https://github.com/doublec/mozilla-central</a></li>
<li>bholley &amp; jlebar&#8217;s tools to easy committing to hg from git <a class="reference external" href="https://github.com/jlebar/moz-git-tools">https://github.com/jlebar/moz-git-tools</a></li>
</ul>
</blockquote></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.org/halfire/2012/01/26/releng_and_git_project/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8230; a view from Outside</title>
		<link>http://blog.mozilla.org/halfire/2012/01/22/a-view-from-outside-2/</link>
		<comments>http://blog.mozilla.org/halfire/2012/01/22/a-view-from-outside-2/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 00:30:35 +0000</pubDate>
		<dc:creator>Hal Wine</dc:creator>
				<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://blog.mozilla.org/halfire/?p=37</guid>
		<description><![CDATA[tl;dr One of the things that excited me about the opportunity to work at Mozilla was the chance to change perspectives. After working in many closed environments, I knew the open source world of Mozilla would be different. And that &#8230; <a href="http://blog.mozilla.org/halfire/2012/01/22/a-view-from-outside-2/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div id="tl-dr" class="section">
<h2>tl;dr</h2>
<p>One of the things that excited me about the opportunity to work at Mozilla was the chance to change perspectives. After working in many closed environments, I knew the open source world of Mozilla would be different. And that would lead to a re-examination of basic questions, such as:</p>
<blockquote>
<div>
<p><strong>Q:</strong> Are there any significant differences in the role a VCS plays at Mozilla than at j-random-private-enterprise?</p>
<p><strong>A:</strong> At the scale of Mozilla Products <a id="id1" class="footnote-reference" href="#f3">[1]</a>, I don’t believe there are.</p>
</div>
</blockquote>
<p>But the question is important to ask! (And I hope to ask more of them.)</p>
</div>
<div id="summary" class="section">
<h2>Summary</h2>
<p>So things are different at Mozilla, but isn’t that always the case when changing jobs? Well, yes, but Mozilla appears to be <em>more</em> different:</p>
<blockquote>
<div>
<ul class="simple">
<li>We’re guided by our <a class="reference external" href="http://www.mozilla.org/about/mission.html">Mission Statement</a>.</li>
<li>We produce open source products.</li>
<li>We’re owned by a not for profit foundation.</li>
<li>Much that most companies would consider “trade secrets” or “proprietary information” about process or plans, we discuss in public.</li>
</ul>
</div>
</blockquote>
<p>But, how different does this make the inner workings of Mozilla? As a release engineer, how would my day-to-day work change? How much of what-I-thought-I-knew need to be thrown out? Would I be putting myself into an “everything you know is wrong” situation? <a id="id2" class="footnote-reference" href="#f1">[2]</a></p>
<p>I’m sure I’ll be dealing with this cultural shift for at least my first year. I’m looking forward to this, as it will be a wonderful opportunity to examine a number of assumptions I’ve mad for years, that may no longer be useful. (And, even if one assumption is discarded, I don’t know if it will be replaced by one that contradicts the original, or subsumes the original with a more general understanding of the process.)</p>
<p>For example, one such question I’m currently pondering is: what is the role of the VCS (version control system) in an environment like Mozilla? Does it differ from private enterprise? If so, how? This question is one I’m keenly interested in, both philosophically, and practically. As is often the case, writing about it clarified some things for me. I hope folks who comment will help polish it further.</p>
</div>
<div id="what-services-are-provided-by-a-vcs" class="section">
<h2>What Services are provided by a VCS</h2>
<p>One might (and I suspect many readers will) think this is a silly question. A VCS exists to support developers. Period. Historically, that’s a very valid point. If one is just looking at software development, we can put the development team in the center of everything:<br />
<img src="/halfire/files/2012/01/chart1.png" alt="Figure 1" /><br />
Most development operations now have a number of automated systems which interact with the VCS, including:</p>
<blockquote>
<div>
<ul class="simple">
<li>defect tracking</li>
<li>continuous integration</li>
<li>metrics (code churn, bug density analysis, etc)</li>
</ul>
</div>
</blockquote>
<p><img src="/halfire/files/2012/01/chart2.png" alt="Figure 2" /><br />
Toughest of all to spot are the non-automated policies that rely on certain behavior being stable over a long period of time. These implicit contracts impact operations such as:</p>
<blockquote>
<div>
<ul class="simple">
<li>legal audit trails <a id="id3" class="footnote-reference" href="#f2">[3]</a></li>
<li>disaster recovery plans</li>
<li>the <em>big</em> boss’s custom metrics script that assumes things don’t change.</li>
</ul>
</div>
</blockquote>
<p><img src="/halfire/files/2012/01/chart3.png" alt="Figure 3" /><br />
I won’t attempt to draw it, but now imagine that every data store and automated process in those diagrams need to be replicated or clustered for scaling and HA. All of a sudden, our nice neat little VCS system has gotten out of hand. Any change has to meet the needs of the entire user community, not just the developers.</p>
<hr class="docutils" />
<table id="f3" class="docutils footnote" frame="void" rules="none">
<colgroup>
<col class="label" />
<col /></colgroup>
<tbody valign="top">
<tr>
<td class="label"><a class="fn-backref" href="#id1">[1]</a></td>
<td>Here I’m using “product” to mean something that is produced my Mozilla and installed on end user devices. (Firefox, Thunderbird, Seamonkey are all examples.) Mozilla also provides services, which may have different needs.</td>
</tr>
</tbody>
</table>
<table id="f1" class="docutils footnote" frame="void" rules="none">
<colgroup>
<col class="label" />
<col /></colgroup>
<tbody valign="top">
<tr>
<td class="label"><a class="fn-backref" href="#id2">[2]</a></td>
<td>This is what programmers were told when they started to program the first Macintosh, as it required a change from procedural flow to event driven flow. Of course, that was a huge lie, as many programming fields already used event driven programming. (Even <a class="reference external" href="http://en.wikipedia.org/wiki/IBM_RPG">RPG II</a>, but that’s another story.)</td>
</tr>
</tbody>
</table>
<table id="f2" class="docutils footnote" frame="void" rules="none">
<colgroup>
<col class="label" />
<col /></colgroup>
<tbody valign="top">
<tr>
<td class="label"><a class="fn-backref" href="#id3">[3]</a></td>
<td>Mozilla has these &#8211; the <a class="reference external" href="http://www.mozilla.org/hacking/notification/">commiter’s agreement</a> combined with <a class="reference external" href="http://www.mozilla.org/hacking/commit-access-policy/">commit level authorization</a></td>
</tr>
</tbody>
</table>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.org/halfire/2012/01/22/a-view-from-outside-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
