From: Matthias Kestenholz Date: Thu, 3 Aug 2006 15:24:38 +0000 (+0200) Subject: Make git-symbolic-ref a builtin X-Git-Tag: v1.4.3-rc1~278^2~6 X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=640ce1052bbd6a8f1dd4d58beaa521d7592a0f02;p=git.git Make git-symbolic-ref a builtin Signed-off-by: Matthias Kestenholz Signed-off-by: Junio C Hamano --- diff --git a/Makefile b/Makefile index b108a8aa7..db59e00ed 100644 --- a/Makefile +++ b/Makefile @@ -184,7 +184,6 @@ PROGRAMS = \ git-ssh-upload$X git-unpack-file$X \ git-update-server-info$X \ git-upload-pack$X git-verify-pack$X \ - git-symbolic-ref$X \ git-pack-redundant$X git-var$X \ git-describe$X git-merge-tree$X git-blame$X git-imap-send$X @@ -199,7 +198,7 @@ BUILT_INS = git-log$X git-whatchanged$X git-show$X git-update-ref$X \ git-diff-index$X git-diff-stages$X git-diff-tree$X git-cat-file$X \ git-fmt-merge-msg$X git-prune$X git-mv$X git-prune-packed$X \ git-repo-config$X git-name-rev$X git-pack-objects$X \ - git-unpack-objects$X + git-unpack-objects$X git-symbolic-ref$X # what 'all' will build and 'install' will install, in gitexecdir ALL_PROGRAMS = $(PROGRAMS) $(SIMPLE_PROGRAMS) $(SCRIPTS) @@ -257,7 +256,8 @@ BUILTIN_OBJS = \ builtin-cat-file.o builtin-mailsplit.o builtin-stripspace.o \ builtin-update-ref.o builtin-fmt-merge-msg.o builtin-prune.o \ builtin-mv.o builtin-prune-packed.o builtin-repo-config.o \ - builtin-name-rev.o builtin-pack-objects.o builtin-unpack-objects.o + builtin-name-rev.o builtin-pack-objects.o builtin-unpack-objects.o \ + builtin-symbolic-ref.o GITLIBS = $(LIB_FILE) $(XDIFF_LIB) LIBS = $(GITLIBS) -lz diff --git a/builtin-symbolic-ref.c b/builtin-symbolic-ref.c new file mode 100644 index 000000000..b4ec6f28e --- /dev/null +++ b/builtin-symbolic-ref.c @@ -0,0 +1,35 @@ +#include "builtin.h" +#include "cache.h" + +static const char git_symbolic_ref_usage[] = +"git-symbolic-ref name [ref]"; + +static void 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 cmd_symbolic_ref(int argc, const char **argv, const char *prefix) +{ + git_config(git_default_config); + 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; +} diff --git a/builtin.h b/builtin.h index af73c3c19..b767245c7 100644 --- a/builtin.h +++ b/builtin.h @@ -52,6 +52,7 @@ extern int cmd_repo_config(int argc, const char **argv, const char *prefix); extern int cmd_name_rev(int argc, const char **argv, const char *prefix); extern int cmd_pack_objects(int argc, const char **argv, const char *prefix); extern int cmd_unpack_objects(int argc, const char **argv, const char *prefix); +extern int cmd_symbolic_ref(int argc, const char **argv, const char *prefix); extern int cmd_write_tree(int argc, const char **argv, const char *prefix); extern int write_tree(unsigned char *sha1, int missing_ok, const char *prefix); diff --git a/git.c b/git.c index 7c3a7f8fd..e40e85935 100644 --- a/git.c +++ b/git.c @@ -268,6 +268,7 @@ static void handle_internal_command(int argc, const char **argv, char **envp) { "name-rev", cmd_name_rev, NEEDS_PREFIX }, { "pack-objects", cmd_pack_objects, NEEDS_PREFIX }, { "unpack-objects", cmd_unpack_objects, NEEDS_PREFIX }, + { "symbolic-ref", cmd_symbolic_ref, NEEDS_PREFIX }, }; int i; diff --git a/symbolic-ref.c b/symbolic-ref.c deleted file mode 100644 index 193c87c17..000000000 --- a/symbolic-ref.c +++ /dev/null @@ -1,35 +0,0 @@ -#include "cache.h" - -static const char git_symbolic_ref_usage[] = -"git-symbolic-ref name [ref]"; - -static void 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(); - git_config(git_default_config); - 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; -}