Adblock Plus and (a little) more
Fake "hg rebase" implementation · 2008-10-24 11:13 by Wladimir Palant
After doing two merges in Mercurial when I couldn’t push my changes due to totally unrelated changes in the remote repository, I noticed that mq works great but having a fully automated solution instead of running several commands manually would be desirable. So I whipped up a short script that basically does what “hg rebase” would do:
#!/bin/perl my $revisions = `hg outgoing --template '{rev}\n'`; my $first = 0; my $last = 0; while ($revisions =~ /^(\d+)$/gm) { $first = $1 unless $first; $last = $1; } die "No outgoing changes\n" unless $first; system("hg qimport -r $first:$last") && exit(1); system("hg qpop -a") && exit(1); system("hg pull") && exit(1); system("hg update") && exit(1); system("hg qpush -a") && exit(1); my $patches = `hg qseries`; $patches =~ s/\r//g; $patches = "-r " . join(" -r ", split(/\n/, $patches)); system("hg qdelete $patches") && exit(1);
I saved it as “hgrebase” in the “\mozilla-build\msys\bin” directory so now I only need to type “hgrebase” on the command line. Hope this will be helpful to some (it surely will be to me).
Update: As Pascal points out below, there is already a qrebase extension doing mostly the same thing. And Mercurial 1.1 will have this feature built in anyway. So apparently there are other options.
Comment [2]
Commenting is closed for this article.
Pascal · 2008-10-24 15:01 · #
Just for your information, Mercurial 1.1 (that will hopefully be released rather soon) will include a real rebase extension (see http://www.selenic.com/mercurial/wiki/index.cgi/RebaseExtension for details)
Reply from Wladimir Palant:
Yes, I saw it. I also hope that this one can be used soon – but since I have to work with Mercurial already, it is good to have an intermediate solution.
Pascal · 2008-10-24 16:42 · #
You also have the qrebase extension doing more or less the same thing as your script (http://freehg.org/u/morisgi/qrebase/).