git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* [PATCH v8 0/8] submodule show inline diff
@ 2016-08-19  0:00 Jacob Keller
  2016-08-19  0:00 ` [PATCH v8 1/8] diff.c: remove output_prefix_length field Jacob Keller
                   ` (7 more replies)
  0 siblings, 8 replies; 28+ messages in thread
From: Jacob Keller @ 2016-08-19  0:00 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Stefan Beller, Jeff King, Johannes Sixt,
	Jacob Keller

From: Jacob Keller <jacob.keller@gmail.com>

v8 has changes suggested by Junio and Stefan Beller, as well as a few
modifications of my own, plus more tests.

Series interdiff of v7 and v8:
diff --git c/builtin/rev-list.c w/builtin/rev-list.c
index 1a75a83538f4..21cde8dd6b31 100644
--- c/builtin/rev-list.c
+++ w/builtin/rev-list.c
@@ -129,20 +129,20 @@ static void show_commit(struct commit *commit, void *data)
 			graph_show_commit_msg(revs->graph, stdout, &buf);
 
 			/*
-				* Add a newline after the commit message.
-				*
-				* Usually, this newline produces a blank
-				* padding line between entries, in which case
-				* we need to add graph padding on this line.
-				*
-				* However, the commit message may not end in a
-				* newline.  In this case the newline simply
-				* ends the last line of the commit message,
-				* and we don't need any graph output.  (This
-				* always happens with CMIT_FMT_ONELINE, and it
-				* happens with CMIT_FMT_USERFORMAT when the
-				* format doesn't explicitly end in a newline.)
-				*/
+			* Add a newline after the commit message.
+			*
+			* Usually, this newline produces a blank
+			* padding line between entries, in which case
+			* we need to add graph padding on this line.
+			*
+			* However, the commit message may not end in a
+			* newline.  In this case the newline simply
+			* ends the last line of the commit message,
+			* and we don't need any graph output.  (This
+			* always happens with CMIT_FMT_ONELINE, and it
+			* happens with CMIT_FMT_USERFORMAT when the
+			* format doesn't explicitly end in a newline.)
+			*/
 			if (buf.len && buf.buf[buf.len - 1] == '\n')
 				graph_show_padding(revs->graph);
 			putchar('\n');
diff --git c/cache.h w/cache.h
index f30a4417efdf..da9f0be67d7b 100644
--- c/cache.h
+++ w/cache.h
@@ -964,6 +964,8 @@ static inline void oidclr(struct object_id *oid)
 #define EMPTY_BLOB_SHA1_BIN \
 	((const unsigned char *) EMPTY_BLOB_SHA1_BIN_LITERAL)
 
