Add git-symbolic-ref
This adds the counterpart of git-update-ref that lets you read and create "symbolic refs". By default it uses a symbolic link to represent ".git/HEAD -> refs/heads/master", but it can be compiled to use the textfile symbolic ref. The places that did 'readlink .git/HEAD' and 'ln -s refs/heads/blah .git/HEAD' have been converted to use new git-symbolic-ref command, so that they can deal with either implementation. Signed-off-by: Junio C Hamano <junio@twinsun.com>
This commit is contained in:

committed by
Junio C Hamano

parent
a876ed83be
commit
8098a178b2
16
setup.c
16
setup.c
@ -76,18 +76,20 @@ const char **get_pathspec(const char *prefix, const char **pathspec)
|
||||
* Test it it looks like we're at the top
|
||||
* level git directory. We want to see a
|
||||
*
|
||||
* - a HEAD symlink and a refs/ directory under ".git"
|
||||
* - either a .git/objects/ directory _or_ the proper
|
||||
* GIT_OBJECT_DIRECTORY environment variable
|
||||
* - a refs/ directory under ".git"
|
||||
* - either a HEAD symlink or a HEAD file that is formatted as
|
||||
* a proper "ref:".
|
||||
*/
|
||||
static int is_toplevel_directory(void)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
return !lstat(".git/HEAD", &st) &&
|
||||
S_ISLNK(st.st_mode) &&
|
||||
!access(".git/refs/", X_OK) &&
|
||||
(getenv(DB_ENVIRONMENT) || !access(".git/objects/", X_OK));
|
||||
if (access(".git/refs/", X_OK) ||
|
||||
access(getenv(DB_ENVIRONMENT) ?
|
||||
getenv(DB_ENVIRONMENT) : ".git/objects/", X_OK) ||
|
||||
validate_symref(".git/HEAD"))
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
const char *setup_git_directory(void)
|
||||
|
Reference in New Issue
Block a user