MQ Cookbook
Managing “Trivial” Patches
Because the overhead of dropping files into a new Mercurial repository is so low, it makes a lot of sense to manage patches this way even if you simply want to make a few changes to a source tarball that you downloaded.
Begin by downloading and unpacking the source tarball, and turning it into a Mercurial repository.
$
download netplug-1.2.5.tar.bz2
$
tar jxf netplug-1.2.5.tar.bz2
$
cd netplug-1.2.5
$
hg init
$
hg commit -q --addremove --message netplug-1.2.5
$
cd ..
$
hg clone netplug-1.2.5 netplug
updating working directory 18 files updated, 0 files merged, 0 files removed, 0 files unresolved
Continue by creating a patch stack and making your changes.
$
cd netplug
$
hg qinit
$
hg qnew -m 'fix build problem with gcc 4' build-fix.patch
$
perl -pi -e 's/int addr_len/socklen_t addr_len/' netlink.c
$
hg qrefresh
$
hg tip -p
changeset: 1:3174f1d41d77 tag: qtip tag: build-fix.patch tag: tip tag: qbase user: Bryan O'Sullivan <bos@serpentine.com> date: Tue May 05 06:44:41 2009 +0000 summary: fix build problem with gcc 4 diff -r 566cfe2faac9 -r 3174f1d41d77 netlink.c --- a/netlink.c Tue May 05 06:44:41 2009 +0000 +++ b/netlink.c Tue May 05 06:44:41 2009 +0000 @@ -275,7 +275,7 @@ exit(1); } - int addr_len = sizeof(addr); + socklen_t addr_len = sizeof(addr); if (getsockname(fd, (struct sockaddr *) &addr, &addr_len) == -1) { do_log(LOG_ERR, "Could not get socket details: %m");
Let’s say a few weeks or months pass, and your package author releases a new version. ...
Get Mercurial: The Definitive Guide now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.