+extern const struct object_id empty_tree_oid;
+
 static inline int is_empty_blob_sha1(const unsigned char *sha1)
 {
 	return !hashcmp(sha1, EMPTY_BLOB_SHA1_BIN);
diff --git c/diff.c w/diff.c
index e119758aba82..b38d95eb249c 100644
--- c/diff.c
+++ w/diff.c
@@ -2318,7 +2318,7 @@ static void builtin_diff(const char *name_a,
 		const char *add = diff_get_color_opt(o, DIFF_FILE_NEW);
 		show_submodule_summary(o->file, one->path ? one->path : two->path,
 				line_prefix,
-				one->oid.hash, two->oid.hash,
+				&one->oid, &two->oid,
 				two->dirty_submodule,
 				meta, del, add, reset);
 		return;
@@ -2329,7 +2329,7 @@ static void builtin_diff(const char *name_a,
 		const char *add = diff_get_color_opt(o, DIFF_FILE_NEW);
 		show_submodule_inline_diff(o->file, one->path ? one->path : two->path,
 				line_prefix,
-				one->oid.hash, two->oid.hash,
+				&one->oid, &two->oid,
 				two->dirty_submodule,
 				meta, del, add, reset, o);
 		return;
diff --git c/graph.c w/graph.c
index b140c096b7f3..06f1139f2e20 100644
--- c/graph.c
+++ w/graph.c
@@ -1215,10 +1215,10 @@ void graph_show_commit(struct git_graph *graph)
 	struct strbuf msgbuf = STRBUF_INIT;
 	int shown_commit_line = 0;
 
-	if (!graph) {
-		graph_show_line_prefix(default_diffopt);
+	graph_show_line_prefix(default_diffopt);
+
+	if (!graph)
 		return;
-	}
 
 	/*
 	 * When showing a diff of a merge against each of its parents, we
@@ -1232,11 +1232,12 @@ void graph_show_commit(struct git_graph *graph)
 
 	while (!shown_commit_line && !graph_is_commit_finished(graph)) {
 		shown_commit_line = graph_next_line(graph, &msgbuf);
-		graph_show_line_prefix(&graph->revs->diffopt);
 		fwrite(msgbuf.buf, sizeof(char), msgbuf.len,
 			graph->revs->diffopt.file);
-		if (!shown_commit_line)
+		if (!shown_commit_line) {
 			putc('\n', graph->revs->diffopt.file);
+			graph_show_line_prefix(&graph->revs->diffopt);
+		}
 		strbuf_setlen(&msgbuf, 0);
 	}
 
@@ -1247,13 +1248,12 @@ void graph_show_oneline(struct git_graph *graph)
 {
 	struct strbuf msgbuf = STRBUF_INIT;
 
-	if (!graph) {
-		graph_show_line_prefix(default_diffopt);
+	graph_show_line_prefix(default_diffopt);
+
+	if (!graph)
 		return;
-	}
 
 	graph_next_line(graph, &msgbuf);
-	graph_show_line_prefix(&graph->revs->diffopt);
 	fwrite(msgbuf.buf, sizeof(char), msgbuf.len, graph->revs->diffopt.file);
 	strbuf_release(&msgbuf);
 }
@@ -1262,13 +1262,12 @@ void graph_show_padding(struct git_graph *graph)
 {
 	struct strbuf msgbuf = STRBUF_INIT;
 
-	if (!graph) {
-		graph_show_line_prefix(default_diffopt);
+	graph_show_line_prefix(default_diffopt);
+
+	if (!graph)
 		return;
-	}
 
 	graph_padding_line(graph, &msgbuf);
-	graph_show_line_prefix(&graph->revs->diffopt);
 	fwrite(msgbuf.buf, sizeof(char), msgbuf.len, graph->revs->diffopt.file);
 	strbuf_release(&msgbuf);
 }
@@ -1278,28 +1277,27 @@ int graph_show_remainder(struct git_graph *graph)
 	struct strbuf msgbuf = STRBUF_INIT;
 	int shown = 0;
 
-	if (!graph) {
-		graph_show_line_prefix(default_diffopt);
-		return 0;
-	}
+	graph_show_line_prefix(default_diffopt);
 
-	if (graph_is_commit_finished(graph)) {
-		graph_show_line_prefix(&graph->revs->diffopt);
+	if (!graph)
+		return 0;
+
+	if (graph_is_commit_finished(graph))
 		return 0;
-	}
 
 	for (;;) {
 		graph_next_line(graph, &msgbuf);
-		graph_show_line_prefix(&graph->revs->diffopt);
 		fwrite(msgbuf.buf, sizeof(char), msgbuf.len,
 			graph->revs->diffopt.file);
 		strbuf_setlen(&msgbuf, 0);
 		shown = 1;
 
-		if (!graph_is_commit_finished(graph))
+		if (!graph_is_commit_finished(graph)) {
 			putc('\n', graph->revs->diffopt.file);
-		else
+			graph_show_line_prefix(&graph->revs->diffopt);
+		} else {
 			break;
+		}
 	}
 	strbuf_release(&msgbuf);
 
diff --git c/path.c w/path.c
index d1af029152a2..0cb30123e988 100644
--- c/path.c
+++ w/path.c
@@ -477,11 +477,16 @@ static void do_submodule_path(struct strbuf *buf, const char *path,
 	strbuf_complete(buf, '/');
 	strbuf_addstr(buf, ".git");
 
-	git_dir = resolve_gitdir(buf->buf);
-	if (git_dir && git_dir != buf->buf) {
+	git_dir = read_gitfile(buf->buf);
+	if (git_dir) {
 		strbuf_reset(buf);
 		strbuf_addstr(buf, git_dir);
 	}
+	if (!is_git_directory(buf->buf)) {
+		strbuf_reset(buf);
+		strbuf_git_path(buf, "%s/%s", "modules", path);
+	}
+
 	strbuf_addch(buf, '/');
 	strbuf_addbuf(&git_submodule_dir, buf);
 
diff --git c/sha1_file.c w/sha1_file.c
index 1e23fc186a02..10883d56a600 100644
--- c/sha1_file.c
+++ w/sha1_file.c
@@ -38,6 +38,9 @@ static inline uintmax_t sz_fmt(size_t s) { return s; }
 
 const unsigned char null_sha1[20];
 const struct object_id null_oid;
+const struct object_id empty_tree_oid = {
+	.hash = EMPTY_TREE_SHA1_BIN_LITERAL
+};
 
 /*
  * This is meant to hold a *small* number of objects that you would
diff --git c/submodule.c w/submodule.c
index e5f1138f4362..cecd3cd98de4 100644
--- c/submodule.c
+++ w/submodule.c
@@ -333,7 +333,7 @@ static void print_submodule_summary(struct rev_info *rev, FILE *f,
  */
 static void show_submodule_header(FILE *f, const char *path,
 		const char *line_prefix,
-		unsigned char one[20], unsigned char two[20],
+		struct object_id *one, struct object_id *two,
 		unsigned dirty_submodule, const char *meta,
 		const char *reset,
 		struct commit **left, struct commit **right)
@@ -350,30 +350,30 @@ static void show_submodule_header(FILE *f, const char *path,
 		fprintf(f, "%sSubmodule %s contains modified content\n",
 			line_prefix, path);
 
-	if (is_null_sha1(one))
+	if (is_null_oid(one))
 		message = "(new submodule)";
-	else if (is_null_sha1(two))
+	else if (is_null_oid(two))
 		message = "(submodule deleted)";
 
 	if (add_submodule_odb(path)) {
 		if (!message)
-			message = "(submodule not initialized)";
+			message = "(not initialized)";
 		goto output_header;
 	}
 
 	/*
 	 * Attempt to lookup the commit references, and determine if this is
-	 * a fast forward or fast backwards update
+	 * a fast forward or fast backwards update.
 	 */
-	*left = lookup_commit_reference(one);
-	*right = lookup_commit_reference(two);
+	*left = lookup_commit_reference(one->hash);
+	*right = lookup_commit_reference(two->hash);
 
 	/*
 	 * Warn about missing commits in the submodule project, but only if
-	 * they aren't null
+	 * they aren't null.
 	 */
-	if ((!is_null_sha1(one) && !*left) ||
-	     (!is_null_sha1(two) && !*right))
+	if ((!is_null_oid(one) && !*left) ||
+	     (!is_null_oid(two) && !*right))
 		message = "(commits not present)";
 
 	merge_bases = get_merge_bases(*left, *right);
@@ -384,17 +384,17 @@ static void show_submodule_header(FILE *f, const char *path,
 			fast_backward = 1;
 	}
 
-	if (!hashcmp(one, two)) {
+	if (!oidcmp(one, two)) {
 		strbuf_release(&sb);
 		return;
 	}
 
 output_header:
 	strbuf_addf(&sb, "%s%sSubmodule %s %s..", line_prefix, meta, path,
-			find_unique_abbrev(one, DEFAULT_ABBREV));
+			find_unique_abbrev(one->hash, DEFAULT_ABBREV));
 	if (!fast_backward && !fast_forward)
 		strbuf_addch(&sb, '.');
-	strbuf_addf(&sb, "%s", find_unique_abbrev(two, DEFAULT_ABBREV));
+	strbuf_addf(&sb, "%s", find_unique_abbrev(two->hash, DEFAULT_ABBREV));
 	if (message)
 		strbuf_addf(&sb, " %s%s\n", message, reset);
 	else
@@ -406,7 +406,7 @@ static void show_submodule_header(FILE *f, const char *path,
 
 void show_submodule_summary(FILE *f, const char *path,
 		const char *line_prefix,
-		unsigned char one[20], unsigned char two[20],
+		struct object_id *one, struct object_id *two,
 		unsigned dirty_submodule, const char *meta,
 		const char *del, const char *add, const char *reset)
 {
@@ -417,33 +417,32 @@ void show_submodule_summary(FILE *f, const char *path,
 			      meta, reset, &left, &right);
 
 	/*
-	 * if we don't have both a left and a right pointer, then we can't
-	 * display a summary
+	 * If we don't have both a left and a right pointer, there is no
+	 * reason to try and display a summary. The header line should contain
+	 * all the information the user needs.
 	 */
 	if (!left || !right)
 		return;
 
+	/* Treat revision walker failure the same as missing commits */
 	if (prepare_submodule_summary(&rev, path, left, right)) {
 		fprintf(f, "%s(revision walker failed)\n", line_prefix);
 		return;
 	}
 
 	print_submodule_summary(&rev, f, line_prefix, del, add, reset);
-
-	if (left)
-		clear_commit_marks(left, ~0);
-	if (right)
-		clear_commit_marks(right, ~0);
+	clear_commit_marks(left, ~0);
+	clear_commit_marks(right, ~0);
 }
 
 void show_submodule_inline_diff(FILE *f, const char *path,
 		const char *line_prefix,
-		unsigned char one[20], unsigned char two[20],
+		struct object_id *one, struct object_id *two,
 		unsigned dirty_submodule, const char *meta,
 		const char *del, const char *add, const char *reset,
 		const struct diff_options *o)
 {
-	const char *old = EMPTY_TREE_SHA1_BIN, *new = EMPTY_TREE_SHA1_BIN;
+	const struct object_id *old = &empty_tree_oid, *new = &empty_tree_oid;
 	struct commit *left = NULL, *right = NULL;
 	struct strbuf submodule_dir = STRBUF_INIT;
 	struct child_process cp = CHILD_PROCESS_INIT;
@@ -452,8 +451,8 @@ void show_submodule_inline_diff(FILE *f, const char *path,
 			      meta, reset, &left, &right);
 
 	/* We need a valid left and right commit to display a difference */
-	if (!(left || is_null_sha1(one)) ||
-	    !(right || is_null_sha1(two)))
+	if (!(left || is_null_oid(one)) ||
+	    !(right || is_null_oid(two)))
 		goto done;
 
 	if (left)
@@ -481,14 +480,15 @@ void show_submodule_inline_diff(FILE *f, const char *path,
 		argv_array_pushf(&cp.args, "--dst-prefix=%s%s/",
 				 o->b_prefix, path);
 	}
-	argv_array_push(&cp.args, sha1_to_hex(old));
-	/* If the submodule has modified content, we will diff against the
+	argv_array_push(&cp.args, oid_to_hex(old));
+	/*
+	 * If the submodule has modified content, we will diff against the
 	 * work tree, under the assumption that the user has asked for the
 	 * diff format and wishes to actually see all differences even if they
 	 * haven't yet been committed to the submodule yet.
 	 */
 	if (!(dirty_submodule & DIRTY_SUBMODULE_MODIFIED))
-		argv_array_push(&cp.args, sha1_to_hex(new));
+		argv_array_push(&cp.args, oid_to_hex(new));
 
 	if (run_command(&cp))
 		fprintf(f, "(diff failed)\n");
diff --git c/submodule.h w/submodule.h
index e2ebc0756f6a..d9e197a948fd 100644
--- c/submodule.h
+++ w/submodule.h
@@ -43,12 +43,12 @@ const char *submodule_strategy_to_string(const struct submodule_update_strategy
 void handle_ignore_submodules_arg(struct diff_options *diffopt, const char *);
 void show_submodule_summary(FILE *f, const char *path,
 		const char *line_prefix,
-		unsigned char one[20], unsigned char two[20],
+		struct object_id *one, struct object_id *two,
 		unsigned dirty_submodule, const char *meta,
 		const char *del, const char *add, const char *reset);
 void show_submodule_inline_diff(FILE *f, const char *path,
 		const char *line_prefix,
-		unsigned char one[20], unsigned char two[20],
+		struct object_id *one, struct object_id *two,
 		unsigned dirty_submodule, const char *meta,
 		const char *del, const char *add, const char *reset,
 		const struct diff_options *opt);
diff --git c/t/t4059-diff-submodule-not-initialized.sh w/t/t4059-diff-submodule-not-initialized.sh
new file mode 100755
index 000000000000..cc787454033a
--- /dev/null
+++ w/t/t4059-diff-submodule-not-initialized.sh
@@ -0,0 +1,105 @@
+#!/bin/sh
+#
+# Copyright (c) 2016 Jacob Keller, based on t4041 by Jens Lehmann
+#
+
+test_description='Test for submodule diff on non-checked out submodule
+
+This test tries to verify that add_submodule_odb works when the submodule was
+initialized previously but the checkout has since been removed.
+'
+
+TEST_NO_CREATE_REPO=1
+. ./test-lib.sh
+
+# Tested non-UTF-8 encoding
+test_encoding="ISO8859-1"
+
+# String "added" in German (translated with Google Translate), encoded in UTF-8,
+# used in sample commit log messages in add_file() function below.
+added=$(printf "hinzugef\303\274gt")
+add_file () {
+	(
+		cd "$1" &&
+		shift &&
+		for name
+		do
+			echo "$name" >"$name" &&
+			git add "$name" &&
+			test_tick &&
+			# "git commit -m" would break MinGW, as Windows refuse to pass
+			# $test_encoding encoded parameter to git.
+			echo "Add $name ($added $name)" | iconv -f utf-8 -t $test_encoding |
+			git -c "i18n.commitEncoding=$test_encoding" commit -F -
+		done >/dev/null &&
+		git rev-parse --short --verify HEAD
+	)
+}
+commit_file () {
+	test_tick &&
+	git commit "$@" -m "Commit $*" >/dev/null
+}
+
+test_create_repo sm1 &&
+test_create_repo sm2 &&
+add_file sm1 foo >/dev/null &&
+add_file sm2 foo1 foo2 >/dev/null &&
+smhead1=$(cd sm2; git rev-parse --short --verify HEAD) &&
+cd sm1
+
+test_expect_success 'setup - submodule directory' '
+	git submodule add ../sm2 sm2 &&
+	commit_file sm2 &&
+	git diff-tree -p --no-commit-id --submodule=log HEAD >actual &&
+	cat >expected <<-EOF &&
+	Submodule sm2 0000000...$smhead1 (new submodule)
+	EOF
+	test_cmp expected actual
+'
+
+test_expect_success 'submodule directory removed' '
+	rm -rf sm2 &&
+	git diff-tree -p --no-commit-id --submodule=log HEAD >actual &&
+	cat >expected <<-EOF &&
+	Submodule sm2 0000000...$smhead1 (new submodule)
+	EOF
+	test_cmp expected actual
+'
+
+test_expect_success 'setup - submodule multiple commits' '
+	git submodule update --checkout sm2 &&
+	smhead2=$(add_file sm2 foo3 foo4) &&
+	commit_file sm2 &&
+	git diff-tree -p --no-commit-id --submodule=log HEAD >actual &&
+	cat >expected <<-EOF &&
+	Submodule sm2 $smhead1..$smhead2:
+	  > Add foo4 ($added foo4)
+	  > Add foo3 ($added foo3)
+	EOF
+	test_cmp expected actual
+'
+
+test_expect_success 'submodule removed multiple commits' '
+	rm -rf sm2 &&
+	git diff-tree -p --no-commit-id --submodule=log HEAD >actual &&
+	cat >expected <<-EOF &&
+	Submodule sm2 $smhead1..$smhead2:
+	  > Add foo4 ($added foo4)
+	  > Add foo3 ($added foo3)
+	EOF
+	test_cmp expected actual
+'
+
+cd ..
+
+test_expect_success 'submodule not initialized in new clone' '
+	git clone sm1 sm3 &&
+	git -C sm3 diff-tree -p --no-commit-id --submodule=log HEAD >actual &&
+	cat >expected <<-EOF &&
+	Submodule sm2 $smhead1...$smhead2 (not initialized)
+	EOF
+	test_cmp expected actual
+
+'
+
+test_done
diff --git c/t/t4059-diff-submodule-option-diff-format.sh w/t/t4060-diff-submodule-option-diff-format.sh
similarity index 95%
rename from t/t4059-diff-submodule-option-diff-format.sh
rename to t/t4060-diff-submodule-option-diff-format.sh
index 88484f1ba847..836caef5c8ba 100755
--- c/t/t4059-diff-submodule-option-diff-format.sh
+++ w/t/t4060-diff-submodule-option-diff-format.sh
@@ -50,7 +50,7 @@ test_expect_success 'added submodule' '
 	git add sm1 &&
 	git diff-index -p --submodule=diff HEAD >actual &&
 	cat >expected <<-EOF &&
-	Submodule sm1 0000000...1beffeb (new submodule)
+	Submodule sm1 0000000...$head1 (new submodule)
 	diff --git a/sm1/foo1 b/sm1/foo1
 	new file mode 100644
 	index 0000000..1715acd
@@ -70,13 +70,26 @@ test_expect_success 'added submodule' '
 '
 
 test_expect_success 'added submodule, set diff.submodule' '
-	git config diff.submodule log &&
+	test_config diff.submodule log &&
 	git add sm1 &&
-	git diff --cached >actual &&
+	git diff-index -p --submodule=diff HEAD >actual &&
 	cat >expected <<-EOF &&
 	Submodule sm1 0000000...$head1 (new submodule)
+	diff --git a/sm1/foo1 b/sm1/foo1
+	new file mode 100644
+	index 0000000..1715acd
+	--- /dev/null
+	+++ b/sm1/foo1
+	@@ -0,0 +1 @@
+	+foo1
+	diff --git a/sm1/foo2 b/sm1/foo2
+	new file mode 100644
+	index 0000000..54b060e
+	--- /dev/null
+	+++ b/sm1/foo2
+	@@ -0,0 +1 @@
+	+foo2
 	EOF
-	git config --unset diff.submodule &&
 	test_cmp expected actual
 '
 
@@ -117,7 +130,7 @@ head2=$(add_file sm1 foo3)
 test_expect_success 'modified submodule(forward)' '
 	git diff-index -p --submodule=diff HEAD >actual &&
 	cat >expected <<-EOF &&
-	Submodule sm1 1beffeb..30b9670:
+	Submodule sm1 $head1..$head2:
 	diff --git a/sm1/foo3 b/sm1/foo3
 	new file mode 100644
 	index 0000000..c1ec6c6
@@ -132,7 +145,7 @@ test_expect_success 'modified submodule(forward)' '
 test_expect_success 'modified submodule(forward)' '
 	git diff --submodule=diff >actual &&
 	cat >expected <<-EOF &&
-	Submodule sm1 1beffeb..30b9670:
+	Submodule sm1 $head1..$head2:
 	diff --git a/sm1/foo3 b/sm1/foo3
 	new file mode 100644
 	index 0000000..c1ec6c6
@@ -178,7 +191,7 @@ head3=$(
 test_expect_success 'modified submodule(backward)' '
 	git diff-index -p --submodule=diff HEAD >actual &&
 	cat >expected <<-EOF &&
-	Submodule sm1 30b9670..dafb207 (rewind):
+	Submodule sm1 $head2..$head3 (rewind):
 	diff --git a/sm1/foo2 b/sm1/foo2
 	deleted file mode 100644
 	index 54b060e..0000000
@@ -201,7 +214,7 @@ head4=$(add_file sm1 foo4 foo5)
 test_expect_success 'modified submodule(backward and forward)' '
 	git diff-index -p --submodule=diff HEAD >actual &&
 	cat >expected <<-EOF &&
-	Submodule sm1 30b9670...d176589:
+	Submodule sm1 $head2...$head4:
 	diff --git a/sm1/foo2 b/sm1/foo2
 	deleted file mode 100644
 	index 54b060e..0000000
@@ -245,7 +258,7 @@ mv sm1-bak sm1
 test_expect_success 'typechanged submodule(submodule->blob), --cached' '
 	git diff --submodule=diff --cached >actual &&
 	cat >expected <<-EOF &&
-	Submodule sm1 d176589...0000000 (submodule deleted)
+	Submodule sm1 $head4...0000000 (submodule deleted)
 	diff --git a/sm1/foo1 b/sm1/foo1
 	deleted file mode 100644
 	index 1715acd..0000000
@@ -288,7 +301,7 @@ test_expect_success 'typechanged submodule(submodule->blob)' '
 	+++ /dev/null
 	@@ -1 +0,0 @@
 	-sm1
-	Submodule sm1 0000000...d176589 (new submodule)
+	Submodule sm1 0000000...$head4 (new submodule)
 	diff --git a/sm1/foo1 b/sm1/foo1
 	new file mode 100644
 	index 0000000..1715acd
@@ -322,7 +335,7 @@ test_expect_success 'typechanged submodule(submodule->blob)' '
 	Submodule sm1 $head4...0000000 (submodule deleted)
 	diff --git a/sm1 b/sm1
 	new file mode 100644
-	index 0000000..$head5
+	index 0000000..9da5fb8
 	--- /dev/null
 	+++ b/sm1
 	@@ -0,0 +1 @@
@@ -338,7 +351,7 @@ fullhead6=$(cd sm1; git rev-parse --verify HEAD)
 test_expect_success 'nonexistent commit' '
 	git diff-index -p --submodule=diff HEAD >actual &&
 	cat >expected <<-EOF &&
-	Submodule sm1 d176589...17243c9 (commits not present)
+	Submodule sm1 $head4...$head6 (commits not present)
 	EOF
 	test_cmp expected actual
 '
@@ -354,7 +367,7 @@ test_expect_success 'typechanged submodule(blob->submodule)' '
 	+++ /dev/null
 	@@ -1 +0,0 @@
 	-sm1
-	Submodule sm1 0000000...17243c9 (new submodule)
+	Submodule sm1 0000000...$head6 (new submodule)
 	diff --git a/sm1/foo6 b/sm1/foo6
 	new file mode 100644
 	index 0000000..462398b
@@ -472,7 +485,7 @@ head8=$(cd sm1; git rev-parse --short --verify HEAD) &&
 test_expect_success 'submodule is modified' '
 	git diff-index -p --submodule=diff HEAD >actual &&
 	cat >expected <<-EOF &&
-	Submodule sm1 17243c9..cfce562:
+	Submodule sm1 17243c9..$head8:
 	diff --git a/sm1/foo6 b/sm1/foo6
 	index 462398b..3e75765 100644
 	--- a/sm1/foo6
@@ -489,7 +502,7 @@ test_expect_success 'modified submodule contains untracked content' '
 	git diff-index -p --submodule=diff HEAD >actual &&
 	cat >expected <<-EOF &&
 	Submodule sm1 contains untracked content
-	Submodule sm1 17243c9..cfce562:
+	Submodule sm1 17243c9..$head8:
 	diff --git a/sm1/foo6 b/sm1/foo6
 	index 462398b..3e75765 100644
 	--- a/sm1/foo6
@@ -504,7 +517,7 @@ test_expect_success 'modified submodule contains untracked content' '
 test_expect_success 'modified submodule contains untracked content (untracked ignored)' '
 	git diff-index -p --ignore-submodules=untracked --submodule=diff HEAD >actual &&
 	cat >expected <<-EOF &&
-	Submodule sm1 17243c9..cfce562:
+	Submodule sm1 17243c9..$head8:
 	diff --git a/sm1/foo6 b/sm1/foo6
 	index 462398b..3e75765 100644
 	--- a/sm1/foo6

------>8

Jacob Keller (7):
  graph: add support for --line-prefix on all graph-aware output
  diff: prepare for additional submodule formats
  submodule: allow add_submodule_odb to work even if path is not checked
    out
  submodule: convert show_submodule_summary to use struct object_id *
  submodule: refactor show_submodule_summary with helper function
  cache: add empty_tree_oid object
  diff: teach diff to display submodule difference with an inline diff

Junio C Hamano (1):
  diff.c: remove output_prefix_length field

 Documentation/diff-config.txt                      |   9 +-
 Documentation/diff-options.txt                     |  20 +-
 builtin/rev-list.c                                 |  70 +-
 cache.h                                            |   2 +
 diff.c                                             |  64 +-
 diff.h                                             |  11 +-
 graph.c                                            | 100 ++-
 graph.h                                            |  22 +-
 log-tree.c                                         |   5 +-
 path.c                                             |   5 +
 sha1_file.c                                        |   3 +
 submodule.c                                        | 178 ++++-
 submodule.h                                        |   8 +-
 t/t4013-diff-various.sh                            |   6 +
 ...diff.diff_--line-prefix=abc_master_master^_side |  29 +
 t/t4013/diff.diff_--line-prefix_--cached_--_file0  |  15 +
 t/t4059-diff-submodule-not-initialized.sh          | 105 +++
 t/t4060-diff-submodule-option-diff-format.sh       | 746 +++++++++++++++++++++
 t/t4202-log.sh                                     | 323 +++++++++
 19 files changed, 1569 insertions(+), 152 deletions(-)
 create mode 100644 t/t4013/diff.diff_--line-prefix=abc_master_master^_side
 create mode 100644 t/t4013/diff.diff_--line-prefix_--cached_--_file0
 create mode 100755 t/t4059-diff-submodule-not-initialized.sh
 create mode 100755 t/t4060-diff-submodule-option-diff-format.sh

-- 
2.10.0.rc0.217.g609f9e8.dirty


^ permalink raw reply related	[flat|nested] 28+ messages in thread

end of thread, other threads:[~2016-08-23 16:28 UTC | newest]

Thread overview: 28+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-08-19  0:00 [PATCH v8 0/8] submodule show inline diff Jacob Keller
2016-08-19  0:00 ` [PATCH v8 1/8] diff.c: remove output_prefix_length field Jacob Keller
2016-08-19  0:00 ` [PATCH v8 2/8] graph: add support for --line-prefix on all graph-aware output Jacob Keller
2016-08-19  0:00 ` [PATCH v8 3/8] diff: prepare for additional submodule formats Jacob Keller
2016-08-19 19:49   ` Junio C Hamano
2016-08-19  0:00 ` [PATCH v8 4/8] submodule: allow add_submodule_odb to work even if path is not checked out Jacob Keller
2016-08-19 20:06   ` Junio C Hamano
2016-08-19 20:32     ` Jacob Keller
2016-08-19 21:11       ` Junio C Hamano
2016-08-19 22:00         ` Jacob Keller
2016-08-19 22:26           ` Junio C Hamano
2016-08-19 23:25             ` Jacob Keller
2016-08-19  0:00 ` [PATCH v8 5/8] submodule: convert show_submodule_summary to use struct object_id * Jacob Keller
2016-08-19 20:12   ` Junio C Hamano
2016-08-19  0:00 ` [PATCH v8 6/8] submodule: refactor show_submodule_summary with helper function Jacob Keller
2016-08-19 20:24   ` Junio C Hamano
2016-08-19 20:33     ` Jacob Keller
2016-08-19  0:00 ` [PATCH v8 7/8] cache: add empty_tree_oid object Jacob Keller
2016-08-19 20:31   ` Junio C Hamano
2016-08-19 20:35     ` Jacob Keller
2016-08-19 20:50       ` Junio C Hamano
2016-08-19 21:14         ` Junio C Hamano
2016-08-19 22:02           ` Jacob Keller
2016-08-19 20:58     ` Jeff King
2016-08-23 16:28       ` Junio C Hamano
2016-08-19  0:00 ` [PATCH v8 8/8] diff: teach diff to display submodule difference with an inline diff Jacob Keller
2016-08-19 21:52   ` Junio C Hamano
2016-08-19 22:03     ` Jacob Keller

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).