<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 
 <title>Bluish Coder: git</title>
 <link href="http://bluishcoder.co.nz/tag/git/atom.xml" rel="self"/>
 <link href="http://bluishcoder.co.nz/"/>
 <updated>2018-12-17T08:49:52+13:00</updated>
 <id>http://bluishcoder.co.nz/</id>
 <author>
   <name>Bluishcoder</name>
   <email>admin@bluishcoder.co.nz</email>
 </author>

 
 <entry>
   <title>My mozilla-central git clone is stopping</title>
   <link href="http://bluishcoder.co.nz/2012/08/18/my-mozilla-central-git-clone-is-stopping.html"/>
   <updated>2012-08-18T20:00:00+12:00</updated>
   <id>http://bluishcoder.co.nz/2012/08/18/my-mozilla-central-git-clone-is-stopping</id>
   <content type="html">&lt;p&gt;For quite a while I&#39;ve been &lt;a href=&quot;http://bluishcoder.co.nz/2011/02/10/git-conversion-of-mozilla-central.html&quot;&gt;maintaining a git mirror&lt;/a&gt; of the mercurial mozilla-central repository. My mirror has the history from the mercurial repository but they both lack the original CVS history as this was not converted when the change was made to use mercurial.&lt;/p&gt;

&lt;p&gt;Recently a new git mirror containing the project history, including CVS, has become available in the &lt;a href=&quot;https://github.com/mozilla/mozilla-central&quot;&gt;mozilla-central github account&lt;/a&gt;. Now that this is available I will no longer be maintaining my own git mirror. The two repositories use different commit id&#39;s so are incompatible. I&#39;ll be deleting my repository in a few days to prevent confusion - already I&#39;ve received a few emails asking why I have mine going when an official repository is available and I&#39;d prefer to avoid people accidentally using it and getting confused when it&#39;s not compatible with the main one.&lt;/p&gt;

&lt;p&gt;It&#39;s great to see a more official git mirror finally become available and thanks to those that have supported my efforts in the past.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Performing Compatible Updates of Mozilla Central Git Forks</title>
   <link href="http://bluishcoder.co.nz/2011/10/28/performing-compatible-updates-of-mozilla-central-git-forks.html"/>
   <updated>2011-10-28T16:00:00+13:00</updated>
   <id>http://bluishcoder.co.nz/2011/10/28/performing-compatible-updates-of-mozilla-central-git-forks</id>
   <content type="html">&lt;p&gt;Earlier this year I posted about &lt;a href=&quot;http://bluishcoder.co.nz/2011/02/10/git-conversion-of-mozilla-central.html&quot;&gt;how I created my git mirror&lt;/a&gt; of the mozilla-central mercurial repository. I&#39;ve been keeping a &lt;a href=&quot;https://github.com/doublec/mozilla-central&quot;&gt;fork on github&lt;/a&gt; updated regularly since then that a number of people have started using.&lt;/p&gt;

&lt;p&gt;Users of my  mirror have wanted to be able to keep up to date with the mercurial mozilla-central repository themselves, or add updates from other branches of the Mozilla source. It takes a large amount of time to start a conversion from scratch but it&#39;s possible to start from the existing git mirror, perform the incremental updates from mercurial yourself, and still stay compatible with the incremental updates I push to my github mirror.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://hg-git.github.com/&quot;&gt;hg-git&lt;/a&gt; uses a &lt;code&gt;git-mapfile&lt;/code&gt; in the &lt;code&gt;.hg&lt;/code&gt; directory of the mercurial clone to keep track of the mapping between mercurial and git commits. By using the same &lt;code&gt;git-mapfile&lt;/code&gt; that I use for my mirror you can start your own incremental update from the latest data in the &lt;code&gt;git-mapfile&lt;/code&gt; instead of from the beginning. I keep an up-to-date &lt;code&gt;git-mapfile&lt;/code&gt; in &lt;a href=&quot;http://bluishcoder.co.nz/git-mapfile.bz2&quot;&gt;git-mapfile.bz2&lt;/a&gt;. It&#39;s compressed with &lt;code&gt;bzip2&lt;/code&gt; as the uncompressed version is quite large.&lt;/p&gt;

