<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    <title>Thomas Koch - vcs-pkg</title>
    <link>http://koch.ro/blog/</link>
    <description>Dubio Sapientiae Initium.</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.4.1-1 - http://www.s9y.org/</generator>
    <pubDate>Wed, 23 Jun 2010 13:34:48 GMT</pubDate>

    <image>
        <url>http://koch.ro/blog/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: Thomas Koch - vcs-pkg - Dubio Sapientiae Initium.</title>
        <link>http://koch.ro/blog/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>tnt is not topgit</title>
    <link>http://koch.ro/blog/index.php?/archives/139-tnt-is-not-topgit.html</link>
            <category>Debian</category>
            <category>free software</category>
            <category>vcs-pkg</category>
    
    <comments>http://koch.ro/blog/index.php?/archives/139-tnt-is-not-topgit.html#comments</comments>
    <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=139</wfw:comment>

    <wfw:commentRss>http://koch.ro/blog/rss.php?version=2.0&amp;type=comments&amp;cid=139</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Koch)</author>
    <content:encoded>
    &lt;div&gt;As I&#039;ve already written, I&#039;m working on an &lt;a href=&quot;http://www.koch.ro/blog/index.php?/archives/138-Design-document-for-a-patch-management-system-on-a-DVCS.html&quot;&gt;alternative to topgit&lt;/a&gt;. I made a
first attempt in perl some weeks ago, but gave up after some frustrating hours.
Yesterday I started again in python and had a very nice time putting together
the groundwork and the first two commands.
&lt;br/&gt;
It may be noted, that I&#039;ve no previous programming experience in neither perl
nor python!

&lt;br/&gt;
By now, I can create a patchset branch and add a patch branch to it. There&#039;s
still a lot to do. For my talk at the &lt;a
href=&quot;http://wiki.debconf.org/wiki/Miniconf-LT-Berlin/2010&quot;&gt;Debian Mini
Conference&lt;/a&gt; in Berlin next month I&#039;d like to be able to update patch
branches, export patchsets and give a status summary.

&lt;br/&gt;
Maybe I can already find somebody who&#039;s interested in joining me with this
project? The code is in my &lt;a href=&quot;http://github.com/thkoch2001&quot;&gt;github
account&lt;/a&gt;, however the name will most probably change.

&lt;br/&gt;
One reason that I&#039;ve been much faster in python is the fantastic &lt;a
href=&quot;http://pypi.python.org/pypi/GitPython/0.2.0-beta1&quot;&gt;python-git&lt;/a&gt;
library. I can only recommend it!

&lt;br/&gt;
In other news: I&#039;m searching a &lt;a
href=&quot;http://www.couchsurfing.org/people/thkoch2001/&quot;&gt;couch to surf&lt;/a&gt; in
Berlin from june 7.-12. I prefer couchsurfing over hotels mostly to get to know
nice people around the world. Please contact me, if you&#039;d like to host me for a
night or two. (thomas at koch punkt ro)
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Update:&lt;/b&gt; &lt;a href=&quot;http://wiki.debconf.org/upload/8/89/Patch_management_dvcs.pdf&quot;&gt;Slides of my talk at the debconf are available&lt;/a&gt;.   
    </content:encoded>

    <pubDate>Sun, 16 May 2010 16:43:49 +0200</pubDate>
    <guid isPermaLink="false">http://koch.ro/blog/index.php?/archives/139-guid.html</guid>
    
</item>
<item>
    <title>Design document for a patch management system on a DVCS</title>
    <link>http://koch.ro/blog/index.php?/archives/138-Design-document-for-a-patch-management-system-on-a-DVCS.html</link>
            <category>Debian</category>
            <category>vcs-pkg</category>
    
    <comments>http://koch.ro/blog/index.php?/archives/138-Design-document-for-a-patch-management-system-on-a-DVCS.html#comments</comments>
    <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=138</wfw:comment>

    <wfw:commentRss>http://koch.ro/blog/rss.php?version=2.0&amp;type=comments&amp;cid=138</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Koch)</author>
    <content:encoded>
    Dear friends of Debian,&lt;br /&gt;
