]> git.ipfire.org Git - thirdparty/git.git/commitdiff
builtin/stash: factor out revision parsing into a function
authorbrian m. carlson <sandals@crustytoothpaste.net>
Thu, 12 Jun 2025 01:12:18 +0000 (01:12 +0000)
committerJunio C Hamano <gitster@pobox.com>
Thu, 12 Jun 2025 20:32:17 +0000 (13:32 -0700)
We allow several special forms of stash names in this code.  In the
future, we'll want to allow these same forms without parsing a stash
commit, so let's refactor this code out into a function for reuse.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/stash.c

index cfbd92852a655700354286d4aa9c112e1f2dcf32..ab491d5ff639d82568fcd2c200c14a8ee09575ea 100644 (file)
@@ -169,6 +169,25 @@ static void assert_stash_like(struct stash_info *info, const char *revision)
                die(_("'%s' is not a stash-like commit"), revision);
 }
 
+static int parse_stash_revision(struct strbuf *revision, const char *commit, int quiet)
+{
+       strbuf_reset(revision);
+       if (!commit) {
+               if (!refs_ref_exists(get_main_ref_store(the_repository), ref_stash)) {
+                       if (!quiet)
+                               fprintf_ln(stderr, _("No stash entries found."));
+                       return -1;
+               }
+
+               strbuf_addf(revision, "%s@{0}", ref_stash);
+       } else if (strspn(commit, "0123456789") == strlen(commit)) {
+               strbuf_addf(revision, "%s@{%s}", ref_stash, commit);
+       } else {
+               strbuf_addstr(revision, commit);
+       }
+       return 0;
+}
+
 static int get_stash_info(struct stash_info *info, int argc, const char **argv)
 {
        int ret;
@@ -196,17 +215,9 @@ static int get_stash_info(struct stash_info *info, int argc, const char **argv)
        if (argc == 1)
                commit = argv[0];
 
-       if (!commit) {
-               if (!refs_ref_exists(get_main_ref_store(the_repository), ref_stash)) {
-                       fprintf_ln(stderr, _("No stash entries found."));
-                       return -1;
-               }
-
-               strbuf_addf(&info->revision, "%s@{0}", ref_stash);
-       } else if (strspn(commit, "0123456789") == strlen(commit)) {
-               strbuf_addf(&info->revision, "%s@{%s}", ref_stash, commit);
-       } else {
-               strbuf_addstr(&info->revision, commit);
+       strbuf_init(&info->revision, 0);
+       if (parse_stash_revision(&info->revision, commit, 0)) {
+               return -1;
        }
 
        revision = info->revision.buf;