&lt;p&gt;The steps to start your own update process are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clone the &lt;a href=&quot;https://hg.mozilla.org/mozilla-central&quot;&gt;mercurial mozilla-central repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Clone my &lt;a href=&quot;https://github.com/doublec/mozilla-central&quot;&gt;git mirror&lt;/a&gt; as a bare repository in &lt;code&gt;.hg/git&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Place the &lt;code&gt;git-mapfile&lt;/code&gt; in &lt;code&gt;.hg&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Do an &lt;code&gt;hg bookmark -f -r default master&lt;/code&gt; to mark the commit to convert to&lt;/li&gt;
&lt;li&gt;Perform &lt;code&gt;hg gexport&lt;/code&gt; to update &lt;code&gt;.hg/git&lt;/code&gt; with recent mercurial commits&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;The &lt;code&gt;.hg/git&lt;/code&gt; directory should now be up-to-date with respect to the mercurial repository. And the additional git commits will have the same SHA id as any commits I push into my mirror when I perform my own update.&lt;/p&gt;

&lt;p&gt;The steps to do an incremental update are the normal:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pull from the mercurial mozilla-central repository&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;hg bookmark -f -r default master&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;hg gexport&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Push or pull to/from &lt;code&gt;.hg/git&lt;/code&gt; as needed&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;As a working example, the following shell commands on a Linux system should set up your own repository ready for incremental updating:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ hg clone https://hg.mozilla.org/mozilla-central
$ cd mozilla-central/.hg
$ git clone --bare git://github.com/doublec/mozilla-central.git git
$ wget http://www.bluishcoder.co.nz/git-mapfile.bz2
$ bunzip2 git-mapfile.bz2
$ cd ..
$ hg bookmark -f -r default master
$ hg gexport
$ cd .hg/git
$ git push --all ~/some/other/repo.git
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Incremental updates just repeat the last few commands above:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ hg pull -u
$ hg bookmark -f -r default master
$ hg gexport
$ cd .hg/git
$ git push --all ~/some/other/repo.git
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Note that I use &lt;code&gt;hg gexport&lt;/code&gt; and push from the &lt;code&gt;.hg/git&lt;/code&gt; repository using the &lt;code&gt;git&lt;/code&gt; command instead of doing an &lt;code&gt;hg push&lt;/code&gt; and relying on &lt;code&gt;hg-git&lt;/code&gt; to do the conversion and push. In my &lt;a href=&quot;http://bluishcoder.co.nz/2011/02/10/git-conversion-of-mozilla-central.html&quot;&gt;original article&lt;/a&gt; I did the latter. The &lt;code&gt;hg-git push&lt;/code&gt; method uses slower python based routines to do the push which can take a long time and large amounts of memory on big repositories like mozilla-central. By splitting this up into &lt;code&gt;gexport&lt;/code&gt; and using the native &lt;code&gt;git&lt;/code&gt; command I save a lot of time and memory.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>My Git Workflow for Mozilla Development</title>
   <link href="http://bluishcoder.co.nz/2011/04/16/my-git-workflow-for-mozilla-development.html"/>
   <updated>2011-04-16T17:00:00+12:00</updated>
   <id>http://bluishcoder.co.nz/2011/04/16/my-git-workflow-for-mozilla-development</id>
   <content type="html">&lt;p&gt;Since my post on &lt;a href=&quot;http://bluishcoder.co.nz/2011/02/10/git-conversion-of-mozilla-central.html&quot;&gt;converting mozilla-central to git&lt;/a&gt; I&#39;ve had a few requests about what my git workflow is for Mozilla Development.&lt;/p&gt;

&lt;p&gt;When working on bugs I&#39;ll create a git branch for development. The workflow in this branch looks like:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git fetch origin
git checkout -b bug/123456 origin/master
...make changes...
git commit
...make more changes...
git commit
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Occasionally I&#39;ll want to merge with the latest code from mozilla-central. I do this by rebasing my changes on top of the latest trunk code:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git fetch origin
git rebase origin/master
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I&#39;ll often have multiple temporary branches as I work on different ideas during the fix. I find being able to diff between the branches, cherry pick patches, etc useful.&lt;/p&gt;

