Skip to content

Commit

Permalink
environment: move object database functions into object layer
Browse files Browse the repository at this point in the history
The `odb_mkstemp()` and `odb_pack_keep()` functions are quite clearly
tied to the object store, but regardless of that they are located in
"environment.c". Move them over, which also helps to get rid of
dependencies on `the_repository` in the environment subsystem.

Signed-off-by: Patrick Steinhardt <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
pks-t authored and gitster committed Sep 12, 2024
1 parent b92266b commit 26b4df9
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 50 deletions.
2 changes: 1 addition & 1 deletion bundle-uri.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
#include "bundle-uri.h"
#include "bundle.h"
#include "copy.h"
#include "environment.h"
#include "gettext.h"
#include "refs.h"
#include "run-command.h"
Expand All @@ -13,6 +12,7 @@
#include "config.h"
#include "fetch-pack.h"
#include "remote.h"
#include "object-store-ll.h"

static struct {
enum bundle_list_heuristic heuristic;
Expand Down
34 changes: 0 additions & 34 deletions environment.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
#include "commit.h"
#include "strvec.h"
#include "object-file.h"
#include "object-store-ll.h"
#include "path.h"
#include "replace-object.h"
#include "tmp-objdir.h"
Expand Down Expand Up @@ -268,39 +267,6 @@ void set_git_work_tree(const char *new_work_tree)
repo_set_worktree(the_repository, new_work_tree);
}

int odb_mkstemp(struct strbuf *temp_filename, const char *pattern)
{
int fd;
/*
* we let the umask do its job, don't try to be more
* restrictive except to remove write permission.
*/
int mode = 0444;
git_path_buf(temp_filename, "objects/%s", pattern);
fd = git_mkstemp_mode(temp_filename->buf, mode);
if (0 <= fd)
return fd;

/* slow path */
/* some mkstemp implementations erase temp_filename on failure */
git_path_buf(temp_filename, "objects/%s", pattern);
safe_create_leading_directories(temp_filename->buf);
return xmkstemp_mode(temp_filename->buf, mode);
}

int odb_pack_keep(const char *name)
{
int fd;

fd = open(name, O_RDWR|O_CREAT|O_EXCL, 0600);
if (0 <= fd)
return fd;

/* slow path */
safe_create_leading_directories_const(name);
return open(name, O_RDWR|O_CREAT|O_EXCL, 0600);
}

static void set_git_dir_1(const char *path)
{
xsetenv(GIT_DIR_ENVIRONMENT, path, 1);
Expand Down
15 changes: 0 additions & 15 deletions environment.h
Original file line number Diff line number Diff line change
Expand Up @@ -200,21 +200,6 @@ extern int grafts_keep_true_parents;

extern int repository_format_precious_objects;

/*
* Create a temporary file rooted in the object database directory, or
* die on failure. The filename is taken from "pattern", which should have the
* usual "XXXXXX" trailer, and the resulting filename is written into the
* "template" buffer. Returns the open descriptor.
*/
int odb_mkstemp(struct strbuf *temp_filename, const char *pattern);

/*
* Create a pack .keep file named "name" (which should generally be the output
* of odb_pack_name). Returns a file descriptor opened for writing, or -1 on
* error.
*/
int odb_pack_keep(const char *name);

const char *get_log_output_encoding(void);
const char *get_commit_output_encoding(void);

Expand Down
33 changes: 33 additions & 0 deletions object-file.c
Original file line number Diff line number Diff line change
Expand Up @@ -419,6 +419,39 @@ enum scld_error safe_create_leading_directories_const(const char *path)
return result;
}

int odb_mkstemp(struct strbuf *temp_filename, const char *pattern)
{
int fd;
/*
* we let the umask do its job, don't try to be more
* restrictive except to remove write permission.
*/
int mode = 0444;
git_path_buf(temp_filename, "objects/%s", pattern);
fd = git_mkstemp_mode(temp_filename->buf, mode);
if (0 <= fd)
return fd;

/* slow path */
/* some mkstemp implementations erase temp_filename on failure */
git_path_buf(temp_filename, "objects/%s", pattern);
safe_create_leading_directories(temp_filename->buf);
return xmkstemp_mode(temp_filename->buf, mode);
}

int odb_pack_keep(const char *name)
{
int fd;

fd = open(name, O_RDWR|O_CREAT|O_EXCL, 0600);
if (0 <= fd)
return fd;

/* slow path */
safe_create_leading_directories_const(name);
return open(name, O_RDWR|O_CREAT|O_EXCL, 0600);
}

static void fill_loose_path(struct strbuf *buf, const struct object_id *oid)
{
int i;
Expand Down
15 changes: 15 additions & 0 deletions object-store-ll.h
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,21 @@ struct raw_object_store {
struct raw_object_store *raw_object_store_new(void);
void raw_object_store_clear(struct raw_object_store *o);

/*
* Create a temporary file rooted in the object database directory, or
* die on failure. The filename is taken from "pattern", which should have the
* usual "XXXXXX" trailer, and the resulting filename is written into the
* "template" buffer. Returns the open descriptor.
*/
int odb_mkstemp(struct strbuf *temp_filename, const char *pattern);

/*
* Create a pack .keep file named "name" (which should generally be the output
* of odb_pack_name). Returns a file descriptor opened for writing, or -1 on
* error.
*/
int odb_pack_keep(const char *name);

/*
* Put in `buf` the name of the file in the local object database that
* would be used to store a loose object with the specified oid.
Expand Down

0 comments on commit 26b4df9

Please sign in to comment.