From 618cd75707580819f19a5f01dba406ac72219c78 Mon Sep 17 00:00:00 2001 From: Johan Herland Date: Tue, 9 Nov 2010 22:49:57 +0100 Subject: [PATCH] Provide 'git notes get-ref' to easily retrieve current notes ref Script may use 'git notes get-ref' to easily retrieve the current notes ref. Suggested-by: Jonathan Nieder Signed-off-by: Johan Herland Signed-off-by: Junio C Hamano --- Documentation/git-notes.txt | 5 +++++ builtin/notes.c | 23 +++++++++++++++++++++++ t/t3301-notes.sh | 19 +++++++++++++++++++ 3 files changed, 47 insertions(+) diff --git a/Documentation/git-notes.txt b/Documentation/git-notes.txt index 1de1417d82..296f314eae 100644 --- a/Documentation/git-notes.txt +++ b/Documentation/git-notes.txt @@ -19,6 +19,7 @@ SYNOPSIS 'git notes' merge --abort [-v | -q] 'git notes' remove [] 'git notes' prune [-n | -v] +'git notes' get-ref DESCRIPTION @@ -109,6 +110,10 @@ remove:: prune:: Remove all notes for non-existing/unreachable objects. +get-ref:: + Print the current notes ref. This provides an easy way to + retrieve the current notes ref (e.g. from scripts). + OPTIONS ------- -f:: diff --git a/builtin/notes.c b/builtin/notes.c index 455046e88a..f5abf7aa6e 100644 --- a/builtin/notes.c +++ b/builtin/notes.c @@ -31,6 +31,7 @@ static const char * const git_notes_usage[] = { "git notes merge --abort [-v | -q]", "git notes [--ref ] remove []", "git notes [--ref ] prune [-n | -v]", + "git notes [--ref ] get-ref", NULL }; @@ -82,6 +83,11 @@ static const char * const git_notes_prune_usage[] = { NULL }; +static const char * const git_notes_get_ref_usage[] = { + "git notes get-ref", + NULL +}; + static const char note_template[] = "\n" "#\n" @@ -1002,6 +1008,21 @@ static int prune(int argc, const char **argv, const char *prefix) return 0; } +static int get_ref(int argc, const char **argv, const char *prefix) +{ + struct option options[] = { OPT_END() }; + argc = parse_options(argc, argv, prefix, options, + git_notes_get_ref_usage, 0); + + if (argc) { + error("too many parameters"); + usage_with_options(git_notes_get_ref_usage, options); + } + + puts(default_notes_ref()); + return 0; +} + int cmd_notes(int argc, const char **argv, const char *prefix) { int result; @@ -1040,6 +1061,8 @@ int cmd_notes(int argc, const char **argv, const char *prefix) result = remove_cmd(argc, argv, prefix); else if (!strcmp(argv[0], "prune")) result = prune(argc, argv, prefix); + else if (!strcmp(argv[0], "get-ref")) + result = get_ref(argc, argv, prefix); else { result = error("Unknown subcommand: %s", argv[0]); usage_with_options(git_notes_usage, options); diff --git a/t/t3301-notes.sh b/t/t3301-notes.sh index 4bf4e52e6c..f5b72c7b00 100755 --- a/t/t3301-notes.sh +++ b/t/t3301-notes.sh @@ -1058,4 +1058,23 @@ test_expect_success 'git notes copy diagnoses too many or too few parameters' ' test_must_fail git notes copy one two three ' +test_expect_success 'git notes get-ref (no overrides)' ' + git config --unset core.notesRef && + unset GIT_NOTES_REF && + test "$(git notes get-ref)" = "refs/notes/commits" +' + +test_expect_success 'git notes get-ref (core.notesRef)' ' + git config core.notesRef refs/notes/foo && + test "$(git notes get-ref)" = "refs/notes/foo" +' + +test_expect_success 'git notes get-ref (GIT_NOTES_REF)' ' + test "$(GIT_NOTES_REF=refs/notes/bar git notes get-ref)" = "refs/notes/bar" +' + +test_expect_success 'git notes get-ref (--ref)' ' + test "$(GIT_NOTES_REF=refs/notes/bar git notes --ref=baz get-ref)" = "refs/notes/baz" +' + test_done