@@ -1274,6 +1274,55 @@ static int check_exec_cmd(const char *cmd)
1274
1274
return 0 ;
1275
1275
}
1276
1276
1277
+ static void create_autostash (struct rebase_options * options )
1278
+ {
1279
+ struct strbuf buf = STRBUF_INIT ;
1280
+ struct lock_file lock_file = LOCK_INIT ;
1281
+ int fd ;
1282
+
1283
+ fd = hold_locked_index (& lock_file , 0 );
1284
+ refresh_cache (REFRESH_QUIET );
1285
+ if (0 <= fd )
1286
+ repo_update_index_if_able (the_repository , & lock_file );
1287
+ rollback_lock_file (& lock_file );
1288
+
1289
+ if (has_unstaged_changes (the_repository , 1 ) ||
1290
+ has_uncommitted_changes (the_repository , 1 )) {
1291
+ const char * autostash =
1292
+ state_dir_path ("autostash" , options );
1293
+ struct child_process stash = CHILD_PROCESS_INIT ;
1294
+ struct object_id oid ;
1295
+
1296
+ argv_array_pushl (& stash .args ,
1297
+ "stash" , "create" , "autostash" , NULL );
1298
+ stash .git_cmd = 1 ;
1299
+ stash .no_stdin = 1 ;
1300
+ strbuf_reset (& buf );
1301
+ if (capture_command (& stash , & buf , GIT_MAX_HEXSZ ))
1302
+ die (_ ("Cannot autostash" ));
1303
+ strbuf_trim_trailing_newline (& buf );
1304
+ if (get_oid (buf .buf , & oid ))
1305
+ die (_ ("Unexpected stash response: '%s'" ),
1306
+ buf .buf );
1307
+ strbuf_reset (& buf );
1308
+ strbuf_add_unique_abbrev (& buf , & oid , DEFAULT_ABBREV );
1309
+
1310
+ if (safe_create_leading_directories_const (autostash ))
1311
+ die (_ ("Could not create directory for '%s'" ),
1312
+ options -> state_dir );
1313
+ write_file (autostash , "%s" , oid_to_hex (& oid ));
1314
+ printf (_ ("Created autostash: %s\n" ), buf .buf );
1315
+ if (reset_head (the_repository , NULL , "reset --hard" ,
1316
+ NULL , RESET_HEAD_HARD , NULL , NULL ,
1317
+ DEFAULT_REFLOG_ACTION ) < 0 )
1318
+ die (_ ("could not reset --hard" ));
1319
+
1320
+ if (discard_index (the_repository -> index ) < 0 ||
1321
+ repo_read_index (the_repository ) < 0 )
1322
+ die (_ ("could not read index" ));
1323
+ }
1324
+ strbuf_release (& buf );
1325
+ }
1277
1326
1278
1327
int cmd_rebase (int argc , const char * * argv , const char * prefix )
1279
1328
{
@@ -1907,50 +1956,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
1907
1956
die (_ ("could not read index" ));
1908
1957
1909
1958
if (options .autostash ) {
1910
- struct lock_file lock_file = LOCK_INIT ;
1911
- int fd ;
1912
-
1913
- fd = hold_locked_index (& lock_file , 0 );
1914
- refresh_cache (REFRESH_QUIET );
1915
- if (0 <= fd )
1916
- repo_update_index_if_able (the_repository , & lock_file );
1917
- rollback_lock_file (& lock_file );
1918
-
1919
- if (has_unstaged_changes (the_repository , 1 ) ||
1920
- has_uncommitted_changes (the_repository , 1 )) {
1921
- const char * autostash =
1922
- state_dir_path ("autostash" , & options );
1923
- struct child_process stash = CHILD_PROCESS_INIT ;
1924
- struct object_id oid ;
1925
-
1926
- argv_array_pushl (& stash .args ,
1927
- "stash" , "create" , "autostash" , NULL );
1928
- stash .git_cmd = 1 ;
1929
- stash .no_stdin = 1 ;
1930
- strbuf_reset (& buf );
1931
- if (capture_command (& stash , & buf , GIT_MAX_HEXSZ ))
1932
- die (_ ("Cannot autostash" ));
1933
- strbuf_trim_trailing_newline (& buf );
1934
- if (get_oid (buf .buf , & oid ))
1935
- die (_ ("Unexpected stash response: '%s'" ),
1936
- buf .buf );
1937
- strbuf_reset (& buf );
1938
- strbuf_add_unique_abbrev (& buf , & oid , DEFAULT_ABBREV );
1939
-
1940
- if (safe_create_leading_directories_const (autostash ))
1941
- die (_ ("Could not create directory for '%s'" ),
1942
- options .state_dir );
1943
- write_file (autostash , "%s" , oid_to_hex (& oid ));
1944
- printf (_ ("Created autostash: %s\n" ), buf .buf );
1945
- if (reset_head (the_repository , NULL , "reset --hard" ,
1946
- NULL , RESET_HEAD_HARD , NULL , NULL ,
1947
- DEFAULT_REFLOG_ACTION ) < 0 )
1948
- die (_ ("could not reset --hard" ));
1949
-
1950
- if (discard_index (the_repository -> index ) < 0 ||
1951
- repo_read_index (the_repository ) < 0 )
1952
- die (_ ("could not read index" ));
1953
- }
1959
+ create_autostash (& options );
1954
1960
}
1955
1961
1956
1962
if (require_clean_work_tree (the_repository , "rebase" ,
0 commit comments