Add stash store to the helper and delete the store_stash function
from the shell script.

Add the usage string which was forgotten in the shell script.

Signed-off-by: Paul-Sebastian Ungureanu <ungureanupaulsebast...@gmail.com>
---
 builtin/stash--helper.c | 52 +++++++++++++++++++++++++++++++++++++++++
 git-stash.sh            | 43 ++--------------------------------
 2 files changed, 54 insertions(+), 41 deletions(-)

diff --git a/builtin/stash--helper.c b/builtin/stash--helper.c
index ec8c38c6f..5ff810f8c 100644
--- a/builtin/stash--helper.c
+++ b/builtin/stash--helper.c
@@ -20,6 +20,7 @@ static const char * const git_stash_helper_usage[] = {
        N_("git stash--helper ( pop | apply ) [--index] [-q|--quiet] 
[<stash>]"),
        N_("git stash--helper branch <branchname> [<stash>]"),
        N_("git stash--helper clear"),
+       N_("git stash--helper store [-m|--message <message>] [-q|--quiet] 
<commit>"),
        NULL
 };
 
@@ -58,6 +59,11 @@ static const char * const git_stash_helper_clear_usage[] = {
        NULL
 };
 
+static const char * const git_stash_helper_store_usage[] = {
+       N_("git stash--helper store [-m|--message <message>] [-q|--quiet] 
<commit>"),
+       NULL
+};
+
 static const char *ref_stash = "refs/stash";
 static int quiet;
 static struct strbuf stash_index_path = STRBUF_INIT;
@@ -731,6 +737,50 @@ static int show_stash(int argc, const char **argv, const 
char *prefix)
        return 0;
 }
 
+static int do_store_stash(const char *w_commit, const char *stash_msg,
+                         int quiet)
+{
+       int ret = 0;
+       struct object_id obj;
+
+       if (!stash_msg)
+               stash_msg  = xstrdup("Created via \"git stash--helper 
store\".");
+
+       ret = get_oid(w_commit, &obj);
+       if (!ret) {
+               ret = update_ref(stash_msg, ref_stash, &obj, NULL,
+                                REF_FORCE_CREATE_REFLOG,
+                                quiet ? UPDATE_REFS_QUIET_ON_ERR :
+                                UPDATE_REFS_MSG_ON_ERR);
+       }
+       if (ret && !quiet)
+               fprintf_ln(stderr, _("Cannot update %s with %s"),
+                          ref_stash, w_commit);
+
+       return ret;
+}
+
+static int store_stash(int argc, const char **argv, const char *prefix)
+{
+       const char *stash_msg = NULL;
+       struct option options[] = {
+               OPT__QUIET(&quiet, N_("be quiet, only report errors")),
+               OPT_STRING('m', "message", &stash_msg, "message", N_("stash 
message")),
+               OPT_END()
+       };
+
+       argc = parse_options(argc, argv, prefix, options,
+                            git_stash_helper_store_usage,
+                            PARSE_OPT_KEEP_UNKNOWN);
+
+       if (argc != 1) {
+               fprintf(stderr, _("\"git stash--helper store\" requires one 
<commit> argument\n"));
+               return -1;
+       }
+
+       return do_store_stash(argv[0], stash_msg, quiet);
+}
+
 int cmd_stash__helper(int argc, const char **argv, const char *prefix)
 {
        pid_t pid = getpid();
@@ -765,6 +815,8 @@ int cmd_stash__helper(int argc, const char **argv, const 
char *prefix)
                return !!list_stash(argc, argv, prefix);
        else if (!strcmp(argv[0], "show"))
                return !!show_stash(argc, argv, prefix);
+       else if (!strcmp(argv[0], "store"))
+               return !!store_stash(argc, argv, prefix);
 
        usage_msg_opt(xstrfmt(_("unknown subcommand: %s"), argv[0]),
                      git_stash_helper_usage, options);
diff --git a/git-stash.sh b/git-stash.sh
index 0d05cbc1e..5739c5152 100755
--- a/git-stash.sh
+++ b/git-stash.sh
@@ -191,45 +191,6 @@ create_stash () {
        die "$(gettext "Cannot record working tree state")"
 }
 
-store_stash () {
-       while test $# != 0
-       do
-               case "$1" in
-               -m|--message)
-                       shift
-                       stash_msg="$1"
-                       ;;
-               -m*)
-                       stash_msg=${1#-m}
-                       ;;
-               --message=*)
-                       stash_msg=${1#--message=}
-                       ;;
-               -q|--quiet)
-                       quiet=t
-                       ;;
-               *)
-                       break
-                       ;;
-               esac
-               shift
-       done
-       test $# = 1 ||
-       die "$(eval_gettext "\"$dashless store\" requires one <commit> 
argument")"
-
-       w_commit="$1"
-       if test -z "$stash_msg"
-       then
-               stash_msg="Created via \"git stash store\"."
-       fi
-
-       git update-ref --create-reflog -m "$stash_msg" $ref_stash $w_commit
-       ret=$?
-       test $ret != 0 && test -z "$quiet" &&
-       die "$(eval_gettext "Cannot update \$ref_stash with \$w_commit")"
-       return $ret
-}
-
 push_stash () {
        keep_index=
        patch_mode=
@@ -308,7 +269,7 @@ push_stash () {
                clear_stash || die "$(gettext "Cannot initialize stash")"
 
        create_stash -m "$stash_msg" -u "$untracked" -- "$@"
-       store_stash -m "$stash_msg" -q $w_commit ||
+       git stash--helper store -m "$stash_msg" -q $w_commit ||
        die "$(gettext "Cannot save the current status")"
        say "$(eval_gettext "Saved working directory and index state 
\$stash_msg")"
 
@@ -468,7 +429,7 @@ create)
        ;;
 store)
        shift
-       store_stash "$@"
+       git stash--helper store "$@"
        ;;
 drop)
        shift
-- 
2.18.0.573.g56500d98f

Reply via email to