]> git.ipfire.org Git - thirdparty/git.git/blobdiff - builtin/stash.c
object-name.h: move declarations for object-name.c functions from cache.h
[thirdparty/git.git] / builtin / stash.c
index 839569a98033f1cf2e8eb74b2eb6fc1770eba8fc..6442b5e20a6df290c1d484281c0598f9c706f78c 100644 (file)
@@ -1,6 +1,11 @@
-#define USE_THE_INDEX_COMPATIBILITY_MACROS
+#define USE_THE_INDEX_VARIABLE
 #include "builtin.h"
+#include "abspath.h"
 #include "config.h"
+#include "environment.h"
+#include "gettext.h"
+#include "hex.h"
+#include "object-name.h"
 #include "parse-options.h"
 #include "refs.h"
 #include "lockfile.h"
 #include "entry.h"
 #include "rerere.h"
 #include "revision.h"
+#include "setup.h"
 #include "log-tree.h"
 #include "diffcore.h"
 #include "exec-cmd.h"
 #include "reflog.h"
+#include "add-interactive.h"
 
 #define INCLUDE_ALL_FILES 2
 
@@ -200,7 +207,7 @@ static int get_stash_info(struct stash_info *info, int argc, const char **argv)
 
        revision = info->revision.buf;
 
-       if (get_oid(revision, &info->w_commit))
+       if (repo_get_oid(the_repository, revision, &info->w_commit))
                return error(_("%s is not a valid reference"), revision);
 
        assert_stash_like(info, revision);
@@ -210,7 +217,8 @@ static int get_stash_info(struct stash_info *info, int argc, const char **argv)
        end_of_rev = strchrnul(revision, '@');
        strbuf_add(&symbolic, revision, end_of_rev - revision);
 
-       ret = dwim_ref(symbolic.buf, symbolic.len, &dummy, &expanded_ref, 0);
+       ret = repo_dwim_ref(the_repository, symbolic.buf, symbolic.len,
+                           &dummy, &expanded_ref, 0);
        strbuf_release(&symbolic);
        switch (ret) {
        case 0: /* Not found, but valid ref */
@@ -230,7 +238,7 @@ static int get_stash_info(struct stash_info *info, int argc, const char **argv)
 static int do_clear_stash(void)
 {
        struct object_id obj;
-       if (get_oid(ref_stash, &obj))
+       if (repo_get_oid(the_repository, ref_stash, &obj))
                return 0;
 
        return delete_ref(NULL, ref_stash, &obj, 0);
@@ -426,7 +434,7 @@ static void unstage_changes_unless_new(struct object_id *orig_tree)
         * to the index before a merge was run) and the current index
         * (reflecting the changes brought in by the merge).
         */
-       diff_setup(&diff_opts);
+       repo_diff_setup(the_repository, &diff_opts);
        diff_opts.flags.recursive = 1;
        diff_opts.detect_rename = 0;
        diff_opts.output_format = DIFF_FORMAT_NO_OUTPUT;
@@ -528,7 +536,8 @@ static int do_apply_stash(const char *prefix, struct stash_info *info,
                                         NULL, NULL, NULL))
                return -1;
 
