diff options
author | Junio C Hamano <gitster@pobox.com> | 2010-09-04 08:17:09 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-09-04 08:17:09 -0700 |
commit | 02377cf4bc6050cdbf600ce65114a5438b049763 (patch) | |
tree | dbd54f78a83512f4f088e5799209ce730e77811f /builtin/checkout.c | |
parent | a2c6726417db22bea7a878aeb88e18bcc95e5c0c (diff) | |
parent | 23b4c7bcc58431beaf9c870a2d6b2ad4fb088a9f (diff) | |
download | git-02377cf4bc6050cdbf600ce65114a5438b049763.tar.gz |
Merge branch 'jl/submodule-ignore-diff'
* jl/submodule-ignore-diff:
checkout: Use submodule.*.ignore settings from .git/config and .gitmodules
checkout: Add test for diff.ignoreSubmodules
checkout: respect diff.ignoreSubmodules setting
Conflicts:
builtin/checkout.c
Diffstat (limited to 'builtin/checkout.c')
-rw-r--r-- | builtin/checkout.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/builtin/checkout.c b/builtin/checkout.c index aae80c34cf..560eae1715 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -18,6 +18,7 @@ #include "xdiff-interface.h" #include "ll-merge.h" #include "resolve-undo.h" +#include "submodule.h" static const char * const checkout_usage[] = { "git checkout [options] <branch>", @@ -40,6 +41,7 @@ struct checkout_opts { const char *new_orphan_branch; int new_branch_log; enum branch_track track; + struct diff_options diff_options; }; static int post_checkout_hook(struct commit *old, struct commit *new, @@ -282,11 +284,12 @@ static int checkout_paths(struct tree *source_tree, const char **pathspec, return errs; } -static void show_local_changes(struct object *head) +static void show_local_changes(struct object *head, struct diff_options *opts) { struct rev_info rev; /* I think we want full paths, even if we're in a subdirectory. */ init_revisions(&rev, NULL); + rev.diffopt.flags = opts->flags; rev.diffopt.output_format |= DIFF_FORMAT_NAME_STATUS; if (diff_setup_done(&rev.diffopt) < 0) die("diff_setup_done failed"); @@ -470,7 +473,7 @@ static int merge_working_tree(struct checkout_opts *opts, die("unable to write new index file"); if (!opts->force && !opts->quiet) - show_local_changes(&new->commit->object); + show_local_changes(&new->commit->object, &opts->diff_options); return 0; } @@ -618,7 +621,16 @@ static int switch_branches(struct checkout_opts *opts, struct branch_info *new) static int git_checkout_config(const char *var, const char *value, void *cb) { - return git_xmerge_config(var, value, cb); + if (!strcmp(var, "diff.ignoresubmodules")) { + struct checkout_opts *opts = cb; + handle_ignore_submodules_arg(&opts->diff_options, value); + return 0; + } + + if (!prefixcmp(var, "submodule.")) + return parse_submodule_config_option(var, value); + + return git_xmerge_config(var, value, NULL); } static int interactive_checkout(const char *revision, const char **pathspec, @@ -702,7 +714,8 @@ int cmd_checkout(int argc, const char **argv, const char *prefix) memset(&opts, 0, sizeof(opts)); memset(&new, 0, sizeof(new)); - git_config(git_checkout_config, NULL); + gitmodules_config(); + git_config(git_checkout_config, &opts); opts.track = BRANCH_TRACK_UNSPECIFIED; |