pack_if_possible_fn(): use ref_type() instead of is_per_worktree_ref()
[gitweb.git] / environment.c
index 61c685b8d93091666891f0091d5005fe62543fc2..2da7fe2e06ff38b977209d44b7404c93358430af 100644 (file)
@@ -26,6 +26,7 @@ int warn_ambiguous_refs = 1;
 int warn_on_object_refname_ambiguity = 1;
 int ref_paranoia = -1;
 int repository_format_version;
+int repository_format_precious_objects;
 const char *git_commit_encoding;
 const char *git_log_output_encoding;
 int shared_repository = PERM_UMASK;
@@ -47,6 +48,7 @@ const char *askpass_program;
 const char *excludes_file;
 enum auto_crlf auto_crlf = AUTO_CRLF_FALSE;
 int check_replace_refs = 1;
+char *git_replace_ref_base;
 enum eol core_eol = EOL_UNSET;
 enum safe_crlf safe_crlf = SAFE_CRLF_WARN;
 unsigned whitespace_rule_cfg = WS_DEFAULT_RULE;
@@ -110,6 +112,7 @@ const char * const local_repo_env[] = {
        GRAFT_ENVIRONMENT,
        INDEX_ENVIRONMENT,
        NO_REPLACE_OBJECTS_ENVIRONMENT,
+       GIT_REPLACE_REF_BASE_ENVIRONMENT,
        GIT_PREFIX_ENVIRONMENT,
        GIT_SHALLOW_FILE_ENVIRONMENT,
        GIT_COMMON_DIR_ENVIRONMENT,
@@ -141,11 +144,8 @@ static char *git_path_from_env(const char *envvar, const char *git_dir,
                               const char *path, int *fromenv)
 {
        const char *value = getenv(envvar);
-       if (!value) {
-               char *buf = xmalloc(strlen(git_dir) + strlen(path) + 2);
-               sprintf(buf, "%s/%s", git_dir, path);
-               return buf;
-       }
+       if (!value)
+               return xstrfmt("%s/%s", git_dir, path);
        if (fromenv)
                *fromenv = 1;
        return xstrdup(value);
@@ -156,6 +156,7 @@ static void setup_git_env(void)
        struct strbuf sb = STRBUF_INIT;
        const char *gitfile;
        const char *shallow_file;
+       const char *replace_ref_base;
 
        git_dir = getenv(GIT_DIR_ENVIRONMENT);
        if (!git_dir)
@@ -173,6 +174,9 @@ static void setup_git_env(void)
                                           "info/grafts", &git_graft_env);
        if (getenv(NO_REPLACE_OBJECTS_ENVIRONMENT))
                check_replace_refs = 0;
+       replace_ref_base = getenv(GIT_REPLACE_REF_BASE_ENVIRONMENT);
+       git_replace_ref_base = xstrdup(replace_ref_base ? replace_ref_base
+                                                         : "refs/replace/");
        namespace = expand_namespace(getenv(GIT_NAMESPACE_ENVIRONMENT));
        namespace_len = strlen(namespace);
        shallow_file = getenv(GIT_SHALLOW_FILE_ENVIRONMENT);
@@ -231,6 +235,8 @@ void set_git_work_tree(const char *new_work_tree)
        }
        git_work_tree_initialized = 1;
        work_tree = xstrdup(real_path(new_work_tree));
+       if (setenv(GIT_WORK_TREE_ENVIRONMENT, work_tree, 1))
+               die("could not set GIT_WORK_TREE to '%s'", work_tree);
 }
 
 const char *get_git_work_tree(void)