diff options
Diffstat (limited to 'meta/lib/oe')
-rw-r--r-- | meta/lib/oe/package_manager/__init__.py | 76 | ||||
-rw-r--r-- | meta/lib/oe/patch.py | 14 | ||||
-rw-r--r-- | meta/lib/oe/rootfs.py | 4 | ||||
-rw-r--r-- | meta/lib/oe/sstatesig.py | 7 | ||||
-rw-r--r-- | meta/lib/oe/utils.py | 13 |
5 files changed, 55 insertions, 59 deletions
diff --git a/meta/lib/oe/package_manager/__init__.py b/meta/lib/oe/package_manager/__init__.py index d3b2317894..2100a97c12 100644 --- a/meta/lib/oe/package_manager/__init__.py +++ b/meta/lib/oe/package_manager/__init__.py | |||
@@ -365,45 +365,43 @@ class PackageManager(object, metaclass=ABCMeta): | |||
365 | for complementary_linguas in (self.d.getVar('IMAGE_LINGUAS_COMPLEMENTARY') or "").split(): | 365 | for complementary_linguas in (self.d.getVar('IMAGE_LINGUAS_COMPLEMENTARY') or "").split(): |
366 | globs += (" " + complementary_linguas) % lang | 366 | globs += (" " + complementary_linguas) % lang |
367 | 367 | ||
368 | if globs is None: | 368 | if globs: |
369 | return | 369 | # we need to write the list of installed packages to a file because the |
370 | 370 | # oe-pkgdata-util reads it from a file | |
371 | # we need to write the list of installed packages to a file because the | 371 | with tempfile.NamedTemporaryFile(mode="w+", prefix="installed-pkgs") as installed_pkgs: |
372 | # oe-pkgdata-util reads it from a file | 372 | pkgs = self.list_installed() |
373 | with tempfile.NamedTemporaryFile(mode="w+", prefix="installed-pkgs") as installed_pkgs: | 373 | |
374 | pkgs = self.list_installed() | 374 | provided_pkgs = set() |
375 | 375 | for pkg in pkgs.values(): | |
376 | provided_pkgs = set() | 376 | provided_pkgs |= set(pkg.get('provs', [])) |
377 | for pkg in pkgs.values(): | 377 | |
378 | provided_pkgs |= set(pkg.get('provs', [])) | 378 | output = oe.utils.format_pkg_list(pkgs, "arch") |
379 | 379 | installed_pkgs.write(output) | |
380 | output = oe.utils.format_pkg_list(pkgs, "arch") | 380 | installed_pkgs.flush() |
381 | installed_pkgs.write(output) | 381 | |
382 | installed_pkgs.flush() | 382 | cmd = ["oe-pkgdata-util", |
383 | 383 | "-p", self.d.getVar('PKGDATA_DIR'), "glob", installed_pkgs.name, | |
384 | cmd = ["oe-pkgdata-util", | 384 | globs] |
385 | "-p", self.d.getVar('PKGDATA_DIR'), "glob", installed_pkgs.name, | 385 | exclude = self.d.getVar('PACKAGE_EXCLUDE_COMPLEMENTARY') |
386 | globs] | 386 | if exclude: |
387 | exclude = self.d.getVar('PACKAGE_EXCLUDE_COMPLEMENTARY') | 387 | cmd.extend(['--exclude=' + '|'.join(exclude.split())]) |
388 | if exclude: | 388 | try: |
389 | cmd.extend(['--exclude=' + '|'.join(exclude.split())]) | 389 | bb.note('Running %s' % cmd) |
390 | try: | 390 | proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) |
391 | bb.note('Running %s' % cmd) | 391 | stdout, stderr = proc.communicate() |
392 | proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) | 392 | if stderr: bb.note(stderr.decode("utf-8")) |
393 | stdout, stderr = proc.communicate() | 393 | complementary_pkgs = stdout.decode("utf-8") |
394 | if stderr: bb.note(stderr.decode("utf-8")) | 394 | complementary_pkgs = set(complementary_pkgs.split()) |
395 | complementary_pkgs = stdout.decode("utf-8") | 395 | skip_pkgs = sorted(complementary_pkgs & provided_pkgs) |
396 | complementary_pkgs = set(complementary_pkgs.split()) | 396 | install_pkgs = sorted(complementary_pkgs - provided_pkgs) |
397 | skip_pkgs = sorted(complementary_pkgs & provided_pkgs) | 397 | bb.note("Installing complementary packages ... %s (skipped already provided packages %s)" % ( |
398 | install_pkgs = sorted(complementary_pkgs - provided_pkgs) | 398 | ' '.join(install_pkgs), |
399 | bb.note("Installing complementary packages ... %s (skipped already provided packages %s)" % ( | 399 | ' '.join(skip_pkgs))) |
400 | ' '.join(install_pkgs), | 400 | self.install(install_pkgs, hard_depends_only=True) |
401 | ' '.join(skip_pkgs))) | 401 | except subprocess.CalledProcessError as e: |
402 | self.install(install_pkgs, hard_depends_only=True) | 402 | bb.fatal("Could not compute complementary packages list. Command " |
403 | except subprocess.CalledProcessError as e: | 403 | "'%s' returned %d:\n%s" % |
404 | bb.fatal("Could not compute complementary packages list. Command " | 404 | (' '.join(cmd), e.returncode, e.output.decode("utf-8"))) |
405 | "'%s' returned %d:\n%s" % | ||
406 | (' '.join(cmd), e.returncode, e.output.decode("utf-8"))) | ||
407 | 405 | ||
408 | if self.d.getVar('IMAGE_LOCALES_ARCHIVE') == '1': | 406 | if self.d.getVar('IMAGE_LOCALES_ARCHIVE') == '1': |
409 | target_arch = self.d.getVar('TARGET_ARCH') | 407 | target_arch = self.d.getVar('TARGET_ARCH') |
diff --git a/meta/lib/oe/patch.py b/meta/lib/oe/patch.py index 60a0cc8291..417333e431 100644 --- a/meta/lib/oe/patch.py +++ b/meta/lib/oe/patch.py | |||
@@ -462,21 +462,23 @@ class GitApplyTree(PatchTree): | |||
462 | return (tmpfile, cmd) | 462 | return (tmpfile, cmd) |
463 | 463 | ||
464 | @staticmethod | 464 | @staticmethod |
465 | def addNote(repo, ref, key, value=None): | 465 | def addNote(repo, ref, key, value=None, commituser=None, commitemail=None): |
466 | note = key + (": %s" % value if value else "") | 466 | note = key + (": %s" % value if value else "") |
467 | notes_ref = GitApplyTree.notes_ref | 467 | notes_ref = GitApplyTree.notes_ref |
468 | runcmd(["git", "config", "notes.rewriteMode", "ignore"], repo) | 468 | runcmd(["git", "config", "notes.rewriteMode", "ignore"], repo) |
469 | runcmd(["git", "config", "notes.displayRef", notes_ref, notes_ref], repo) | 469 | runcmd(["git", "config", "notes.displayRef", notes_ref, notes_ref], repo) |
470 | runcmd(["git", "config", "notes.rewriteRef", notes_ref, notes_ref], repo) | 470 | runcmd(["git", "config", "notes.rewriteRef", notes_ref, notes_ref], repo) |
471 | runcmd(["git", "notes", "--ref", notes_ref, "append", "-m", note, ref], repo) | 471 | cmd = ["git"] |
472 | GitApplyTree.gitCommandUserOptions(cmd, commituser, commitemail) | ||
473 | runcmd(cmd + ["notes", "--ref", notes_ref, "append", "-m", note, ref], repo) | ||
472 | 474 | ||
473 | @staticmethod | 475 | @staticmethod |
474 | def removeNote(repo, ref, key): | 476 | def removeNote(repo, ref, key, commituser=None, commitemail=None): |
475 | notes = GitApplyTree.getNotes(repo, ref) | 477 | notes = GitApplyTree.getNotes(repo, ref) |
476 | notes = {k: v for k, v in notes.items() if k != key and not k.startswith(key + ":")} | 478 | notes = {k: v for k, v in notes.items() if k != key and not k.startswith(key + ":")} |
477 | runcmd(["git", "notes", "--ref", GitApplyTree.notes_ref, "remove", "--ignore-missing", ref], repo) | 479 | runcmd(["git", "notes", "--ref", GitApplyTree.notes_ref, "remove", "--ignore-missing", ref], repo) |
478 | for note, value in notes.items(): | 480 | for note, value in notes.items(): |
479 | GitApplyTree.addNote(repo, ref, note, value) | 481 | GitApplyTree.addNote(repo, ref, note, value, commituser, commitemail) |
480 | 482 | ||
481 | @staticmethod | 483 | @staticmethod |
482 | def getNotes(repo, ref): | 484 | def getNotes(repo, ref): |
@@ -507,7 +509,7 @@ class GitApplyTree(PatchTree): | |||
507 | GitApplyTree.gitCommandUserOptions(cmd, d=d) | 509 | GitApplyTree.gitCommandUserOptions(cmd, d=d) |
508 | cmd += ["commit", "-m", subject, "--no-verify"] | 510 | cmd += ["commit", "-m", subject, "--no-verify"] |
509 | runcmd(cmd, dir) | 511 | runcmd(cmd, dir) |
510 | GitApplyTree.addNote(dir, "HEAD", GitApplyTree.ignore_commit) | 512 | GitApplyTree.addNote(dir, "HEAD", GitApplyTree.ignore_commit, d.getVar('PATCH_GIT_USER_NAME'), d.getVar('PATCH_GIT_USER_EMAIL')) |
511 | 513 | ||
512 | @staticmethod | 514 | @staticmethod |
513 | def extractPatches(tree, startcommits, outdir, paths=None): | 515 | def extractPatches(tree, startcommits, outdir, paths=None): |
@@ -654,7 +656,7 @@ class GitApplyTree(PatchTree): | |||
654 | raise | 656 | raise |
655 | finally: | 657 | finally: |
656 | if patch_applied: | 658 | if patch_applied: |
657 | GitApplyTree.addNote(self.dir, "HEAD", GitApplyTree.original_patch, os.path.basename(patch['file'])) | 659 | GitApplyTree.addNote(self.dir, "HEAD", GitApplyTree.original_patch, os.path.basename(patch['file']), self.commituser, self.commitemail) |
658 | 660 | ||
659 | 661 | ||
660 | class QuiltTree(PatchSet): | 662 | class QuiltTree(PatchSet): |
diff --git a/meta/lib/oe/rootfs.py b/meta/lib/oe/rootfs.py index 8cd48f9450..5abce4ad7d 100644 --- a/meta/lib/oe/rootfs.py +++ b/meta/lib/oe/rootfs.py | |||
@@ -269,7 +269,11 @@ class Rootfs(object, metaclass=ABCMeta): | |||
269 | self.pm.remove(["run-postinsts"]) | 269 | self.pm.remove(["run-postinsts"]) |
270 | 270 | ||
271 | image_rorfs = bb.utils.contains("IMAGE_FEATURES", "read-only-rootfs", | 271 | image_rorfs = bb.utils.contains("IMAGE_FEATURES", "read-only-rootfs", |
272 | True, False, self.d) and \ | ||
273 | not bb.utils.contains("IMAGE_FEATURES", | ||
274 | "read-only-rootfs-delayed-postinsts", | ||
272 | True, False, self.d) | 275 | True, False, self.d) |
276 | |||
273 | image_rorfs_force = self.d.getVar('FORCE_RO_REMOVE') | 277 | image_rorfs_force = self.d.getVar('FORCE_RO_REMOVE') |
274 | 278 | ||
275 | if image_rorfs or image_rorfs_force == "1": | 279 | if image_rorfs or image_rorfs_force == "1": |
diff --git a/meta/lib/oe/sstatesig.py b/meta/lib/oe/sstatesig.py index a46e5502ab..d818fce8f1 100644 --- a/meta/lib/oe/sstatesig.py +++ b/meta/lib/oe/sstatesig.py | |||
@@ -524,6 +524,7 @@ def OEOuthashBasic(path, sigfile, task, d): | |||
524 | if task == "package": | 524 | if task == "package": |
525 | include_timestamps = True | 525 | include_timestamps = True |
526 | include_root = False | 526 | include_root = False |
527 | source_date_epoch = float(d.getVar("SOURCE_DATE_EPOCH")) | ||
527 | hash_version = d.getVar('HASHEQUIV_HASH_VERSION') | 528 | hash_version = d.getVar('HASHEQUIV_HASH_VERSION') |
528 | extra_sigdata = d.getVar("HASHEQUIV_EXTRA_SIGDATA") | 529 | extra_sigdata = d.getVar("HASHEQUIV_EXTRA_SIGDATA") |
529 | 530 | ||
@@ -615,7 +616,11 @@ def OEOuthashBasic(path, sigfile, task, d): | |||
615 | raise Exception(msg).with_traceback(e.__traceback__) | 616 | raise Exception(msg).with_traceback(e.__traceback__) |
616 | 617 | ||
617 | if include_timestamps: | 618 | if include_timestamps: |
618 | update_hash(" %10d" % s.st_mtime) | 619 | # Need to clamp to SOURCE_DATE_EPOCH |
620 | if s.st_mtime > source_date_epoch: | ||
621 | update_hash(" %10d" % source_date_epoch) | ||
622 | else: | ||
623 | update_hash(" %10d" % s.st_mtime) | ||
619 | 624 | ||
620 | update_hash(" ") | 625 | update_hash(" ") |
621 | if stat.S_ISBLK(s.st_mode) or stat.S_ISCHR(s.st_mode): | 626 | if stat.S_ISBLK(s.st_mode) or stat.S_ISCHR(s.st_mode): |
diff --git a/meta/lib/oe/utils.py b/meta/lib/oe/utils.py index 14a7d07ef0..c9c7a47041 100644 --- a/meta/lib/oe/utils.py +++ b/meta/lib/oe/utils.py | |||
@@ -482,19 +482,6 @@ def get_multilib_datastore(variant, d): | |||
482 | localdata.setVar("MLPREFIX", "") | 482 | localdata.setVar("MLPREFIX", "") |
483 | return localdata | 483 | return localdata |
484 | 484 | ||
485 | class ImageQAFailed(Exception): | ||
486 | def __init__(self, description, name=None, logfile=None): | ||
487 | self.description = description | ||
488 | self.name = name | ||
489 | self.logfile=logfile | ||
490 | |||
491 | def __str__(self): | ||
492 | msg = 'Function failed: %s' % self.name | ||
493 | if self.description: | ||
494 | msg = msg + ' (%s)' % self.description | ||
495 | |||
496 | return msg | ||
497 | |||
498 | def sh_quote(string): | 485 | def sh_quote(string): |
499 | import shlex | 486 | import shlex |
500 | return shlex.quote(string) | 487 | return shlex.quote(string) |