Merge pull request #3233 from dbnicholson/sync-summary-times

Sync summary times
This commit is contained in:
Colin Walters 2024-05-01 20:23:59 -04:00 committed by GitHub
commit fa720d1540
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 35 additions and 2 deletions

View File

@ -6092,6 +6092,23 @@ regenerate_metadata (OstreeRepo *self, gboolean do_metadata_commit, GVariant *ad
&& !_ostree_sign_summary_at (sign, self, summary_tmpdir.fd, sign_keys, cancellable, error))
return FALSE;
/* If a signature was made, sync the summary times to it. This way an
* HTTP client will consider the files expired at the same time.
*/
if (gpg_key_ids != NULL || sign_keys != NULL)
{
struct stat stbuf;
if (!glnx_fstatat (summary_tmpdir.fd, "summary.sig", &stbuf, AT_SYMLINK_NOFOLLOW, error))
return glnx_prefix_error (error, "Unable to get summary.sig status");
struct timespec ts[2];
ts[0] = stbuf.st_atim;
ts[1] = stbuf.st_mtim;
if (TEMP_FAILURE_RETRY (utimensat (summary_tmpdir.fd, "summary", ts, AT_SYMLINK_NOFOLLOW))
!= 0)
return glnx_throw_errno_prefix (error, "Unable to change summary timestamps");
}
/* Rename them into place */
if (!glnx_renameat (summary_tmpdir.fd, "summary", self->repo_dir_fd, "summary", error))
return glnx_prefix_error (error, "Unable to rename summary file: ");

View File

@ -208,5 +208,5 @@ if fsverity enable checkout-test2/nonhardlinked 2>err.txt; then
assert_not_streq "${orig_inode}" "${new_inode}"
echo "ok copyup fsverity"
else
skip "no fsverity support: $(cat err.txt)"
fi
echo "ok copyup fsverity # SKIP no fsverity support: $(cat err.txt)"
fi

View File

@ -51,6 +51,14 @@ ${CMD_PREFIX} ostree --repo=repo summary --update
# Generate a signed summary file.
${CMD_PREFIX} ostree --repo=repo summary --update ${COMMIT_SIGN}
# If the signature file was created, it should have the same
# modification time as the summary file.
if [ -n "${COMMIT_SIGN}" ]; then
stat -c '%y' repo/summary > summary-mtime
stat -c '%y' repo/summary.sig > summary.sig-mtime
assert_files_equal summary-mtime summary.sig-mtime
fi
# Try various ways of adding additional data.
${CMD_PREFIX} ostree --repo=repo summary --update --add-metadata key="'value'" --add-metadata=key2=true
${CMD_PREFIX} ostree --repo=repo summary --update -m some-int='@t 123'
@ -87,6 +95,14 @@ ${CMD_PREFIX} ostree --repo=repo summary --update
# Generate a signed summary file.
${CMD_PREFIX} ostree --repo=repo summary --update ${COMMIT_SIGN}
# If the signature file was created, it should have the same
# modification time as the summary file.
if [ -n "${COMMIT_SIGN}" ]; then
stat -c '%y' repo/summary > summary-mtime
stat -c '%y' repo/summary.sig > summary.sig-mtime
assert_files_equal summary-mtime summary.sig-mtime
fi
# Try various ways of adding additional data.
${CMD_PREFIX} ostree --repo=repo summary --update --add-metadata key="'value'" --add-metadata=key2=true
${CMD_PREFIX} ostree --repo=repo summary --update -m some-int='@t 123'