<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel rdf:about="http://blog.gmane.org/gmane.comp.gnome.gaim.devel">
    <title>gmane.comp.gnome.gaim.devel</title>
    <link>http://blog.gmane.org/gmane.comp.gnome.gaim.devel</link>
    <description/>
    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>1</syn:updateFrequency>
    <syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19911"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19910"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19909"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19908"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19907"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19906"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19905"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19904"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19903"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19902"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19901"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19900"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19899"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19898"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19897"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19896"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19895"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19894"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19893"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19892"/>
      </rdf:Seq>
    </items>
    <image rdf:resource="http://gmane.org/img/gmane-25t.png"/>
    <textinput rdf:resource=""/>
  </channel>
  <image rdf:about="http://gmane.org/img/gmane-25t.png">
    <title>Gmane</title>
    <url>http://gmane.org/img/gmane-25t.png</url>
    <link>http://gmane.org</link>
  </image>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19911">
    <title>Re: [ANN] pidgin git import v5</title>
    <link>http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19911</link>
    <description>&lt;pre&gt;
IAJACPW, but from my reading of the threads in January it seemed to me
that a bunch of points were gone through, a decision was taken to go
with .hg.

You, and only you, seem unhappy with the decision taken and then called
for an in depth analysis. I don't think that it'd be unreasonable to
conclude that this is because you're unhappy with the decision and you
want the decision to go to hg to be changed. I would ask you, if you -
or anyone else - were to produce such an analysis and hg was still
chosen, what would you request then?

On this point, I note that it's been around 5 months since you mentioned
wanting to see an analysis. No one else on the list seems to have cared
for one, with or without as much passion as you have. I encourage you to
produce one ASAP.

Regards,

Pete.
&lt;/pre&gt;</description>
    <dc:creator>Peter Lawler</dc:creator>
    <dc:date>2012-05-23T20:57:06</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19910">
    <title>Re: [ANN] pidgin git import v5</title>
    <link>http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19910</link>
    <description>&lt;pre&gt;
Discussed yes, analyzed in detail and carefully list the pros and cons
of each option--no.


I have read that thread yet again, and these are all the points I see:

 * Adium uses hg
 * Instantbird used hg
 X hg supports subrepo (libpurple won't be splitted)
 X git branches are braindead (not substantaited)
 * git supports committer
 X TortoiseHg (TortoiseGit)
 X I prefer X (that's not an analysis)

These points are not summarized anywhere, and the closest thing to a
summary is this:
http://pidgin.im/pipermail/devel/2011-January/010083.html

Of course, there's no real summary of the points, just basically counting votes.


So in summary there's no *real reason* for choosing mercurial, other
than more people like it.


The "developers" have changed since the last voting, and would
continue to change, which is why it's important to come with a better
reason than "we liked monotone".

You can certainly leave that as your reason, I'm merely pointing out
that it's not a strong one, and many newcomers would find that easy to
criticize.


You think they would use the *whole* pidgin repo as a subrepo
(including finch and whatnot?), I don't think so.

Moreover, Evan doesn't have to touch a git command, hg-git can keep an
internal git repository hidden from him, but even if Evan wants for
some reason to work in git for Pidgin, and hg for Adium, he could
easily do 'hg pull pidgin-git', 'hg push adium-hg' (using hg-git) so
really, getting rid of an extra command (hg pull), which he might end
up doing anyway if Pidgin was in hg, is a very very weak reason,
specially considering we are talking about a single person, and
specially considering that they most likely they are *not* going to
use a subrepo, so he would have to do a rebase of some kind anyway,
and specially since hg-git does it for him if he wants to.

And specially since in the past year Evan has done 3 commits, all in
the 'adium.1-4' branch, and basically just removing files, and one
tweak. I think it's fair to say his work is the other way around;
pushing Pidgin releases to Adium, and for that he doesn't need the
extra 'hg pull pidgin-git' command, he can just clone the official hg
mirror, and never touch git.

Both Adium and Instantbird could just use the official hg mirror as well.



The same applies to Mercurial users.

But lets see how the development would look like from the point of
view of a developer using the opposite mirror:

== hg ==

I clone the official hg mirror of git, I do some work, and I want to
push to the official repository; I just do 'hg push' as if it was an
hg repo.

Then I create a bookmark (hg "branches" don't make sense in git) I do
some work, and then I decide (along with Pidgin developers) that this
would make sense to keep as a branch in the official repo as well (say
'gtk3' branch); I just do 'hg push' as if it was an hg repo.

They would have absolutely no problems interacting with git, in fact,
they would probably never have to touch a git command, or have an
intermediary repo (hg-git hides it).

== git ==

I clone the official git mirror of hg, I do some work, and I want to
push; well, I have to go to my intermediary repo, if I don't have one
then I have to either clone my git repo with hg-git, or download the
official one. Then, I can pull from my git repo, and then I can do 'hg
push'.

But oh, wait, there's an extra head that I didn't see from git (git
doesn't have such concept, and I don't know what hg-git does in these
cases, but must likely just shows one head); well, now I have to merge
and push, even though I'm not familiar with hg, I would have to learn
some basic stuff at least.

Then I create a branch, I do some work, an then I decide to push this
branch to the official repo as well; well, now I'm in a bit of a
problem because I have to somehow mark all my commits with the special
'--HG--' mark to say all these commits are from the 'gtk3' branch (or
whatever). This can be easily done with 'git format-branch' but I
would need to write a the script that modifies the commit message, and
then make sure that these labels conform to what should be seen in
mercurial as branches, and I'm not wrecking havoc in the hg database.
And then if I want to continue working on that branch it would be a
nightmare.

Maybe it would be possible to write a script that tries to figure all
this out based on the topology of the graph, but such a script is
bound to have limitations and probably bugs.

I would be essentially forced to never create branches. Bookmarks
would probably be OK.

They would have all sorts of problems interacting with mercurial, and
they will have to do hg commands, and be familiar with mercurial no
matter what.

Go ahead, install hg-git, clone a git repo, and interact with it in
any way you want (other than "branches" and tags), push, pull,
whatever.

This is alone would be a much more strong advantage than any of the
ones I've heard in favor of mercurial, that, and the support for
committer. Plus it has better performance, smaller footprint, faster
cloning time (even through the network). And I said; support for
grafts, so you would be able to fix the old commits any time you want.

These are the kinds of things a true analysis would expose.

Cheers.

&lt;/pre&gt;</description>
    <dc:creator>Felipe Contreras</dc:creator>
    <dc:date>2012-05-23T20:35:41</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19909">
    <title>Re: [ANN] pidgin git import v5</title>
    <link>http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19909</link>
    <description>&lt;pre&gt;
This has been discussed publicly on the mailing list.

I think this thread has most to all of the points raised:
http://pidgin.im/pipermail/devel/2011-January/010062.html

Summary:

We don't see huge differences between the two and would like to provide
both repositories to accommodate the preferences of patch submitters.

Given that, there's really only a question of which one is the
"official" trunk. That decision affects "developers" (upstream
committers) only, and most prefer Mercurial for some combination of A)
it's what they're used to, B) they like its history model (especially
branching) better, and/or C) they like the human interface with the tool
better.

Also (and this is a small advantage), both Adium and Instantbird use
Mercurial. Adium, at least, has a copy of libpurple in their tree, so
using the same repository format gives them the option to either rebase
against our repository or, more likely, easily use it as a subrepo (what
git calls a submodule). To be fair, if the "official" repository was
git, they could use the hg mirror. But there is overlap in the sets of
committers (at least Evan), so using the same format means that subset
could immediately commit upstream.

In closing, again, the intention is to have a git mirror, so anyone who
wants to use git can do so without needing to care that official commits
go into Mercurial first.

&lt;/pre&gt;</description>
    <dc:creator>Richard Laager</dc:creator>
    <dc:date>2012-05-23T17:43:21</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19908">
    <title>Re: [ANN] pidgin git import v5</title>
    <link>http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19908</link>
    <description>&lt;pre&gt;
Since you skipped the relevant part, I'm just going to state it for
the record: the Pidgin project does *not* plan to have a publicly
available analysis for the rationale to moving to mercurial like other
projects have[1][2][3][4].


How are they not helpful?

Current situation:
  You move *everything* to mercurial at date X, one week later you
find a mistake in the conversion; you are screwed. No changes are
allowed, ever.

Situation with git:
  You split the repository into the old, and the new commits, you find
a mistake in the conversion of old commits, you fix it, and the new
history doesn't change.

