stash: call reflog_delete() in reflog.c

Now that cmd_reflog_delete has been libified an exported it into a new reflog.c library so we can call it directly from builtin/stash.c. This not only gives us a performance gain since we don't need to create a subprocess, but it also allows us to use the ref transactions api in the future. Helped-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: John Cai <johncai86@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

John Cai committed Mar 2, 2022 at 22:27 UTC 758b4d2be8c009a07dfa86d8cafdf1375905ab45
1 file changed +4 -14
builtin/stash.c
+4 -14
@@ -17,6 +17,7 @@
17 #include "diffcore.h"
18 #include "exec-cmd.h"
19 #include "entry.h"
20 +#include "reflog.h"
21
22 #define INCLUDE_ALL_FILES 2
23
@@ -634,20 +635,9 @@ static int reflog_is_empty(const char *refname)
635
636 static int do_drop_stash(struct stash_info *info, int quiet)
637 {
637 - int ret;
638 - struct child_process cp_reflog = CHILD_PROCESS_INIT;
639 -
640 - /*
641 - * reflog does not provide a simple function for deleting refs. One will
642 - * need to be added to avoid implementing too much reflog code here
643 - */
644 -
645 - cp_reflog.git_cmd = 1;
646 - strvec_pushl(&cp_reflog.args, "reflog", "delete", "--updateref",
647 - "--rewrite", NULL);
648 - strvec_push(&cp_reflog.args, info->revision.buf);
649 - ret = run_command(&cp_reflog);
650 - if (!ret) {
638 + if (!reflog_delete(info->revision.buf,
639 + EXPIRE_REFLOGS_REWRITE | EXPIRE_REFLOGS_UPDATE_REF,
640 + 0)) {
641 if (!quiet)
642 printf_ln(_("Dropped %s (%s)"), info->revision.buf,
643 oid_to_hex(&info->w_commit));