[PATCH 18/50] package.bbclass: Use hard link for package split instead of copy


Koen Kooi
 

From: Dongxiao Xu <dongxiao.xu@...>

When doing package split, we use hard link instead of copy, which can
save about 10% disk space when building poky-image-minimal.

If fail, it will fall back to the copyfile function.

[Updated by Richard to use os.link and avoid an exec() call per file]

Signed-off-by: Dongxiao Xu <dongxiao.xu@...>
---
meta/classes/package.bbclass | 15 +++------------
1 files changed, 3 insertions(+), 12 deletions(-)

diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
index dcece40..2f3e9bf 100644
--- a/meta/classes/package.bbclass
+++ b/meta/classes/package.bbclass
@@ -427,22 +427,13 @@ python populate_packages () {
fpath = os.path.join(root,file)
dpath = os.path.dirname(fpath)
bb.mkdirhier(dpath)
-
- # Check if this is a hardlink to something... if it is
- # attempt to preserve the link information, instead of copy.
if not os.path.islink(file):
- s = os.stat(file)
- if s.st_nlink > 1:
- file_reference = "%d_%d" % (s.st_dev, s.st_ino)
- if file_reference not in file_links:
- # Save the reference for next time...
- file_links[file_reference] = fpath
- else:
- os.link(file_links[file_reference], fpath)
- continue
+ os.link(file, fpath)
+ continue
ret = bb.copyfile(file, fpath)
if ret is False or ret == 0:
raise bb.build.FuncFailed("File population failed")
+
del localdata
os.chdir(workdir)

--
1.6.6.1