-       if (write_cache_as_tree(&c_tree, 0, NULL))
+       if (write_index_as_tree(&c_tree, &the_index, get_index_file(), 0,
+                               NULL))
                return error(_("cannot apply a stash in the middle of a merge"));
 
        if (index) {
@@ -552,7 +561,8 @@ static int do_apply_stash(const char *prefix, struct stash_info *info,
 
                        discard_index(&the_index);
                        repo_read_index(the_repository);
-                       if (write_cache_as_tree(&index_tree, 0, NULL))
+                       if (write_index_as_tree(&index_tree, &the_index,
+                                               get_index_file(), 0, NULL))
                                return error(_("could not save index tree"));
 
                        reset_head();
@@ -597,7 +607,7 @@ static int do_apply_stash(const char *prefix, struct stash_info *info,
                ret = error(_("could not write index"));
 
        if (ret) {
-               rerere(0);
+               repo_rerere(the_repository, 0);
 
                if (index)
                        fprintf_ln(stderr, _("Index was not unstashed."));
@@ -897,7 +907,7 @@ static int show_stash(int argc, const char **argv, const char *prefix)
 
        init_diff_ui_defaults();
        git_config(git_diff_ui_config, NULL);
-       init_revisions(&rev, prefix);
+       repo_init_revisions(the_repository, &rev, prefix);
 
        argc = parse_options(argc, argv, prefix, options, git_stash_show_usage,
                             PARSE_OPT_KEEP_ARGV0 | PARSE_OPT_KEEP_UNKNOWN_OPT |
@@ -1080,13 +1090,13 @@ static int check_changes_tracked_files(const struct pathspec *ps)
        int ret = 0;
 
        /* No initial commit. */
-       if (get_oid("HEAD", &dummy))
+       if (repo_get_oid(the_repository, "HEAD", &dummy))
                return -1;
 
        if (repo_read_index(the_repository) < 0)
                return -1;
 
-       init_revisions(&rev, NULL);
+       repo_init_revisions(the_repository, &rev, NULL);
        copy_pathspec(&rev.prune_data, ps);
 
        rev.diffopt.flags.quick = 1;
@@ -1229,7 +1239,7 @@ static int stash_patch(struct stash_info *info, const struct pathspec *ps,
        old_index_env = xstrdup_or_null(getenv(INDEX_ENVIRONMENT));
        setenv(INDEX_ENVIRONMENT, the_repository->index_file, 1);
 
-       ret = run_add_interactive(NULL, "--patch=stash", ps);
+       ret = !!run_add_p(the_repository, ADD_P_STASH, NULL, ps);
 
        the_repository->index_file = old_repo_index_file;
        if (old_index_env && *old_index_env)
@@ -1273,7 +1283,7 @@ static int stash_working_tree(struct stash_info *info, const struct pathspec *ps
        struct strbuf diff_output = STRBUF_INIT;
        struct index_state istate = INDEX_STATE_INIT(the_repository);
 
-       init_revisions(&rev, NULL);
+       repo_init_revisions(the_repository, &rev, NULL);
        copy_pathspec(&rev.prune_data, ps);
 
        set_alternate_index_output(stash_index_path.buf);
@@ -1352,7 +1362,7 @@ static int do_create_stash(const struct pathspec *ps, struct strbuf *stash_msg_b
                goto done;
        }
 
-       if (get_oid("HEAD", &info->b_commit)) {
+       if (repo_get_oid(the_repository, "HEAD", &info->b_commit)) {
                if (!quiet)
                        fprintf_ln(stderr, _("You do not have "
                                             "the initial commit yet"));
@@ -1370,14 +1380,16 @@ static int do_create_stash(const struct pathspec *ps, struct strbuf *stash_msg_b
        branch_ref = resolve_ref_unsafe("HEAD", 0, NULL, &flags);
        if (flags & REF_ISSYMREF)
                skip_prefix(branch_ref, "refs/heads/", &branch_name);
-       head_short_sha1 = find_unique_abbrev(&head_commit->object.oid,
-                                            DEFAULT_ABBREV);
+       head_short_sha1 = repo_find_unique_abbrev(the_repository,
+                                                 &head_commit->object.oid,
+                                                 DEFAULT_ABBREV);
        strbuf_addf(&msg, "%s: %s ", branch_name, head_short_sha1);
        pp_commit_easy(CMIT_FMT_ONELINE, head_commit, &msg);
 
        strbuf_addf(&commit_tree_label, "index on %s\n", msg.buf);
        commit_list_insert(head_commit, &parents);
-       if (write_cache_as_tree(&info->i_tree, 0, NULL) ||
+       if (write_index_as_tree(&info->i_tree, &the_index, get_index_file(), 0,
+                               NULL) ||
            commit_tree(commit_tree_label.buf, commit_tree_label.len,
                        &info->i_tree, parents, &info->i_commit, NULL, NULL)) {
                if (!quiet)
@@ -1727,6 +1739,7 @@ static int push_stash(int argc, const char **argv, const char *prefix,
                OPT_PATHSPEC_FILE_NUL(&pathspec_file_nul),
                OPT_END()
        };
+       int ret;
 
        if (argc) {
                force_assume = !strcmp(argv[0], "-p");
@@ -1766,8 +1779,10 @@ static int push_stash(int argc, const char **argv, const char *prefix,
                die(_("the option '%s' requires '%s'"), "--pathspec-file-nul", "--pathspec-from-file");
        }
 
-       return do_push_stash(&ps, stash_msg, quiet, keep_index, patch_mode,
-                            include_untracked, only_staged);
+       ret = do_push_stash(&ps, stash_msg, quiet, keep_index, patch_mode,
+                           include_untracked, only_staged);
+       clear_pathspec(&ps);
+       return ret;
 }
 
 static int push_stash_unassumed(int argc, const char **argv, const char *prefix)