diff options
Diffstat (limited to 'gbp-pq')
-rwxr-xr-x | gbp-pq | 119 |
1 files changed, 2 insertions, 117 deletions
@@ -30,128 +30,13 @@ from gbp.command_wrappers import (Command, GitCommand, RunAtCommand, GitBranch, CommandExecFailed) from gbp.errors import GbpError import gbp.log +from gbp.pq import PatchQueue PQ_BRANCH_PREFIX = "patch-queue/" PATCH_DIR = "debian/patches/" SERIES_FILE = os.path.join(PATCH_DIR,"series") -class GbpPatch(object): - """ - A patch in a patchqueue - - @ivar path: path to the patch - @type path: string - @ivar topic: the topic of the patch - @type topic: string - @ivar strip: path components to strip (think patch -p<strip>) - @type strip: integer - """ - def __init__(self, path, topic=None, strip=None): - self.path = path - self.topic = topic - self.strip = strip - - def __repr__(self): - repr = "<gbp_pq.GbpPatch path='%s' " % self.path - if self.topic: - repr += "topic='%s' " % self.topic - if self.strip != None: - repr += "strip=%d " % self.strip - repr += ">" - return repr - - -class GbpPatchQueue(list): - @classmethod - def read_series_file(klass, seriesfile): - """Read a series file into GbpPatch objects""" - patch_dir = os.path.dirname(seriesfile) - try: - s = file(seriesfile) - except Exception, err: - raise GbpError("Cannot open series file: %s" % err) - - queue = klass._read_series(s, patch_dir) - s.close() - return queue - - @classmethod - def _read_series(klass, series, patch_dir): - """ - Read patch series - @param series: series of patches in quilt format - @type series: iterable of strings - @param patch_dir: path prefix to prepend to each patch path - @type patch_dir: string - - >>> GbpPatchQueue._read_series(['a/b', \ - 'a -p1', \ - 'a/b -p2'], '.') # doctest:+NORMALIZE_WHITESPACE - [<gbp_pq.GbpPatch path='./a/b' topic='a' >, - <gbp_pq.GbpPatch path='./a' strip=1 >, - <gbp_pq.GbpPatch path='./a/b' topic='a' strip=2 >] - """ - - queue = GbpPatchQueue() - for line in series: - queue.append(klass._parse_line(line, patch_dir)) - return queue - - @staticmethod - def _get_topic(line): - """ - Get the topic from the path's path - >>> GbpPatchQueue._get_topic("a/b c") - 'a' - >>> GbpPatchQueue._get_topic("asdf") - >>> GbpPatchQueue._get_topic("/asdf") - """ - topic = os.path.dirname(line) - if topic in [ '', '/' ]: - topic = None - return topic - - @staticmethod - def _split_strip(line): - """ - Separate the -p<num> option from the patch name - - >>> GbpPatchQueue._split_strip("asdf -p1") - ('asdf', 1) - >>> GbpPatchQueue._split_strip("a/nice/patch") - ('a/nice/patch', None) - >>> GbpPatchQueue._split_strip("asdf foo") - ('asdf foo', None) - """ - patch = line - strip = None - - split = line.rsplit(None, 1) - if len(split) > 1: - m = re.match('-p(?P<level>[0-9]+)', split[1]) - if m: - patch = split[0] - strip = int(m.group('level')) - - return (patch, strip) - - @classmethod - def _parse_line(klass, line, patch_dir): - """ - Parse a single line from a patch file - - >>> GbpPatchQueue._parse_line("a/b -p1", '/tmp/patches') - <gbp_pq.GbpPatch path='/tmp/patches/a/b' topic='a' strip=1 > - >>> GbpPatchQueue._parse_line("a/b", '.') - <gbp_pq.GbpPatch path='./a/b' topic='a' > - """ - line = line.rstrip() - topic = klass._get_topic(line) - (patch, split) = klass._split_strip(line) - return GbpPatch(os.path.join(patch_dir, patch), topic, split) - - def is_pq_branch(branch): """ is branch a patch-queue branch? @@ -298,7 +183,7 @@ def import_quilt_patches(repo, branch, series): % pq_branch) repo.set_branch(pq_branch) - queue = GbpPatchQueue.read_series_file(series) + queue = PatchQueue.read_series_file(series) for patch in queue: gbp.log.debug("Applying %s" % patch.path) apply_and_commit_patch(repo, patch.path, patch.topic) |