[ostree] repo: Bump mtime any time we write a ref
- From: Colin Walters <walters src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [ostree] repo: Bump mtime any time we write a ref
- Date: Thu, 14 May 2015 10:33:54 +0000 (UTC)
commit efcdf4c3f86709172cb5e7f1d64ab7f9236bf2e5
Author: Colin Walters <walters verbum org>
Date: Wed May 13 21:59:17 2015 -0400
repo: Bump mtime any time we write a ref
External daemons like rpm-ostree want push notification any time a
change is made by an external entity. inotify provides notification,
but a problem is there's no easy way to monitor all of the refs.
In the past, there has been discussion of opt-in recursive timestamps:
https://lkml.org/lkml/2013/4/5/307
But in today's world, let's just bump the mtime on the repo itself, as
a central inotify point.
Closes: https://github.com/GNOME/ostree/pull/111
src/libostree/ostree-repo-private.h | 4 ++++
src/libostree/ostree-repo-refs.c | 3 +++
src/libostree/ostree-repo.c | 12 ++++++++++++
tests/basic-test.sh | 13 +++++++++++++
4 files changed, 32 insertions(+), 0 deletions(-)
---
diff --git a/src/libostree/ostree-repo-private.h b/src/libostree/ostree-repo-private.h
index 7b02b12..5214bca 100644
--- a/src/libostree/ostree-repo-private.h
+++ b/src/libostree/ostree-repo-private.h
@@ -255,5 +255,9 @@ _ostree_repo_read_bare_fd (OstreeRepo *self,
int *out_fd,
GCancellable *cancellable,
GError **error);
+
+gboolean
+_ostree_repo_update_mtime (OstreeRepo *self,
+ GError **error);
G_END_DECLS
diff --git a/src/libostree/ostree-repo-refs.c b/src/libostree/ostree-repo-refs.c
index bd0b760..970f519 100644
--- a/src/libostree/ostree-repo-refs.c
+++ b/src/libostree/ostree-repo-refs.c
@@ -631,6 +631,9 @@ _ostree_repo_write_ref (OstreeRepo *self,
goto out;
}
+ if (!_ostree_repo_update_mtime (self, error))
+ goto out;
+
ret = TRUE;
out:
return ret;
diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c
index 2f21149..baeb60b 100644
--- a/src/libostree/ostree-repo.c
+++ b/src/libostree/ostree-repo.c
@@ -620,6 +620,18 @@ ostree_repo_is_writable (OstreeRepo *self,
return self->writable;
}
+gboolean
+_ostree_repo_update_mtime (OstreeRepo *self,
+ GError **error)
+{
+ if (futimens (self->repo_dir_fd, NULL) != 0)
+ {
+ glnx_set_prefix_error_from_errno (error, "%s", "futimens");
+ return FALSE;
+ }
+ return TRUE;
+}
+
/**
* ostree_repo_get_config:
* @self:
diff --git a/tests/basic-test.sh b/tests/basic-test.sh
index 3b57f66..2fea4e0 100755
--- a/tests/basic-test.sh
+++ b/tests/basic-test.sh
@@ -401,3 +401,16 @@ if test "$(id -u)" != "0"; then
assert_file_has_content error-message "Permission denied"
echo "ok unwritable repo was caught"
fi
+
+cd ${test_tmpdir}
+rm -rf test2-checkout
+mkdir -p test2-checkout
+cd test2-checkout
+touch blah
+stat --printf="%Z\n" ${test_tmpdir}/repo > ${test_tmpdir}/timestamp-orig.txt
+$OSTREE commit -b test2 -s "Should bump the mtime"
+stat --printf="%Z\n" ${test_tmpdir}/repo > ${test_tmpdir}/timestamp-new.txt
+cd ..
+if ! cmp timestamp-{orig,new}.txt; then
+ assert_not_reached "failed to update mtime on repo"
+fi
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]