[ostree] core: In user mode checkouts of archives, use hard links



commit 134283afbf27d00c51032e1856de8214532ed20c
Author: Colin Walters <walters verbum org>
Date:   Thu Dec 15 16:12:31 2011 -0500

    core: In user mode checkouts of archives, use hard links
    
    Now that we've done all the gyrations to separate content from
    metadata in archives, we can just hard link when doing user checkouts.

 src/libostree/ostree-repo.c |   13 ++++++++++++-
 tests/t0000-basic.sh        |    5 ++++-
 tests/t0001-archive.sh      |    5 ++++-
 3 files changed, 20 insertions(+), 3 deletions(-)
---
diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c
index b7f123e..e6ca389 100644
--- a/src/libostree/ostree-repo.c
+++ b/src/libostree/ostree-repo.c
@@ -2262,7 +2262,18 @@ checkout_tree (OstreeRepo               *self,
         {
           const char *checksum = _ostree_repo_file_get_checksum ((OstreeRepoFile*)src_child);
 
-          if (priv->mode == OSTREE_REPO_MODE_ARCHIVE)
+          if (priv->mode == OSTREE_REPO_MODE_ARCHIVE && mode == OSTREE_REPO_CHECKOUT_MODE_USER)
+            {
+              g_clear_object (&object_path);
+              object_path = ostree_repo_get_object_path (self, checksum, OSTREE_OBJECT_TYPE_ARCHIVED_FILE_CONTENT);
+
+              if (link (ot_gfile_get_path_cached (object_path), ot_gfile_get_path_cached (dest_path)) < 0)
+                {
+                  ot_util_set_error_from_errno (error, errno);
+                  goto out;
+                }
+            }
+          else if (priv->mode == OSTREE_REPO_MODE_ARCHIVE)
             {
               ot_clear_gvariant (&archive_metadata);
               if (!ostree_repo_load_variant (self, OSTREE_OBJECT_TYPE_ARCHIVED_FILE_META, checksum, &archive_metadata, error))
diff --git a/tests/t0000-basic.sh b/tests/t0000-basic.sh
index 02a060a..e73631b 100755
--- a/tests/t0000-basic.sh
+++ b/tests/t0000-basic.sh
@@ -19,7 +19,7 @@
 
 set -e
 
-echo "1..17"
+echo "1..18"
 
 . libtest.sh
 
@@ -148,3 +148,6 @@ ostree --repo=repo2 checkout test2 test2-checkout-from-local-clone
 cd test2-checkout-from-local-clone
 assert_file_has_content yet/another/tree/green 'leaf'
 echo "ok local clone checkout"
+
+$OSTREE checkout -U test2 checkout-user-test2
+echo "ok user checkout"
diff --git a/tests/t0001-archive.sh b/tests/t0001-archive.sh
index dc7bfa1..30fbe80 100755
--- a/tests/t0001-archive.sh
+++ b/tests/t0001-archive.sh
@@ -21,7 +21,7 @@ set -e
 
 . libtest.sh
 
-echo '1..5'
+echo '1..6'
 
 setup_test_repository "archive"
 echo "ok setup"
@@ -47,3 +47,6 @@ ostree --repo=repo2 checkout test2 test2-checkout-from-local-clone
 cd test2-checkout-from-local-clone
 assert_file_has_content baz/cow moo
 echo "ok local clone checkout"
+
+$OSTREE checkout -U test2 checkout-user-test2
+echo "ok user checkout"



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]