git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
blob 0165fa22fcd1e835e355fa69e2249860984a485c 3154 bytes (raw)
name: diff-merges.c 	 # note: path name is non-authoritative(*)

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
 
#include "diff-merges.h"

#include "revision.h"

static void suppress(struct rev_info *revs)
{
	revs->separate_merges = 0;
	revs->first_parent_merges = 0;
	revs->combine_merges = 0;
	revs->dense_combined_merges = 0;
	revs->combined_all_paths = 0;
}

static void set_separate(struct rev_info *revs)
{
	suppress(revs);
	revs->separate_merges = 1;
}

static void set_first_parent(struct rev_info *revs)
{
	set_separate(revs);
	revs->first_parent_merges = 1;
}

static void set_m(struct rev_info *revs)
{
	/*
	 * To "diff-index", "-m" means "match missing", and to the "log"
	 * family of commands, it means "show full diff for merges". Set
	 * both fields appropriately.
	 */
	set_separate(revs);
	revs->match_missing = 1;
}

static void set_combined(struct rev_info *revs)
{
	suppress(revs);
	revs->combine_merges = 1;
	revs->dense_combined_merges = 0;
}

static void set_dense_combined(struct rev_info *revs)
{
	suppress(revs);
	revs->combine_merges = 1;
	revs->dense_combined_merges = 1;
}

static void set_diff_merges(struct rev_info *revs, const char *optarg)
{
	if (0) ;
	else if (!strcmp(optarg, "off")   || !strcmp(optarg, "none"))
		suppress(revs);
	else if (!strcmp(optarg, "first") || !strcmp(optarg, "first-parent"))
		set_first_parent(revs);
	else if (!strcmp(optarg, "sep")   || !strcmp(optarg, "separate"))
		set_separate(revs);
	else if (!strcmp(optarg, "comb")  || !strcmp(optarg, "combined"))
		set_combined(revs);
	else if (!strcmp(optarg, "dense") || !strcmp(optarg, "dense-combined"))
		set_dense_combined(revs);
	else
		die(_("unknown value for --diff-merges: %s"), optarg);
}

/*
 * Public functions. They are in the order they are called.
 */

int diff_merges_parse_opts(struct rev_info *revs, const char **argv)
{
	int argcount = 1;
	const char *optarg;
	const char *arg = argv[0];

	if (!strcmp(arg, "-m"))
		set_m(revs);
	else if (!strcmp(arg, "-c"))
		set_combined(revs);
	else if (!strcmp(arg, "--cc"))
		set_dense_combined(revs);
	else if (!strcmp(arg, "--no-diff-merges"))
		suppress(revs);
	else if (!strcmp(arg, "--combined-all-paths"))
		revs->combined_all_paths = 1;
	else if ((argcount = parse_long_opt("diff-merges", argv, &optarg)))
		set_diff_merges(revs, optarg);
	else
		return 0;

	revs->explicit_diff_merges = 1;
	return argcount;
}

void diff_merges_suppress(struct rev_info *revs)
{
	suppress(revs);
}

void diff_merges_default_to_first_parent(struct rev_info *revs)
{
	if (!revs->explicit_diff_merges)
		revs->separate_merges = 1;
	if (revs->separate_merges)
		revs->first_parent_merges = 1;
}

void diff_merges_default_to_dense_combined(struct rev_info *revs)
{
	if (!revs->explicit_diff_merges)
		set_dense_combined(revs);
}

void diff_merges_set_dense_combined_if_unset(struct rev_info *revs)
{
	if (!revs->combine_merges)
		set_dense_combined(revs);
}

void diff_merges_setup_revs(struct rev_info *revs)
{
	if (revs->combine_merges == 0)
		revs->dense_combined_merges = 0;
	if (revs->separate_merges == 0)
		revs->first_parent_merges = 0;
	if (revs->combined_all_paths && !revs->combine_merges)
		die("--combined-all-paths makes no sense without -c or --cc");
	if (revs->combine_merges)
		revs->diff = 1;
}

debug log:

solving 0165fa22fcd1 ...
found 0165fa22fcd1 in https://public-inbox.org/git/20201216184929.3924-24-sorganov@gmail.com/
found cba391604ac7 in https://public-inbox.org/git/20201216184929.3924-23-sorganov@gmail.com/
found 6446e2093661 in https://public-inbox.org/git/20201216184929.3924-22-sorganov@gmail.com/
found 4c434e914c8d in https://public-inbox.org/git/20201216184929.3924-21-sorganov@gmail.com/
found 9ff6ea02edb8 in https://public-inbox.org/git/20201216184929.3924-20-sorganov@gmail.com/
found 711df9975dd5 in https://public-inbox.org/git/20201216184929.3924-18-sorganov@gmail.com/
found 5d20e329a661 in https://public-inbox.org/git/20201216184929.3924-17-sorganov@gmail.com/
found 76ddbc37bd59 in https://public-inbox.org/git/20201216184929.3924-14-sorganov@gmail.com/
found c99d77a318dc in https://public-inbox.org/git/20201216184929.3924-13-sorganov@gmail.com/
found 899f9e905d3c in https://public-inbox.org/git/20201216184929.3924-12-sorganov@gmail.com/
found b150c0490b1d in https://public-inbox.org/git/20201216184929.3924-11-sorganov@gmail.com/
found a3b732c34717 in https://public-inbox.org/git/20201216184929.3924-10-sorganov@gmail.com/
found 19b85bfdba6f in https://public-inbox.org/git/20201216184929.3924-9-sorganov@gmail.com/
found f0d0ae208213 in https://public-inbox.org/git/20201216184929.3924-8-sorganov@gmail.com/
found b647920bdb22 in https://public-inbox.org/git/20201216184929.3924-7-sorganov@gmail.com/
found eb25bcca2494 in https://public-inbox.org/git/20201216184929.3924-6-sorganov@gmail.com/

