tempfile: add repo_create_tempfile{,_mode}()

Add variants of create_tempfile_mode() that handle arbitrary
repositories.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
main
René Scharfe 2026-07-14 19:59:52 +02:00 committed by Junio C Hamano
parent e9019fcafe
commit 8aad1dfc00
2 changed files with 18 additions and 1 deletions

View File

@ -135,6 +135,12 @@ static void deactivate_tempfile(struct tempfile *tempfile)

/* Make sure errno contains a meaningful value on error */
struct tempfile *create_tempfile_mode(const char *path, int mode)
{
return repo_create_tempfile_mode(the_repository, path, mode);
}

struct tempfile *repo_create_tempfile_mode(struct repository *r,
const char *path, int mode)
{
struct tempfile *tempfile = new_tempfile();

@ -150,7 +156,7 @@ struct tempfile *create_tempfile_mode(const char *path, int mode)
return NULL;
}
activate_tempfile(tempfile);
if (adjust_shared_perm(the_repository, tempfile->filename.buf)) {
if (adjust_shared_perm(r, tempfile->filename.buf)) {
int save_errno = errno;
error("cannot fix permission bits on %s", tempfile->filename.buf);
delete_tempfile(&tempfile);

View File

@ -4,6 +4,8 @@
#include "list.h"
#include "strbuf.h"

struct repository;

/*
* Handle temporary files.
*
@ -94,11 +96,20 @@ struct tempfile {
*/
struct tempfile *create_tempfile_mode(const char *path, int mode);

struct tempfile *repo_create_tempfile_mode(struct repository *r,
const char *path, int mode);

static inline struct tempfile *create_tempfile(const char *path)
{
return create_tempfile_mode(path, 0666);
}

static inline struct tempfile *repo_create_tempfile(struct repository *r,
const char *path)
{
return repo_create_tempfile_mode(r, path, 0666);
}

/*
* Register an existing file as a tempfile, meaning that it will be
* deleted when the program exits. The tempfile is considered closed,