environment.con commit Convert git-annotate to use Git.pm (7fb39d5)
   1/*
   2 * We put all the git config variables in this same object
   3 * file, so that programs can link against the config parser
   4 * without having to link against all the rest of git.
   5 *
   6 * In particular, no need to bring in libz etc unless needed,
   7 * even if you might want to know where the git directory etc
   8 * are.
   9 */
  10#include "cache.h"
  11
  12char git_default_email[MAX_GITNAME];
  13char git_default_name[MAX_GITNAME];
  14int trust_executable_bit = 1;
  15int assume_unchanged = 0;
  16int prefer_symlink_refs = 0;
  17int log_all_ref_updates = 0;
  18int warn_ambiguous_refs = 1;
  19int repository_format_version = 0;
  20char git_commit_encoding[MAX_ENCODING_LENGTH] = "utf-8";
  21int shared_repository = PERM_UMASK;
  22const char *apply_default_whitespace = NULL;
  23
  24static int dyn_git_object_dir, dyn_git_index_file, dyn_git_graft_file;
  25static char *git_dir, *git_object_dir, *git_index_file, *git_refs_dir,
  26        *git_graft_file;
  27
  28void setup_git(char *new_git_dir, char *new_git_object_dir,
  29               char *new_git_index_file, char *new_git_graft_file)
  30{
  31        git_dir = new_git_dir;
  32        if (!git_dir)
  33                git_dir = DEFAULT_GIT_DIR_ENVIRONMENT;
  34
  35        if (dyn_git_object_dir)
  36                free(git_object_dir);
  37        git_object_dir = new_git_object_dir;
  38        if (!git_object_dir) {
  39                git_object_dir = xmalloc(strlen(git_dir) + 9);
  40                sprintf(git_object_dir, "%s/objects", git_dir);
  41                dyn_git_object_dir = 1;
  42        } else {
  43                dyn_git_object_dir = 0;
  44        }
  45
  46        if (git_refs_dir)
  47                free(git_refs_dir);
  48        git_refs_dir = xmalloc(strlen(git_dir) + 6);
  49        sprintf(git_refs_dir, "%s/refs", git_dir);
  50
  51        if (dyn_git_index_file)
  52                free(git_index_file);
  53        git_index_file = new_git_index_file;
  54        if (!git_index_file) {
  55                git_index_file = xmalloc(strlen(git_dir) + 7);
  56                sprintf(git_index_file, "%s/index", git_dir);
  57                dyn_git_index_file = 1;
  58        } else {
  59                dyn_git_index_file = 0;
  60        }
  61
  62        if (dyn_git_graft_file)
  63                free(git_graft_file);
  64        git_graft_file = new_git_graft_file;
  65        if (!git_graft_file) {
  66                git_graft_file = strdup(git_path("info/grafts"));
  67                dyn_git_graft_file = 1;
  68        } else {
  69                dyn_git_graft_file = 0;
  70        }
  71}
  72
  73static void setup_git_env(void)
  74{
  75        setup_git(getenv(GIT_DIR_ENVIRONMENT),
  76                  getenv(DB_ENVIRONMENT),
  77                  getenv(INDEX_ENVIRONMENT),
  78                  getenv(GRAFT_ENVIRONMENT));
  79}
  80
  81char *get_git_dir(void)
  82{
  83        if (!git_dir)
  84                setup_git_env();
  85        return git_dir;
  86}
  87
  88char *get_object_directory(void)
  89{
  90        if (!git_object_dir)
  91                setup_git_env();
  92        return git_object_dir;
  93}
  94
  95char *get_refs_directory(void)
  96{
  97        if (!git_refs_dir)
  98                setup_git_env();
  99        return git_refs_dir;
 100}
 101
 102char *get_index_file(void)
 103{
 104        if (!git_index_file)
 105                setup_git_env();
 106        return git_index_file;
 107}
 108
 109char *get_graft_file(void)
 110{
 111        if (!git_graft_file)
 112                setup_git_env();
 113        return git_graft_file;
 114}
 115
 116