That is a *huge* difference.

Say Jorge doesn't want the full history, so he only clones the new
repository, say you want the full history, so you run the
'./get_full_history.sh' script, and then you have it. What is the
problem?

And supposing you want *everyone* to have the full history, then
simply add the required commands to './autogen.sh'. Problem solved.


Good.


The convention is up to you, as long as there's "name &amp;lt;email&amp;gt;" that's
fine. If the convention above is what you want, I can modify the
conversion scripts to generate those.

Right now it's:
Unknown &amp;lt;john&amp;lt; at &amp;gt;snow.com&amp;gt;
John Snow &amp;lt;unknown&amp;gt;

Monotone default is:
john &amp;lt;john&amp;lt; at &amp;gt;snow.com&amp;gt;
John Snow &amp;lt;John Snow&amp;gt;

See: https://github.com/felipec/pidgin-git-import/blob/master/mtn-hooks.lua

Does mercurial have some kind of pre-commit hook that could check for
these conventions?

Now the final quirk is that converting a git repository back to
mercurial is tricky, so people using the official git repository might
have trouble. But not if it's generated with 'hg-git'; this way people
could clone both, and push and pull from both clones quite easily. So
I suggest to use 'hg-git' to maintain the official git clone.

Cheers.

[1] http://trac.adium.im/wiki/DistributedVersionControl
[2] http://www.python.org/dev/peps/pep-0374/
[3] http://code.google.com/p/support/wiki/DVCSAnalysis
[4] http://blogs.atlassian.com/2011/02/moving_to_mercurial___why_we_did_it/

&lt;/pre&gt;</description>
    <dc:creator>Felipe Contreras</dc:creator>
    <dc:date>2012-05-23T12:28:57</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19907">
    <title>GSoC 2012: Android port</title>
    <link>http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19907</link>
    <description>&lt;pre&gt;Hello,

I was accepted as GSoC student to do an Android port of libpurple.
The original proposal and a planned timeline can be seen here [1].

The last two weeks I was mainly trying to get everything to build, and
after many hours of trying, patching, configure-scripts-reading and
waiting I got all dependencies of libpurple to compile and finally
libpurple itself.

The basic class structure is already in MTN, but there are no function
implementations. Methods marked as native are extracted to header files
to be implemented and enum constants from C files are autmatically
converted to java source files so that they can be used from java
without any manual hacking. This makes enum conversion a lot easier.

There ist already a documentation on how to set up a development
computer. In the end of the project, I can do a release so that not
everybody who wants to use the library in his projects needs to compile
everything from scratch and install all those tools.

Next week is mainly getting the Android SDK to pack all libraries and
needed Java files together in a package to be installed on the device
and implementing some simple test methods so that the native interface
can be testet.

I will be sending reports like this one about weekly to the list.

Regards,
Michael.

1:
http://www.google-melange.com/gsoc/proposal/review/google/gsoc2012/michaelz/1
2:
http://developer.pidgin.im/wiki/GSoC2012/Android
&lt;/pre&gt;</description>
    <dc:creator>Michael Zangl</dc:creator>
    <dc:date>2012-05-23T11:05:10</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19906">
    <title>Re: [ANN] pidgin git import v5</title>
    <link>http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19906</link>
    <description>&lt;pre&gt;
Yes, that can be dropped.


In my opinion, grafts don't really help much because you can't push/pull
them (or has that changed?).


I believe that's the plan.


I don't think anyone questions that we should use this, when we have
this information.


If this is all the information one has, I think it's just plain wrong
that git forces you to add additional bogus information. But since it
does, this would be the convention, correct?

john &amp;lt;john&amp;lt; at &amp;gt;snow.com&amp;gt;
John Snow &amp;lt;unknown&amp;gt;

&lt;/pre&gt;</description>
    <dc:creator>Richard Laager</dc:creator>
    <dc:date>2012-05-23T03:53:23</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19905">
    <title>Re: [ANN] pidgin git import v5</title>
    <link>http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19905</link>
    <description>&lt;pre&gt;Hi,

On Mon, May 21, 2012 at 8:17 PM, Richard Laager &amp;lt;rlaager&amp;lt; at &amp;gt;wiktel.com&amp;gt; wrote:

In general yes, but Monotone-Date is useless for example (unless you
think 'mtn git_export' would have a bug regarding dates, but this was
tested quite extensively and would be very unlikely).

But in any case, I didn't notice any increase in the repository size,
so shouldn't be a problem.


The hack was quite easy; simply adding the branches by parsing the
first 'Monotone-Branch' text found. Since hg-git already has the
functionality of parsing extra data from git commits by reading a
'--HG--' section.

Probably a bigger hack would be needed to convert mtn/git ids to hg
ids, so I'm thinking on having the whole thing in a separate branch
with hacks and everything so it's easy to run. But to be honest, I'm
not willing to spend a lot of time on making the git-&amp;gt;hg conversion
production ready, I mostly did that as a proof of concept.


There's a few new authors that need mapping. Looks like nobody
followed my advice to keep author names consistent for the conversion.
I could probably do that quickly.

But since I haven't heard anything, I guess the conversion would be to
mercurial.

I want to reiterate that *there has not been any analysis* (or at
least any public one). Many projects have done these kinds of analysis
*on record*:

http://trac.adium.im/wiki/DistributedVersionControl
http://www.python.org/dev/peps/pep-0374/
http://code.google.com/p/support/wiki/DVCSAnalysis
http://blogs.atlassian.com/2011/02/moving_to_mercurial___why_we_did_it/

I don't agree with many points on these analyses, but at least they
are not afraid of making the reasons public and visible for future
reference.

Pidgin can certainly move forward without such analysis, but just
accept that fact (and when people in the future complain, you won't be
able to say you did your due diligence because there is/would be
hardly any proof of it).


If the switch was to git, this wouldn't be a problem. If it's to
mercurial, it would be unfortunate to not be able to finish this.


As I say, the commit messages, authors, and the revision graph are OK,
as I compared them programmatically. I haven't checked the mercurial
branches, nor tags, but I can't foresee how there could be a problem
with them.

The comitters are missing though.

And the author names are mapped to git valid ones "Foo &amp;lt;unknown&amp;gt;" and so on.

== Keep git users in mind ==

Finally, I want to raise the fact that *even* if you switch to
mercurial, there will be people using git instead; there's various
ways in which one can interact with mercurial through git. It would be
best if there was an official git repository, and thus it would be
best to make the conversion as painless as possible; have proper
author names:

John Snow &amp;lt;john&amp;lt; at &amp;gt;snow.com&amp;gt; # OK
"John Snow &amp;lt;john&amp;lt; at &amp;gt;snow.com&amp;gt;" # not OK
John Snow # not OK
john&amp;lt; at &amp;gt;snow.com # not OK

But if you want to make the conversion to git painful, feel free to do so.

If git was chosen, I would expect a mercurial official repository as well.

Cheers.

&lt;/pre&gt;</description>
    <dc:creator>Felipe Contreras</dc:creator>
    <dc:date>2012-05-22T10:42:01</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19904">
    <title>gsoc12 : pidgin plugin website</title>
    <link>http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19904</link>
    <description>&lt;pre&gt;
Hi.

I am Nikhil Bafna, a 4th year undergrad at BITS Pilani, India.

I am one of the 4 selected gsoc tudents to work with Pidgin this summer. My project proposal is "Building a Pidgin Plugin Website, from where user can easily discover &amp;amp; download plugins for their platform and rate &amp;amp; review them as well, intuitively. Developers would use it upload, modify and delete information about their plugins, maintain change log and get feedback from the user community."

The complete proposal for the project can be viewed here.

The period of coding for GSoC officially started yesterday, 21st May and will continue up to 20th of August. Throughout this period, I will post weekly updates on my work :-)


To provide a brief sum down of the project, I will be coding it in python + django + postgre. I have divided the project into 5 major chunks -

User frontend
User backend
Developer frontend
Developed backend
Integration with Pidgin Client
The version control system is Monotone and for the time being I will be hosting the code on Heroku until we decide the production environment of the website.

The area of focus for first two weeks (May 21 - June 5) is on the "User frontend". This was the part I had worked a bit on during the application period and demo for that is at pidgin.heroku.com.

The detailed plan for the next two weeks is as below.

During the first week, I will code up templates for the various user frontend pages. The hierarchy of which will look like -

/
/popular

/login
/signup

/plugin/plugin_id
/category/category_name

/dashboard

/about
/faq


