[ostree] libostree: set directory mtimes to 0 on checkout



commit 7c267d6089248a0c7976600298b8e0240824ada3
Author: Daniel Drake <drake endlessm com>
Date:   Wed Feb 18 17:18:21 2015 -0600

    libostree: set directory mtimes to 0 on checkout
    
    We already set all file mtimes to 0 so that they are constant
    over all checkouts, and can be made constant with a known value from
    the system where the ostree was created.
    
    However, this was not happening for directories. Zero their mtimes too.
    
    This is important for shipping a fontconfig cache in the ostree;
    the fontconfig cache files embed a directory mtime.

 src/libostree/ostree-repo-checkout.c |   16 ++++++++++++++++
 tests/basic-test.sh                  |    2 ++
 2 files changed, 18 insertions(+), 0 deletions(-)
---
diff --git a/src/libostree/ostree-repo-checkout.c b/src/libostree/ostree-repo-checkout.c
index 1340484..bbb3f11 100644
--- a/src/libostree/ostree-repo-checkout.c
+++ b/src/libostree/ostree-repo-checkout.c
@@ -691,6 +691,22 @@ checkout_tree_at (OstreeRepo                        *self,
         }
     }
 
+  /* Set directory mtime to 0, so that it is constant for all checkouts.
+   * Must be done after setting permissions and creating all children.
+   */
+  if (!did_exist)
+    {
+      const struct timespec times[2] = { { 0, UTIME_OMIT }, { 0, } };
+      do
+        res = futimens (destination_dfd, times);
+      while (G_UNLIKELY (res == -1 && errno == EINTR));
+      if (G_UNLIKELY (res == -1))
+        {
+          gs_set_error_from_errno (error, errno);
+          goto out;
+        }
+    }
+
   /* Finally, fsync to ensure all entries are on disk.  Ultimately
    * this should be configurable for the case where we're constructing
    * buildroots.
diff --git a/tests/basic-test.sh b/tests/basic-test.sh
index 106d9f1..007d7ce 100755
--- a/tests/basic-test.sh
+++ b/tests/basic-test.sh
@@ -347,6 +347,8 @@ else
 fi
 stat '--format=%Y' test2-checkout/baz/cow > cow-mtime
 assert_file_has_content cow-mtime 0
+stat '--format=%Y' test2-checkout/baz/deeper > deeper-mtime
+assert_file_has_content deeper-mtime 0
 echo "ok content mtime"
 
 cd ${test_tmpdir}


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