コード例 #1
0
ファイル: diff-lib.c プロジェクト: jjuran/git
/*
 * Has a file changed or has a submodule new commits or a dirty work tree?
 *
 * Return 1 when changes are detected, 0 otherwise. If the DIRTY_SUBMODULES
 * option is set, the caller does not only want to know if a submodule is
 * modified at all but wants to know all the conditions that are met (new
 * commits, untracked content and/or modified content).
 */
static int match_stat_with_submodule(struct diff_options *diffopt,
                                     struct cache_entry *ce, struct stat *st,
                                     unsigned ce_option, unsigned *dirty_submodule)
{
    int changed = ce_match_stat(ce, st, ce_option);
    if (S_ISGITLINK(ce->ce_mode)) {
        unsigned orig_flags = diffopt->flags;
        if (!DIFF_OPT_TST(diffopt, OVERRIDE_SUBMODULE_CONFIG))
            set_diffopt_flags_from_submodule_config(diffopt, ce->name);
        if (DIFF_OPT_TST(diffopt, IGNORE_SUBMODULES))
            changed = 0;
        else if (!DIFF_OPT_TST(diffopt, IGNORE_DIRTY_SUBMODULES)
                 && (!changed || DIFF_OPT_TST(diffopt, DIRTY_SUBMODULES)))
            *dirty_submodule = is_submodule_modified(ce->name, DIFF_OPT_TST(diffopt, IGNORE_UNTRACKED_IN_SUBMODULES));
        diffopt->flags = orig_flags;
    }
    return changed;
}
コード例 #2
0
ファイル: diff-lib.c プロジェクト: MichaelBlume/git
/*
 * Has a file changed or has a submodule new commits or a dirty work tree?
 *
 * Return 1 when changes are detected, 0 otherwise. If the DIRTY_SUBMODULES
 * option is set, the caller does not only want to know if a submodule is
 * modified at all but wants to know all the conditions that are met (new
 * commits, untracked content and/or modified content).
 */
static int match_stat_with_submodule(struct diff_options *diffopt,
				     const struct cache_entry *ce,
				     struct stat *st, unsigned ce_option,
				     unsigned *dirty_submodule)
{
	int changed = ie_match_stat(diffopt->repo->index, ce, st, ce_option);
	if (S_ISGITLINK(ce->ce_mode)) {
		struct diff_flags orig_flags = diffopt->flags;
		if (!diffopt->flags.override_submodule_config)
			set_diffopt_flags_from_submodule_config(diffopt, ce->name);
		if (diffopt->flags.ignore_submodules)
			changed = 0;
		else if (!diffopt->flags.ignore_dirty_submodules &&
			 (!changed || diffopt->flags.dirty_submodules))
			*dirty_submodule = is_submodule_modified(ce->name,
								 diffopt->flags.ignore_untracked_in_submodules);
		diffopt->flags = orig_flags;
	}
	return changed;
}