]> code.ossystems Code Review - openembedded-core.git/commitdiff
package.bbclass: Use hard link for package split instead of copy
authorDongxiao Xu <dongxiao.xu@intel.com>
Mon, 6 Dec 2010 12:26:08 +0000 (20:26 +0800)
committerRichard Purdie <rpurdie@linux.intel.com>
Tue, 1 Mar 2011 11:46:39 +0000 (11:46 +0000)
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@intel.com>
meta/classes/package.bbclass

index dcece40acd376e6f8380a9a8fdd4ed07f8fa97f9..2f3e9bfd144af3ddd115f1c3c6e6501e95ba2db8 100644 (file)
@@ -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)