[Pkg-bazaar-maint] Bug#451248: bzr-builddeb: updated patch
Jamie Wilkinson
jaq at debian.org
Fri Nov 16 15:12:13 UTC 2007
Package: bzr-builddeb
Version: 0.92
Tags: patch
Followup-For: Bug #451248
Hi again,
I messed up the diff last time, so it won't apply properly and it'll
generate bad code if it does. Instead here's some inline code you can
copy and paste into import_dsc.py, replacing _filter_patch(),
_patch_tree(), and _get_touched_paths().
This version also handles large patches going through _get_touched_paths
better, by selecting on lsdiff's stdout each time we write to
filterdiff's stdin, so these processes don't fill up their own buffers
and stop reading.
The read(1) can probably be made more efficient, but for now this works
pretty well!
Thanks!
def _make_filter_proc(self):
"""Create a filterdiff subprocess."""
filter_cmd = ['filterdiff', '-x', '*/.bzr/*']
filter_proc = Popen(filter_cmd, stdin=PIPE, stdout=PIPE)
return filter_proc
def _patch_tree(self, patch, basedir):
"""Patch a tree located at basedir."""
filter_proc = self._make_filter_proc()
patch_cmd = ['patch', '--strip', '1', '--quiet', '-f', '--directory',
basedir]
patch_proc = Popen(patch_cmd, stdin=filter_proc.stdout, close_fds=True)
for line in patch:
filter_proc.stdin.write(line)
filter_proc.stdin.flush()
filter_proc.stdin.close()
r = patch_proc.wait()
if r != 0:
raise BzrError('patch failed')
def _get_touched_paths(self, patch):
filter_proc = self._make_filter_proc()
cmd = ['lsdiff', '--strip', '1']
child_proc = Popen(cmd, stdin=filter_proc.stdout, stdout=PIPE,
close_fds=True)
output = ''
for line in patch:
filter_proc.stdin.write(line)
filter_proc.stdin.flush()
while select.select([child_proc.stdout], [], [], 0)[0]:
output += child_proc.stdout.read(1)
filter_proc.stdin.close()
output += child_proc.stdout.read()
touched_paths = []
for filename in output.split('\n'):
if filename.endswith('\n'):
filename = filename[:-1]
touched_paths.append(filename)
r = child_proc.wait()
if r != 0:
raise BzrError('lsdiff failed')
return touched_paths
-- System Information:
Debian Release: lenny/sid
APT prefers unstable
APT policy: (500, 'unstable')
Architecture: i386 (i686)
Kernel: Linux 2.6.22-3-686 (SMP w/1 CPU core)
Locale: LANG=en_AU.UTF-8, LC_CTYPE=en_AU.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash
Versions of packages bzr-builddeb depends on:
ii bzr 0.92-1 Bazaar, the next-generation distri
ii bzrtools 0.92.0-1 Collection of tools for bzr
ii devscripts 2.10.10 Scripts to make the life of a Debi
ii dpkg-dev 1.14.7 package building tools for Debian
ii fakeroot 1.8.4 Gives a fake root environment
ii patchutils 0.2.31-4 Utilities to work with patches
ii python 2.4.4-6 An interactive high-level object-o
ii python-apt 0.7.3.1+b1 Python interface to libapt-pkg
ii python-central 0.5.15 register and build utility for Pyt
ii python-debian 0.1.6 python modules to work with Debian
bzr-builddeb recommends no packages.
-- no debconf information
More information about the Pkg-bazaar-maint
mailing list