Skip to content

Commit

Permalink
rev-list: check reflog_info before showing usage
Browse files Browse the repository at this point in the history
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 <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
peff authored and gitster committed Jul 9, 2017
1 parent 7c2f08a commit 7f97de5
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 1 deletion.
3 changes: 2 additions & 1 deletion builtin/rev-list.c
Original file line number Diff line number Diff line change
Expand Up @@ -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] <commit-id>... [ -- paths... ]\n"
Expand Down Expand Up @@ -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)
Expand Down
5 changes: 5 additions & 0 deletions reflog-walk.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
2 changes: 2 additions & 0 deletions reflog-walk.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
4 changes: 4 additions & 0 deletions t/t1414-reflog-walk.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit 7f97de5

Please sign in to comment.