зеркало из https://github.com/microsoft/git.git
Merge branch 'rs/empty-reflog-check-fix'
The code to see if "git stash drop" can safely remove refs/stash has been made more carerful. * rs/empty-reflog-check-fix: stash: simplify reflog emptiness check
This commit is contained in:
Коммит
30f5257611
|
@ -534,11 +534,22 @@ static int apply_stash(int argc, const char **argv, const char *prefix)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int reject_reflog_ent(struct object_id *ooid, struct object_id *noid,
|
||||
const char *email, timestamp_t timestamp, int tz,
|
||||
const char *message, void *cb_data)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int reflog_is_empty(const char *refname)
|
||||
{
|
||||
return !for_each_reflog_ent(refname, reject_reflog_ent, NULL);
|
||||
}
|
||||
|
||||
static int do_drop_stash(struct stash_info *info, int quiet)
|
||||
{
|
||||
int ret;
|
||||
struct child_process cp_reflog = CHILD_PROCESS_INIT;
|
||||
struct child_process cp = CHILD_PROCESS_INIT;
|
||||
|
||||
/*
|
||||
* reflog does not provide a simple function for deleting refs. One will
|
||||
|
@ -559,19 +570,7 @@ static int do_drop_stash(struct stash_info *info, int quiet)
|
|||
info->revision.buf);
|
||||
}
|
||||
|
||||
/*
|
||||
* This could easily be replaced by get_oid, but currently it will throw
|
||||
* a fatal error when a reflog is empty, which we can not recover from.
|
||||
*/
|
||||
cp.git_cmd = 1;
|
||||
/* Even though --quiet is specified, rev-parse still outputs the hash */
|
||||
cp.no_stdout = 1;
|
||||
strvec_pushl(&cp.args, "rev-parse", "--verify", "--quiet", NULL);
|
||||
strvec_pushf(&cp.args, "%s@{0}", ref_stash);
|
||||
ret = run_command(&cp);
|
||||
|
||||
/* do_clear_stash if we just dropped the last stash entry */
|
||||
if (ret)
|
||||
if (reflog_is_empty(ref_stash))
|
||||
do_clear_stash();
|
||||
|
||||
return 0;
|
||||
|
|
Загрузка…
Ссылка в новой задаче