As I mentioned in the proposal, the aim is to have a responsive design that scales down to small screens, doesn't break when js is disabled. Also, from the discussion during the application period, the theme was the site will be similar to pidgin.im. Since, I have suggested 2 weeks for this part - the first week is for coming up with the initial drafts. The entire 2nd week is for iteration based on feedback, testing and ensuring compatibility with older browsers (IE 6 *cringe*)

Also, I haven't been as interactive with community during the bonding period as much as I have would have preferred but I am looking forward to reverse that, as I was reminded in congratulatory mail that "over-communication is preferable to under-communication"


That's about it for now. The progress can be viewed at pidgin.heroku.com (which for now has work from my application period) and my contact details are -

mail - nrbafna&amp;lt; at &amp;gt;soc.pidgin.im
blog - http://nrbafna.blogspot.com/
nrbafna on #pidgin

_______________________________________________
Devel mailing list
Devel&amp;lt; at &amp;gt;pidgin.im
http://pidgin.im/cgi-bin/mailman/listinfo/devel
&lt;/pre&gt;</description>
    <dc:creator>Nikhil Bafna</dc:creator>
    <dc:date>2012-05-22T07:21:16</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19903">
    <title>Re: [ANN] pidgin git import v5</title>
    <link>http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19903</link>
    <description>&lt;pre&gt;
I see no harm in keeping them, and more data seems better than less.


Nice!


If you can finish those two items up, I see no reason we can't do the
final migration.*

I'd like to finish author mapping the entire history, but if I can't get
that done in time, let's not hold up the transition. So far, I haven't
had much incentive to work on that, since other things were holding up
the transition anyway.

* This is based on a quick read of your email. I haven't yet looked at
the repositories output by the script.

&lt;/pre&gt;</description>
    <dc:creator>Richard Laager</dc:creator>
    <dc:date>2012-05-21T18:17:44</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19902">
    <title>[ANN] pidgin git import v5</title>
    <link>http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19902</link>
    <description>&lt;pre&gt;Hi,

Here's a new version of the conversion scripts.

The major change is that I wrote a script to compare a git and
mercurial repo, thanks to this script, I've managed to track various
discrepancies between the mercurial and git scripts. After fixing all
those discrepancies, the repositories match 100% (except formatting
differences; hg convert seems to strip some lines from the commit
messages, and git author limitations: 'John Doe' -&amp;gt; 'John Doe
&amp;lt;unknown&amp;gt;'). All the graph matches as well; there's no single commit
lost.

I haven't checked the file contents yet, but I don't think there will
be any issues in 'mtn git_export'.

Also, there is now support to split certain unmerged branches to
separate repositories. This is better than the mercurial scripts
version because a) it actually works, and b) there's no need to figure
which branches have been merged or not; git figures that out
automatically. And of course it's *much* faster.

Finally, I've enabled the --log-revids and --log-certs options to 'mtn
git_export' and also removed --use-one-changelog so *all* the monotone
information is retained.

Here's an example of the information attached at the end; all
important certs, even if duplicate are listed:

    Monotone-Parent: 9e9d09486a04f5adb2e51b0f5aada69a9b053e93
    Monotone-Revision: 2cca525615a367389b1639a5246fbe6d451150c4

    Monotone-Author: markdoliner&amp;lt; at &amp;gt;pidgin.im
    Monotone-Date: 2012-02-18T23:28:43
    Monotone-Branch: im.pidgin.pidgin.2.x.y
    Monotone-Branch: im.pidgin.pidgin.mxit.2.x.y

Some of these might be useless, and might make sense to strip them,
but they are there now.