&lt;p&gt;When I&#39;ve finished with the fix and want to generate a patch for review I rebase on top of trunk and squash all my commits down into one patch. I do this use git&#39;s interactive rebase:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git fetch origin
git rebase -i origin/master
...squash commits into one commit and set commit message to my checkin commit message...
git hgp &amp;gt;~/mypatch.patch
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The last command, &lt;code&gt;git hgp&lt;/code&gt;, uses an alias I got from &lt;a href=&quot;http://blog.mozilla.com/respindola/2011/04/14/producing-patchs-for-hg-with-git/&quot;&gt;Rafael Espindola&#39;s Blog&lt;/a&gt;. You can install this alias by adding the following to your &lt;code&gt;~/.gitconfig&lt;/code&gt; file:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[alias]
hgp = show --format=\&quot;From: %an &amp;lt;%ae&amp;gt;%n%s%n%b\&quot; -U8
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The adds an &#39;hgp&#39; git command that does the same as &lt;code&gt;git show&lt;/code&gt; but includes a header for the committers name. This allows an &lt;code&gt;hg import&lt;/code&gt; of the patch to include the correct patch authors details which is useful if you use the &lt;code&gt;checkin-needed&lt;/code&gt; keyword for others to commit the patch.&lt;/p&gt;

&lt;p&gt;I attach the patch file to the bug for review. If I get review comments I then go back to the git branch and make the necessary changes. Regenerating the patch involves repeating the steps above.&lt;/p&gt;

&lt;p&gt;When the patch needs to be committed to mozilla-central it can be imported and pushed directly using mercurial:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;hg clone https://hg.mozilla.org/mozilla-central
cd mozilla-central
hg import ~/mypatch.patch
hg push
&lt;/code&gt;&lt;/pre&gt;
</content>
 </entry>
 
 <entry>
   <title>Git Conversion of Mozilla Central</title>
   <link href="http://bluishcoder.co.nz/2011/02/10/git-conversion-of-mozilla-central.html"/>
   <updated>2011-02-10T14:00:00+13:00</updated>
   <id>http://bluishcoder.co.nz/2011/02/10/git-conversion-of-mozilla-central</id>
   <content type="html">&lt;p&gt;The Mozilla repository for Firefox development, &lt;a href=&quot;http://hg.mozilla.org/mozilla-central&quot;&gt;mozilla-central&lt;/a&gt;, is a mercurial repository. I prefer using &lt;a href=&quot;http://git-scm.com/&quot;&gt;git&lt;/a&gt; for version control so I usually do my Firefox development using a &lt;a href=&quot;http://bluishcoder.co.nz/2008/12/changes-to-git-mirror-of-firefox.html&quot;&gt;git mirror&lt;/a&gt; of the mozilla-central repository.&lt;/p&gt;

&lt;p&gt;To convert the repository into git I used &lt;a href=&quot;http://repo.or.cz/w/fast-export.git&quot;&gt;hg-fast-export&lt;/a&gt;. This has worked well over the last couple of years. Unfortunately I&#39;ve noticed that my git mirror and the official mercurial repository differ slightly. The git mirror contains files that have been deleted or moved in the official repository and lately the mirror has stopped building due to some commits not being correctly converted. As a result I stopped updating my mirror and used mercurial directly.&lt;/p&gt;

&lt;p&gt;I still prefer developing using git though so I tried the &lt;a href=&quot;http://hg-git.github.com/&quot;&gt;hg-git mercurial plugin&lt;/a&gt;. This took about six days on my laptop to do the conversion and peaked at 14GB of memory. The result was a git repository with a working tree that, according to diff, is an exact copy of the original mercurial repositories working tree. Another nice feature of the hg-git is that commit id&#39;s in the resulting git repository are the same across multiple runs of hg-git. This would allow other users to push and pull from a git repository that they converted independently.&lt;/p&gt;

&lt;p&gt;To perform the conversion I installed hg-git and ran the following series of commands:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ mkdir git
$ cd git
$ git init --bare
$ cd ..
$ hg clone https://hg.mozilla.org/mozilla-central hg
$ cd hg
$ hg bookmark -r default master
$ hg push ../git
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Six days and 14GB later, the resulting git repository ended up being about 7GB in size. I did a &lt;code&gt;git gc --aggressive&lt;/code&gt; on it to get this down to 200MB. Incremental updates of new mercurial commits are done with:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ cd hg
$ hg pull -u
$ hg bookmark -f -r default master
$ hg push ../git
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I&#39;ve pushed a mirror of this to github at &lt;a href=&quot;http://github.com/doublec/mozilla-central&quot;&gt;http://github.com/doublec/mozilla-central&lt;/a&gt;. I&#39;m using this for development and will see if it is able to continue importing without diverging from the original mozilla-central source.&lt;/p&gt;