&lt;br /&gt;
this is &lt;a href=&quot;http://wiki.debian.org/ThomasKoch&quot;&gt;my&lt;/a&gt; first post to Planet Debian. - The planet with the most geeky &lt;a href=&quot;http://wiki.debian.org/PlanetDebian&quot;&gt;registration procedure&lt;/a&gt; in the known universe!&lt;br /&gt;
&lt;br /&gt;
I proposed an &lt;a href=&quot;http://lists.alioth.debian.org/pipermail/vcs-pkg-discuss/2010-March/000702.html&quot;&gt;alternative to topgit&lt;/a&gt; some days ago on the &lt;a href=&quot;http://vcs-pkg.org/&quot;&gt;vcs-pkg.org&lt;/a&gt; list. Martin asked (and encouraged) me to give a better explanation of the idea, which I&#039;ll hereby try. Sorry for not giving any drawings, but I&#039;m totally incapable of anything graphical.&lt;br /&gt;
&lt;br /&gt;
Hopefully, I&#039;ll manage to come to the &lt;a href=&quot;http://wiki.debconf.org/wiki/Miniconf-LT-Berlin/2010&quot;&gt;Debian Miniconf in Berlin&lt;/a&gt;. Then we could discuss the idea further and maybe even start implementing it. (Somebody would need to help me with my first steps in Perl then...)&lt;br /&gt;
&lt;br /&gt;
The following text is &lt;a href=&quot;http://github.com/thkoch2001/topgit-alternative&quot;&gt;available on github&lt;/a&gt;. Please help me expand it!&lt;br /&gt;
&lt;br /&gt;
&lt;h1 class=&quot;title&quot;&gt;Design document for a patch management system on a DVCS&lt;/h1&gt;&lt;br /&gt;
&lt;div class=&quot;section&quot; id=&quot;requirements&quot;&gt;
&lt;h1&gt;Requirements&lt;/h1&gt;
&lt;p&gt;The system to implement manages patchsets. A patchset is a set of patches with
a tree-ish dependency graph between the patches. There&#039;s one distinct root of
this dependency graph.&lt;/p&gt;
&lt;p&gt;Patches are managed as branches with each branch representing a patch.
Modification of a patch is done by a commit to the respective branch. A branch
representing a patch as part of a patchset is called patchbranch.&lt;/p&gt;
&lt;p&gt;The patch of a patchbranch is created as the diff between the root of the
patchbranch and the head.&lt;/p&gt;
&lt;p&gt;The most important management methods are:&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;Export a patchset in different formats&lt;ul&gt;
&lt;li&gt;quilt&lt;/li&gt;
&lt;li&gt;a merged commit of all patches&lt;/li&gt;
&lt;li&gt;a line of commits with each commit representing one patch&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Update a patchset against an updated root.&lt;/li&gt;
&lt;li&gt;Copy a patchset&lt;/li&gt;
&lt;li&gt;Delete a patchset from direct visibility while preserving all history about
it&lt;/li&gt;
&lt;li&gt;Hide and unhide a patchset from direct visibility&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Additional requirements:&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;The system should be implementable on top of GIT, Mercurial and eventually
Bazaar.&lt;/li&gt;
&lt;li&gt;The system must easily cope with multiple different and independent patchsets.&lt;/li&gt;
&lt;li&gt;All information about a patchset must be encoded in one distinct branch.
Publishing this one branch must be sufficient to allow somebody else to
recreate the patchset with all of its patchbranches.&lt;/li&gt;
&lt;li&gt;The system should not rely on the presence of hooks.&lt;/li&gt;
&lt;li&gt;The system should not require the addition of management files in patch
branches (like .topmsg and .topdeps in topgit)&lt;/li&gt;
&lt;li&gt;The system must be easy to understand for a regular user of the underlying
DVCS.&lt;/li&gt;
&lt;li&gt;The implementation may allow a patchset to depend on another patchset(s).&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;section&quot; id=&quot;implementation&quot;&gt;
&lt;h1&gt;implementation&lt;/h1&gt;
&lt;div class=&quot;section&quot; id=&quot;patchset-meta-branch&quot;&gt;
&lt;h2&gt;patchset meta branch&lt;/h2&gt;
&lt;p&gt;A patchset meta branch holds all informations about one patchset. First, it
holds references to the top commits of all patch branches in the form of parent
references of commits. Thus pushing the patchset meta branch automatically also
pushes all commits of all patch branches.&lt;/p&gt;
&lt;p&gt;Secondly, the patchset meta branch contains meta informations about the
patchset. These meta informations are:&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;The names of all patch branches together with the most recent commit
identifier of a particular patch branch. Let&#039;s save this information in a
file called branches.&lt;/li&gt;
&lt;li&gt;A message for each patch branch that explains the patch. These messages can
be saved in the file tree as msg/${PATCH-BRANCH-NAME}&lt;/li&gt;
&lt;li&gt;References to the dependencies of the patch (other patches of the same
patchset or the root of the patchset). This is also encoded in the file
branches.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Since the patchset meta branch holds all this informations, it is possible, to
delete all patch branches and recreate them from this informations.&lt;/p&gt;
&lt;p&gt;Although the commits of the patchset meta branches hold references to the patch
branches, its file tree does not need to contain any files from the referenced
patches. This may confuse the underlying DVCS, but the patch meta branch is not
ment to be directly inspected.&lt;/p&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;section&quot; id=&quot;the-branches-file&quot;&gt;
&lt;h2&gt;The branches file&lt;/h2&gt;
&lt;p&gt;A branches file for a fictive patchset could look like:&lt;/p&gt;
&lt;pre class=&quot;literal-block&quot;&gt;
# patch branches without an explicit dependency depend on the root of the
# patchset tree
# A Root can be given as either a fix commit (seen here), a branch or a tag.
# A fixed commit or tag is useful to maintain a patchset against an older
# upstream version
ROOT: 6a8589de32d490806ab86432a3181370e65953ca
# A tag as a dependency
#ROOT: upstream/0.1.2
# A branch as a dependency
#ROOT: upstream

