]> git.ipfire.org Git - thirdparty/git.git/blobdiff - builtin/stash.c
The sixth batch
[thirdparty/git.git] / builtin / stash.c
index 062be1fbc07b0c2ecfcc6f41f5d995ae13c0aecb..7859bc0866adc10c1c83d1ec9de7b72fc2219d15 100644 (file)
@@ -1,4 +1,3 @@
-#define USE_THE_INDEX_VARIABLE
 #include "builtin.h"
 #include "abspath.h"
 #include "config.h"
@@ -196,7 +195,7 @@ static int get_stash_info(struct stash_info *info, int argc, const char **argv)
                commit = argv[0];
 
        if (!commit) {
-               if (!ref_exists(ref_stash)) {
+               if (!refs_ref_exists(get_main_ref_store(the_repository), ref_stash)) {
                        fprintf_ln(stderr, _("No stash entries found."));
                        return -1;
                }
@@ -244,7 +243,8 @@ static int do_clear_stash(void)
        if (repo_get_oid(the_repository, ref_stash, &obj))
                return 0;
 
-       return delete_ref(NULL, ref_stash, &obj, 0);
+       return refs_delete_ref(get_main_ref_store(the_repository), NULL,
+                              ref_stash, &obj, 0);
 }
 
 static int clear_stash(int argc, const char **argv, const char *prefix)
@@ -273,7 +273,7 @@ static int reset_tree(struct object_id *i_tree, int update, int reset)
        struct lock_file lock_file = LOCK_INIT;
 
        repo_read_index_preload(the_repository, NULL, 0);
-       if (refresh_index(&the_index, REFRESH_QUIET, NULL, NULL, NULL))
+       if (refresh_index(the_repository->index, REFRESH_QUIET, NULL, NULL, NULL))
                return -1;
 
        repo_hold_locked_index(the_repository, &lock_file, LOCK_DIE_ON_ERROR);
@@ -287,8 +287,8 @@ static int reset_tree(struct object_id *i_tree, int update, int reset)
        init_tree_desc(t, &tree->object.oid, tree->buffer, tree->size);
 
        opts.head_idx = 1;
-       opts.src_index = &the_index;
-       opts.dst_index = &the_index;
+       opts.src_index = the_repository->index;
+       opts.dst_index = the_repository->index;
        opts.merge = 1;
        opts.reset = reset ? UNPACK_RESET_PROTECT_UNTRACKED : 0;
        opts.update = update;
@@ -299,7 +299,7 @@ static int reset_tree(struct object_id *i_tree, int update, int reset)
        if (unpack_trees(nr_trees, t, &opts))
                return -1;
 
-       if (write_locked_index(&the_index, &lock_file, COMMIT_LOCK))
+       if (write_locked_index(the_repository->index, &lock_file, COMMIT_LOCK))
                return error(_("unable to write new index file"));
 
        return 0;
@@ -430,7 +430,7 @@ static void unstage_changes_unless_new(struct object_id *orig_tree)
        state.force = 1;
        state.quiet = 1;
        state.refresh_cache = 1;
-       state.istate = &the_index;
+       state.istate = the_repository->index;
 
        /*
         * Step 1: get a difference between orig_tree (which corresponding
@@ -454,7 +454,7 @@ static void unstage_changes_unless_new(struct object_id *orig_tree)
 
                /* Look up the path's position in the current index. */
                p = diff_queued_diff.queue[i];
-               pos = index_name_pos(&the_index, p->two->path,
+               pos = index_name_pos(the_repository->index, p->two->path,
                                     strlen(p->two->path));
 
                /*
@@ -465,10 +465,10 @@ static void unstage_changes_unless_new(struct object_id *orig_tree)
                 * path, but left it out of the working tree, then clear the
                 * SKIP_WORKTREE bit and write it to the working tree.
                 */
-               if (pos >= 0 && ce_skip_worktree(the_index.cache[pos])) {
+               if (pos >= 0 && ce_skip_worktree(the_repository->index->cache[pos])) {
                        struct stat st;
 
-                       ce = the_index.cache[pos];
+                       ce = the_repository->index->cache[pos];
                        if (!lstat(ce->name, &st)) {
                                /* Conflicting path present; relocate it */
                                struct strbuf new_path = STRBUF_INIT;
@@ -504,12 +504,12 @@ static void unstage_changes_unless_new(struct object_id *orig_tree)
                        if (pos < 0)
                                option = ADD_CACHE_OK_TO_ADD;
 
-                       ce = make_cache_entry(&the_index,
+                       ce = make_cache_entry(the_repository->index,
                                              p->one->mode,
                                              &p->one->oid,
                                              p->one->path,
                                              0, 0);
-                       add_index_entry(&the_index, ce, option);
+                       add_index_entry(the_repository->index, ce, option);
                }
        }
        diff_flush(&diff_opts);
@@ -518,7 +518,7 @@ static void unstage_changes_unless_new(struct object_id *orig_tree)
         * Step 4: write the new index to disk
         */
        repo_hold_locked_index(the_repository, &lock, LOCK_DIE_ON_ERROR);
-       if (write_locked_index(&the_index, &lock,
+       if (write_locked_index(the_repository->index, &lock,
                               COMMIT_LOCK | SKIP_IF_UNCHANGED))
                die(_("could not write index"));
 }
@@ -539,7 +539,7 @@ static int do_apply_stash(const char *prefix, struct stash_info *info,
                                         NULL, NULL, NULL))
                return error(_("could not write index"));
 
-       if (write_index_as_tree(&c_tree, &the_index, get_index_file(), 0,
+       if (write_index_as_tree(&c_tree, the_repository->index, get_index_file(), 0,
                                NULL))
                return error(_("cannot apply a stash in the middle of a merge"));
 
@@ -562,14 +562,14 @@ static int do_apply_stash(const char *prefix, struct stash_info *info,
                                return error(_("conflicts in index. "
                                               "Try without --index."));
 
-                       discard_index(&the_index);
+                       discard_index(the_repository->index);
                        repo_read_index(the_repository);
-                       if (write_index_as_tree(&index_tree, &the_index,
+                       if (write_index_as_tree(&index_tree, the_repository->index,
                                                get_index_file(), 0, NULL))
                                return error(_("could not save index tree"));
 
                        reset_head();
-                       discard_index(&the_index);
+                       discard_index(the_repository->index);
                        repo_read_index(the_repository);
                }
        }
@@ -687,7 +687,8 @@ static int reject_reflog_ent(struct object_id *ooid UNUSED,
 
 static int reflog_is_empty(const char *refname)
 {
-       return !for_each_reflog_ent(refname, reject_reflog_ent, NULL);
+       return !refs_for_each_reflog_ent(get_main_ref_store(the_repository),
+                                        refname, reject_reflog_ent, NULL);
 }
 
 static int do_drop_stash(struct stash_info *info, int quiet)
@@ -824,7 +825,7 @@ static int list_stash(int argc, const char **argv, const char *prefix)
                             git_stash_list_usage,
                             PARSE_OPT_KEEP_UNKNOWN_OPT);
 
-       if (!ref_exists(ref_stash))
+       if (!refs_ref_exists(get_main_ref_store(the_repository), ref_stash))
                return 0;
 
        cp.git_cmd = 1;
@@ -875,8 +876,8 @@ static void diff_include_untracked(const struct stash_info *info, struct diff_op
        }
 
        unpack_tree_opt.head_idx = -1;
-       unpack_tree_opt.src_index = &the_index;
-       unpack_tree_opt.dst_index = &the_index;
+       unpack_tree_opt.src_index = the_repository->index;
+       unpack_tree_opt.dst_index = the_repository->index;
        unpack_tree_opt.merge = 1;
        unpack_tree_opt.fn = stash_worktree_untracked_merge;
 
@@ -998,10 +999,10 @@ static int do_store_stash(const struct object_id *w_commit, const char *stash_ms
        if (!stash_msg)
                stash_msg = "Created via \"git stash store\".";
 
-       if (update_ref(stash_msg, ref_stash, w_commit, NULL,
-                      REF_FORCE_CREATE_REFLOG,
-                      quiet ? UPDATE_REFS_QUIET_ON_ERR :
-                      UPDATE_REFS_MSG_ON_ERR)) {
+       if (refs_update_ref(get_main_ref_store(the_repository), stash_msg, ref_stash, w_commit, NULL,
+                           REF_FORCE_CREATE_REFLOG,
+                           quiet ? UPDATE_REFS_QUIET_ON_ERR :
+                           UPDATE_REFS_MSG_ON_ERR)) {
                if (!quiet) {
                        fprintf_ln(stderr, _("Cannot update %s with %s"),
                                   ref_stash, oid_to_hex(w_commit));
@@ -1205,8 +1206,8 @@ static int stash_staged(struct stash_info *info, struct strbuf *out_patch,
        }
 
        cp_diff_tree.git_cmd = 1;
-       strvec_pushl(&cp_diff_tree.args, "diff-tree", "-p", "-U1", "HEAD",
-                    oid_to_hex(&info->w_tree), "--", NULL);
+       strvec_pushl(&cp_diff_tree.args, "diff-tree", "-p", "--binary",
+                    "-U1", "HEAD", oid_to_hex(&info->w_tree), "--", NULL);
        if (pipe_command(&cp_diff_tree, NULL, 0, out_patch, 0, NULL, 0)) {
                ret = -1;
                goto done;
@@ -1384,7 +1385,8 @@ static int do_create_stash(const struct pathspec *ps, struct strbuf *stash_msg_b
                goto done;
        }
 
-       branch_ref = resolve_ref_unsafe("HEAD", 0, NULL, &flags);
+       branch_ref = refs_resolve_ref_unsafe(get_main_ref_store(the_repository),
+                                            "HEAD", 0, NULL, &flags);
        if (flags & REF_ISSYMREF)
                skip_prefix(branch_ref, "refs/heads/", &branch_name);
        head_short_sha1 = repo_find_unique_abbrev(the_repository,
@@ -1395,7 +1397,7 @@ static int do_create_stash(const struct pathspec *ps, struct strbuf *stash_msg_b
 
        strbuf_addf(&commit_tree_label, "index on %s\n", msg.buf);
        commit_list_insert(head_commit, &parents);
-       if (write_index_as_tree(&info->i_tree, &the_index, get_index_file(), 0,
+       if (write_index_as_tree(&info->i_tree, the_repository->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)) {
@@ -1540,9 +1542,9 @@ static int do_push_stash(const struct pathspec *ps, const char *stash_msg, int q
                char *ps_matched = xcalloc(ps->nr, 1);
 
                /* TODO: audit for interaction with sparse-index. */
-               ensure_full_index(&the_index);
-               for (i = 0; i < the_index.cache_nr; i++)
-                       ce_path_match(&the_index, the_index.cache[i], ps,
+               ensure_full_index(the_repository->index);
+               for (i = 0; i < the_repository->index->cache_nr; i++)
+                       ce_path_match(the_repository->index, the_repository->index->cache[i], ps,
                                      ps_matched);
 
                if (report_path_error(ps_matched, ps)) {
@@ -1566,7 +1568,7 @@ static int do_push_stash(const struct pathspec *ps, const char *stash_msg, int q
                goto done;
        }
 
-       if (!reflog_exists(ref_stash) && do_clear_stash()) {
+       if (!refs_reflog_exists(get_main_ref_store(the_repository), ref_stash) && do_clear_stash()) {
                ret = -1;
                if (!quiet)
                        fprintf_ln(stderr, _("Cannot initialize stash"));
@@ -1612,7 +1614,7 @@ static int do_push_stash(const struct pathspec *ps, const char *stash_msg, int q
                                goto done;
                        }
                }
-               discard_index(&the_index);
+               discard_index(the_repository->index);
                if (ps->nr) {
                        struct child_process cp_add = CHILD_PROCESS_INIT;
                        struct child_process cp_diff = CHILD_PROCESS_INIT;