Browse Source
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>maint
Junio C Hamano
20 years ago
committed by
Junio C Hamano
16 changed files with 176 additions and 57 deletions
@ -0,0 +1,34 @@
@@ -0,0 +1,34 @@
|
||||
#include "cache.h" |
||||
|
||||
static const char git_symbolic_ref_usage[] = |
||||
"git-symbolic-ref name [ref]"; |
||||
|
||||
static int check_symref(const char *HEAD) |
||||
{ |
||||
unsigned char sha1[20]; |
||||
const char *git_HEAD = strdup(git_path("%s", HEAD)); |
||||
const char *git_refs_heads_master = resolve_ref(git_HEAD, sha1, 0); |
||||
if (git_refs_heads_master) { |
||||
/* we want to strip the .git/ part */ |
||||
int pfxlen = strlen(git_HEAD) - strlen(HEAD); |
||||
puts(git_refs_heads_master + pfxlen); |
||||
} |
||||
else |
||||
die("No such ref: %s", HEAD); |
||||
} |
||||
|
||||
int main(int argc, const char **argv) |
||||
{ |
||||
setup_git_directory(); |
||||
switch (argc) { |
||||
case 2: |
||||
check_symref(argv[1]); |
||||
break; |
||||
case 3: |
||||
create_symref(strdup(git_path("%s", argv[1])), argv[2]); |
||||
break; |
||||
default: |
||||
usage(git_symbolic_ref_usage); |
||||
} |
||||
return 0; |
||||
} |
Loading…
Reference in new issue