@@ -31,9 +31,9 @@ use lib::core::rewrite::{
31
31
RepoResource ,
32
32
} ;
33
33
use lib:: git:: {
34
- process_diff_for_record, update_index , CategorizedReferenceName , FileMode , GitRunInfo ,
35
- MaybeZeroOid , NonZeroOid , Repo , ResolvedReferenceInfo , Stage , UpdateIndexCommand ,
36
- WorkingCopyChangesType , WorkingCopySnapshot ,
34
+ process_diff_for_record, summarize_diff_for_temporary_commit , update_index ,
35
+ CategorizedReferenceName , FileMode , GitRunInfo , MaybeZeroOid , NonZeroOid , Repo ,
36
+ ResolvedReferenceInfo , Stage , UpdateIndexCommand , WorkingCopyChangesType , WorkingCopySnapshot ,
37
37
} ;
38
38
use lib:: try_exit_code;
39
39
use lib:: util:: { ExitCode , EyreExitOr } ;
@@ -158,6 +158,12 @@ fn record(
158
158
) ?) ;
159
159
}
160
160
} else {
161
+ let messages = if messages. is_empty ( ) && stash {
162
+ get_default_stash_message ( & repo, effects, & snapshot, & working_copy_changes_type)
163
+ . map ( |message| vec ! [ message] ) ?
164
+ } else {
165
+ messages
166
+ } ;
161
167
let args = {
162
168
let mut args = vec ! [ "commit" ] ;
163
169
args. extend ( messages. iter ( ) . flat_map ( |message| [ "--message" , message] ) ) ;
@@ -568,3 +574,42 @@ To proceed anyways, run: git move -f -s 'siblings(.)",
568
574
ExecuteRebasePlanResult :: Failed { exit_code } => Ok ( Err ( exit_code) ) ,
569
575
}
570
576
}
577
+
578
+ #[ instrument]
579
+ fn get_default_stash_message (
580
+ repo : & Repo ,
581
+ effects : & Effects ,
582
+ snapshot : & WorkingCopySnapshot ,
583
+ working_copy_changes_type : & WorkingCopyChangesType ,
584
+ ) -> eyre:: Result < String > {
585
+ let ( old_tree, new_tree) = match working_copy_changes_type {
586
+ WorkingCopyChangesType :: Unstaged => {
587
+ let old_tree = snapshot. commit_stage0 . get_tree ( ) ?;
588
+ let new_tree = snapshot. commit_unstaged . get_tree ( ) ?;
589
+ ( Some ( old_tree) , new_tree)
590
+ }
591
+ WorkingCopyChangesType :: Staged => {
592
+ let old_tree = match snapshot. head_commit {
593
+ None => None ,
594
+ Some ( ref commit) => Some ( commit. get_tree ( ) ?) ,
595
+ } ;
596
+ let new_tree = snapshot. commit_stage0 . get_tree ( ) ?;
597
+ ( old_tree, new_tree)
598
+ }
599
+ WorkingCopyChangesType :: None | WorkingCopyChangesType :: Conflicts => {
600
+ unreachable ! ( "already handled via early exit" )
601
+ }
602
+ } ;
603
+
604
+ let diff = repo. get_diff_between_trees (
605
+ effects,
606
+ old_tree. as_ref ( ) ,
607
+ & new_tree,
608
+ 0 , // we don't care about the context here
609
+ ) ?;
610
+
611
+ Ok ( format ! (
612
+ "stash: {}" ,
613
+ summarize_diff_for_temporary_commit( & diff) ?
614
+ ) )
615
+ }
0 commit comments