# A regular patch with it&#039;s name and last commit
BRANCH: debian/use-debian-jars-in-build-xml 4bab542c261ff1a1ae87151c3536f19ef02d7937

# two other regular patches
BRANCH: upstream-jira/HDFS-1234 a8e4af13106582ca1bfbbcaeb0537f73faf46d87
BRANCH: upstream-jira/MAP-REDUCE-007 e3426bcbcb2537478f851edcf6eb04b34f6c7106

# This patch depends on the above two patches
# The sha1 below the dependency patches references a merge commit of the two
# dependencies
BRANCH: upstream-jira/HDFS-008 517851aa829d77e09bc5e59985fed1b0aa339cc6
DEPENDENCIES:
  upstream-jira/HDFS-1234
  upstream-jira/MAP-REDUCE-007
    cc294f2e4773c4ff71efb83648a0e16835fca841

# A patch branch that belongs to the patch branch, but won&#039;t get exported (yet)
BRANCH: upstream-jira/HDFS-9999 74257905azgsa4689bc5e59985fed1b0aa339cc6
BRANCH-FLAGS: noexport
&lt;/pre&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
  
    </content:encoded>

    <pubDate>Fri, 02 Apr 2010 12:48:33 +0200</pubDate>
    <guid isPermaLink="false">http://koch.ro/blog/index.php?/archives/138-guid.html</guid>
    
</item>

</channel>
</rss>