Openembedded Core Discussions
 help / color / mirror / Atom feed
* [PATCH] utils: Add hardlinkdir shell function
@ 2014-04-24  9:17 Richard Purdie
  0 siblings, 0 replies; only message in thread
From: Richard Purdie @ 2014-04-24  9:17 UTC (permalink / raw)
  To: openembedded-core

In a number of places it would be helpful to be able to copy trees of
files using hardlinks. This turns out to be harder than you'd expect
since there is no good single command that does this well and handles
all file types correctly.

Abstracting this into a function therefore makes sense, cpio seems
as good an option as any other. We do require two passes due to the
way cpio handles symbolic links.

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
---
diff --git a/meta/classes/utils.bbclass b/meta/classes/utils.bbclass
index 0a533af..91895ec 100644
--- a/meta/classes/utils.bbclass
+++ b/meta/classes/utils.bbclass
@@ -292,6 +292,17 @@ END
 	chmod +x $cmd
 }
 
+# Copy files/directories from $1 to $2 but using hardlinks
+# Have to do this in two passes to handle symbolic links correctly due to
+# the way cpio handles this combination of options.
+hardlinkdir () {
+	from=$1
+	to=$2
+	(cd $from; find . -print0 | cpio --null -pdlu $to)
+	(cd $from; find . -type l -print0 | cpio -pd0mLu --no-preserve-owner $to)
+}
+
+
 def check_app_exists(app, d):
     app = d.expand(app)
     path = d.getVar('PATH', d, True)




^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2014-04-24  9:17 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-04-24  9:17 [PATCH] utils: Add hardlinkdir shell function Richard Purdie

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox