public inbox for openembedded-core@lists.openembedded.org
 help / color / mirror / Atom feed
* [PATCH] sstate: Add fallback when hardlink fails
@ 2026-04-15  8:58 Michael Arndt
  2026-04-15  9:29 ` [OE-core] " Richard Purdie
  0 siblings, 1 reply; 5+ messages in thread
From: Michael Arndt @ 2026-04-15  8:58 UTC (permalink / raw)
  To: openembedded-core; +Cc: Michael Arndt

Previously the sstate didn't work on file systems that don't support hardlinks.
For example when using WebDAV to share the sstate. This change avoids the
problem by adding a fallback in case the hardlink fails.

Signed-off-by: Michael Arndt <michael@rndt.dev>
---
 meta/classes-global/sstate.bbclass | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/meta/classes-global/sstate.bbclass b/meta/classes-global/sstate.bbclass
index 88449d19c7..2b18cafb60 100644
--- a/meta/classes-global/sstate.bbclass
+++ b/meta/classes-global/sstate.bbclass
@@ -795,6 +795,14 @@ python sstate_create_and_sign_package () {
         except:
             pass
 
+    # Create hardlink with fallback to rename. Useful for file systems that
+    # don't support hardlinks.
+    def hardlink(src, dst):
+        try:
+            os.link(src, dst)
+        except:
+            src.rename(dst)
+
     def update_file(src, dst, force=False):
         if dst.is_symlink() and not dst.exists():
             force=True
@@ -804,7 +812,7 @@ python sstate_create_and_sign_package () {
             if force:
                 src.rename(dst)
             else:
-                os.link(src, dst)
+                hardlink(src, dst)
             return True
         except:
             pass
@@ -862,7 +870,7 @@ python sstate_create_and_sign_package () {
         with NamedTemporaryFile(prefix=sstate_pkg.name, dir=sstate_pkg.parent) as tmp_pkg_fd:
             tmp_pkg = tmp_pkg_fd.name
             sstate_archive_package(tmp_pkg, d)
-            update_file(tmp_pkg, sstate_pkg)
+            update_file(Path(tmp_pkg), sstate_pkg)
             # update_file() may have renamed tmp_pkg, which must exist when the
             # NamedTemporaryFile() context handler ends.
             touch(Path(tmp_pkg))


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2026-04-15 14:43 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-15  8:58 [PATCH] sstate: Add fallback when hardlink fails Michael Arndt
2026-04-15  9:29 ` [OE-core] " Richard Purdie
2026-04-15 11:52   ` Michael Arndt
2026-04-15 13:07     ` Richard Purdie
2026-04-15 14:43       ` Michael Arndt

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