aboutsummaryrefslogtreecommitdiffhomepage
path: root/gbp-pq
diff options
context:
space:
mode:
Diffstat (limited to 'gbp-pq')
-rwxr-xr-xgbp-pq119
1 files changed, 2 insertions, 117 deletions
diff --git a/gbp-pq b/gbp-pq
index 138abfc1..5ec73736 100755
--- a/gbp-pq
+++ b/gbp-pq
@@ -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)