Merge branch 'fc/fetch-with-import-fix' into maint
[gitweb.git] / builtin / stash.c
index e0528d4cc82d1395b4a41379681440417ae23031..fde6397caa16326912087215383506026d00ab79 100644 (file)
@@ -1,3 +1,4 @@
+#define USE_THE_INDEX_COMPATIBILITY_MACROS
 #include "builtin.h"
 #include "config.h"
 #include "parse-options.h"
@@ -432,7 +433,7 @@ static int do_apply_stash(const char *prefix, struct stash_info *info,
        if (info->has_u && restore_untracked(&info->u_tree))
                return error(_("could not restore untracked files from stash"));
 
-       init_merge_options(&o);
+       init_merge_options(&o, the_repository);
 
        o.branch1 = "Updated upstream";
        o.branch2 = "Stashed changes";
@@ -527,7 +528,7 @@ static int apply_stash(int argc, const char **argv, const char *prefix)
        return ret;
 }
 
-static int do_drop_stash(const char *prefix, struct stash_info *info, int quiet)
+static int do_drop_stash(struct stash_info *info, int quiet)
 {
        int ret;
        struct child_process cp_reflog = CHILD_PROCESS_INIT;
@@ -597,7 +598,7 @@ static int drop_stash(int argc, const char **argv, const char *prefix)
 
        assert_stash_ref(&info);
 
-       ret = do_drop_stash(prefix, &info, quiet);
+       ret = do_drop_stash(&info, quiet);
        free_stash_info(&info);
        return ret;
 }
@@ -626,7 +627,7 @@ static int pop_stash(int argc, const char **argv, const char *prefix)
                printf_ln(_("The stash entry is kept in case "
                            "you need it again."));
        else
-               ret = do_drop_stash(prefix, &info, quiet);
+               ret = do_drop_stash(&info, quiet);
 
        free_stash_info(&info);
        return ret;
@@ -663,7 +664,7 @@ static int branch_stash(int argc, const char **argv, const char *prefix)
        if (!ret)
                ret = do_apply_stash(prefix, &info, 1, 0);
        if (!ret && info.is_stash_ref)
-               ret = do_drop_stash(prefix, &info, 0);
+               ret = do_drop_stash(&info, 0);
 
        free_stash_info(&info);
 
@@ -712,11 +713,11 @@ static int git_stash_config(const char *var, const char *value, void *cb)
 static int show_stash(int argc, const char **argv, const char *prefix)
 {
        int i;
-       int opts = 0;
        int ret = 0;
        struct stash_info info;
        struct rev_info rev;
        struct argv_array stash_args = ARGV_ARRAY_INIT;
+       struct argv_array revision_args = ARGV_ARRAY_INIT;
        struct option options[] = {
                OPT_END()
        };
@@ -725,11 +726,12 @@ static int show_stash(int argc, const char **argv, const char *prefix)
        git_config(git_diff_ui_config, NULL);
        init_revisions(&rev, prefix);
 
+       argv_array_push(&revision_args, argv[0]);
        for (i = 1; i < argc; i++) {
                if (argv[i][0] != '-')
                        argv_array_push(&stash_args, argv[i]);
                else
-                       opts++;
+                       argv_array_push(&revision_args, argv[i]);
        }
 
        ret = get_stash_info(&info, stash_args.argc, stash_args.argv);
@@ -741,7 +743,7 @@ static int show_stash(int argc, const char **argv, const char *prefix)
         * The config settings are applied only if there are not passed
         * any options.
         */
-       if (!opts) {
+       if (revision_args.argc == 1) {
                git_config(git_stash_config, NULL);
                if (show_stat)
                        rev.diffopt.output_format = DIFF_FORMAT_DIFFSTAT;
@@ -755,11 +757,15 @@ static int show_stash(int argc, const char **argv, const char *prefix)
                }
        }
 
-       argc = setup_revisions(argc, argv, &rev, NULL);
+       argc = setup_revisions(revision_args.argc, revision_args.argv, &rev, NULL);
        if (argc > 1) {
                free_stash_info(&info);
                usage_with_options(git_stash_show_usage, options);
        }
+       if (!rev.diffopt.output_format) {
+               rev.diffopt.output_format = DIFF_FORMAT_PATCH;
+               diff_setup_done(&rev.diffopt);
+       }
 
        rev.diffopt.flags.recursive = 1;
        setup_diff_pager(&rev.diffopt);
@@ -814,7 +820,8 @@ static int store_stash(int argc, const char **argv, const char *prefix)
                return -1;
        }
 
-       if (get_oid_with_context(argv[0], quiet ? GET_OID_QUIETLY : 0, &obj,
+       if (get_oid_with_context(the_repository,
+                                argv[0], quiet ? GET_OID_QUIETLY : 0, &obj,
                                 &dummy)) {
                if (!quiet)
                        fprintf_ln(stderr, _("Cannot update %s with %s"),
@@ -1274,7 +1281,7 @@ static int do_push_stash(const struct pathspec *ps, const char *stash_msg, int q
                        ce_path_match(&the_index, active_cache[i], ps,
                                      ps_matched);
 
-               if (report_path_error(ps_matched, ps, NULL)) {
+               if (report_path_error(ps_matched, ps)) {
                        fprintf_ln(stderr, _("Did you forget to 'git add'?"));
                        ret = -1;
                        free(ps_matched);