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
This commit is contained in:
parent
7224450591
commit
efcdf4c3f8
|
|
@ -255,5 +255,9 @@ _ostree_repo_read_bare_fd (OstreeRepo *self,
|
||||||
int *out_fd,
|
int *out_fd,
|
||||||
GCancellable *cancellable,
|
GCancellable *cancellable,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
_ostree_repo_update_mtime (OstreeRepo *self,
|
||||||
|
GError **error);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
|
||||||
|
|
@ -631,6 +631,9 @@ _ostree_repo_write_ref (OstreeRepo *self,
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!_ostree_repo_update_mtime (self, error))
|
||||||
|
goto out;
|
||||||
|
|
||||||
ret = TRUE;
|
ret = TRUE;
|
||||||
out:
|
out:
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
||||||
|
|
@ -620,6 +620,18 @@ ostree_repo_is_writable (OstreeRepo *self,
|
||||||
return self->writable;
|
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:
|
* ostree_repo_get_config:
|
||||||
* @self:
|
* @self:
|
||||||
|
|
|
||||||
|
|
@ -401,3 +401,16 @@ if test "$(id -u)" != "0"; then
|
||||||
assert_file_has_content error-message "Permission denied"
|
assert_file_has_content error-message "Permission denied"
|
||||||
echo "ok unwritable repo was caught"
|
echo "ok unwritable repo was caught"
|
||||||
fi
|
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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue