summaryrefslogtreecommitdiffstats
path: root/meta
diff options
context:
space:
mode:
Diffstat (limited to 'meta')
-rw-r--r--meta/lib/oe/utils.py31
1 files changed, 31 insertions, 0 deletions
diff --git a/meta/lib/oe/utils.py b/meta/lib/oe/utils.py
index 9a2187e36f..a84039f585 100644
--- a/meta/lib/oe/utils.py
+++ b/meta/lib/oe/utils.py
@@ -536,3 +536,34 @@ class ImageQAFailed(Exception):
536def sh_quote(string): 536def sh_quote(string):
537 import shlex 537 import shlex
538 return shlex.quote(string) 538 return shlex.quote(string)
539
540def directory_size(root, blocksize=4096):
541 """
542 Calculate the size of the directory, taking into account hard links,
543 rounding up every size to multiples of the blocksize.
544 """
545 def roundup(size):
546 """
547 Round the size up to the nearest multiple of the block size.
548 """
549 import math
550 return math.ceil(size / blocksize) * blocksize
551
552 def getsize(filename):
553 """
554 Get the size of the filename, not following symlinks, taking into
555 account hard links.
556 """
557 stat = os.lstat(filename)
558 if stat.st_ino not in inodes:
559 inodes.add(stat.st_ino)
560 return stat.st_size
561 else:
562 return 0
563
564 inodes = set()
565 total = 0
566 for root, dirs, files in os.walk(root):
567 total += sum(roundup(getsize(os.path.join(root, name))) for name in files)
568 total += roundup(getsize(root))
569 return total