Commits

Joseph Walton committed e9cb66d

Generate output from a sample Confluence history.

Comments (0)

Files changed (19)

src/main/java/ConfluenceHistory.java

+import java.io.EOFException;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.apache.commons.io.FileUtils;
+import org.xml.sax.SAXException;
+
+
+public class ConfluenceHistory
+{
+    List<Revision<SFThing>> revisions;
+    Map<Revision<SFThing>, RevDetails> revDetails;
+
+    static ConfluenceHistory load(File f) throws IOException, ParserConfigurationException, SAXException
+    {
+        List<String> lines = FileUtils.readLines(f);
+
+        if (lines.size() < 1)
+        {
+            throw new EOFException();
+        }
+
+        ConfluenceHistory ch = new ConfluenceHistory();
+
+        ch.revisions = new ArrayList<Revision<SFThing>>();
+        ch.revDetails = new HashMap<Revision<SFThing>, RevDetails>();
+
+        for (String l : lines.subList(1, lines.size()))
+        {
+            String[] sa = l.split(", ");
+            if (sa.length != 3)
+            {
+                throw new IOException("Bad line format");
+            }
+
+            File cf = new File(f.getParentFile(), sa[0] + ".storageformat");
+
+            String contents = FileUtils.readFileToString(cf);
+            Date when = new Date(sa[1]);
+            String who = sa[2];
+
+            Revision<SFThing> rev = new Revision<SFThing>(StorageFormatTokens.byWordFragments().parse(contents));
+            ch.revisions.add(rev);
+
+            RevDetails rd = new RevDetails();
+            rd.who = who;
+            rd.when = when;
+            ch.revDetails.put(rev, rd);
+        }
+
+        Collections.reverse(ch.revisions);
+
+        return ch;
+    }
+}
+
+class RevDetails
+{
+    Date when;
+    String who;
+
+    public String toString()
+    {
+        return who + ", " + when;
+    }
+}

src/main/java/OutputPage.java

         String colour = colours.get(r);
         if (colour == null)
         {
-            colour = randomColour();
+            colour = randomColour(r);
             colours.put(r, colour);
         }
         return colour;
     {
         AttributesImpl atts = new AttributesImpl();
         atts.addAttribute("", "style", "style", "CDATA", "background-color: " + colourFor(r) + ";");
-        atts.addAttribute("", "title", "title", "CDATA", "Revision: " + r);
+        atts.addAttribute("", "title", "title", "CDATA", titleFor(r));
         return atts;
     }
 
