From 7f97de5ee1e1f9d28f45c8f7890e752f7b12bed1 Mon Sep 17 00:00:00 2001 From: Jeff King Date: Fri, 7 Jul 2017 05:08:30 -0400 Subject: [PATCH] rev-list: check reflog_info before showing usage When git-rev-list sees no pending commits, it shows a usage message. This works even when reflog-walking is requested, because the reflog-walk code currently puts the reflog tips into the pending queue. In preparation for refactoring the reflog-walk code, let's explicitly check whether we have any reflogs to walk. For now this is a noop, but the existing reflog tests will make sure that it kicks in after the refactoring. Likewise, we'll add a test that "rev-list -g" without specifying any reflogs continues to fail (so that we know our check does not kick in too aggressively). Note that the implementation needs to go into its own sub-function, as the walk code does not expose its innards outside of reflog-walk.c. Signed-off-by: Jeff King Signed-off-by: Junio C Hamano --- builtin/rev-list.c | 3 ++- reflog-walk.c | 5 +++++ reflog-walk.h | 2 ++ t/t1414-reflog-walk.sh | 4 ++++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/builtin/rev-list.c b/builtin/rev-list.c index 95d84d5cda..53a746dd89 100644 --- a/builtin/rev-list.c +++ b/builtin/rev-list.c @@ -11,6 +11,7 @@ #include "graph.h" #include "bisect.h" #include "progress.h" +#include "reflog-walk.h" static const char rev_list_usage[] = "git rev-list [OPTION] ... [ -- paths... ]\n" @@ -348,7 +349,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix) /* Only --header was specified */ revs.commit_format = CMIT_FMT_RAW; - if ((!revs.commits && + if ((!revs.commits && reflog_walk_empty(revs.reflog_info) && (!(revs.tag_objects || revs.tree_objects || revs.blob_objects) && !revs.pending.nr)) || revs.diff) diff --git a/reflog-walk.c b/reflog-walk.c index 081f89b70d..98c2f42de9 100644 --- a/reflog-walk.c +++ b/reflog-walk.c @@ -365,3 +365,8 @@ void show_reflog_message(struct reflog_walk_info *reflog_info, int oneline, strbuf_release(&selector); } } + +int reflog_walk_empty(struct reflog_walk_info *info) +{ + return !info || !info->reflogs.nr; +} diff --git a/reflog-walk.h b/reflog-walk.h index 27886f793e..af32361072 100644 --- a/reflog-walk.h +++ b/reflog-walk.h @@ -20,4 +20,6 @@ extern void get_reflog_selector(struct strbuf *sb, const struct date_mode *dmode, int force_date, int shorten); +extern int reflog_walk_empty(struct reflog_walk_info *walk); + #endif diff --git a/t/t1414-reflog-walk.sh b/t/t1414-reflog-walk.sh index 945aa089ec..8bda862ca7 100755 --- a/t/t1414-reflog-walk.sh +++ b/t/t1414-reflog-walk.sh @@ -102,4 +102,8 @@ test_expect_failure 'walk prefers reflog to ref tip' ' test_cmp expect actual ' +test_expect_success 'rev-list -g complains when there are no reflogs' ' + test_must_fail git rev-list -g +' + test_done