From 1fbcd2ca178db28747046b5bd943c81176db9f65 Mon Sep 17 00:00:00 2001 From: Joshua Lock Date: Tue, 3 Aug 2010 18:18:03 +0100 Subject: [PATCH] lib/oe: sync with OE.dev Most notable change is the move to creating symlinks to patches in the metadata tree rather than copying them. Signed-off-by: Joshua Lock --- meta/lib/oe/patch.py | 15 ++++++--------- meta/lib/oe/path.py | 22 ++++++++++++++++++++++ meta/lib/oe/utils.py | 11 +++++++++++ 3 files changed, 39 insertions(+), 9 deletions(-) diff --git a/meta/lib/oe/patch.py b/meta/lib/oe/patch.py index 94c56bc101..f203d683da 100644 --- a/meta/lib/oe/patch.py +++ b/meta/lib/oe/patch.py @@ -1,3 +1,5 @@ +import oe.path + class NotFoundError(Exception): def __init__(self, path): self.path = path @@ -234,15 +236,10 @@ class QuiltTree(PatchSet): if not self.initialized: self.InitFromDir() PatchSet.Import(self, patch, force) - - args = ["import", "-p", patch["strippath"]] - if force: - args.append("-f") - args.append("-dn") - args.append(patch["file"]) - - self._runcmd(args) - + oe.path.symlink(patch["file"], self._quiltpatchpath(patch["file"])) + f = open(os.path.join(self.dir, "patches","series"), "a"); + f.write(os.path.basename(patch["file"]) + " -p" + patch["strippath"]+"\n") + f.close() patch["quiltfile"] = self._quiltpatchpath(patch["file"]) patch["quiltfilemd5"] = bb.utils.md5_file(patch["quiltfile"]) diff --git a/meta/lib/oe/path.py b/meta/lib/oe/path.py index 8902951581..f58c0138bb 100644 --- a/meta/lib/oe/path.py +++ b/meta/lib/oe/path.py @@ -42,3 +42,25 @@ def format_display(path, metadata): return path else: return rel + +def remove(path): + """Equivalent to rm -f or rm -rf""" + import os, errno, shutil + try: + os.unlink(path) + except OSError, exc: + if exc.errno == errno.EISDIR: + shutil.rmtree(path) + elif exc.errno != errno.ENOENT: + raise + +def symlink(source, destination, force=False): + """Create a symbolic link""" + import os, errno + try: + if force: + remove(destination) + os.symlink(source, destination) + except OSError, e: + if e.errno != errno.EEXIST or os.readlink(destination) != source: + raise diff --git a/meta/lib/oe/utils.py b/meta/lib/oe/utils.py index e61d663a50..3469700726 100644 --- a/meta/lib/oe/utils.py +++ b/meta/lib/oe/utils.py @@ -67,3 +67,14 @@ def str_filter(f, str, d): def str_filter_out(f, str, d): from re import match return " ".join(filter(lambda x: not match(f, x, 0), str.split())) + +def param_bool(cfg, field, dflt = None): + """Lookup in map and convert it to a boolean; take + when this does not exist""" + value = cfg.get(field, dflt) + strvalue = str(value).lower() + if strvalue in ('yes', 'y', 'true', 't', '1'): + return True + elif strvalue in ('no', 'n', 'false', 'f', '0'): + return False + raise ValueError("invalid value for boolean parameter '%s': '%s'" % (field, value))