-    private static String randomColour()
+    String titleFor(Revision<SFThing> r)
+    {
+        return "Revision: " + r.toString();
+    }
+
+    String randomColour(Revision<SFThing> r)
     {
         long c = (long) (Math.random() * 0xffffff) | 0x808080;
         return String.format("#%06x", c);
         xw.startElement(StorageFormatTokens.XHTML_NS, "p");
         for (Map.Entry<Revision<SFThing>, String> e : colours.entrySet())
         {
-            AttributesImpl atts = new AttributesImpl();
-            atts.addAttribute("", "style", "style", "CDATA", "background-color: " + e.getValue() + ";");
-            xw.startElement(StorageFormatTokens.XHTML_NS, "span", "span", atts);
+            xw.startElement(StorageFormatTokens.XHTML_NS, "span", "span", attsForRevision(e.getKey()));
             xw.characters(e.getKey().toString());
             xw.endElement(StorageFormatTokens.XHTML_NS, "span");
         }
 
     public void writeBlamed(List<Blame<SFThing>> blame) throws SAXException
     {
+        Revision<SFThing> inRev = null;
+
         for (Blame<SFThing> b : blame)
         {
             SFThing t = b.getContent();
 
             if (t instanceof SFTextThing)
             {
-                xw.startElement(StorageFormatTokens.XHTML_NS, "span", "span", attsForRevision(b.getRevision()));
+                if (inRev != b.getRevision())
+                {
+                    if (inRev != null)
+                    {
+                        xw.endElement(StorageFormatTokens.XHTML_NS, "span");
+                    }
+                    xw.startElement(StorageFormatTokens.XHTML_NS, "span", "span", attsForRevision(b.getRevision()));
+                    inRev = b.getRevision();
+                }
+//                xw.startElement(StorageFormatTokens.XHTML_NS, "span", "span", attsForRevision(b.getRevision()));
 //                xw.characters("{");
                 t.write(xw);
 //                xw.characters("}");
-                xw.endElement(StorageFormatTokens.XHTML_NS, "span");
+//                xw.endElement(StorageFormatTokens.XHTML_NS, "span");
             }
             else if (t instanceof SFStartElement)
             {
+                if (inRev != null)
+                {
+                    xw.endElement(StorageFormatTokens.XHTML_NS, "span");
+                    inRev = null;
+                }
                 t.write(xw);
 
-                xw.startElement(StorageFormatTokens.XHTML_NS, "span", "span", attsForRevision(b.getRevision()));
-                xw.characters("(");
-                xw.endElement(StorageFormatTokens.XHTML_NS, "span");
+//                xw.startElement(StorageFormatTokens.XHTML_NS, "span", "span", attsForRevision(b.getRevision()));
+//                xw.characters("(");
+//                xw.endElement(StorageFormatTokens.XHTML_NS, "span");
             }
             else if (t instanceof SFEndElement)
             {
-                xw.startElement(StorageFormatTokens.XHTML_NS, "span", "span", attsForRevision(b.getRevision()));
-                xw.characters(")");
-                xw.endElement(StorageFormatTokens.XHTML_NS, "span");
+                if (inRev != null)
+                {
+                    xw.endElement(StorageFormatTokens.XHTML_NS, "span");
+                    inRev = null;
+                }
+//                xw.startElement(StorageFormatTokens.XHTML_NS, "span", "span", attsForRevision(b.getRevision()));
+//                xw.characters(")");
+//                xw.endElement(StorageFormatTokens.XHTML_NS, "span");
 
                 t.write(xw);
             }
         }
+
+        if (inRev != null)
+        {
+            xw.endElement(StorageFormatTokens.XHTML_NS, "span");
+            inRev = null;
+        }
     }
 
     public void startHtmlBody() throws SAXException

src/main/java/SFThing.java

+import java.util.ArrayList;
+import java.util.List;
+
 import com.megginson.sax.XMLWriter;
 
 import org.xml.sax.SAXException;

src/main/java/ShowBlamed.java

+import java.awt.Color;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.Writer;
+import java.util.Random;
+
+import com.megginson.sax.XMLWriter;
+
+
+public class ShowBlamed
+{
+    public static void main(String[] args) throws Exception
+    {
+        final ConfluenceHistory ch = ConfluenceHistory.load(new File("src/test/sample/second/index.csv"));
+
+        Writer w;
+
+        w = new FileWriter("/tmp/a.xhtml");
+//        w = new OutputStreamWriter(System.out);
+
+        XMLWriter xw = new XMLWriter(w);
+
+        OutputPage op = new OutputPage(xw){
+            @Override
+            String titleFor(Revision<SFThing> r)
+            {
+                return ch.revDetails.get(r).toString();
+            }
+
+            @Override
+            String randomColour(Revision<SFThing> r)
+            {
+                float hue = (float) Math.random();
+                hue = new Random(ch.revDetails.get(r).who.hashCode()).nextFloat();
+                float saturation = 0.2f + (float) (Math.random() / 5);
+                float brightness = 0.85f;
+
+                return String.format("#%06X", 0xFFFFFF & Color.HSBtoRGB(hue, saturation, brightness));
+            }
+        };
+
+        op.startHtmlBody();
+        op.writeBlamed(Blamer.blame(ch.revisions));
+        op.writeRevisionKey(xw);
+        op.endHtmlBody();
+
+        w.close();
+    }
+}

src/test/sample/second/1914241386.storageformat

+
+<p>Git has plenty of support to <a href="http://git-scm.com/">get started</a> (as well as <a href="http://tartley.com/?p=1267">a useful spatial analogy</a>). This is a list of specific things to try to highlight the benefits and warm up to using it in production.</p>
+<h3>Other resources</h3>
+<ul>
+<li>Git documentation - <a href="http://git-scm.com/documentation">http://git-scm.com/documentation</a></li>
+<li>Git Is Awesome - <a href="http://perl.plover.com/yak/git/">http://perl.plover.com/yak/git/</a></li>
+<li>A Visual Git Reference - <a href="http://marklodato.github.com/visual-git-guide/index-en.html">http://marklodato.github.com/visual-git-guide/index-en.html</a></li>
+<li>
+<p>The Git Object Model - <a href="http://book.git-scm.com/1_the_git_object_model.html">http://book.git-scm.com/1_the_git_object_model.html</a></p></li></ul>
+<h3>Get started</h3>
+<ol>
+<li>
+<pre>git config --global user.name &quot;Your Name Comes Here&quot;</pre></li>
+<li>
+<pre>git config --global user.email you@yourdomain.example.com</pre></li>
+<li>Clone Crowd from the Git repository</li>
+<li>Make another local clone from the first local one</li></ol>
+<h3>Git stores whole history</h3>
+<ol>
+<li>How many commits led up to the 2.2.0 release?</li>
+<li>How many different people are reponsible for the current contents of the root <code>pom.xml</code>?</li>
+<li>What changes went into the 2.1.1 release?</li></ol>
+<h3>Git has cheap local branching</h3>
+<ol>
+<li>Create a local branch</li>
+<li>Make a commit to it</li>
+<li>Go back to the master branch and use&nbsp;<code>gitk</code> to see your new branch</li>
+<li>Delete the new branch</li></ol>
+<h3>Git has easy local undo</h3>
+<ol>
+<li>Commit a change</li>
+<li>Without pushing, reset it</li>
+<li>Examine your undone commit in the Git repo</li></ol>
+<h3>Git is distributed</h3>
+<ol>
+<li>Commit a change</li>
+<li>Get it to another developer&nbsp;<strong>without</strong> pushing it back to the main repository and add it to the table:</li></ol>
+<table>
+<tbody>
+<tr>
+<th>Who?</th>
+<th>To whom?</th>
+<th>Method</th></tr>
+<tr>
+<td><ac:link><ri:user ri:username="jwalton" /></ac:link></td>
+<td><ac:link><ri:user ri:username="psongsiritat" /></ac:link>​</td>
+<td><code>git daemon</code>,&nbsp;<code>git pull</code> between workstation​s</td></tr>
+<tr>
+<td colspan="1"><ac:link><ri:user ri:username="jawong" /></ac:link></td>
+<td colspan="1"><ac:link><ri:user ri:username="onevalainen" /></ac:link></td>
+<td colspan="1"><code>git daemon</code>, <code>git pull</code> between workstations</td></tr>
+<tr>
+<td colspan="1"><ac:link><ri:user ri:username="onevalainen" /></ac:link></td>
+<td colspan="1"><ac:link><ri:user ri:username="jawong" /></ac:link></td>
+<td colspan="1">
+<p><code>git daemon</code>, <code>git pull</code> between workstations</p></td></tr>
+<tr>
+<td colspan="1"><ac:link><ri:user ri:username="jwalton" /></ac:link></td>
+<td colspan="1"><ac:link><ri:space ri:space-key="~aragot" /></ac:link></td>
+<td colspan="1">Bundle</td></tr>
+<tr>
+<td colspan="1"><ac:link><ri:space ri:space-key="~aragot" /></ac:link></td>
+<td colspan="1"><ac:link><ri:space ri:space-key="~ahempel" /></ac:link></td>
+<td colspan="1"><code>git daemon</code>,&nbsp;<code>git push</code>&nbsp;between workstations</td></tr></tbody></table>
+<table>
+<tbody>
+<tr>
+<th>Method</th></tr>
+<tr>
+<td>
+<p><code>git diff</code>,&nbsp;<code>git apply</code></p></td></tr>
+<tr>
+<td colspan="1">Create a fork repository</td></tr>
+<tr>
+<td colspan="1"><code>git bundle create</code>,&nbsp;<code>git bundle unbundle</code></td></tr>
+<tr>
+<td colspan="1">
+<p><code>git format-patch</code>,&nbsp;<code>git apply</code></p></td></tr>
+<tr>
+<td colspan="1">Tar and send the&nbsp;<code>.git</code> directory</td></tr>
+<tr>
+<td colspan="1">etc.</td></tr></tbody></table>
+<h3>Git has multiple branches on the repository</h3>
+<ol>
+<li>Create a personal branch including your username</li>
+<li>Commit an opinionated change</li>
+<li>Push it to a new branch in the repository</li></ol>
+<h3>Git is fast</h3>
+<p>Make an unscientific comparison with Subversion and add it to the table:</p>
+<table>
+<tbody>
+<tr>
+<th>Operation</th>
+<th>Svn</th>
+<th>Git</th></tr>
+<tr>
+<td>​log | wc -l</td>
+<td>​8.5s</td>
+<td>0.06s​</td></tr>
+<tr>
+<td colspan="1">diff 2.2.0 2.2.8</td>
+<td colspan="1">7.3s</td>
+<td colspan="1">0.0.7s</td></tr>
+<tr>
+<td colspan="1">blame pom.xml</td>
+<td colspan="1">4.9s</td>
+<td colspan="1">1.4s</td></tr>
+<tr>
+<td colspan="1">checkout/clone</td>
+<td colspan="1">11.2s</td>
+<td colspan="1">90.3s (hey, you asked for unscientific comparison <ac:emoticon ac:name="smile" />)</td></tr></tbody></table>

src/test/sample/second/1914241433.storageformat

+
+<p>Git has plenty of support to <a href="http://git-scm.com/">get started</a> (as well as <a href="http://tartley.com/?p=1267">a useful spatial analogy</a>). This is a list of specific things to try to highlight the benefits and warm up to using it in production.</p>
+<h3>Get started</h3>
+<ol>
+<li>Clone Crowd from the Git repository</li>
+<li>Make another local clone from the first local one</li></ol>
+<h3>Git stores whole history</h3>
+<ol>
+<li>How many commits led up to the 2.2.0 release?</li>
+<li>How many different people are reponsible for the current contents of the root <code>pom.xml</code>?</li>
+<li>What changes went into the 2.1.1 release?</li></ol>
+<h3>Git has cheap local branching</h3>
+<ol>
+<li>Create a local branch</li>
+<li>Make a commit to it</li>
+<li>Go back to the master branch and use&nbsp;<code>gitk</code> to see your new branch</li>
+<li>Delete the new branch</li></ol>
+<h3>Git has easy local undo</h3>
+<ol>
+<li>Commit a change</li>
+<li>Without pushing, reset it</li>
+<li>Examine your undone commit in the Git repo</li></ol>
+<h3>Git is distributed</h3>
+<ol>
+<li>Commit a change</li>
+<li>Get it to another developer&nbsp;<strong>without</strong> pushing it back to the main repository</li></ol>
+<table>
+<tbody>
+<tr>
+<th>Who?</th>
+<th>To whom?</th>
+<th>Method</th></tr>
+<tr>
+<td>​</td>
+<td>​</td>
+<td>​</td></tr></tbody></table>
+<h3>Git has multiple branches on the repository</h3>
+<ol>
+<li>Create a personal branch including your username</li>
+<li>Commit an opinionated change</li>
+<li>Push it to a new branch in the repository</li></ol>

src/test/sample/second/1916633450.storageformat

+
+<p>Git has plenty of support to <a href="http://git-scm.com/">get started</a> (as well as <a href="http://tartley.com/?p=1267">a useful spatial analogy</a>). This is a list of specific things to try to highlight the benefits and warm up to using it in production.</p>
+<h3>Get started</h3>
+<ol>
+<li>Clone Crowd from the Git repository</li>
+<li>Make another local clone from the first local one</li></ol>
+<h3>Git stores whole history</h3>
+<ol>
+<li>How many commits led up to the 2.2.0 release?</li>
+<li>How many different people are reponsible for the current contents of the root <code>pom.xml</code>?</li>
+<li>What changes went into the 2.1.1 release?</li></ol>
+<h3>Git has cheap local branching</h3>
+<ol>
+<li>Create a local branch</li>
+<li>Make a commit to it</li>
+<li>Go back to the master branch and use&nbsp;<code>gitk</code> to see your new branch</li>
+<li>Delete the new branch</li></ol>
+<h3>Git has easy local undo</h3>
+<ol>
+<li>Commit a change</li>
+<li>Without pushing, reset it</li>
+<li>Examine your undone commit in the Git repo</li></ol>
+<h3>Git is distributed</h3>
+<ol>
+<li>Commit a change</li>
+<li>Get it to another developer&nbsp;<strong>without</strong> pushing it back to the main repository</li></ol>
+<table>
+<tbody>
+<tr>
+<th>Who?</th>
+<th>To whom?</th>
+<th>Method</th></tr>
+<tr>
+<td>​</td>
+<td>​</td>
+<td>​</td></tr></tbody></table>
+<h3>Git has multiple branches on the repository</h3>
+<ol>
+<li>Create a personal branch including your username</li>
+<li>Commit an opinionated change</li>
+<li>Push it to a new branch in the repository</li></ol>
+<h3>Git is fast</h3>
+<p>Make an unscientific comparison with Subversion and add it to the table:</p>
+<table>
+<tbody>
+<tr>
+<th>Operation</th>
+<th>Svn</th>
+<th>Git</th></tr>
+<tr>
+<td>​log | wc -l</td>
+<td>​8.5s</td>
+<td>0.06s​</td></tr></tbody></table>

src/test/sample/second/1916633455.storageformat

+
+<p>Git has plenty of support to <a href="http://git-scm.com/">get started</a> (as well as <a href="http://tartley.com/?p=1267">a useful spatial analogy</a>). This is a list of specific things to try to highlight the benefits and warm up to using it in production.</p>
+<h3>Get started</h3>
+<ol>
+<li>Clone Crowd from the Git repository</li>
+<li>Make another local clone from the first local one</li></ol>
+<h3>Git stores whole history</h3>
+<ol>
+<li>How many commits led up to the 2.2.0 release?</li>
+<li>How many different people are reponsible for the current contents of the root <code>pom.xml</code>?</li>
+<li>What changes went into the 2.1.1 release?</li></ol>
+<h3>Git has cheap local branching</h3>
+<ol>
+<li>Create a local branch</li>
+<li>Make a commit to it</li>
+<li>Go back to the master branch and use&nbsp;<code>gitk</code> to see your new branch</li>
+<li>Delete the new branch</li></ol>
+<h3>Git has easy local undo</h3>
+<ol>
+<li>Commit a change</li>
+<li>Without pushing, reset it</li>
+<li>Examine your undone commit in the Git repo</li></ol>
+<h3>Git is distributed</h3>
+<ol>
+<li>Commit a change</li>
+<li>Get it to another developer&nbsp;<strong>without</strong> pushing it back to the main repository</li></ol>
+<table>
+<tbody>
+<tr>
+<th>Who?</th>
+<th>To whom?</th>
+<th>Method</th></tr>
+<tr>
+<td><ac:link><ri:user ri:username="jwalton" /></ac:link></td>
+<td><ac:link><ri:user ri:username="psongsiritat" /></ac:link>​</td>
+<td><code>git daemon</code>,&nbsp;<code>git pull</code> between workstation​s</td></tr></tbody></table>
+<h3>Git has multiple branches on the repository</h3>
+<ol>
+<li>Create a personal branch including your username</li>
+<li>Commit an opinionated change</li>
+<li>Push it to a new branch in the repository</li></ol>
+<h3>Git is fast</h3>
+<p>Make an unscientific comparison with Subversion and add it to the table:</p>
+<table>
+<tbody>
+<tr>
+<th>Operation</th>
+<th>Svn</th>
+<th>Git</th></tr>
+<tr>
+<td>​log | wc -l</td>
+<td>​8.5s</td>
+<td>0.06s​</td></tr></tbody></table>

src/test/sample/second/1922238496.storageformat

+
+<p>Git has plenty of support to <a href="http://git-scm.com/">get started</a> (as well as <a href="http://tartley.com/?p=1267">a useful spatial analogy</a>). This is a list of specific things to try to highlight the benefits and warm up to using it in production.</p>
+<h3>Get started</h3>
+<ol>
+<li>Clone Crowd from the Git repository</li>
+<li>Make another local clone from the first local one</li></ol>
+<h3>Git stores whole history</h3>
+<ol>
+<li>How many commits led up to the 2.2.0 release?</li>
+<li>How many different people are reponsible for the current contents of the root <code>pom.xml</code>?</li>
+<li>What changes went into the 2.1.1 release?</li></ol>
+<h3>Git has cheap local branching</h3>
+<ol>
+<li>Create a local branch</li>
+<li>Make a commit to it</li>
+<li>Go back to the master branch and use&nbsp;<code>gitk</code> to see your new branch</li>
+<li>Delete the new branch</li></ol>
+<h3>Git has easy local undo</h3>
+<ol>
+<li>Commit a change</li>
+<li>Without pushing, reset it</li>
+<li>Examine your undone commit in the Git repo</li></ol>
+<h3>Git is distributed</h3>
+<ol>
+<li>Commit a change</li>
+<li>Get it to another developer&nbsp;<strong>without</strong> pushing it back to the main repository and add it to the table:</li></ol>
+<table>
+<tbody>
+<tr>
+<th>Who?</th>
+<th>To whom?</th>
+<th>Method</th></tr>
+<tr>
+<td><ac:link><ri:user ri:username="jwalton" /></ac:link></td>
+<td><ac:link><ri:user ri:username="psongsiritat" /></ac:link>​</td>
+<td><code>git daemon</code>,&nbsp;<code>git pull</code> between workstation​s</td></tr></tbody></table>
+<h3>Git has multiple branches on the repository</h3>
+<ol>
+<li>Create a personal branch including your username</li>
+<li>Commit an opinionated change</li>
+<li>Push it to a new branch in the repository</li></ol>
+<h3>Git is fast</h3>
+<p>Make an unscientific comparison with Subversion and add it to the table:</p>
+<table>
+<tbody>
+<tr>
+<th>Operation</th>
+<th>Svn</th>
+<th>Git</th></tr>
+<tr>
+<td>​log | wc -l</td>
+<td>​8.5s</td>
+<td>0.06s​</td></tr>
+<tr>
+<td colspan="1">diff 2.2.0 2.2.8</td>
+<td colspan="1">7.3s</td>
+<td colspan="1">0.0.7s</td></tr></tbody></table>

src/test/sample/second/1926111264.storageformat

+
+<p>Git has plenty of support to <a href="http://git-scm.com/">get started</a> (as well as <a href="http://tartley.com/?p=1267">a useful spatial analogy</a>). This is a list of specific things to try to highlight the benefits and warm up to using it in production.</p>
+<h3>Get started</h3>
+<ol>
+<li>Clone Crowd from the Git repository</li>
+<li>Make another local clone from the first local one</li></ol>
+<h3>Git stores whole history</h3>
+<ol>
+<li>How many commits led up to the 2.2.0 release?</li>
+<li>How many different people are reponsible for the current contents of the root <code>pom.xml</code>?</li>
+<li>What changes went into the 2.1.1 release?</li></ol>
+<h3>Git has cheap local branching</h3>
+<ol>
+<li>Create a local branch</li>
+<li>Make a commit to it</li>
+<li>Go back to the master branch and use&nbsp;<code>gitk</code> to see your new branch</li>
+<li>Delete the new branch</li></ol>
+<h3>Git has easy local undo</h3>
+<ol>
+<li>Commit a change</li>
+<li>Without pushing, reset it</li>
+<li>Examine your undone commit in the Git repo</li></ol>
+<h3>Git is distributed</h3>
+<ol>
+<li>Commit a change</li>
+<li>Get it to another developer&nbsp;<strong>without</strong> pushing it back to the main repository and add it to the table:</li></ol>
+<table>
+<tbody>
+<tr>
+<th>Who?</th>
+<th>To whom?</th>
+<th>Method</th></tr>
+<tr>
+<td><ac:link><ri:user ri:username="jwalton" /></ac:link></td>
+<td><ac:link><ri:user ri:username="psongsiritat" /></ac:link>​</td>
+<td><code>git daemon</code>,&nbsp;<code>git pull</code> between workstation​s</td></tr></tbody></table>
+<h3>Git has multiple branches on the repository</h3>
+<ol>
+<li>Create a personal branch including your username</li>
+<li>Commit an opinionated change</li>
+<li>Push it to a new branch in the repository</li></ol>
+<h3>Git is fast</h3>
+<p>Make an unscientific comparison with Subversion and add it to the table:</p>
+<table>
+<tbody>
+<tr>
+<th>Operation</th>
+<th>Svn</th>
+<th>Git</th></tr>
+<tr>
+<td>​log | wc -l</td>
+<td>​8.5s</td>
+<td>0.06s​</td></tr>
+<tr>
+<td colspan="1">diff 2.2.0 2.2.8</td>
+<td colspan="1">7.3s</td>
+<td colspan="1">0.0.7s</td></tr>
+<tr>
+<td colspan="1">blame pom.xml</td>
+<td colspan="1">4.9s</td>
+<td colspan="1">1.4s</td></tr></tbody></table>
+<p>&nbsp;</p>
+<p>&nbsp;</p>

src/test/sample/second/1926111359.storageformat

+
+<p>Git has plenty of support to <a href="http://git-scm.com/">get started</a> (as well as <a href="http://tartley.com/?p=1267">a useful spatial analogy</a>). This is a list of specific things to try to highlight the benefits and warm up to using it in production.</p>
+<h3>Get started</h3>
+<ol>
+<li>Clone Crowd from the Git repository</li>
+<li>Make another local clone from the first local one</li></ol>
+<h3>Git stores whole history</h3>
+<ol>
+<li>How many commits led up to the 2.2.0 release?</li>
+<li>How many different people are reponsible for the current contents of the root <code>pom.xml</code>?</li>
+<li>What changes went into the 2.1.1 release?</li></ol>
+<h3>Git has cheap local branching</h3>
+<ol>
+<li>Create a local branch</li>
+<li>Make a commit to it</li>
+<li>Go back to the master branch and use&nbsp;<code>gitk</code> to see your new branch</li>
+<li>Delete the new branch</li></ol>
+<h3>Git has easy local undo</h3>
+<ol>
+<li>Commit a change</li>
+<li>Without pushing, reset it</li>
+<li>Examine your undone commit in the Git repo</li></ol>
+<h3>Git is distributed</h3>
+<ol>
+<li>Commit a change</li>
+<li>Get it to another developer&nbsp;<strong>without</strong> pushing it back to the main repository and add it to the table:</li></ol>
+<table>
+<tbody>
+<tr>
+<th>Who?</th>
+<th>To whom?</th>
+<th>Method</th></tr>
+<tr>
+<td><ac:link><ri:user ri:username="jwalton" /></ac:link></td>
+<td><ac:link><ri:user ri:username="psongsiritat" /></ac:link>​</td>
+<td><code>git daemon</code>,&nbsp;<code>git pull</code> between workstation​s</td></tr>
+<tr>
+<td colspan="1"><ac:link><ri:user ri:username="jawong" /></ac:link></td>
+<td colspan="1"><ac:link><ri:user ri:username="onevalainen" /></ac:link></td>
+<td colspan="1"><code>git daemon</code>, <code>git clone</code></td></tr></tbody></table>
+<h3>Git has multiple branches on the repository</h3>
+<ol>
+<li>Create a personal branch including your username</li>
+<li>Commit an opinionated change</li>
+<li>Push it to a new branch in the repository</li></ol>
+<h3>Git is fast</h3>
+<p>Make an unscientific comparison with Subversion and add it to the table:</p>
+<table>
+<tbody>
+<tr>
+<th>Operation</th>
+<th>Svn</th>
+<th>Git</th></tr>
+<tr>
+<td>​log | wc -l</td>
+<td>​8.5s</td>
+<td>0.06s​</td></tr>
+<tr>
+<td colspan="1">diff 2.2.0 2.2.8</td>
+<td colspan="1">7.3s</td>
+<td colspan="1">0.0.7s</td></tr>
+<tr>
+<td colspan="1">blame pom.xml</td>
+<td colspan="1">4.9s</td>
+<td colspan="1">1.4s</td></tr></tbody></table>

src/test/sample/second/1926111362.storageformat

+
+<p>Git has plenty of support to <a href="http://git-scm.com/">get started</a> (as well as <a href="http://tartley.com/?p=1267">a useful spatial analogy</a>). This is a list of specific things to try to highlight the benefits and warm up to using it in production.</p>
+<h3>Get started</h3>
+<ol>
+<li>Clone Crowd from the Git repository</li>
+<li>Make another local clone from the first local one</li></ol>
+<h3>Git stores whole history</h3>
+<ol>
+<li>How many commits led up to the 2.2.0 release?</li>
+<li>How many different people are reponsible for the current contents of the root <code>pom.xml</code>?</li>
+<li>What changes went into the 2.1.1 release?</li></ol>
+<h3>Git has cheap local branching</h3>
+<ol>
+<li>Create a local branch</li>
+<li>Make a commit to it</li>
+<li>Go back to the master branch and use&nbsp;<code>gitk</code> to see your new branch</li>
+<li>Delete the new branch</li></ol>
+<h3>Git has easy local undo</h3>
+<ol>
+<li>Commit a change</li>
+<li>Without pushing, reset it</li>
+<li>Examine your undone commit in the Git repo</li></ol>
+<h3>Git is distributed</h3>
+<ol>
+<li>Commit a change</li>
+<li>Get it to another developer&nbsp;<strong>without</strong> pushing it back to the main repository and add it to the table:</li></ol>
+<table>
+<tbody>
+<tr>
+<th>Who?</th>
+<th>To whom?</th>
+<th>Method</th></tr>
+<tr>
+<td><ac:link><ri:user ri:username="jwalton" /></ac:link></td>
+<td><ac:link><ri:user ri:username="psongsiritat" /></ac:link>​</td>
+<td><code>git daemon</code>,&nbsp;<code>git pull</code> between workstation​s</td></tr>
+<tr>
+<td colspan="1"><ac:link><ri:user ri:username="jawong" /></ac:link></td>
+<td colspan="1"><ac:link><ri:user ri:username="onevalainen" /></ac:link></td>
+<td colspan="1"><code>git daemon</code>, <code>git clone</code></td></tr>
+<tr>
+<td colspan="1"><ac:link><ri:user ri:username="onevalainen" /></ac:link></td>
+<td colspan="1"><ac:link><ri:user ri:username="jawong" /></ac:link></td>
+<td colspan="1">
+<p><code>git daemon</code>, <code>git pull</code> between workstations</p></td></tr></tbody></table>
+<h3>Git has multiple branches on the repository</h3>
+<ol>
+<li>Create a personal branch including your username</li>
+<li>Commit an opinionated change</li>
+<li>Push it to a new branch in the repository</li></ol>
+<h3>Git is fast</h3>
+<p>Make an unscientific comparison with Subversion and add it to the table:</p>
+<table>
+<tbody>
+<tr>
+<th>Operation</th>
+<th>Svn</th>
+<th>Git</th></tr>
+<tr>
+<td>​log | wc -l</td>
+<td>​8.5s</td>
+<td>0.06s​</td></tr>
+<tr>
+<td colspan="1">diff 2.2.0 2.2.8</td>
+<td colspan="1">7.3s</td>
+<td colspan="1">0.0.7s</td></tr>
+<tr>
+<td colspan="1">blame pom.xml</td>
+<td colspan="1">4.9s</td>
+<td colspan="1">1.4s</td></tr>
+<tr>
+<td colspan="1">checkout/clone</td>
+<td colspan="1">11.2s</td>
+<td colspan="1">90.3s (hey, you asked for unscientific comparison <ac:emoticon ac:name="smile" />)</td></tr></tbody></table>

src/test/sample/second/1926111400.storageformat

+
+<p>Git has plenty of support to <a href="http://git-scm.com/">get started</a> (as well as <a href="http://tartley.com/?p=1267">a useful spatial analogy</a>). This is a list of specific things to try to highlight the benefits and warm up to using it in production.</p>
+<h3>Get started</h3>
+<ol>
+<li>Clone Crowd from the Git repository</li>
+<li>Make another local clone from the first local one</li></ol>
+<h3>Git stores whole history</h3>
+<ol>
+<li>How many commits led up to the 2.2.0 release?</li>
+<li>How many different people are reponsible for the current contents of the root <code>pom.xml</code>?</li>
+<li>What changes went into the 2.1.1 release?</li></ol>
+<h3>Git has cheap local branching</h3>
+<ol>
+<li>Create a local branch</li>
+<li>Make a commit to it</li>
+<li>Go back to the master branch and use&nbsp;<code>gitk</code> to see your new branch</li>
+<li>Delete the new branch</li></ol>
+<h3>Git has easy local undo</h3>
+<ol>
+<li>Commit a change</li>
+<li>Without pushing, reset it</li>
+<li>Examine your undone commit in the Git repo</li></ol>
+<h3>Git is distributed</h3>
+<ol>
+<li>Commit a change</li>
+<li>Get it to another developer&nbsp;<strong>without</strong> pushing it back to the main repository and add it to the table:</li></ol>
+<table>
+<tbody>
+<tr>
+<th>Who?</th>
+<th>To whom?</th>
+<th>Method</th></tr>
+<tr>
+<td><ac:link><ri:user ri:username="jwalton" /></ac:link></td>
+<td><ac:link><ri:user ri:username="psongsiritat" /></ac:link>​</td>
+<td><code>git daemon</code>,&nbsp;<code>git pull</code> between workstation​s</td></tr>
+<tr>
+<td colspan="1"><ac:link><ri:user ri:username="jawong" /></ac:link></td>
+<td colspan="1"><ac:link><ri:user ri:username="onevalainen" /></ac:link></td>
+<td colspan="1"><code>git daemon</code>, <code>git pull</code> between workstations</td></tr>
+<tr>
+<td colspan="1"><ac:link><ri:user ri:username="onevalainen" /></ac:link></td>
+<td colspan="1"><ac:link><ri:user ri:username="jawong" /></ac:link></td>
+<td colspan="1">
+<p><code>git daemon</code>, <code>git pull</code> between workstations</p></td></tr></tbody></table>
+<h3>Git has multiple branches on the repository</h3>
+<ol>
+<li>Create a personal branch including your username</li>
+<li>Commit an opinionated change</li>
+<li>Push it to a new branch in the repository</li></ol>
+<h3>Git is fast</h3>
+<p>Make an unscientific comparison with Subversion and add it to the table:</p>
+<table>
+<tbody>
+<tr>
+<th>Operation</th>
+<th>Svn</th>
+<th>Git</th></tr>
+<tr>
+<td>​log | wc -l</td>
+<td>​8.5s</td>
+<td>0.06s​</td></tr>
+<tr>
+<td colspan="1">diff 2.2.0 2.2.8</td>
+<td colspan="1">7.3s</td>
+<td colspan="1">0.0.7s</td></tr>
+<tr>
+<td colspan="1">blame pom.xml</td>
+<td colspan="1">4.9s</td>
+<td colspan="1">1.4s</td></tr>
+<tr>
+<td colspan="1">checkout/clone</td>
+<td colspan="1">11.2s</td>
+<td colspan="1">90.3s (hey, you asked for unscientific comparison <ac:emoticon ac:name="smile" />)</td></tr></tbody></table>

src/test/sample/second/1926960285.storageformat

+
+<p>Git has plenty of support to <a href="http://git-scm.com/">get started</a> (as well as <a href="http://tartley.com/?p=1267">a useful spatial analogy</a>). This is a list of specific things to try to highlight the benefits and warm up to using it in production.</p>
+<h3>Get started</h3>
+<ol>
+<li>Clone Crowd from the Git repository</li>
+<li>Make another local clone from the first local one</li></ol>
+<h3>Git stores whole history</h3>
+<ol>
+<li>How many commits led up to the 2.2.0 release?</li>
+<li>How many different people are reponsible for the current contents of the root <code>pom.xml</code>?</li>
+<li>What changes went into the 2.1.1 release?</li></ol>
+<h3>Git has cheap local branching</h3>
+<ol>
+<li>Create a local branch</li>
+<li>Make a commit to it</li>
+<li>Go back to the master branch and use&nbsp;<code>gitk</code> to see your new branch</li>
+<li>Delete the new branch</li></ol>
+<h3>Git has easy local undo</h3>
+<ol>
+<li>Commit a change</li>
+<li>Without pushing, reset it</li>
+<li>Examine your undone commit in the Git repo</li></ol>
+<h3>Git is distributed</h3>
+<ol>
+<li>Commit a change</li>
+<li>Get it to another developer&nbsp;<strong>without</strong> pushing it back to the main repository and add it to the table:</li></ol>
+<table>
+<tbody>
+<tr>
+<th>Who?</th>
+<th>To whom?</th>
+<th>Method</th></tr>
+<tr>
+<td><ac:link><ri:user ri:username="jwalton" /></ac:link></td>
+<td><ac:link><ri:user ri:username="psongsiritat" /></ac:link>​</td>
+<td><code>git daemon</code>,&nbsp;<code>git pull</code> between workstation​s</td></tr>
+<tr>
+<td colspan="1"><ac:link><ri:user ri:username="jawong" /></ac:link></td>
+<td colspan="1"><ac:link><ri:user ri:username="onevalainen" /></ac:link></td>
+<td colspan="1"><code>git daemon</code>, <code>git pull</code> between workstations</td></tr>
+<tr>
+<td colspan="1"><ac:link><ri:user ri:username="onevalainen" /></ac:link></td>
+<td colspan="1"><ac:link><ri:user ri:username="jawong" /></ac:link></td>
+<td colspan="1">
+<p><code>git daemon</code>, <code>git pull</code> between workstations</p></td></tr></tbody></table>
+<table>
+<tbody>
+<tr>
+<th>Method</th></tr>
+<tr>
+<td>
+<p><code>git diff</code>,&nbsp;<code>git apply</code></p></td></tr>
+<tr>
+<td colspan="1">Create a fork repository</td></tr>
+<tr>
+<td colspan="1"><code>git bundle create</code>,&nbsp;<code>git bundle unbundle</code></td></tr>
+<tr>
+<td colspan="1">
+<p><code>git format-patch</code>,&nbsp;<code>git apply</code></p></td></tr>
+<tr>
+<td colspan="1">Tar and send the&nbsp;<code>.git</code> directory</td></tr>
+<tr>
+<td colspan="1">etc.</td></tr></tbody></table>
+<h3>Git has multiple branches on the repository</h3>
+<ol>
+<li>Create a personal branch including your username</li>
+<li>Commit an opinionated change</li>
+<li>Push it to a new branch in the repository</li></ol>
+<h3>Git is fast</h3>
+<p>Make an unscientific comparison with Subversion and add it to the table:</p>
+<table>
+<tbody>
+<tr>
+<th>Operation</th>
+<th>Svn</th>
+<th>Git</th></tr>
+<tr>
+<td>​log | wc -l</td>
+<td>​8.5s</td>
+<td>0.06s​</td></tr>
+<tr>
+<td colspan="1">diff 2.2.0 2.2.8</td>
+<td colspan="1">7.3s</td>
+<td colspan="1">0.0.7s</td></tr>
+<tr>
+<td colspan="1">blame pom.xml</td>
+<td colspan="1">4.9s</td>
+<td colspan="1">1.4s</td></tr>
+<tr>
+<td colspan="1">checkout/clone</td>
+<td colspan="1">11.2s</td>
+<td colspan="1">90.3s (hey, you asked for unscientific comparison <ac:emoticon ac:name="smile" />)</td></tr></tbody></table>

src/test/sample/second/1931087229.storageformat

+
+<p>Git has plenty of support to <a href="http://git-scm.com/">get started</a> (as well as <a href="http://tartley.com/?p=1267">a useful spatial analogy</a>). This is a list of specific things to try to highlight the benefits and warm up to using it in production.</p>
+<h3>Other resources</h3>
+<ul>
+<li>Git documentation - <a href="http://git-scm.com/documentation">http://git-scm.com/documentation</a></li>
+<li>Git Is Awesome - <a href="http://perl.plover.com/yak/git/">http://perl.plover.com/yak/git/</a></li>
+<li>A Visual Git Reference - <a href="http://marklodato.github.com/visual-git-guide/index-en.html">http://marklodato.github.com/visual-git-guide/index-en.html</a></li>
+<li>
+<p>The Git Object Model - <a href="http://book.git-scm.com/1_the_git_object_model.html">http://book.git-scm.com/1_the_git_object_model.html</a></p></li></ul>
+<h3>Get started</h3>
+<ol>
+<li>Clone Crowd from the Git repository</li>
+<li>Make another local clone from the first local one</li></ol>
+<h3>Git stores whole history</h3>
+<ol>
+<li>How many commits led up to the 2.2.0 release?</li>
+<li>How many different people are reponsible for the current contents of the root <code>pom.xml</code>?</li>
+<li>What changes went into the 2.1.1 release?</li></ol>
+<h3>Git has cheap local branching</h3>
+<ol>
+<li>Create a local branch</li>
+<li>Make a commit to it</li>
+<li>Go back to the master branch and use&nbsp;<code>gitk</code> to see your new branch</li>
+<li>Delete the new branch</li></ol>
+<h3>Git has easy local undo</h3>
+<ol>
+<li>Commit a change</li>
+<li>Without pushing, reset it</li>
+<li>Examine your undone commit in the Git repo</li></ol>
+<h3>Git is distributed</h3>
+<ol>
+<li>Commit a change</li>
+<li>Get it to another developer&nbsp;<strong>without</strong> pushing it back to the main repository and add it to the table:</li></ol>
+<table>
+<tbody>
+<tr>
+<th>Who?</th>
+<th>To whom?</th>
+<th>Method</th></tr>
+<tr>
+<td><ac:link><ri:user ri:username="jwalton" /></ac:link></td>
+<td><ac:link><ri:user ri:username="psongsiritat" /></ac:link>​</td>
+<td><code>git daemon</code>,&nbsp;<code>git pull</code> between workstation​s</td></tr>
+<tr>
+<td colspan="1"><ac:link><ri:user ri:username="jawong" /></ac:link></td>
+<td colspan="1"><ac:link><ri:user ri:username="onevalainen" /></ac:link></td>
+<td colspan="1"><code>git daemon</code>, <code>git pull</code> between workstations</td></tr>
+<tr>
+<td colspan="1"><ac:link><ri:user ri:username="onevalainen" /></ac:link></td>
+<td colspan="1"><ac:link><ri:user ri:username="jawong" /></ac:link></td>
+<td colspan="1">
+<p><code>git daemon</code>, <code>git pull</code> between workstations</p></td></tr></tbody></table>
+<table>
+<tbody>
+<tr>
+<th>Method</th></tr>
+<tr>
+<td>
+<p><code>git diff</code>,&nbsp;<code>git apply</code></p></td></tr>
+<tr>
+<td colspan="1">Create a fork repository</td></tr>
+<tr>
+<td colspan="1"><code>git bundle create</code>,&nbsp;<code>git bundle unbundle</code></td></tr>
+<tr>
+<td colspan="1">
+<p><code>git format-patch</code>,&nbsp;<code>git apply</code></p></td></tr>
+<tr>
+<td colspan="1">Tar and send the&nbsp;<code>.git</code> directory</td></tr>
+<tr>
+<td colspan="1">etc.</td></tr></tbody></table>
+<h3>Git has multiple branches on the repository</h3>
+<ol>
+<li>Create a personal branch including your username</li>
+<li>Commit an opinionated change</li>
+<li>Push it to a new branch in the repository</li></ol>
+<h3>Git is fast</h3>
+<p>Make an unscientific comparison with Subversion and add it to the table:</p>
+<table>
+<tbody>
+<tr>
+<th>Operation</th>
+<th>Svn</th>
+<th>Git</th></tr>
+<tr>
+<td>​log | wc -l</td>
+<td>​8.5s</td>
+<td>0.06s​</td></tr>
+<tr>
+<td colspan="1">diff 2.2.0 2.2.8</td>
+<td colspan="1">7.3s</td>
+<td colspan="1">0.0.7s</td></tr>
+<tr>
+<td colspan="1">blame pom.xml</td>
+<td colspan="1">4.9s</td>
+<td colspan="1">1.4s</td></tr>
+<tr>
+<td colspan="1">checkout/clone</td>
+<td colspan="1">11.2s</td>
+<td colspan="1">90.3s (hey, you asked for unscientific comparison <ac:emoticon ac:name="smile" />)</td></tr></tbody></table>

src/test/sample/second/1931088839.storageformat

+
+<p>Git has plenty of support to <a href="http://git-scm.com/">get started</a> (as well as <a href="http://tartley.com/?p=1267">a useful spatial analogy</a>). This is a list of specific things to try to highlight the benefits and warm up to using it in production.</p>
+<h3>Other resources</h3>
+<ul>
+<li>Git documentation - <a href="http://git-scm.com/documentation">http://git-scm.com/documentation</a></li>
+<li>Git Is Awesome - <a href="http://perl.plover.com/yak/git/">http://perl.plover.com/yak/git/</a></li>
+<li>A Visual Git Reference - <a href="http://marklodato.github.com/visual-git-guide/index-en.html">http://marklodato.github.com/visual-git-guide/index-en.html</a></li>
+<li>
+<p>The Git Object Model - <a href="http://book.git-scm.com/1_the_git_object_model.html">http://book.git-scm.com/1_the_git_object_model.html</a></p></li></ul>
+<h3>Get started</h3>
+<ol>
+<li>Clone Crowd from the Git repository</li>
+<li>Make another local clone from the first local one</li></ol>
+<h3>Git stores whole history</h3>
+<ol>
+<li>How many commits led up to the 2.2.0 release?</li>
+<li>How many different people are reponsible for the current contents of the root <code>pom.xml</code>?</li>
+<li>What changes went into the 2.1.1 release?</li></ol>
+<h3>Git has cheap local branching</h3>
+<ol>
+<li>Create a local branch</li>
+<li>Make a commit to it</li>
+<li>Go back to the master branch and use&nbsp;<code>gitk</code> to see your new branch</li>
+<li>Delete the new branch</li></ol>
+<h3>Git has easy local undo</h3>
+<ol>
+<li>Commit a change</li>
+<li>Without pushing, reset it</li>
+<li>Examine your undone commit in the Git repo</li></ol>
+<h3>Git is distributed</h3>
+<ol>
+<li>Commit a change</li>
+<li>Get it to another developer&nbsp;<strong>without</strong> pushing it back to the main repository and add it to the table:</li></ol>
+<table>
+<tbody>
+<tr>
+<th>Who?</th>
+<th>To whom?</th>
+<th>Method</th></tr>
+<tr>
+<td><ac:link><ri:user ri:username="jwalton" /></ac:link></td>
+<td><ac:link><ri:user ri:username="psongsiritat" /></ac:link>​</td>
+<td><code>git daemon</code>,&nbsp;<code>git pull</code> between workstation​s</td></tr>
+<tr>
+<td colspan="1"><ac:link><ri:user ri:username="jawong" /></ac:link></td>
+<td colspan="1"><ac:link><ri:user ri:username="onevalainen" /></ac:link></td>
+<td colspan="1"><code>git daemon</code>, <code>git pull</code> between workstations</td></tr>
+<tr>
+<td colspan="1"><ac:link><ri:user ri:username="onevalainen" /></ac:link></td>
+<td colspan="1"><ac:link><ri:user ri:username="jawong" /></ac:link></td>
+<td colspan="1">
+<p><code>git daemon</code>, <code>git pull</code> between workstations</p></td></tr>
+<tr>
+<td colspan="1"><ac:link><ri:user ri:username="jwalton" /></ac:link></td>
+<td colspan="1"><ac:link><ri:space ri:space-key="~aragot" /></ac:link></td>
+<td colspan="1">Bundle</td></tr>
+<tr>
+<td colspan="1"><ac:link><ri:space ri:space-key="~aragot" /></ac:link></td>
+<td colspan="1"><ac:link><ri:space ri:space-key="~ahempel" /></ac:link></td>
+<td colspan="1"><code>git daemon</code>,&nbsp;<code>git push</code>&nbsp;between workstations</td></tr></tbody></table>
+<table>
+<tbody>
+<tr>
+<th>Method</th></tr>
+<tr>
+<td>
+<p><code>git diff</code>,&nbsp;<code>git apply</code></p></td></tr>
+<tr>
+<td colspan="1">Create a fork repository</td></tr>
+<tr>
+<td colspan="1"><code>git bundle create</code>,&nbsp;<code>git bundle unbundle</code></td></tr>
+<tr>
+<td colspan="1">
+<p><code>git format-patch</code>,&nbsp;<code>git apply</code></p></td></tr>
+<tr>
+<td colspan="1">Tar and send the&nbsp;<code>.git</code> directory</td></tr>
+<tr>
+<td colspan="1">etc.</td></tr></tbody></table>
+<h3>Git has multiple branches on the repository</h3>
+<ol>
+<li>Create a personal branch including your username</li>
+<li>Commit an opinionated change</li>
+<li>Push it to a new branch in the repository</li></ol>
+<h3>Git is fast</h3>
+<p>Make an unscientific comparison with Subversion and add it to the table:</p>
+<table>
+<tbody>
+<tr>
+<th>Operation</th>
+<th>Svn</th>
+<th>Git</th></tr>
+<tr>
+<td>​log | wc -l</td>
+<td>​8.5s</td>
+<td>0.06s​</td></tr>
+<tr>
+<td colspan="1">diff 2.2.0 2.2.8</td>
+<td colspan="1">7.3s</td>
+<td colspan="1">0.0.7s</td></tr>
+<tr>
+<td colspan="1">blame pom.xml</td>
+<td colspan="1">4.9s</td>
+<td colspan="1">1.4s</td></tr>
+<tr>
+<td colspan="1">checkout/clone</td>
+<td colspan="1">11.2s</td>
+<td colspan="1">90.3s (hey, you asked for unscientific comparison <ac:emoticon ac:name="smile" />)</td></tr></tbody></table>

src/test/sample/second/1931088843.storageformat

+
+<p>Git has plenty of support to <a href="http://git-scm.com/">get started</a> (as well as <a href="http://tartley.com/?p=1267">a useful spatial analogy</a>). This is a list of specific things to try to highlight the benefits and warm up to using it in production.</p>
+<h3>Other resources</h3>
+<ul>
+<li>Git documentation - <a href="http://git-scm.com/documentation">http://git-scm.com/documentation</a></li>
+<li>Git Is Awesome - <a href="http://perl.plover.com/yak/git/">http://perl.plover.com/yak/git/</a></li>
+<li>A Visual Git Reference - <a href="http://marklodato.github.com/visual-git-guide/index-en.html">http://marklodato.github.com/visual-git-guide/index-en.html</a></li>
+<li>
+<p>The Git Object Model - <a href="http://book.git-scm.com/1_the_git_object_model.html">http://book.git-scm.com/1_the_git_object_model.html</a></p></li></ul>
+<h3>Get started</h3>
+<ol>
+<li>Setup your git profile. Put this <ac:link><ri:attachment ri:filename=".gitconfig" /><ac:plain-text-link-body><![CDATA[file]]></ac:plain-text-link-body></ac:link>&nbsp;in your home and edit it.</li>
+<li>Clone Crowd from the Git repository</li>
+<li>Make another local clone from the first local one</li></ol>
+<h3>Git stores whole history</h3>
+<ol>
+<li>How many commits led up to the 2.2.0 release?</li>
+<li>How many different people are reponsible for the current contents of the root <code>pom.xml</code>?</li>
+<li>What changes went into the 2.1.1 release?</li></ol>
+<h3>Git has cheap local branching</h3>
+<ol>
+<li>Create a local branch</li>
+<li>Make a commit to it</li>
+<li>Go back to the master branch and use&nbsp;<code>gitk</code> to see your new branch</li>
+<li>Delete the new branch</li></ol>
+<h3>Git has easy local undo</h3>
+<ol>
+<li>Commit a change</li>
+<li>Without pushing, reset it</li>
+<li>Examine your undone commit in the Git repo</li></ol>
+<h3>Git is distributed</h3>
+<ol>
+<li>Commit a change</li>
+<li>Get it to another developer&nbsp;<strong>without</strong> pushing it back to the main repository and add it to the table:</li></ol>
+<table>
+<tbody>
+<tr>
+<th>Who?</th>
+<th>To whom?</th>
+<th>Method</th></tr>
+<tr>
+<td><ac:link><ri:user ri:username="jwalton" /></ac:link></td>
+<td><ac:link><ri:user ri:username="psongsiritat" /></ac:link>​</td>
+<td><code>git daemon</code>,&nbsp;<code>git pull</code> between workstation​s</td></tr>
+<tr>
+<td colspan="1"><ac:link><ri:user ri:username="jawong" /></ac:link></td>
+<td colspan="1"><ac:link><ri:user ri:username="onevalainen" /></ac:link></td>
+<td colspan="1"><code>git daemon</code>, <code>git pull</code> between workstations</td></tr>
+<tr>
+<td colspan="1"><ac:link><ri:user ri:username="onevalainen" /></ac:link></td>
+<td colspan="1"><ac:link><ri:user ri:username="jawong" /></ac:link></td>
+<td colspan="1">
+<p><code>git daemon</code>, <code>git pull</code> between workstations</p></td></tr>
+<tr>
+<td colspan="1"><ac:link><ri:user ri:username="jwalton" /></ac:link></td>
+<td colspan="1"><ac:link><ri:space ri:space-key="~aragot" /></ac:link></td>
+<td colspan="1">Bundle</td></tr>
+<tr>
+<td colspan="1"><ac:link><ri:space ri:space-key="~aragot" /></ac:link></td>
+<td colspan="1"><ac:link><ri:space ri:space-key="~ahempel" /></ac:link></td>
+<td colspan="1"><code>git daemon</code>,&nbsp;<code>git push</code>&nbsp;between workstations</td></tr></tbody></table>
+<table>
+<tbody>
+<tr>
+<th>Method</th></tr>
+<tr>
+<td>
+<p><code>git diff</code>,&nbsp;<code>git apply</code></p></td></tr>
+<tr>
+<td colspan="1">Create a fork repository</td></tr>
+<tr>
+<td colspan="1"><code>git bundle create</code>,&nbsp;<code>git bundle unbundle</code></td></tr>
+<tr>
+<td colspan="1">
+<p><code>git format-patch</code>,&nbsp;<code>git apply</code></p></td></tr>
+<tr>
+<td colspan="1">Tar and send the&nbsp;<code>.git</code> directory</td></tr>
+<tr>
+<td colspan="1">etc.</td></tr></tbody></table>
+<h3>Git has multiple branches on the repository</h3>
+<ol>
+<li>Create a personal branch including your username</li>
+<li>Commit an opinionated change</li>
+<li>Push it to a new branch in the repository</li></ol>
+<h3>Git is fast</h3>
+<p>Make an unscientific comparison with Subversion and add it to the table:</p>
+<table>
+<tbody>
+<tr>
+<th>Operation</th>
+<th>Svn</th>
+<th>Git</th></tr>
+<tr>
+<td>​log | wc -l</td>
+<td>​8.5s</td>
+<td>0.06s​</td></tr>
+<tr>
+<td colspan="1">diff 2.2.0 2.2.8</td>
+<td colspan="1">7.3s</td>
+<td colspan="1">0.0.7s</td></tr>
+<tr>
+<td colspan="1">blame pom.xml</td>
+<td colspan="1">4.9s</td>
+<td colspan="1">1.4s</td></tr>
+<tr>
+<td colspan="1">checkout/clone</td>
+<td colspan="1">11.2s</td>
+<td colspan="1">90.3s (hey, you asked for unscientific comparison <ac:emoticon ac:name="smile" />)</td></tr></tbody></table>

src/test/sample/second/1931090284.storageformat

+
+<p>Git has plenty of support to <a href="http://git-scm.com/">get started</a> (as well as <a href="http://tartley.com/?p=1267">a useful spatial analogy</a>). This is a list of specific things to try to highlight the benefits and warm up to using it in production.</p>
+<h3>Other resources</h3>
+<ul>
+<li>Git documentation - <a href="http://git-scm.com/documentation">http://git-scm.com/documentation</a></li>
+<li>Git Is Awesome - <a href="http://perl.plover.com/yak/git/">http://perl.plover.com/yak/git/</a></li>
+<li>A Visual Git Reference - <a href="http://marklodato.github.com/visual-git-guide/index-en.html">http://marklodato.github.com/visual-git-guide/index-en.html</a></li>
+<li>
+<p>The Git Object Model - <a href="http://book.git-scm.com/1_the_git_object_model.html">http://book.git-scm.com/1_the_git_object_model.html</a></p></li></ul>
+<h3>Get started</h3>
+<ol>
+<li>Setup your git profile. Put this <ac:link><ri:attachment ri:filename=".gitconfig" /><ac:plain-text-link-body><![CDATA[file]]></ac:plain-text-link-body></ac:link>&nbsp;in your home and edit it. (Note: this file must be named &quot;.gitconfig&quot; but when you download this from confluence, it removes &quot;.&quot;. Please rename after you download it)</li>
+<li>Clone Crowd from the Git repository</li>
+<li>Make another local clone from the first local one</li></ol>
+<h3>Git stores whole history</h3>
+<ol>
+<li>How many commits led up to the 2.2.0 release?</li>
+<li>How many different people are reponsible for the current contents of the root <code>pom.xml</code>?</li>
+<li>What changes went into the 2.1.1 release?</li></ol>
+<h3>Git has cheap local branching</h3>
+<ol>
+<li>Create a local branch</li>
+<li>Make a commit to it</li>
+<li>Go back to the master branch and use&nbsp;<code>gitk</code> to see your new branch</li>
+<li>Delete the new branch</li></ol>
+<h3>Git has easy local undo</h3>
+<ol>
+<li>Commit a change</li>
+<li>Without pushing, reset it</li>
+<li>Examine your undone commit in the Git repo</li></ol>
+<h3>Git is distributed</h3>
+<ol>
+<li>Commit a change</li>
+<li>Get it to another developer&nbsp;<strong>without</strong> pushing it back to the main repository and add it to the table:</li></ol>
+<table>
+<tbody>
+<tr>
+<th>Who?</th>
+<th>To whom?</th>
+<th>Method</th></tr>
+<tr>
+<td><ac:link><ri:user ri:username="jwalton" /></ac:link></td>
+<td><ac:link><ri:user ri:username="psongsiritat" /></ac:link>​</td>
+<td><code>git daemon</code>,&nbsp;<code>git pull</code> between workstation​s</td></tr>
+<tr>
+<td colspan="1"><ac:link><ri:user ri:username="jawong" /></ac:link></td>
+<td colspan="1"><ac:link><ri:user ri:username="onevalainen" /></ac:link></td>
+<td colspan="1"><code>git daemon</code>, <code>git pull</code> between workstations</td></tr>
+<tr>
+<td colspan="1"><ac:link><ri:user ri:username="onevalainen" /></ac:link></td>
+<td colspan="1"><ac:link><ri:user ri:username="jawong" /></ac:link></td>
+<td colspan="1">
+<p><code>git daemon</code>, <code>git pull</code> between workstations</p></td></tr>
+<tr>
+<td colspan="1"><ac:link><ri:user ri:username="jwalton" /></ac:link></td>
+<td colspan="1"><ac:link><ri:space ri:space-key="~aragot" /></ac:link></td>
+<td colspan="1">Bundle</td></tr>
+<tr>
+<td colspan="1"><ac:link><ri:space ri:space-key="~aragot" /></ac:link></td>
+<td colspan="1"><ac:link><ri:space ri:space-key="~ahempel" /></ac:link></td>
+<td colspan="1"><code>git daemon</code>,&nbsp;<code>git push</code>&nbsp;between workstations</td></tr></tbody></table>
+<table>
+<tbody>
+<tr>
+<th>Method</th></tr>
+<tr>
+<td>
+<p><code>git diff</code>,&nbsp;<code>git apply</code></p></td></tr>
+<tr>
+<td colspan="1">Create a fork repository</td></tr>
+<tr>
+<td colspan="1"><code>git bundle create</code>,&nbsp;<code>git bundle unbundle</code></td></tr>
+<tr>
+<td colspan="1">
+<p><code>git format-patch</code>,&nbsp;<code>git apply</code></p></td></tr>
+<tr>
+<td colspan="1">Tar and send the&nbsp;<code>.git</code> directory</td></tr>
+<tr>
+<td colspan="1">etc.</td></tr></tbody></table>
+<h3>Git has multiple branches on the repository</h3>
+<ol>
+<li>Create a personal branch including your username</li>
+<li>Commit an opinionated change</li>
+<li>Push it to a new branch in the repository</li></ol>
+<h3>Git is fast</h3>
+<p>Make an unscientific comparison with Subversion and add it to the table:</p>
+<table>
+<tbody>
+<tr>
+<th>Operation</th>
+<th>Svn</th>
+<th>Git</th></tr>
+<tr>
+<td>​log | wc -l</td>
+<td>​8.5s</td>
+<td>0.06s​</td></tr>
+<tr>
+<td colspan="1">diff 2.2.0 2.2.8</td>
+<td colspan="1">7.3s</td>
+<td colspan="1">0.0.7s</td></tr>
+<tr>
+<td colspan="1">blame pom.xml</td>
+<td colspan="1">4.9s</td>
+<td colspan="1">1.4s</td></tr>
+<tr>
+<td colspan="1">checkout/clone</td>
+<td colspan="1">11.2s</td>
+<td colspan="1">90.3s (hey, you asked for unscientific comparison <ac:emoticon ac:name="smile" />)</td></tr></tbody></table>

src/test/sample/second/index.csv

+pageId,date,changedBy
+1914241386, Aug 05 2011 12:12, Joseph Walton
+1931090284, Aug 04 2011 14:10, Pi Songsiritat
+1931088843, Aug 04 2011 14:08, Pi Songsiritat
+1931088839, Aug 03 2011 16:18, Adrien Ragot
+1931087229, Jul 28 2011 14:58, Joseph Walton
+1926960285, Jul 20 2011 15:45, Joseph Walton
+1926111400, Jul 20 2011 15:32, James Wong
+1926111362, Jul 20 2011 15:31, Olli Nevalainen
+1926111359, Jul 20 2011 14:45, James Wong
+1926111264, Jun 29 2011 14:45, Matt Ryall
+1922238496, Jun 10 2011 15:44, Joseph Walton
+1916633455, Jun 10 2011 15:40, Joseph Walton
+1916633450, Jun 08 2011 12:00, Joseph Walton
+1914241433, Jun 08 2011 11:26, Joseph Walton