Skip to content

Commit

Permalink
Provide 'git notes get-ref' to easily retrieve current notes ref
Browse files Browse the repository at this point in the history
Script may use 'git notes get-ref' to easily retrieve the current notes ref.

Suggested-by: Jonathan Nieder <[email protected]>
Signed-off-by: Johan Herland <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
jherland authored and gitster committed Nov 17, 2010
1 parent 305ddd4 commit 618cd75
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 0 deletions.
5 changes: 5 additions & 0 deletions Documentation/git-notes.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ SYNOPSIS
'git notes' merge --abort [-v | -q]
'git notes' remove [<object>]
'git notes' prune [-n | -v]
'git notes' get-ref


DESCRIPTION
Expand Down Expand Up @@ -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::
Expand Down
23 changes: 23 additions & 0 deletions builtin/notes.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ static const char * const git_notes_usage[] = {
"git notes merge --abort [-v | -q]",
"git notes [--ref <notes_ref>] remove [<object>]",
"git notes [--ref <notes_ref>] prune [-n | -v]",
"git notes [--ref <notes_ref>] get-ref",
NULL
};

Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down
19 changes: 19 additions & 0 deletions t/t3301-notes.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit 618cd75

Please sign in to comment.