applying [1/16] https://public-inbox.org/git/20201216184929.3924-6-sorganov@gmail.com/
diff --git a/diff-merges.c b/diff-merges.c
new file mode 100644
index 000000000000..eb25bcca2494


applying [2/16] https://public-inbox.org/git/20201216184929.3924-7-sorganov@gmail.com/
diff --git a/diff-merges.c b/diff-merges.c
index eb25bcca2494..b647920bdb22 100644


applying [3/16] https://public-inbox.org/git/20201216184929.3924-8-sorganov@gmail.com/
diff --git a/diff-merges.c b/diff-merges.c
index b647920bdb22..f0d0ae208213 100644


applying [4/16] https://public-inbox.org/git/20201216184929.3924-9-sorganov@gmail.com/
diff --git a/diff-merges.c b/diff-merges.c
index f0d0ae208213..19b85bfdba6f 100644


applying [5/16] https://public-inbox.org/git/20201216184929.3924-10-sorganov@gmail.com/
diff --git a/diff-merges.c b/diff-merges.c
index 19b85bfdba6f..a3b732c34717 100644


applying [6/16] https://public-inbox.org/git/20201216184929.3924-11-sorganov@gmail.com/
diff --git a/diff-merges.c b/diff-merges.c
index a3b732c34717..b150c0490b1d 100644


applying [7/16] https://public-inbox.org/git/20201216184929.3924-12-sorganov@gmail.com/
diff --git a/diff-merges.c b/diff-merges.c
index b150c0490b1d..899f9e905d3c 100644


applying [8/16] https://public-inbox.org/git/20201216184929.3924-13-sorganov@gmail.com/
diff --git a/diff-merges.c b/diff-merges.c
index 899f9e905d3c..c99d77a318dc 100644


applying [9/16] https://public-inbox.org/git/20201216184929.3924-14-sorganov@gmail.com/
diff --git a/diff-merges.c b/diff-merges.c
index c99d77a318dc..76ddbc37bd59 100644


applying [10/16] https://public-inbox.org/git/20201216184929.3924-17-sorganov@gmail.com/
diff --git a/diff-merges.c b/diff-merges.c
index 76ddbc37bd59..5d20e329a661 100644


applying [11/16] https://public-inbox.org/git/20201216184929.3924-18-sorganov@gmail.com/
diff --git a/diff-merges.c b/diff-merges.c
index 5d20e329a661..711df9975dd5 100644


applying [12/16] https://public-inbox.org/git/20201216184929.3924-20-sorganov@gmail.com/
diff --git a/diff-merges.c b/diff-merges.c
index 711df9975dd5..9ff6ea02edb8 100644


applying [13/16] https://public-inbox.org/git/20201216184929.3924-21-sorganov@gmail.com/
diff --git a/diff-merges.c b/diff-merges.c
index 9ff6ea02edb8..4c434e914c8d 100644


applying [14/16] https://public-inbox.org/git/20201216184929.3924-22-sorganov@gmail.com/
diff --git a/diff-merges.c b/diff-merges.c
index 4c434e914c8d..6446e2093661 100644


applying [15/16] https://public-inbox.org/git/20201216184929.3924-23-sorganov@gmail.com/
diff --git a/diff-merges.c b/diff-merges.c
index 6446e2093661..cba391604ac7 100644


applying [16/16] https://public-inbox.org/git/20201216184929.3924-24-sorganov@gmail.com/
diff --git a/diff-merges.c b/diff-merges.c
index cba391604ac7..0165fa22fcd1 100644

Checking patch diff-merges.c...
Applied patch diff-merges.c cleanly.
Checking patch diff-merges.c...
Applied patch diff-merges.c cleanly.
Checking patch diff-merges.c...
Applied patch diff-merges.c cleanly.
Checking patch diff-merges.c...
Applied patch diff-merges.c cleanly.
Checking patch diff-merges.c...
Applied patch diff-merges.c cleanly.
Checking patch diff-merges.c...
Applied patch diff-merges.c cleanly.
Checking patch diff-merges.c...
Applied patch diff-merges.c cleanly.
Checking patch diff-merges.c...
Applied patch diff-merges.c cleanly.
Checking patch diff-merges.c...
Applied patch diff-merges.c cleanly.
Checking patch diff-merges.c...
Applied patch diff-merges.c cleanly.
Checking patch diff-merges.c...
Applied patch diff-merges.c cleanly.
Checking patch diff-merges.c...
Applied patch diff-merges.c cleanly.
Checking patch diff-merges.c...
Applied patch diff-merges.c cleanly.
Checking patch diff-merges.c...
Applied patch diff-merges.c cleanly.
Checking patch diff-merges.c...
Applied patch diff-merges.c cleanly.
Checking patch diff-merges.c...
Applied patch diff-merges.c cleanly.

index at:
100644 0165fa22fcd1e835e355fa69e2249860984a485c	diff-merges.c

(*) Git path names are given by the tree(s) the blob belongs to.
    Blobs themselves have no identifier aside from the hash of its contents.^

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).