In addition to that, I've used 'hg-git'[1] with a few hacks to convert
the repository to mercurial, preserving all the information (except
renames, but that shouldn't be hard to add).

You can find it here:

https://bitbucket.org/felipec/pidgin-clone-hg

The last remaining item in my list is to convert the mtn ids in the
commit messages to the relevant git ids.

You can find the scripts in the usual place:

https://github.com/felipec/pidgin-git-import

In addition to that, I've fixed and cleaned the mercurial scripts
(almost rewrote many of them), so they are now *much* faster and
simpler. I've also made sure that the resulting repository is
*exactly* the same. That is, after applying some updates (I added an
'fc-updates' branch to mark those).

Attached is a condensed patch with all the changes, as Eion Robb
suggested (I guess clean and logical patches are frowned upon).

Since I have not received a single reply after all this work, and the
last real change to pidgin-mtn-conv-files was more than a year ago, my
only guess is that you don't actually want to stop using monotone,
even though you can do it *today*.

Cheers.

[1] http://hg-git.github.com/

diff --git a/.hgignore b/.hgignore
index 2e10ba1..3f1741b 100644
--- a/.hgignore
+++ b/.hgignore
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,5 +1,4 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 syntax: glob
 mtn
 pidgin.mtn*
-svn-patch-authors
 tmpfs
diff --git a/add-committer-certs.py b/add-committer-certs.py
index 106df61..f6ce42b 100755
--- a/add-committer-certs.py
+++ b/add-committer-certs.py
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3,84 +3,51 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;

 import os
 import sys
+import subprocess

 sys.stdout.write("Adding committer certs based on changelog cert signers...")
 sys.stdout.flush()

 db = sys.argv[1]
-key = None
 try:
     key = sys.argv[2]
 except IndexError:
-    pass
+    key = None

-def shellquote(s):
-    return "'" + s.replace("'", "'\\''") + "'"
-mtn = "mtn -d {db} ".format(db=shellquote(db))
+mtn_args = ['mtn', '-d', db]
 if key:
-    mtn = "{mtn} -k {key} ".format(mtn=mtn, key=key)
+    mtn_args += ['-k', key]

 author_map = {}
 with open("authormap", "r") as f:
     for l in f:
-        try:
-            index = l.index("=")
-        except ValueError:
-            continue
-        author = l[:index].strip()
-        name = l[index+1:].strip()
+        author, name = l.rstrip("\n").split(" = ")
         if author and name:
             author_map[author] = name

-keys = {}
-cmd = mtn + "automate keys"
-with os.popen(cmd, "r") as pipe:
-    key_hash = None
-    for l in pipe.readlines():
-        if l.startswith("           hash ["):
-            key_hash = l[17:-2]
-        elif l.startswith("            hash ["):
-            key_hash = l[18:-2]
-        elif l.startswith('     given_name "'):
-            keys[key_hash] = l[17:-2]
-        elif l.startswith('      given_name "'):
-            keys[key_hash] = l[18:-2]
+def mtn_query(db, query):
+    global mtn_args
+    pipe = subprocess.Popen(mtn_args + ['db', 'execute', query],
stdout=subprocess.PIPE)
+    pipe.stdout.readline() # garbage
+    pipe.stdout.readline() # garbage
+    return (line.rstrip('\n').split(' | ') for line in pipe.stdout)

 # Add a "committer" cert for each revision based on the signer of the changelog
 # cert.  This will be picked up by our patched `hg convert`.
-cmd = "{mtn} automate roots ; {mtn} automate descendents `{mtn}
automate roots`".format(mtn=mtn)
-with os.popen(cmd, "r") as pipe:
-    for l in pipe.readlines():
-        revision = l.strip()
-        cmd = "{mtn} automate certs {revision}".format(mtn=mtn,
revision=revision)
-        with os.popen(cmd, "r") as pipe2:
-            key_hash = None
-            signer = None
-            found_author = False
-            author = None
-            for l in pipe2.readlines():
-                if l.startswith("      key ["):
-                    key_hash = l[11:-2]
-                elif l == '     name "changelog"\n':
-                    signer = keys[key_hash]
-                elif l == '     name "author"\n':
-                    found_author = True
-                elif found_author and l.startswith('    value "'):
-                    found_author = False
-                    author = l[11:-2]
-            if signer and not signer.startswith("tailor&amp;lt; at &amp;gt;"):
-                if not author:
-                    print "{revision} has no author.".format(revision=revision)
-                    continue
-                signer = author_map[signer]
-                try:
-                    author = author_map[author]
-                except KeyError:
-                    print "Missing author: {author}".format(author=author)
-                if signer != author:
-                    cmd = "{mtn} cert {revision} committer {signer}".format(
-                        mtn=mtn, revision=revision,
-                        signer=shellquote(signer))
-                    os.system(cmd)
+for revision, signer, author in mtn_query(db, "select
lower(hex(cc.revision_id)),k.name,ca.value "
+        "from revision_certs cc, revision_certs ca join public_keys k
on k.id = cc.keypair_id "
+        "where cc.revision_id=ca.revision_id and cc.name='changelog'
and ca.name='author' "
+        "group by cc.revision_id"):
+    if signer and not signer.startswith("tailor&amp;lt; at &amp;gt;"):
+        try:
+            signer = author_map[signer]
+        except KeyError:
+            print "Missing signer: {signer}".format(signer=signer)
+        try:
+            author = author_map[author]
+        except KeyError:
+            print "Missing author: {author}".format(author=author)
+        if signer != author:
+            subprocess.call(mtn_args + ['automate', 'cert', revision,
'committer', signer])

 print "DONE"
diff --git a/authormap b/authormap
index 4f6d3e5..f57ea3f 100644
diff --git a/authormap.TODO b/authormap.TODO
index e554245..d511653 100644
diff --git a/branchmap b/branchmap
index 6f357e1..cc693e7 100644
diff --git a/check-authors-and-committers.py b/check-authors-and-committers.py
index 8ac2bf9..9f27d17 100755
--- a/check-authors-and-committers.py
+++ b/check-authors-and-committers.py
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3,6 +3,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;

 import os
 import sys
+import subprocess

 BAD_AUTHORS=(
     "Unknown",
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -14,19 +15,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; sys.stdout.write("Looking for bad authors and
committers...")
 sys.stdout.flush()

 db = sys.argv[1]
-def shellquote(s):
-    return "'" + s.replace("'", "'\\''") + "'"
-mtn = "mtn -d {db} ".format(db=shellquote(db))

 author_map = {}
 with open("authormap", "r") as f:
     for l in f:
-        try:
-            index = l.index("=")
-        except ValueError:
-            continue
-        author = l[:index].strip()
-        name = l[index+1:].strip()
+        author, name = l.rstrip("\n").split(" = ")
         if author and name:
             author_map[author] = name

&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -35,13 +28,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; def check_cert(revision, name, value):
     global author_map
     global first

-    if not value:
-        if name == "author":
-            if first:
-                print ""
-                first = False
-                print "Missing author on: {revision}".format(revision=revision)
-        return
     try:
         value = author_map[value]
     except KeyError:
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -53,28 +39,26 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; def check_cert(revision, name, value):
         print "Bad {name} on {revision}: {value}".format(
             revision=revision, name=name, value=value)

-cmd = "{mtn} automate roots ; {mtn} automate descendents `{mtn}
automate roots`".format(mtn=mtn)
-with os.popen(cmd, "r") as pipe:
-    for l in pipe.readlines():
-        revision = l.strip()
-        cmd = "{mtn} automate certs {revision}".format(mtn=mtn,
revision=revision)
-        with os.popen(cmd, "r") as pipe2:
-            found_author = False
-            author = None
-            found_committer = False
-            committer = None
-            for l in pipe2.readlines():
-                if l == '     name "author"\n':
-                    found_author = True
-                elif l == '     name "committer"\n':
-                    found_committer = True
-                elif found_author and l.startswith('    value "'):
-                    found_author = False
-                    author = l[11:-2]
-                elif found_committer and l.startswith('    value "'):
-                    found_committer = False
-                    committer = l[11:-2]
-            check_cert(revision, "author", author)
-            check_cert(revision, "committer", committer)
+def mtn_query(db, query):
+    pipe = subprocess.Popen(['mtn', '--db', db, 'db', 'execute',
query], stdout=subprocess.PIPE)
+    pipe.stdout.readline() # garbage
+    pipe.stdout.readline() # garbage
+    return (line.rstrip('\n').split(' | ') for line in pipe.stdout)
+
+# find missing authors
+for revision, authors in mtn_query(db, "select
lower(hex(r.id)),sum(c.name == 'author') from revisions r join
revision_certs c on r.id=c.revision_id group by r.id"):
+    if int(authors) == 0:
+        if first:
+            print ""
+            first = False
+        print "Missing author on: {revision}".format(revision=revision)
+
+# find bad authors
+for revision, value in mtn_query(db, "select
lower(hex(revision_id)),value from revision_certs where
name='author'"):
+    check_cert(revision, "author", value)
+
+# find bad committers
+for revision, value in mtn_query(db, "select
lower(hex(revision_id)),value from revision_certs where
name='committer'"):
+    check_cert(revision, "committer", value)

 print "DONE"
diff --git a/fix-branch-certs.sh b/fix-branch-certs.sh
index 77482e3..df7d9ee 100755
--- a/fix-branch-certs.sh
+++ b/fix-branch-certs.sh
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -216,6 +216,22 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; mtn -d $db local kill_certs
fe8468d91b46c3c88ad8f60a6499b16e3fa5f327 branch "im.
 mtn -d $db local kill_certs fe98ce53cdced722cba947379e236ad1fc03adc3
branch "im.pidgin.pidgin.openq"
 mtn -d $db local kill_certs 570b107a62822dd538074753d93b576dea0043a3
branch "im.pidgin.pidgin.next.minor"

+mtn -d $db local kill_certs 2cca525615a367389b1639a5246fbe6d451150c4
branch "im.pidgin.pidgin.mxit.2.x.y"
+mtn -d $db local kill_certs 32a55bbc4f1e8d632d205d040fa3e814559e1c95
branch "im.pidgin.pidgin.mxit"
+mtn -d $db local kill_certs 3a12ece5b629e6de76faec79315514e70ccb32bb
branch "im.pidgin.pidgin.next.minor"
+mtn -d $db local kill_certs 64907e955d5af4c51dbf683f72d3e75a6d52ba46
branch "im.pidgin.pidgin.2.9.0"
+mtn -d $db local kill_certs 65f0e21660895ebae2e934a8d04088a1c57899a6
branch "im.pidgin.pidgin.2.x.y"
+mtn -d $db local kill_certs 7d17d6b03c98b91ec1f90c5f17f7c923973f2e2c
branch "im.pidgin.pidgin.mxit"
+mtn -d $db local kill_certs 8ee22c12acfc2da5d83128948c7cfca17eb54306
branch "im.pidgin.pidgin.next.major"
+mtn -d $db local kill_certs 90563b555003eba18fcf35404c001c70b9f4c184
branch "im.pidgin.pidgin.next.minor"
+mtn -d $db local kill_certs 9fc56c5e4669dbbaa42a495b831982f2732e3895
branch "im.pidgin.pidgin.mxit"
+mtn -d $db local kill_certs c8c73eea7431e6f940916315ace40a41c8da3faa
branch "im.pidgin.pidgin.2.x.y"
+mtn -d $db local kill_certs ddbd0d68045c975cc5673417ad38c8fc65fadad1
branch "im.pidgin.pidgin.next.minor"
+mtn -d $db local kill_certs aad06bbf6f9a5e7fd1f16c72be4af2060e8de4c3
branch "im.pidgin.cpw.sulabh.yahoo"
+mtn -d $db local kill_certs bb41d065e7ff1100b5eb50335111df9b50537753
branch "im.pidgin.pidgin"
+mtn -d $db local kill_certs e09847cb3f7316d9a193184e236421bea704bd4b
branch "im.pidgin.cpw.sulabh.yahoo"
+mtn -d $db local kill_certs f0229545a42bc311f7242e3ab3648395bc8156a8
branch "im.pidgin.soc.2010.detachablepurple"
+
 #odd ipp-&amp;gt;remotelogging-&amp;gt;ipp situation
 #mtn -d $db local kill_certs 64d3e6a75d2827d3c93ac39eb27408b26dc735ea
branch "im.pidgin.soc.2007.remotelogging"
 #mtn -k $key -d $db cert 64d3e6a75d2827d3c93ac39eb27408b26dc735ea
branch "im.pidgin.pidgin"
diff --git a/fix-commits.sh b/fix-commits.sh
new file mode 100755
index 0000000..de5d0b0
--- /dev/null
+++ b/fix-commits.sh
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,63 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+#!/bin/sh -e
+
+db=$1
+key=$2
+
+fix_commit ()
+{
+if [ "$2" ]; then
+mtn -d $db local kill_certs $1 author
+mtn -d $db -k $key automate cert $1 author "$2"
+fi
+mtn -d $db local kill_certs $1 changelog
+mtn -d $db -k $key cert $1 changelog # gets stdin
+}
+
+echo -n "Fixing crappy commits..."
+
+fix_commit "d137c7046bae7e4a0144fee82bfce8061f61e3b3" "Rob Flynn
&amp;lt;gaim&amp;lt; at &amp;gt;robflynn.com&amp;gt;" &amp;lt;&amp;lt;EOF
+[gaim-migrate &amp;lt; at &amp;gt; 9]
+Initial commit
+EOF
+
+fix_commit "84ed68a77e223f83d7891347c70e18519423e96b" "Nathan Walp
&amp;lt;nwalp&amp;lt; at &amp;gt;pidgin.im&amp;gt;" &amp;lt;&amp;lt;EOF
+[gaim-migrate &amp;lt; at &amp;gt; 10836]
+EOF
+
+fix_commit "e0b0f3283559c9583658d47005cbf8a2719e5e45" "Luke Schierer
&amp;lt;lschiere&amp;lt; at &amp;gt;pidgin.im&amp;gt;" &amp;lt;&amp;lt;EOF
+[gaim-migrate &amp;lt; at &amp;gt; 12524]
+EOF
+
+fix_commit "eb43dd9ae1ab74d11ea3cdc685e487b3fc5f48cd" "Daniel Atallah
&amp;lt;datallah&amp;lt; at &amp;gt;pidgin.im&amp;gt;" &amp;lt;&amp;lt;EOF
+[gaim-migrate &amp;lt; at &amp;gt; 11819]
+EOF
+
+fix_commit "c42325d0684bbdde5f0161a049e709c2df6cf137" "Tim Ringenbach
&amp;lt;marv&amp;lt; at &amp;gt;pidgin.im&amp;gt;" &amp;lt;&amp;lt;EOF
+[gaim-migrate &amp;lt; at &amp;gt; 11408]
+EOF
+
+fix_commit "7a10a49bb178320bab4d2f5241609ecdecb68a7d" "Sean Egan
&amp;lt;seanegan&amp;lt; at &amp;gt;pidgin.im&amp;gt;" &amp;lt;&amp;lt;EOF
+[gaim-migrate &amp;lt; at &amp;gt; 3437]
+EOF
+
+fix_commit "26f9fd8304f47257cfe76bd7ea2f989bd2b83f5b" "Mark Doliner
&amp;lt;markdoliner&amp;lt; at &amp;gt;pidgin.im&amp;gt;" &amp;lt;&amp;lt;EOF
+Change the version from 1.5.1cvs to 1.5.1dev.
+Thanks to Kevin for mentioning this
+EOF
+
+fix_commit "152f6d4a5c3c68d008f93aa52ea166a4ef2cd528" "Mark Doliner
&amp;lt;markdoliner&amp;lt; at &amp;gt;pidgin.im&amp;gt;" &amp;lt;&amp;lt;EOF
+[gaim-migrate &amp;lt; at &amp;gt; 13410]
+Conversion nonsense
+EOF
+
+fix_commit "4f23dae193c4c65a599c972bd9f77e3b68761a5e" "Mark Doliner
&amp;lt;markdoliner&amp;lt; at &amp;gt;pidgin.im&amp;gt;" &amp;lt;&amp;lt;EOF
+[gaim-migrate &amp;lt; at &amp;gt; 13411]
+Conversion nonsense
+EOF
+
+fix_commit "9a5e7fb820bf82d0009c007e3c5146dfd9bda395" "Christian
Hammond &amp;lt;chipx86&amp;lt; at &amp;gt;chipx86.com&amp;gt;" &amp;lt;&amp;lt;EOF
+[gaim-migrate &amp;lt; at &amp;gt; 3445]
+Conversion nonsense
+EOF
+
+echo DONE
diff --git a/fix-svn-author-certs.py b/fix-svn-author-certs.py
index db348bf..5f52892 100755
--- a/fix-svn-author-certs.py
+++ b/fix-svn-author-certs.py
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3,89 +3,80 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;

 import os
 import sys
+import re
+import subprocess

-sys.stdout.write("Correcting author certs based on svn-patch-authors...")
+sys.stdout.write("Correcting author certs based on svn-authors...")
 sys.stdout.flush()

 db = sys.argv[1]
-key = None
 try:
     key = sys.argv[2]
 except IndexError:
-    pass
+    key = None

-def shellquote(s):
-    return "'" + s.replace("'", "'\\''") + "'"
-mtn = "mtn -d {db} ".format(db=shellquote(db))
+mtn_args = ['mtn', '-d', db]
 if key:
-    mtn = "{mtn} -k {key}".format(mtn=mtn, key=key)
+    mtn_args += ['-k', key]

 author_map = {}
 with open("authormap", "r") as f:
     for l in f:
-        try:
-            index = l.index("=")
-        except ValueError:
-            continue
-        author = l[:index].strip()
-        name = l[index+1:].strip()
+        author, name = l.rstrip("\n").split(" = ")
         if author and name:
             author_map[author.lower()] = name

 svn_map = {}
 with open("svn-revisions", "r") as f:
     for l in f:
-        (svn_revision, mtn_revision) = l.split()
+        svn_revision, mtn_revision = l.split()
         if svn_revision in svn_map:
             svn_map[svn_revision].append(mtn_revision)
         else:
             svn_map[svn_revision] = [mtn_revision]

+def mtn_query(db, query):
+    global mtn_args
+    pipe = subprocess.Popen(mtn_args + ['db', 'execute', query],
stdout=subprocess.PIPE)
+    pipe.stdout.readline() # garbage
+    pipe.stdout.readline() # garbage
+    return (line.rstrip('\n').split(' | ') for line in pipe.stdout)
+
 svn_authormap = {}
-with open("svn-patch-authors", "r") as f:
+with open("svn-authors-map", "r") as f:
+    for l in f:
+        key, value = l.rstrip().split(" = ")
+        svn_authormap[key] = value
+
+with open("svn-authors", "r") as f:
     for l in f:
-        l = l.replace(" # ", " ").strip()
-        index = l.index(" ")
-        revision = l[:index]
-        author = l[index+1:]
-        try:
-            author = author[:author.index("(")].strip()
-        except ValueError:
-            pass
-        revisions = svn_map[revision]
+        revision, author = l.rstrip("\n").split(" ", 1)
+        mark = author[0] == '#'
+        match = re.search('^(# )?(.+?)( \(.+\))?$', author)
+        author = match.group(2)
+        if mark and author in svn_authormap:
+            author = svn_authormap[author]
+        else:
+            if author.find("Unknown ") == 0:
+                author = author[8:]

-        for revision in revisions:
+        for revision in svn_map[revision]:
             existing_author = None
-            cmd = "{mtn} automate certs {revision}".format(mtn=mtn,
revision=revision)
-            with os.popen(cmd, "r") as pipe:
-                found_author = False
-                for l in pipe.readlines():
-                    if l == '     name "author"\n':
-                        found_author = True
-                    elif found_author and l.startswith('    value "'):
-                        found_author = False
-                        existing_author = l[11:-2]
+            for result in mtn_query(db, "select value from
revision_certs where "
+                "name='author' and
revision_id=X'{revision}'".format(revision=revision)):
+                existing_author = result[0]

             try:
                 existing_author = author_map[existing_author.lower()]
             except KeyError:
-                print "Missing author: %s" % existing_author
-            cmd = "{mtn} cert {revision} committer {existing_author}".format(
-                mtn=mtn, revision=revision,
-                existing_author=shellquote(existing_author))
-            os.system(cmd)
+                if not re.match('.*&amp;lt;.*&amp;gt;', existing_author):
+                    print "Missing author: %s" % existing_author

-            cmd = "{mtn} local kill_certs {revision} author".format(
-                mtn=mtn, revision=revision)
-            os.system(cmd)
-
-            try:
-                author = author_map[author.lower()]
-            except KeyError:
+            if not mark:
                 print "Missing author: %s" % author
-            cmd = "{mtn} cert {revision} author {author}".format(
-                mtn=mtn, revision=revision,
-                author=shellquote(author))
-            os.system(cmd)
+
+            subprocess.call(mtn_args + ['automate', 'cert', revision,
'committer', existing_author])
+            subprocess.call(mtn_args + ['local', 'kill_certs',
revision, 'author'])
+            subprocess.call(mtn_args + ['automate', 'cert', revision,
'author', author])

 print "DONE"
diff --git a/migrate.sh b/migrate.sh
index 5a9228f..d1f7ddd 100755
--- a/migrate.sh
+++ b/migrate.sh
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -45,6 +45,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; fi
 # this statement out
 export PATH=.:$PATH

+: ${PYTHON:=python}
+
 if [ -d tmpfs ] ; then
 if ! mount | grep -Fq "`pwd`/tmpfs" ; then
 sudo mount -t tmpfs tmpfs tmpfs
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -109,8 +111,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; for rev in $revisions; do
 done

 # Add some missing author certs.
-mtn -d $db -k $key cert 2d6f9e6fefcb1cc3acf077976fb4563ec6195f82 author N3fr0n
-mtn -d $db -k $key cert e8b2e1e7ac4597ec67db53c64064e2e8e7f3cbc1 author N3fr0n
+mtn -d $db -k $key cert 2d6f9e6fefcb1cc3acf077976fb4563ec6195f82
author "Tomáš Kebert"
+mtn -d $db -k $key cert e8b2e1e7ac4597ec67db53c64064e2e8e7f3cbc1
author "Tomáš Kebert"

 # Deal with revisions that have multiple branch certs
 ./fix-branch-certs.sh $db $key
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -124,7 +126,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; fi

 # Add a committer cert with the mapped version of the signer of the changelog.
 # Our patched `hg convert` will append this information to the changelog.
-./add-committer-certs.py $db $key
+$PYTHON ./add-committer-certs.py $db $key

 # This has to be done after adding the committer certs, or that script will
 # use the wrong signer (since the changelog certs are recreated).
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -133,18 +135,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; fi
 # For SVN commits of patches, move the author to a committer cert (since these
 # MTN revisions were signed by tailor, which we ignore above) and add the patch
 # writer as the author.
-#
-# wget http://people.freedesktop.org/~felipec/svn-patch-authors \
-#      -O svn-patch-authors.orig
-cp svn-patch-authors.orig svn-patch-authors
-patch -p0 svn-patch-authors svn-patch-authors.diff &amp;gt;/dev/null
-cat svn-patch-authors.gtk1-stable &amp;gt;&amp;gt; svn-patch-authors
-cat svn-patch-authors.missing &amp;gt;&amp;gt; svn-patch-authors
-cat svn-patch-authors.oldstatus &amp;gt;&amp;gt; svn-patch-authors
-./fix-svn-author-certs.py $db $key
+$PYTHON ./fix-svn-author-certs.py $db $key
+
+# Fix crappy commits
+./fix-commits.sh $db $key

 # Alert us of revisions that still need fixing...
-./check-authors-and-committers.py $db
+$PYTHON ./check-authors-and-committers.py $db

 targetrepodir=$destrepo.dir
 rm -rf $targetrepodir
diff --git a/print-svn-authors.py b/print-svn-authors.py
deleted file mode 100755
index 018a1d2..0000000
--- a/print-svn-authors.py
+++ /dev/null
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,34 +0,0 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
-#!/usr/bin/python
-# vim: ai ts=4 sts=4 et sw=4
-
-import os
-import sys
-
-author_map = {}
-with open("authormap", "r") as f:
-    for l in f:
-        try:
-            index = l.index("=")
-        except ValueError:
-            continue
-        author = l[:index].strip()
-        name = l[index+1:].strip()
-        if author and name:
-            author_map[author.lower()] = name
-
-svn_authormap = {}
-with open("svn-patch-authors", "r") as f:
-    for l in f:
-        l = l.replace(" # ", " ").strip()
-        index = l.index(" ")
-        revision = l[:index]
-        author = l[index+1:]
-        try:
-            author = author[:author.index("(")].strip()
-        except ValueError:
-            pass
-        try:
-            author = author_map[author.lower()]
-        except:
-            pass
-        print "{revision} {author}".format(revision=revision, author=author)
diff --git a/split-branch-repos.sh b/split-branch-repos.sh
index 0e88e03..19a0d52 100755
--- a/split-branch-repos.sh
+++ b/split-branch-repos.sh
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -18,8 +18,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; hg --cwd $mainrepo strip --no-backup
"min(branch('im.pidgin.www'))"
 hg --cwd $mainrepo strip --no-backup "min(branch('im.pidgin.web.old'))"
 hg --cwd $mainrepo strip --no-backup
"min(branch('im.pidgin.doc.userguide.pidgin'))"
 hg --cwd $mainrepo strip --no-backup
"min(branch('im.pidgin.soc.2009.transport'))"
-# throw away this garbage branch
-hg --cwd $mainrepo strip --no-backup
"min(branch('im.pidgin.soc.2010.logviewer'))"

 branches="aes
 cpw.caseyho.crashreporter
diff --git a/svn-authors b/svn-authors
new file mode 100644
index 0000000..0883b02
diff --git a/svn-authors-map b/svn-authors-map
new file mode 100644
index 0000000..35feaa0
diff --git a/svn-patch-authors.diff b/svn-patch-authors.diff
deleted file mode 100644
index 22b3fa9..0000000
diff --git a/svn-patch-authors.gtk1-stable b/svn-patch-authors.gtk1-stable
deleted file mode 100644
index efa5ca6..0000000
diff --git a/svn-patch-authors.missing b/svn-patch-authors.missing
deleted file mode 100644
index a236967..0000000
diff --git a/svn-patch-authors.oldstatus b/svn-patch-authors.oldstatus
deleted file mode 100644
index 6a445a0..0000000
diff --git a/svn-patch-authors.orig b/svn-patch-authors.orig
deleted file mode 100644
index 475d805..0000000

&lt;/pre&gt;</description>
    <dc:creator>Felipe Contreras</dc:creator>
    <dc:date>2012-05-21T16:02:38</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19901">
    <title>[PATCH 20/21] fix-svn-author-certs: use new format</title>
    <link>http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19901</link>
    <description>&lt;pre&gt;Signed-off-by: Felipe Contreras &amp;lt;felipe.contreras&amp;lt; at &amp;gt;gmail.com&amp;gt;
---
 fix-svn-author-certs.py |   19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/fix-svn-author-certs.py b/fix-svn-author-certs.py
index 9545d67..af3df0a 100755
--- a/fix-svn-author-certs.py
+++ b/fix-svn-author-certs.py
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -43,7 +43,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; with open("svn-revisions", "r") as f:
             svn_map[svn_revision] = [mtn_revision]
 
 svn_authormap = {}
-with open("svn-patch-authors", "r") as f:
+with open("svn_authors_map.txt", "r") as f:
+    for l in f:
+        key, value = l.rstrip().split(" = ")
+        svn_authormap[key] = value
+
+with open("svn_authors.txt", "r") as f:
     for l in f:
         mark = l.find("#") &amp;gt;= 0
         l = l.replace(" # ", " ").strip()
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -54,6 +59,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; with open("svn-patch-authors", "r") as f:
             author = author[:author.index("(")].strip()
         except ValueError:
             pass
+        if mark and author in svn_authormap:
+            author = svn_authormap[author]
+        else:
+            if author.find("Unknown ") == 0:
+                author = author[8:]
         revisions = svn_map[revision]
 
         for revision in revisions:
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -82,11 +92,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; with open("svn-patch-authors", "r") as f:
                 mtn=mtn, revision=revision)
             os.system(cmd)
 
-            try:
-                author = author_map[author.lower()]
-            except KeyError:
-                if not mark:
-                    print "Missing author: %s" % author
+            if not mark:
+                print "Missing author: %s" % author
             cmd = "{mtn} cert {revision} author {author}".format(
                 mtn=mtn, revision=revision,
                 author=shellquote(author))
&lt;/pre&gt;</description>
    <dc:creator>Felipe Contreras</dc:creator>
    <dc:date>2012-05-13T14:14:28</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19900">
    <title>[PATCH 21/21] fix-svn-author-certs: trivial cleanup</title>
    <link>http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19900</link>
    <description>&lt;pre&gt;Signed-off-by: Felipe Contreras &amp;lt;felipe.contreras&amp;lt; at &amp;gt;gmail.com&amp;gt;
---
 fix-svn-author-certs.py |    7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/fix-svn-author-certs.py b/fix-svn-author-certs.py
index af3df0a..0b95410 100755
--- a/fix-svn-author-certs.py
+++ b/fix-svn-author-certs.py
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -24,12 +24,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; if key:
 author_map = {}
 with open("authormap", "r") as f:
     for l in f:
-        try:
-            index = l.index("=")
-        except ValueError:
-            continue
-        author = l[:index].strip()
-        name = l[index+1:].strip()
+        author, name = l.rstrip().split(" = ")
         if author and name:
             author_map[author.lower()] = name
 
&lt;/pre&gt;</description>
    <dc:creator>Felipe Contreras</dc:creator>
    <dc:date>2012-05-13T14:14:29</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19899">
    <title>[PATCH 19/21] Add new svn authors mappings</title>
    <link>http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19899</link>
    <description>&lt;pre&gt;Basically splitting 'svn-patch-authors' in two.

Signed-off-by: Felipe Contreras &amp;lt;felipe.contreras&amp;lt; at &amp;gt;gmail.com&amp;gt;
---
 svn_authors.txt     | 2593 +++++++++++++++++++++++++++++++++++++++++++++++++++
 svn_authors_map.txt |  173 ++++
 2 files changed, 2766 insertions(+)
 create mode 100644 svn_authors.txt
 create mode 100644 svn_authors_map.txt

diff --git a/svn_authors.txt b/svn_authors.txt
new file mode 100644
diff --git a/svn_authors_map.txt b/svn_authors_map.txt
new file mode 100644
&lt;/pre&gt;</description>
    <dc:creator>Felipe Contreras</dc:creator>
    <dc:date>2012-05-13T14:14:27</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19898">
    <title>[PATCH 18/21] Remove 'print-svn-authors'</title>
    <link>http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19898</link>
    <description>&lt;pre&gt;It's not relevant any more. And it doesn't work after last patch.

Signed-off-by: Felipe Contreras &amp;lt;felipe.contreras&amp;lt; at &amp;gt;gmail.com&amp;gt;
---
 print-svn-authors.py |   29 -----------------------------
 1 file changed, 29 deletions(-)
 delete mode 100755 print-svn-authors.py

diff --git a/print-svn-authors.py b/print-svn-authors.py
deleted file mode 100755
index 4075b09..0000000
--- a/print-svn-authors.py
+++ /dev/null
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,29 +0,0 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
-#!/usr/bin/python
-# vim: ai ts=4 sts=4 et sw=4
-
-import os
-import sys
-
-author_map = {}
-with open("authormap", "r") as f:
-    for l in f:
-        author, name = l.rstrip().split(" = ")
-        if author and name:
-            author_map[author.lower()] = name
-
-svn_authormap = {}
-with open("svn-patch-authors", "r") as f:
-    for l in f:
-        l = l.replace(" # ", " ").strip()
-        index = l.index(" ")
-        revision = l[:index]
-        author = l[index+1:]
-        try:
-            tmp = author[:author.index("(")].strip()
-        except ValueError:
-            tmp = author
-        try:
-            author = "# " + author_map[tmp.lower()]
-        except:
-            pass
-        print "{revision} {author}".format(revision=revision, author=author)
&lt;/pre&gt;</description>
    <dc:creator>Felipe Contreras</dc:creator>
    <dc:date>2012-05-13T14:14:26</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19897">
    <title>[PATCH 17/21] authormap: remove redundant entries</title>
    <link>http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19897</link>
    <description>&lt;pre&gt;They are already in svn-patch-authors.

Signed-off-by: Felipe Contreras &amp;lt;felipe.contreras&amp;lt; at &amp;gt;gmail.com&amp;gt;
---
 authormap |  310 -------------------------------------------------------------
 1 file changed, 310 deletions(-)

diff --git a/authormap b/authormap
&lt;/pre&gt;</description>
    <dc:creator>Felipe Contreras</dc:creator>
    <dc:date>2012-05-13T14:14:25</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19896">
    <title>[PATCH 16/21] Add svn-patch-authors</title>
    <link>http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19896</link>
    <description>&lt;pre&gt;No need to regenerate it everything; we can generate it with
'print-svn-authors' now that it's fixed.

Signed-off-by: Felipe Contreras &amp;lt;felipe.contreras&amp;lt; at &amp;gt;gmail.com&amp;gt;
---
 migrate.sh                    |    4 -
 svn-patch-authors             | 2593 +++++++++++++++++++++++++++++++++++++++++
 svn-patch-authors.gtk1-stable |   27 -
 svn-patch-authors.missing     |    7 -
 svn-patch-authors.oldstatus   |  209 ----
 svn-patch-authors.orig        | 2350 -------------------------------------
 6 files changed, 2593 insertions(+), 2597 deletions(-)
 create mode 100644 svn-patch-authors
 delete mode 100644 svn-patch-authors.gtk1-stable
 delete mode 100644 svn-patch-authors.missing
 delete mode 100644 svn-patch-authors.oldstatus
 delete mode 100644 svn-patch-authors.orig

diff --git a/migrate.sh b/migrate.sh
index c22b59c..bf7c9e9 100755
--- a/migrate.sh
+++ b/migrate.sh
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -135,10 +135,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; $PYTHON ./add-committer-certs.py $db $key
 # For SVN commits of patches, move the author to a committer cert (since these
 # MTN revisions were signed by tailor, which we ignore above) and add the patch
 # writer as the author.
-cp svn-patch-authors.orig svn-patch-authors
-cat svn-patch-authors.gtk1-stable &amp;gt;&amp;gt; svn-patch-authors
-cat svn-patch-authors.missing &amp;gt;&amp;gt; svn-patch-authors
-cat svn-patch-authors.oldstatus &amp;gt;&amp;gt; svn-patch-authors
 $PYTHON ./fix-svn-author-certs.py $db $key
 
 # Alert us of revisions that still need fixing...
diff --git a/svn-patch-authors b/svn-patch-authors
new file mode 100644
diff --git a/svn-patch-authors.missing b/svn-patch-authors.missing
deleted file mode 100644
diff --git a/svn-patch-authors.oldstatus b/svn-patch-authors.oldstatus
deleted file mode 100644
diff --git a/svn-patch-authors.orig b/svn-patch-authors.orig
deleted file mode 100644
&lt;/pre&gt;</description>
    <dc:creator>Felipe Contreras</dc:creator>
    <dc:date>2012-05-13T14:14:24</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19895">
    <title>[PATCH 15/21] print-svn-authors: fix</title>
    <link>http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19895</link>
    <description>&lt;pre&gt;Signed-off-by: Felipe Contreras &amp;lt;felipe.contreras&amp;lt; at &amp;gt;gmail.com&amp;gt;
---
 print-svn-authors.py |    7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/print-svn-authors.py b/print-svn-authors.py
index dd379d1..4075b09 100755
--- a/print-svn-authors.py
+++ b/print-svn-authors.py
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -7,12 +7,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; import sys
 author_map = {}
 with open("authormap", "r") as f:
     for l in f:
-        try:
-            index = l.index("=")
-        except ValueError:
-            continue
-        author = l[:index].strip()
-        name = l[index+1:].strip()
+        author, name = l.rstrip().split(" = ")
         if author and name:
             author_map[author.lower()] = name
 
&lt;/pre&gt;</description>
    <dc:creator>Felipe Contreras</dc:creator>
    <dc:date>2012-05-13T14:14:23</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19894">
    <title>[PATCH 14/21] print-svn-authors: improve</title>
    <link>http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19894</link>
    <description>&lt;pre&gt;So that the output is actually usable.

Signed-off-by: Felipe Contreras &amp;lt;felipe.contreras&amp;lt; at &amp;gt;gmail.com&amp;gt;
---
 print-svn-authors.py |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/print-svn-authors.py b/print-svn-authors.py
index 018a1d2..dd379d1 100755
--- a/print-svn-authors.py
+++ b/print-svn-authors.py
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -24,11 +24,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; with open("svn-patch-authors", "r") as f:
         revision = l[:index]
         author = l[index+1:]
         try:
-            author = author[:author.index("(")].strip()
+            tmp = author[:author.index("(")].strip()
         except ValueError:
-            pass
+            tmp = author
         try:
-            author = author_map[author.lower()]
+            author = "# " + author_map[tmp.lower()]
         except:
             pass
         print "{revision} {author}".format(revision=revision, author=author)
&lt;/pre&gt;</description>
    <dc:creator>Felipe Contreras</dc:creator>
    <dc:date>2012-05-13T14:14:22</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19893">
    <title>[PATCH 13/21] fix-svn-author-certs: fix valid author checks</title>
    <link>http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19893</link>
    <description>&lt;pre&gt;Let's not warn if the author from monotone has a valid format, or the
svn authors file has a mark (stating that the author is correct).

Signed-off-by: Felipe Contreras &amp;lt;felipe.contreras&amp;lt; at &amp;gt;gmail.com&amp;gt;
---
 fix-svn-author-certs.py |    8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/fix-svn-author-certs.py b/fix-svn-author-certs.py
index db348bf..9545d67 100755
--- a/fix-svn-author-certs.py
+++ b/fix-svn-author-certs.py
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3,6 +3,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 
 import os
 import sys
+import re
 
 sys.stdout.write("Correcting author certs based on svn-patch-authors...")
 sys.stdout.flush()
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -44,6 +45,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; with open("svn-revisions", "r") as f:
 svn_authormap = {}
 with open("svn-patch-authors", "r") as f:
     for l in f:
+        mark = l.find("#") &amp;gt;= 0
         l = l.replace(" # ", " ").strip()
         index = l.index(" ")
         revision = l[:index]
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -69,7 +71,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; with open("svn-patch-authors", "r") as f:
             try:
                 existing_author = author_map[existing_author.lower()]
             except KeyError:
-                print "Missing author: %s" % existing_author
+                if not re.match('.*&amp;lt;.*&amp;gt;', existing_author):
+                    print "Missing author: %s" % existing_author
             cmd = "{mtn} cert {revision} committer {existing_author}".format(
                 mtn=mtn, revision=revision,
                 existing_author=shellquote(existing_author))
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -82,7 +85,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; with open("svn-patch-authors", "r") as f:
             try:
                 author = author_map[author.lower()]
             except KeyError:
-                print "Missing author: %s" % author
+                if not mark:
+                    print "Missing author: %s" % author
             cmd = "{mtn} cert {revision} author {author}".format(
                 mtn=mtn, revision=revision,
                 author=shellquote(author))
&lt;/pre&gt;</description>
    <dc:creator>Felipe Contreras</dc:creator>
    <dc:date>2012-05-13T14:14:21</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19892">
    <title>[PATCH 12/21] authormap: update</title>
    <link>http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19892</link>
    <description>&lt;pre&gt;Signed-off-by: Felipe Contreras &amp;lt;felipe.contreras&amp;lt; at &amp;gt;gmail.com&amp;gt;
---
 authormap |    2 ++
 1 file changed, 2 insertions(+)

diff --git a/authormap b/authormap
index 4b17311..46c871b 100644
--- a/authormap
+++ b/authormap
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -443,6 +443,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; loptosko&amp;lt; at &amp;gt;gmail.com = loptosko &amp;lt;loptosko&amp;lt; at &amp;gt;gmail.com&amp;gt;
 lpm+pidgin.im&amp;lt; at &amp;gt;pobox.com = Laurent Montaron &amp;lt;lpm+pidgin.im&amp;lt; at &amp;gt;pobox.com&amp;gt;
 lschiere = Luke Schierer &amp;lt;lschiere&amp;lt; at &amp;gt;pidgin.im&amp;gt;
 lschiere&amp;lt; at &amp;gt;pidgin.im = Luke Schierer &amp;lt;lschiere&amp;lt; at &amp;gt;pidgin.im&amp;gt;
+lucas.fisher&amp;lt; at &amp;gt;gmail.com = Lucas Fisher &amp;lt;lucas.fisher&amp;lt; at &amp;gt;gmail.com&amp;gt;
 luke&amp;lt; at &amp;gt;lukeross.name = Luke Ross &amp;lt;luke&amp;lt; at &amp;gt;lukeross.name&amp;gt;
 luke&amp;lt; at &amp;gt;petre.net = Luke Petre &amp;lt;luke&amp;lt; at &amp;gt;petre.net&amp;gt;
 madthanu&amp;lt; at &amp;gt;gmail.com = Thanumalayan Sankaranarayanan &amp;lt;madthanu&amp;lt; at &amp;gt;gmail.com&amp;gt;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -568,6 +569,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; thekingant = Mark Doliner &amp;lt;markdoliner&amp;lt; at &amp;gt;pidgin.im&amp;gt;
 therylz = Riley Patterson &amp;lt;therylz&amp;lt; at &amp;gt;users.sourceforge.net&amp;gt;
 thijsalkemade&amp;lt; at &amp;gt;gmail.com = Thijs Alkemade &amp;lt;thijsalkemade&amp;lt; at &amp;gt;gmail.com&amp;gt;
 timo.jyrinki&amp;lt; at &amp;gt;iki.fi = Timo Jyrinki &amp;lt;timo.jyrinki&amp;lt; at &amp;gt;iki.fi&amp;gt;
+tomkiewicz&amp;lt; at &amp;gt;o2.pl = Tomasz Wasilczyk &amp;lt;tomkiewicz&amp;lt; at &amp;gt;o2.pl&amp;gt;
 toniher&amp;lt; at &amp;gt;softcatala.org = Toni Hermoso &amp;lt;toniher&amp;lt; at &amp;gt;softcatala.org&amp;gt;
 tulliana&amp;lt; at &amp;gt;gmail.com = Serdar Soytetir &amp;lt;tulliana&amp;lt; at &amp;gt;gmail.com&amp;gt;
 typ0&amp;lt; at &amp;gt;pidgin.im = Carlos Silva &amp;lt;typ0&amp;lt; at &amp;gt;pidgin.im&amp;gt;
&lt;/pre&gt;</description>
    <dc:creator>Felipe Contreras</dc:creator>
    <dc:date>2012-05-13T14:14:20</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19891">
    <title>[PATCH 11/21] authormap: fix Miloslav Trmac entry</title>
    <link>http://permalink.gmane.org/gmane.comp.gnome.gaim.devel/19891</link>
    <description>&lt;pre&gt;Signed-off-by: Felipe Contreras &amp;lt;felipe.contreras&amp;lt; at &amp;gt;gmail.com&amp;gt;
---
 authormap.TODO         |    1 -
 svn-patch-authors.orig |    6 +++---
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/authormap.TODO b/authormap.TODO
index e554245..49c6c22 100644
--- a/authormap.TODO
+++ b/authormap.TODO
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -166,7 +166,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; Michele Baldessari = Michele Baldessari
 Mike Basinger = Mike Basinger
 Mike Castle = Mike Castle
 Mike Heffner = Mike Heffner
-Miloslav Trmac = Miloslav Trmac
 Nacho Resa = Nacho Resa
 Nandan Dixit = Nandan Dixit
 Nathan = Nathan
diff --git a/svn-patch-authors.orig b/svn-patch-authors.orig
index 4084f83..2c8838d 100644
--- a/svn-patch-authors.orig
+++ b/svn-patch-authors.orig
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1581,7 +1581,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 6723 Luca Beltrame
 6720 # Tim Ringenbach &amp;lt;marv&amp;lt; at &amp;gt;pidgin.im&amp;gt;
 6697 # Robert McQueen &amp;lt;robert.mcqueen&amp;lt; at &amp;gt;collabora.co.uk&amp;gt;
-6696 Miloslav Trmac (trmac)
+6696 # Miloslav Trmac &amp;lt;mitr&amp;lt; at &amp;gt;volny.cz&amp;gt;
 6694 # Robert McQueen &amp;lt;robert.mcqueen&amp;lt; at &amp;gt;collabora.co.uk&amp;gt;
 6683 Ludovic
 6678 Sam Halliday
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1710,8 +1710,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 5658 # David J. Brigada &amp;lt;brigada&amp;lt; at &amp;gt;prism.net&amp;gt;
 5655 # Morten Brix Pedersen &amp;lt;morten&amp;lt; at &amp;gt;wtf.dk&amp;gt;
 5654 # Ka-Hing Cheung &amp;lt;khc&amp;lt; at &amp;gt;hxbc.us&amp;gt;
-5653 Miloslav Trmac (trmac)
-5652 Miloslav Trmac (trmac)
+5653 # Miloslav Trmac &amp;lt;mitr&amp;lt; at &amp;gt;volny.cz&amp;gt;
+5652 # Miloslav Trmac &amp;lt;mitr&amp;lt; at &amp;gt;volny.cz&amp;gt;
 5635 # Ethan Blanton &amp;lt;elb&amp;lt; at &amp;gt;pidgin.im&amp;gt;
 5634 Jose' Ma' Pe'rez Ca'ncer (jm_pc)
 5633 Oskuro
&lt;/pre&gt;</description>
    <dc:creator>Felipe Contreras</dc:creator>
    <dc:date>2012-05-13T14:14:19</dc:date>
  </item>
  <textinput rdf:about="http://search.gmane.org/?group=$group=gmane.comp.gnome.gaim.devel">
    <title>Search Engine</title>
    <description>Search the mailing list at Gmane</description>
    <name>query</name>
    <link>http://search.gmane.org/?group=$group=gmane.comp.gnome.gaim.devel</link>
  </textinput>
</rdf:RDF>

