@@ -59,6 +59,11 @@ static const char * const git_stash_helper_clear_usage[] = {
59
59
NULL
60
60
};
61
61
62
+ static const char * const git_stash_helper_store_usage [] = {
63
+ N_ ("git stash--helper store [-m|--message <message>] [-q|--quiet] <commit>" ),
64
+ NULL
65
+ };
66
+
62
67
static const char * ref_stash = "refs/stash" ;
63
68
static struct strbuf stash_index_path = STRBUF_INIT ;
64
69
@@ -731,6 +736,62 @@ static int show_stash(int argc, const char **argv, const char *prefix)
731
736
return diff_result_code (& rev .diffopt , 0 );
732
737
}
733
738
739
+ static int do_store_stash (const struct object_id * w_commit , const char * stash_msg ,
740
+ int quiet )
741
+ {
742
+ if (!stash_msg )
743
+ stash_msg = "Created via \"git stash store\"." ;
744
+
745
+ if (update_ref (stash_msg , ref_stash , w_commit , NULL ,
746
+ REF_FORCE_CREATE_REFLOG ,
747
+ quiet ? UPDATE_REFS_QUIET_ON_ERR :
748
+ UPDATE_REFS_MSG_ON_ERR )) {
749
+ if (!quiet ) {
750
+ fprintf_ln (stderr , _ ("Cannot update %s with %s" ),
751
+ ref_stash , oid_to_hex (w_commit ));
752
+ }
753
+ return -1 ;
754
+ }
755
+
756
+ return 0 ;
757
+ }
758
+
759
+ static int store_stash (int argc , const char * * argv , const char * prefix )
760
+ {
761
+ int quiet = 0 ;
762
+ const char * stash_msg = NULL ;
763
+ struct object_id obj ;
764
+ struct object_context dummy ;
765
+ struct option options [] = {
766
+ OPT__QUIET (& quiet , N_ ("be quiet" )),
767
+ OPT_STRING ('m' , "message" , & stash_msg , "message" ,
768
+ N_ ("stash message" )),
769
+ OPT_END ()
770
+ };
771
+
772
+ argc = parse_options (argc , argv , prefix , options ,
773
+ git_stash_helper_store_usage ,
774
+ PARSE_OPT_KEEP_UNKNOWN );
775
+
776
+ if (argc != 1 ) {
777
+ if (!quiet )
778
+ fprintf_ln (stderr , _ ("\"git stash store\" requires one "
779
+ "<commit> argument" ));
780
+ return -1 ;
781
+ }
782
+
783
+ if (get_oid_with_context (the_repository ,
784
+ argv [0 ], quiet ? GET_OID_QUIETLY : 0 , & obj ,
785
+ & dummy )) {
786
+ if (!quiet )
787
+ fprintf_ln (stderr , _ ("Cannot update %s with %s" ),
788
+ ref_stash , argv [0 ]);
789
+ return -1 ;
790
+ }
791
+
792
+ return do_store_stash (& obj , stash_msg , quiet );
793
+ }
794
+
734
795
int cmd_stash__helper (int argc , const char * * argv , const char * prefix )
735
796
{
736
797
pid_t pid = getpid ();
@@ -765,6 +826,8 @@ int cmd_stash__helper(int argc, const char **argv, const char *prefix)
765
826
return !!list_stash (argc , argv , prefix );
766
827
else if (!strcmp (argv [0 ], "show" ))
767
828
return !!show_stash (argc , argv , prefix );
829
+ else if (!strcmp (argv [0 ], "store" ))
830
+ return !!store_stash (argc , argv , prefix );
768
831
769
832
usage_msg_opt (xstrfmt (_ ("unknown subcommand: %s" ), argv [0 ]),
770
833
git_stash_helper_usage , options );
0 commit comments