&lt;p&gt;More information about the use of git for Mozilla development can be found in the followup posts I did on the subject:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://bluishcoder.co.nz/2011/04/16/my-git-workflow-for-mozilla-development.html&quot;&gt;My Git Workflow for Mozilla Development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://bluishcoder.co.nz/2011/10/28/performing-compatible-updates-of-mozilla-central-git-forks.html&quot;&gt;Performing Compatible Updates of Mozilla Central Git Forks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</content>
 </entry>
 
 <entry>
   <title>Changes to git mirror of Firefox repository</title>
   <link href="http://bluishcoder.co.nz/2008/12/04/changes-to-git-mirror-of-firefox.html"/>
   <updated>2008-12-04T17:32:00+13:00</updated>
   <id>http://bluishcoder.co.nz/2008/12/04/changes-to-git-mirror-of-firefox</id>
   <content type="html">&lt;p&gt;I&#39;ve made changes to the way I manage the &lt;a href=&quot;http://www.double.co.nz/cgi-bin/gitweb.cgi&quot;&gt;git repository&lt;/a&gt; holding the import of the Firefox source. Since the bulk of the HTML 5 &amp;lt;video&amp;gt; implementation is now in the main Firefox source I no longer maintain the &lt;a href=&quot;http://www.double.co.nz/cgi-bin/gitweb.cgi?p=video.git;a=summary&quot;&gt;video branch&lt;/a&gt;. I&#39;ll be removing that and the &lt;a href=&quot;http://www.double.co.nz/cgi-bin/gitweb.cgi?p=firefox.git;a=summary&quot;&gt;Firefox mirror&lt;/a&gt; soon.&lt;/p&gt;

&lt;p&gt;The main Mozilla repositories have been split into two now. They are &lt;a href=&quot;http://hg.mozilla.org/mozilla-central/&quot;&gt;mozilla-central&lt;/a&gt;, which holds the current trunk code and represents Firefox 3.2 (or whatever the next version will be called), and &lt;a href=&quot;http://hg.mozilla.org/releases/mozilla-1.9.1/&quot;&gt;mozilla-1.9.1&lt;/a&gt;, which is what will be Firefox 3.1. The details of that split are described in &lt;a href=&quot;http://groups.google.com/group/mozilla.dev.planning/browse_thread/thread/2ee152a517d502e6#&quot;&gt;this post&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I now import these mercurial repositories directly into git using git&#39;s fast import tool. This gives me complete history and makes things like bisect and blame a bit easier to work with. The history of mozilla-1.9.1 being based on mozilla-central is also retained, as best as I could manage. These imported repositories can be browsed at &lt;a href=&quot;http://gitweb.bluishcoder.co.nz/&quot;&gt;http://gitweb.bluishcoder.co.nz&lt;/a&gt;. They can be retrieved via git:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git clone git://bluishcoder.co.nz/git/mozilla-central.git
git clone git://bluishcoder.co.nz/git/mozilla-1.9.1.git
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The way I work with these mirrors is to create a git repository that has these added as remotes. This way I can switch between the two easily, cherry pick patches between them, and do logs and diffs between them. This is how I set that up:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ mkdir firefox
$ cd firefox
$ git init
$ git remote add mozilla-central git://bluishcoder.co.nz/git/mozilla-central.git
$ git remote add mozilla-1.9.1 git://bluishcoder.co.nz/git/mozilla-1.9.1.git
$ git fetch mozilla-central
$ git fetch mozilla-1.9.1
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;When working on a bug I create a branch for that bug, based on &lt;code&gt;mozilla-central/master&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ git checkout -b bug123456 mozilla-central/master
...make changes...
$ git commit -a -m &quot;my changes&quot;
$ git diff -U8 mozilla-central/master &amp;gt;bug123456.patch
...attach bug123456.patch to bugzilla for review...
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Once reviewed the patch is then applied to mercurial and pushed. If I want to apply the same patch to test on the mozilla-1.9.1 branch I just use &#39;git cherry-pick&#39;. To make things like &#39;git status&#39; a bit less clutted I have the following &lt;code&gt;.gitignore&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ cat .gitignore
obj-*
*~
.mozconfig
config.cache
config.log
*.pyc
CVS
.mozconfig*
.svn
cvsco.log
cvsco.log.old
NONE
configure
gitchangelog
gitchangelog.bak
.hg
.nss.checkout
*.swp
.gitignore
&lt;/code&gt;&lt;/pre&gt;
</content>
 </entry>
 
 <entry>
   <title>Git, Binary Files and Cherry Picking Patches</title>
   <link href="http://bluishcoder.co.nz/2007/09/06/git-binary-files-and-cherry-picking.html"/>
   <updated>2007-09-06T17:03:00+12:00</updated>
   <id>http://bluishcoder.co.nz/2007/09/06/git-binary-files-and-cherry-picking</id>
   <content type="html">&lt;p&gt;Steve Dekorte has &lt;a href=&quot;http://www.dekorte.com/blog/blog.cgi?do=item&amp;amp;id=2895&quot;&gt;some things he dislikes about git&lt;/a&gt;. This post is how I work around these issues in my own git repositories.&lt;/p&gt;

