Browse Source

core.prefersymlinkrefs: use symlinks for .git/HEAD

When inspecting a project whose build infrastructure used to
assume that .git/HEAD is a symlink ref, core.prefersymlinkrefs
in the config file of such a project would help to bisect its
history.

Signed-off-by: Junio C Hamano <junkio@cox.net>
(cherry picked from 9f0bb90d16 commit)
maint
Junio C Hamano 19 years ago
parent
commit
e388c73825
  1. 8
      Documentation/config.txt
  2. 8
      Makefile
  3. 2
      cache.h
  4. 4
      config.c
  5. 2
      environment.c
  6. 4
      refs.c

8
Documentation/config.txt

@ -64,9 +64,11 @@ core.ignoreStat:: @@ -64,9 +64,11 @@ core.ignoreStat::
slow, such as Microsoft Windows. See gitlink:git-update-index[1].
False by default.

core.onlyUseSymrefs::
Always use the "symref" format instead of symbolic links for HEAD
and other symbolic reference files. True by default.
core.preferSymlinkRefs::
Instead of the default "symref" format for HEAD
and other symbolic reference files, use symbolic links.
This is sometimes needed to work with old scripts that
expect HEAD to be a symbolic link.

core.repositoryFormatVersion::
Internal variable identifying the repository format and layout

8
Makefile

@ -28,8 +28,8 @@ all: @@ -28,8 +28,8 @@ all:
#
# Define NO_SETENV if you don't have setenv in the C library.
#
# Define USE_SYMLINK_HEAD if you want .git/HEAD to be a symbolic link.
# Don't enable it on Windows.
# Define NO_SYMLINK_HEAD if you never want .git/HEAD to be a symbolic link.
# Enable it on Windows. By default, symrefs are still used.
#
# Define PPC_SHA1 environment variable when running make to make use of
# a bundled SHA1 routine optimized for PowerPC.
@ -260,6 +260,7 @@ ifeq ($(uname_O),Cygwin) @@ -260,6 +260,7 @@ ifeq ($(uname_O),Cygwin)
NO_D_TYPE_IN_DIRENT = YesPlease
NO_D_INO_IN_DIRENT = YesPlease
NO_STRCASESTR = YesPlease
NO_SYMLINK_HEAD = YesPlease
NEEDS_LIBICONV = YesPlease
# There are conflicting reports about this.
# On some boxes NO_MMAP is needed, and not so elsewhere.
@ -383,6 +384,9 @@ endif @@ -383,6 +384,9 @@ endif
ifdef NO_D_INO_IN_DIRENT
ALL_CFLAGS += -DNO_D_INO_IN_DIRENT
endif
ifdef NO_SYMLINK_HEAD
ALL_CFLAGS += -DNO_SYMLINK_HEAD
endif
ifdef NO_STRCASESTR
COMPAT_CFLAGS += -DNO_STRCASESTR
COMPAT_OBJS += compat/strcasestr.o

2
cache.h

@ -168,7 +168,7 @@ extern void rollback_index_file(struct cache_file *); @@ -168,7 +168,7 @@ extern void rollback_index_file(struct cache_file *);
/* Environment bits from configuration mechanism */
extern int trust_executable_bit;
extern int assume_unchanged;
extern int only_use_symrefs;
extern int prefer_symlink_refs;
extern int warn_ambiguous_refs;
extern int diff_rename_limit_default;
extern int shared_repository;

4
config.c

@ -227,8 +227,8 @@ int git_default_config(const char *var, const char *value) @@ -227,8 +227,8 @@ int git_default_config(const char *var, const char *value)
return 0;
}

if (!strcmp(var, "core.symrefsonly")) {
only_use_symrefs = git_config_bool(var, value);
if (!strcmp(var, "core.prefersymlinkrefs")) {
prefer_symlink_refs = git_config_bool(var, value);
return 0;
}


2
environment.c

@ -13,7 +13,7 @@ char git_default_email[MAX_GITNAME]; @@ -13,7 +13,7 @@ char git_default_email[MAX_GITNAME];
char git_default_name[MAX_GITNAME];
int trust_executable_bit = 1;
int assume_unchanged = 0;
int only_use_symrefs = 0;
int prefer_symlink_refs = 0;
int warn_ambiguous_refs = 1;
int repository_format_version = 0;
char git_commit_encoding[MAX_ENCODING_LENGTH] = "utf-8";

4
refs.c

@ -76,8 +76,8 @@ int create_symref(const char *git_HEAD, const char *refs_heads_master) @@ -76,8 +76,8 @@ int create_symref(const char *git_HEAD, const char *refs_heads_master)
char ref[1000];
int fd, len, written;

#ifdef USE_SYMLINK_HEAD
if (!only_use_symrefs) {
#ifndef NO_SYMLINK_HEAD
if (prefer_symlink_refs) {
unlink(git_HEAD);
if (!symlink(refs_heads_master, git_HEAD))
return 0;

Loading…
Cancel
Save