about summary refs log tree commit diff
path: root/third_party/git/builtin/diff-tree.c
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/git/builtin/diff-tree.c')
-rw-r--r--third_party/git/builtin/diff-tree.c205
1 files changed, 0 insertions, 205 deletions
diff --git a/third_party/git/builtin/diff-tree.c b/third_party/git/builtin/diff-tree.c
deleted file mode 100644
index 802363d0a229..000000000000
--- a/third_party/git/builtin/diff-tree.c
+++ /dev/null
@@ -1,205 +0,0 @@
-#define USE_THE_INDEX_COMPATIBILITY_MACROS
-#include "cache.h"
-#include "config.h"
-#include "diff.h"
-#include "commit.h"
-#include "log-tree.h"
-#include "builtin.h"
-#include "submodule.h"
-#include "repository.h"
-
-static struct rev_info log_tree_opt;
-
-static int diff_tree_commit_oid(const struct object_id *oid)
-{
-	struct commit *commit = lookup_commit_reference(the_repository, oid);
-	if (!commit)
-		return -1;
-	return log_tree_commit(&log_tree_opt, commit);
-}
-
-/* Diff one or more commits. */
-static int stdin_diff_commit(struct commit *commit, const char *p)
-{
-	struct object_id oid;
-	struct commit_list **pptr = NULL;
-
-	/* Graft the fake parents locally to the commit */
-	while (isspace(*p++) && !parse_oid_hex(p, &oid, &p)) {
-		struct commit *parent = lookup_commit(the_repository, &oid);
-		if (!pptr) {
-			/* Free the real parent list */
-			free_commit_list(commit->parents);
-			commit->parents = NULL;
-			pptr = &(commit->parents);
-		}
-		if (parent) {
-			pptr = &commit_list_insert(parent, pptr)->next;
-		}
-	}
-	return log_tree_commit(&log_tree_opt, commit);
-}
-
-/* Diff two trees. */
-static int stdin_diff_trees(struct tree *tree1, const char *p)
-{
-	struct object_id oid;
-	struct tree *tree2;
-	if (!isspace(*p++) || parse_oid_hex(p, &oid, &p) || *p)
-		return error("Need exactly two trees, separated by a space");
-	tree2 = lookup_tree(the_repository, &oid);
-	if (!tree2 || parse_tree(tree2))
-		return -1;
-	printf("%s %s\n", oid_to_hex(&tree1->object.oid),
-			  oid_to_hex(&tree2->object.oid));
-	diff_tree_oid(&tree1->object.oid, &tree2->object.oid,
-		      "", &log_tree_opt.diffopt);
-	log_tree_diff_flush(&log_tree_opt);
-	return 0;
-}
-
-static int diff_tree_stdin(char *line)
-{
-	int len = strlen(line);
-	struct object_id oid;
-	struct object *obj;
-	const char *p;
-
-	if (!len || line[len-1] != '\n')
-		return -1;
-	line[len-1] = 0;
-	if (parse_oid_hex(line, &oid, &p))
-		return -1;
-	obj = parse_object(the_repository, &oid);
-	if (!obj)
-		return -1;
-	if (obj->type == OBJ_COMMIT)
-		return stdin_diff_commit((struct commit *)obj, p);
-	if (obj->type == OBJ_TREE)
-		return stdin_diff_trees((struct tree *)obj, p);
-	error("Object %s is a %s, not a commit or tree",
-	      oid_to_hex(&oid), type_name(obj->type));
-	return -1;
-}
-
-static const char diff_tree_usage[] =
-"git diff-tree [--stdin] [-m] [-c | --cc] [-s] [-v] [--pretty] [-t] [-r] [--root] "
-"[<common-diff-options>] <tree-ish> [<tree-ish>] [<path>...]\n"
-"  -r            diff recursively\n"
-"  -c            show combined diff for merge commits\n"
-"  --cc          show combined diff for merge commits removing uninteresting hunks\n"
-"  --combined-all-paths\n"
-"                show name of file in all parents for combined diffs\n"
-"  --root        include the initial commit as diff against /dev/null\n"
-COMMON_DIFF_OPTIONS_HELP;
-
-static void diff_tree_tweak_rev(struct rev_info *rev, struct setup_revision_opt *opt)
-{
-	if (!rev->diffopt.output_format) {
-		if (rev->dense_combined_merges)
-			rev->diffopt.output_format = DIFF_FORMAT_PATCH;
-		else
-			rev->diffopt.output_format = DIFF_FORMAT_RAW;
-	}
-}
-
-int cmd_diff_tree(int argc, const char **argv, const char *prefix)
-{
-	char line[1000];
-	struct object *tree1, *tree2;
-	static struct rev_info *opt = &log_tree_opt;
-	struct setup_revision_opt s_r_opt;
-	struct userformat_want w;
-	int read_stdin = 0;
-
-	if (argc == 2 && !strcmp(argv[1], "-h"))
-		usage(diff_tree_usage);
-
-	git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
-	repo_init_revisions(the_repository, opt, prefix);
-	if (read_cache() < 0)
-		die(_("index file corrupt"));
-	opt->abbrev = 0;
-	opt->diff = 1;
-	opt->disable_stdin = 1;
-	memset(&s_r_opt, 0, sizeof(s_r_opt));
-	s_r_opt.tweak = diff_tree_tweak_rev;
-
-	precompose_argv(argc, argv);
-	argc = setup_revisions(argc, argv, opt, &s_r_opt);
-
-	memset(&w, 0, sizeof(w));
-	userformat_find_requirements(NULL, &w);
-
-	if (!opt->show_notes_given && w.notes)
-		opt->show_notes = 1;
-	if (opt->show_notes)
-		load_display_notes(&opt->notes_opt);
-
-	while (--argc > 0) {
-		const char *arg = *++argv;
-
-		if (!strcmp(arg, "--stdin")) {
-			read_stdin = 1;
-			continue;
-		}
-		usage(diff_tree_usage);
-	}
-
-	/*
-	 * NOTE!  We expect "a..b" to expand to "^a b" but it is
-	 * perfectly valid for revision range parser to yield "b ^a",
-	 * which means the same thing. If we get the latter, i.e. the
-	 * second one is marked UNINTERESTING, we recover the original
-	 * order the user gave, i.e. "a..b", by swapping the trees.
-	 */
-	switch (opt->pending.nr) {
-	case 0:
-		if (!read_stdin)
-			usage(diff_tree_usage);
-		break;
-	case 1:
-		tree1 = opt->pending.objects[0].item;
-		diff_tree_commit_oid(&tree1->oid);
-		break;
-	case 2:
-		tree1 = opt->pending.objects[0].item;
-		tree2 = opt->pending.objects[1].item;
-		if (tree2->flags & UNINTERESTING) {
-			SWAP(tree2, tree1);
-		}
-		diff_tree_oid(&tree1->oid, &tree2->oid, "", &opt->diffopt);
-		log_tree_diff_flush(opt);
-		break;
-	}
-
-	if (read_stdin) {
-		int saved_nrl = 0;
-		int saved_dcctc = 0;
-
-		if (opt->diffopt.detect_rename) {
-			if (!the_index.cache)
-				repo_read_index(the_repository);
-			opt->diffopt.setup |= DIFF_SETUP_USE_SIZE_CACHE;
-		}
-		while (fgets(line, sizeof(line), stdin)) {
-			struct object_id oid;
-
-			if (get_oid_hex(line, &oid)) {
-				fputs(line, stdout);
-				fflush(stdout);
-			}
-			else {
-				diff_tree_stdin(line);
-				if (saved_nrl < opt->diffopt.needed_rename_limit)
-					saved_nrl = opt->diffopt.needed_rename_limit;
-				if (opt->diffopt.degraded_cc_to_c)
-					saved_dcctc = 1;
-			}
-		}
-		opt->diffopt.degraded_cc_to_c = saved_dcctc;
-		opt->diffopt.needed_rename_limit = saved_nrl;
-	}
-
-	return diff_result_code(&opt->diffopt, 0);
-}