&lt;p&gt;Git has a heuristic for detecting binary files. You can force other file types to be binary by adding a &lt;a href=&quot;http://www.kernel.org/pub/software/scm/git/docs/gitattributes.html&quot;&gt;.gitattributes&lt;/a&gt; file to your repository. This file contains a list of glob patterns, followed by attributes to be applied to files matching those patterns. By adding .gitattributes to the repository all cloned repositories will pick this up as well.&lt;/p&gt;

&lt;p&gt;For example, if you want all *.foo files to be treated as binary files you can have this line in .gitattributes:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;*.foo -crlf -diff -merge
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This will mean all files with a .foo extension will not have carriage return/line feed translations done, won&#39;t be diffed and merges will result in conflicts leaving the original file untouched.&lt;/p&gt;

&lt;p&gt;Now when you pull from another repository that has changes to a .foo file you&#39;ll see something like:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;test.foo |  Bin 32 -&amp;gt; 36 bytes
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Note that it shows it is a binary file. If you pull from another repository with changes to test.foo you&#39;ll get:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Auto-merged test.foo
CONFLICT (content): Merge conflict in test.foo
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The file will be untouched and you can change it manually to be the correct version. Either by leaving it untouched, or copying a new file over it. Then you need to commit the merge conflict fix (even if you left the file untouched):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git commit -a -m &quot;Fix merge conflict in test.foo&quot;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The cherry picking of patches works differently to Darcs. There are a couple of ways of handling this, but I use &#39;git cherry-pick&#39;. If you have a number of contributers with their own repositories that you regularly pull from you can set up remote tracking branches:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git remote add john http://...
git remote add mary http://...
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now when you want John and Mary&#39;s most recent patches you can fetch them:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git fetch john
git fetch mary
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This does not make any changes to your local branches. It gets and stores their changes in a separate remote tracking branch. If you want to see what John has changed, compared to yours:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git log -p master..john/master
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;From there you can decide to pull in all John&#39;s commits:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git merge john/master
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If you want one commit, but not its dependencies then this is where &#39;cherry-pick&#39; is used.&lt;/p&gt;

&lt;p&gt;Given a commit id, &#39;cherry-pick&#39; will take the patch for that commit and apply it to your current branch. It&#39;s used like:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git cherry-pick abcdefgh
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This creates a commit with a different commit id than the original, but with the same contents. It needs to be a different id as it doesn&#39;t have the same dependencies as the original.&lt;/p&gt;

&lt;p&gt;If you decide later you want all John&#39;s commits and do a merge which includes the commit that you cherry picked from you might expect conflicts. Git handles this case fine and does an automatic merge, noticing the patches are the same. So it effectively gives you the same functionality as Darcs selective patch pulling, but not as nice a user interface.&lt;/p&gt;
</content>
 </entry>
 
 
</feed>
