diff options
Diffstat (limited to 'meta/lib')
| -rw-r--r-- | meta/lib/oe/sstatesig.py | 39 |
1 files changed, 36 insertions, 3 deletions
diff --git a/meta/lib/oe/sstatesig.py b/meta/lib/oe/sstatesig.py index 24577249ff..0c3b4589c5 100644 --- a/meta/lib/oe/sstatesig.py +++ b/meta/lib/oe/sstatesig.py | |||
| @@ -470,6 +470,8 @@ def OEOuthashBasic(path, sigfile, task, d): | |||
| 470 | import stat | 470 | import stat |
| 471 | import pwd | 471 | import pwd |
| 472 | import grp | 472 | import grp |
| 473 | import re | ||
| 474 | import fnmatch | ||
| 473 | 475 | ||
| 474 | def update_hash(s): | 476 | def update_hash(s): |
| 475 | s = s.encode('utf-8') | 477 | s = s.encode('utf-8') |
| @@ -479,6 +481,8 @@ def OEOuthashBasic(path, sigfile, task, d): | |||
| 479 | 481 | ||
| 480 | h = hashlib.sha256() | 482 | h = hashlib.sha256() |
| 481 | prev_dir = os.getcwd() | 483 | prev_dir = os.getcwd() |
| 484 | corebase = d.getVar("COREBASE") | ||
| 485 | tmpdir = d.getVar("TMPDIR") | ||
| 482 | include_owners = os.environ.get('PSEUDO_DISABLED') == '0' | 486 | include_owners = os.environ.get('PSEUDO_DISABLED') == '0' |
| 483 | if "package_write_" in task or task == "package_qa": | 487 | if "package_write_" in task or task == "package_qa": |
| 484 | include_owners = False | 488 | include_owners = False |
| @@ -489,8 +493,17 @@ def OEOuthashBasic(path, sigfile, task, d): | |||
| 489 | include_root = False | 493 | include_root = False |
| 490 | extra_content = d.getVar('HASHEQUIV_HASH_VERSION') | 494 | extra_content = d.getVar('HASHEQUIV_HASH_VERSION') |
| 491 | 495 | ||
| 496 | filemaps = {} | ||
| 497 | for m in (d.getVar('SSTATE_HASHEQUIV_FILEMAP') or '').split(): | ||
| 498 | entry = m.split(":") | ||
| 499 | if len(entry) != 3 or entry[0] != task: | ||
| 500 | continue | ||
| 501 | filemaps.setdefault(entry[1], []) | ||
| 502 | filemaps[entry[1]].append(entry[2]) | ||
| 503 | |||
| 492 | try: | 504 | try: |
| 493 | os.chdir(path) | 505 | os.chdir(path) |
| 506 | basepath = os.path.normpath(path) | ||
| 494 | 507 | ||
| 495 | update_hash("OEOuthashBasic\n") | 508 | update_hash("OEOuthashBasic\n") |
| 496 | if extra_content: | 509 | if extra_content: |
| @@ -572,8 +585,13 @@ def OEOuthashBasic(path, sigfile, task, d): | |||
| 572 | else: | 585 | else: |
| 573 | update_hash(" " * 9) | 586 | update_hash(" " * 9) |
| 574 | 587 | ||
| 588 | filterfile = False | ||
| 589 | for entry in filemaps: | ||
| 590 | if fnmatch.fnmatch(path, entry): | ||
| 591 | filterfile = True | ||
| 592 | |||
| 575 | update_hash(" ") | 593 | update_hash(" ") |
| 576 | if stat.S_ISREG(s.st_mode): | 594 | if stat.S_ISREG(s.st_mode) and not filterfile: |
| 577 | update_hash("%10d" % s.st_size) | 595 | update_hash("%10d" % s.st_size) |
| 578 | else: | 596 | else: |
| 579 | update_hash(" " * 10) | 597 | update_hash(" " * 10) |
| @@ -582,9 +600,24 @@ def OEOuthashBasic(path, sigfile, task, d): | |||
| 582 | fh = hashlib.sha256() | 600 | fh = hashlib.sha256() |
| 583 | if stat.S_ISREG(s.st_mode): | 601 | if stat.S_ISREG(s.st_mode): |
| 584 | # Hash file contents | 602 | # Hash file contents |
| 585 | with open(path, 'rb') as d: | 603 | if filterfile: |
| 586 | for chunk in iter(lambda: d.read(4096), b""): | 604 | # Need to ignore paths in crossscripts and postinst-useradd files. |
| 605 | with open(path, 'rb') as d: | ||
| 606 | chunk = d.read() | ||
| 607 | chunk = chunk.replace(bytes(basepath, encoding='utf8'), b'') | ||
| 608 | for entry in filemaps: | ||
| 609 | if not fnmatch.fnmatch(path, entry): | ||
| 610 | continue | ||
| 611 | for r in filemaps[entry]: | ||
| 612 | if r.startswith("regex-"): | ||
| 613 | chunk = re.sub(bytes(r[6:], encoding='utf8'), b'', chunk) | ||
| 614 | else: | ||
| 615 | chunk = chunk.replace(bytes(r, encoding='utf8'), b'') | ||
| 587 | fh.update(chunk) | 616 | fh.update(chunk) |
| 617 | else: | ||
| 618 | with open(path, 'rb') as d: | ||
| 619 | for chunk in iter(lambda: d.read(4096), b""): | ||
| 620 | fh.update(chunk) | ||
| 588 | update_hash(fh.hexdigest()) | 621 | update_hash(fh.hexdigest()) |
| 589 | else: | 622 | else: |
| 590 | update_hash(" " * len(fh.hexdigest())) | 623 | update_hash(" " * len(fh.hexdigest())) |
