refs: make rev-parse --quiet actually quiet

When a reflog is deleted, e.g. when "git stash" clears its stashes,
"git rev-parse --verify --quiet" dies:

	fatal: Log for refs/stash is empty.

The reason is that the get_sha1() code path does not allow us
to suppress this message.

Pass the flags bitfield through get_sha1_with_context() so that
read_ref_at() can suppress the message.

Use get_sha1_with_context1() instead of get_sha1() in rev-parse
so that the --quiet flag is honored.

Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
David Aguilar
2014-09-18 20:45:37 -07:00
committed by Junio C Hamano
parent 2892dfeec3
commit c41a87dd80
6 changed files with 58 additions and 16 deletions

10
refs.c
View File

@ -3108,7 +3108,7 @@ static int read_ref_at_ent_oldest(unsigned char *osha1, unsigned char *nsha1,
return 1;
}
int read_ref_at(const char *refname, unsigned long at_time, int cnt,
int read_ref_at(const char *refname, unsigned int flags, unsigned long at_time, int cnt,
unsigned char *sha1, char **msg,
unsigned long *cutoff_time, int *cutoff_tz, int *cutoff_cnt)
{
@ -3126,8 +3126,12 @@ int read_ref_at(const char *refname, unsigned long at_time, int cnt,
for_each_reflog_ent_reverse(refname, read_ref_at_ent, &cb);
if (!cb.reccnt)
die("Log for %s is empty.", refname);
if (!cb.reccnt) {
if (flags & GET_SHA1_QUIETLY)
exit(128);
else
die("Log for %s is empty.", refname);
}
if (cb.found_it)
return 0;