@matheusbsbs / matheus-bagliano / commits / 4d4bc157f8
Fork 0

rebase: extract create_autostash()

In a future commit, we will lib-ify this code. In preparation for this, extract the code into the create_autostash() function so that it can be cleaned up before it is finally lib-ified. This patch is best viewed with `--color-moved` and `--color-moved-ws=allow-indentation-change`. Signed-off-by: Denton Liu <liu.denton@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Denton Liu committed Apr 7, 2020 at 10:28 UTC 4d4bc157f85316576d9f9bb90657d455fe76e281
1 file changed +50 -44
builtin/rebase.c
+50 -44
@@ -1274,6 +1274,55 @@ static int check_exec_cmd(const char *cmd)
1274 return 0;
1275 }
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 +}
1326
1327 int cmd_rebase(int argc, const char **argv, const char *prefix)
1328 {
@@ -1907,50 +1956,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
1956 die(_("could not read index"));
1957
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);
1960 }
1961
1962 if (require_clean_work_tree(the_repository, "rebase",