From fe5ed36461a52b38cb366162bfd222ad3b326bf2 Mon Sep 17 00:00:00 2001 From: Roddy Shuler Date: Thu, 12 Dec 2013 14:56:19 -0800 Subject: [PATCH] core: Set mtime of content objects to 0 This is necessary to satisfy tools such as guile and python, which compare mtimes to determine whether or not source files need to be compiled. https://bugzilla.gnome.org/show_bug.cgi?id=720363 --- src/libostree/ostree-repo-commit.c | 18 ++++++++++++++++++ tests/test-basic.sh | 7 +++++++ 2 files changed, 25 insertions(+) diff --git a/src/libostree/ostree-repo-commit.c b/src/libostree/ostree-repo-commit.c index 4fc46c3e8e..caa5103f32 100644 --- a/src/libostree/ostree-repo-commit.c +++ b/src/libostree/ostree-repo-commit.c @@ -100,6 +100,7 @@ commit_loose_object_trusted (OstreeRepo *self, { int fd; int res; + struct timespec times[2]; g_assert (temp_out != NULL); @@ -134,6 +135,23 @@ commit_loose_object_trusted (OstreeRepo *self, if (!gs_fd_set_all_xattrs (fd, xattrs, cancellable, error)) goto out; } + + /* To satisfy tools such as guile which compare mtimes + * to determine whether or not source files need to be compiled, + * set the modification time to 0. + */ + times[0].tv_sec = 0; /* atime */ + times[0].tv_nsec = UTIME_OMIT; + times[1].tv_sec = 0; /* mtime */ + times[1].tv_nsec = 0; + do + res = futimens (fd, times); + while (G_UNLIKELY (res == -1 && errno == EINTR)); + if (G_UNLIKELY (res == -1)) + { + ot_util_set_error_from_errno (error, errno); + goto out; + } } /* Ensure that in case of a power cut, these files have the data we diff --git a/tests/test-basic.sh b/tests/test-basic.sh index dd6103bd71..2ac197f35f 100755 --- a/tests/test-basic.sh +++ b/tests/test-basic.sh @@ -310,3 +310,10 @@ ${CMD_PREFIX} ostree --repo=repo remote show-url aremote > aremote-url.txt assert_file_has_content aremote-url.txt 'http.*remote\.example\.com/repo' echo "ok remote show-url" +cd ${test_tmpdir} +rm -rf test2-checkout +$OSTREE checkout test2 test2-checkout +stat '--format=%Y' test2-checkout/baz/cow > cow-mtime +assert_file_has_content cow-mtime 0 +echo "ok content mtime" +