git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/5] builtin-status submodule summary
@ 2008-03-14 15:28 Ping Yin
  2008-03-14 15:28 ` [PATCH v2 1/5] git-submodule summary: --for-status option Ping Yin
  2008-03-14 16:22 ` [PATCH v2 0/5] builtin-status submodule summary Johannes Sixt
  0 siblings, 2 replies; 8+ messages in thread
From: Ping Yin @ 2008-03-14 15:28 UTC (permalink / raw)
  To: gitster; +Cc: git

IMO, git submodule summary is not so useful for me if it's not
integrated into git-status. In fact i never use "git submodule
summary" directly. git-status with submodule summary support is very
useful to help user figure out what is going on in a more global level
when cooking the commit message.

So i think this series should go along with the submodule summary series.

The v2 series has following commits adding a new commit for documentation

      git-submodule summary: --for-status option
      builtin-status: submodule summary support
      builtin-status: configurable submodule summary size
      buitin-status: Add tests for submodule summary
      git-status: Mention status.submodulesummary config in the documentation

and diff relative to v1 is (not containing the documetation patch)

diff --git a/t/t7502-status.sh b/t/t7502-status.sh
index a4cd553..33882c9 100755
--- a/t/t7502-status.sh
+++ b/t/t7502-status.sh
@@ -187,9 +187,7 @@ test_expect_success "status submodule summary is disabled by default" '
 	git diff expect output
 '
 
-cd sm &&
-head=$(git rev-parse --verify HEAD | cut -c1-7) &&
-cd ..
+head=$(cd sm && git rev-parse --short=7 --verify HEAD)
 
 cat > expect <<EOF
 # On branch master
diff --git a/wt-status.c b/wt-status.c
index c7cb69c..7a32c51 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -223,7 +223,7 @@ static void wt_status_print_changed(struct wt_status *s)
 }
 static void wt_status_print_submodule_summary(struct wt_status *s)
 {
-	if (wt_status_submodule_summary == 0) return;
+	if (! wt_status_submodule_summary) return;
 	struct child_process sm_summary;
 	char summary_limit[64];
 	sprintf(summary_limit, "%d", wt_status_submodule_summary);
@@ -339,8 +339,6 @@ void wt_status_print(struct wt_status *s)
 	}
 
 	wt_status_print_changed(s);
-	// must flush s->fp since following call will write to s->fp in a child process
-	fflush(s->fp);
 	wt_status_print_submodule_summary(s);
 	wt_status_print_untracked(s);
 

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

* [PATCH v2 1/5] git-submodule summary: --for-status option
  2008-03-14 15:28 [PATCH v2 0/5] builtin-status submodule summary Ping Yin
@ 2008-03-14 15:28 ` Ping Yin
  2008-03-14 15:28   ` [PATCH v2 2/5] builtin-status: submodule summary support Ping Yin
  2008-03-14 16:22 ` [PATCH v2 0/5] builtin-status submodule summary Johannes Sixt
  1 sibling, 1 reply; 8+ messages in thread
From: Ping Yin @ 2008-03-14 15:28 UTC (permalink / raw)
  To: gitster; +Cc: git, Ping Yin

The --for-status option is mainly used by builtin-status/commit.
It adds 'Modified submodules:' line at top and  '# ' prefix to all
following lines.

Signed-off-by: Ping Yin <pkufranky@gmail.com>
---
 git-submodule.sh             |   17 ++++++++++++++++-
 t/t7401-submodule-summary.sh |   13 +++++++++++++
 2 files changed, 29 insertions(+), 1 deletions(-)

diff --git a/git-submodule.sh b/git-submodule.sh
index 56ec353..d7937a5 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -342,6 +342,7 @@ set_name_rev () {
 #
 cmd_summary() {
 	summary_limit=-1
+	for_status=
 
 	# parse $args after "submodule ... summary".
 	while test $# -ne 0
@@ -350,6 +351,9 @@ cmd_summary() {
 		--cached)
 			cached="$1"
 			;;
+		--for-status)
+			for_status="$1"
+			;;
 		-n|--summary-limit)
 			if summary_limit=$(($2 + 0)) 2>/dev/null && test "$summary_limit" = "$2"
 			then
@@ -398,6 +402,12 @@ cmd_summary() {
 	)
 
 	test -n "$modules" &&
+	if test -n "$for_status"; then
+		echo "# Modified submodules:"
+		echo "#"
+	else
+		true
+	fi &&
 	git diff-index $cached --raw $head -- $modules |
 	grep -e '^:160000' -e '^:[0-7]* 160000' |
 	cut -c2- |
@@ -499,7 +509,12 @@ cmd_summary() {
 			echo
 		fi
 		echo
-	done
+	done |
+	if test -n "$for_status"; then
+		sed -e "s|^|# |" -e 's|^# $|#|'
+	else
+		cat
+	fi
 }
 #
 # List all submodules, prefixed with:
diff --git a/t/t7401-submodule-summary.sh b/t/t7401-submodule-summary.sh
index 0f3c42a..1dbb39d 100755
--- a/t/t7401-submodule-summary.sh
+++ b/t/t7401-submodule-summary.sh
@@ -192,4 +192,17 @@ test_expect_success 'given commit' "
 EOF
 "
 
+test_expect_success '--for-status' "
+    git submodule summary --for-status HEAD^ >actual &&
+    diff actual - <<-EOF
+# Modified submodules:
+#
+# * sm1 $head6...0000000:
+#
+# * sm2 0000000...$head7 (2):
+#   > Add foo9
+#
+EOF
+"
+
 test_done
-- 
1.5.4.4.653.g7cf1e

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

* [PATCH v2 2/5] builtin-status: submodule summary support
  2008-03-14 15:28 ` [PATCH v2 1/5] git-submodule summary: --for-status option Ping Yin
@ 2008-03-14 15:28   ` Ping Yin
  2008-03-14 15:28     ` [PATCH v2 3/5] builtin-status: configurable submodule summary size Ping Yin
  0 siblings, 1 reply; 8+ messages in thread
From: Ping Yin @ 2008-03-14 15:28 UTC (permalink / raw)
  To: gitster; +Cc: git, Ping Yin

This commit teaches 'git commit/status' show 'Modified submodules'
section given by 'git submodule summary --cached --for-status'
just before 'Untracked files' section.

Signed-off-by: Ping Yin <pkufranky@gmail.com>
---
 wt-status.c |   26 ++++++++++++++++++++++++++
 1 files changed, 26 insertions(+), 0 deletions(-)

diff --git a/wt-status.c b/wt-status.c
index b3fd57b..dc4a88f 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -8,6 +8,7 @@
 #include "revision.h"
 #include "diffcore.h"
 #include "quote.h"
+#include "run-command.h"
 
 int wt_status_relative_paths = 1;
 int wt_status_use_color = -1;
@@ -219,6 +220,30 @@ static void wt_status_print_changed(struct wt_status *s)
 	rev.diffopt.format_callback_data = s;
 	run_diff_files(&rev, 0);
 }
+static void wt_status_print_submodule_summary(struct wt_status *s)
+{
+	struct child_process sm_summary;
+	const char *argv[] = {
+		"submodule",
+		"summary",
+		"--cached",
+		"--for-status",
+		s->amend ? "HEAD^" : "HEAD",
+		NULL
+	};
+	char index[PATH_MAX];
+	const char *env[2] = { index, NULL };
+	snprintf(index, sizeof(index), "GIT_INDEX_FILE=%s", s->index_file);
+
+	memset(&sm_summary, 0, sizeof(sm_summary));
+	sm_summary.argv = argv;
+	sm_summary.env = env;
+	sm_summary.git_cmd = 1;
+	sm_summary.no_stdin = 1;
+	fflush(s->fp);
+	sm_summary.out = dup(fileno(s->fp));    /* run_command closes it */
+	run_command(&sm_summary);
+}
 
 static void wt_status_print_untracked(struct wt_status *s)
 {
@@ -308,6 +333,7 @@ void wt_status_print(struct wt_status *s)
 	}
 
 	wt_status_print_changed(s);
+	wt_status_print_submodule_summary(s);
 	wt_status_print_untracked(s);
 
 	if (s->verbose && !s->is_initial)
-- 
1.5.4.4.653.g7cf1e

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

* [PATCH v2 3/5] builtin-status: configurable submodule summary size
  2008-03-14 15:28   ` [PATCH v2 2/5] builtin-status: submodule summary support Ping Yin
@ 2008-03-14 15:28     ` Ping Yin
  2008-03-14 15:28       ` [PATCH v2 4/5] buitin-status: Add tests for submodule summary Ping Yin
  0 siblings, 1 reply; 8+ messages in thread
From: Ping Yin @ 2008-03-14 15:28 UTC (permalink / raw)
  To: gitster; +Cc: git, Ping Yin

Add config variable status.submodulesummary which is passed as
arg for '--summary-limit' of 'git submodule summary' to limit the
submodule summary size.

status.submodulesummary is 0 by default which disables the summary.

Signed-off-by: Ping Yin <pkufranky@gmail.com>
---
 wt-status.c |   10 ++++++++++
 1 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/wt-status.c b/wt-status.c
index dc4a88f..7a32c51 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -12,6 +12,7 @@
 
 int wt_status_relative_paths = 1;
 int wt_status_use_color = -1;
+int wt_status_submodule_summary = 0;
 static char wt_status_colors[][COLOR_MAXLEN] = {
 	"",         /* WT_STATUS_HEADER: normal */
 	"\033[32m", /* WT_STATUS_UPDATED: green */
@@ -222,12 +223,17 @@ static void wt_status_print_changed(struct wt_status *s)
 }
 static void wt_status_print_submodule_summary(struct wt_status *s)
 {
+	if (! wt_status_submodule_summary) return;
 	struct child_process sm_summary;
+	char summary_limit[64];
+	sprintf(summary_limit, "%d", wt_status_submodule_summary);
 	const char *argv[] = {
 		"submodule",
 		"summary",
 		"--cached",
 		"--for-status",
+		"--summary-limit",
+		summary_limit,
 		s->amend ? "HEAD^" : "HEAD",
 		NULL
 	};
@@ -356,6 +362,10 @@ void wt_status_print(struct wt_status *s)
 
 int git_status_config(const char *k, const char *v)
 {
+	if (!strcmp(k, "status.submodulesummary")) {
+		wt_status_submodule_summary = atoi(v);
+		return 0;
+	}
 	if (!strcmp(k, "status.color") || !strcmp(k, "color.status")) {
 		wt_status_use_color = git_config_colorbool(k, v, -1);
 		return 0;
-- 
1.5.4.4.653.g7cf1e

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

* [PATCH v2 4/5] buitin-status: Add tests for submodule summary
  2008-03-14 15:28     ` [PATCH v2 3/5] builtin-status: configurable submodule summary size Ping Yin
@ 2008-03-14 15:28       ` Ping Yin
  2008-03-14 15:28         ` [PATCH v2 5/5] git-status: Mention status.submodulesummary config in the documentation Ping Yin
  0 siblings, 1 reply; 8+ messages in thread
From: Ping Yin @ 2008-03-14 15:28 UTC (permalink / raw)
  To: gitster; +Cc: git, Ping Yin

Signed-off-by: Ping Yin <pkufranky@gmail.com>
---
 t/t7502-status.sh |  134 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 134 insertions(+), 0 deletions(-)

diff --git a/t/t7502-status.sh b/t/t7502-status.sh
index cd08516..33882c9 100755
--- a/t/t7502-status.sh
+++ b/t/t7502-status.sh
@@ -149,4 +149,138 @@ test_expect_success 'status of partial commit excluding new file in index' '
 	test_cmp expect output
 '
 
+test_expect_success "setup status submodule summary" '
+	test_create_repo sm &&
+	cd sm &&
+	: >foo &&
+	git add foo &&
+	git commit -m "Add foo" &&
+	cd .. &&
+	git add sm
+'
+
+cat > expect <<EOF
+# On branch master
+# Changes to be committed:
+#   (use "git reset HEAD <file>..." to unstage)
+#
+#	new file:   dir2/added
+#	new file:   sm
+#
+# Changed but not updated:
+#   (use "git add <file>..." to update what will be committed)
+#
+#	modified:   dir1/modified
+#
+# Untracked files:
+#   (use "git add <file>..." to include in what will be committed)
+#
+#	dir1/untracked
+#	dir2/modified
+#	dir2/untracked
+#	expect
+#	output
+#	untracked
+EOF
+test_expect_success "status submodule summary is disabled by default" '
+	git status > output &&
+	git diff expect output
+'
+
+head=$(cd sm && git rev-parse --short=7 --verify HEAD)
+
+cat > expect <<EOF
+# On branch master
+# Changes to be committed:
+#   (use "git reset HEAD <file>..." to unstage)
+#
+#	new file:   dir2/added
+#	new file:   sm
+#
+# Changed but not updated:
+#   (use "git add <file>..." to update what will be committed)
+#
+#	modified:   dir1/modified
+#
+# Modified submodules:
+#
+# * sm 0000000...$head (1):
+#   > Add foo
+#
+# Untracked files:
+#   (use "git add <file>..." to include in what will be committed)
+#
+#	dir1/untracked
+#	dir2/modified
+#	dir2/untracked
+#	expect
+#	output
+#	untracked
+EOF
+test_expect_success "status submodule summary" '
+	git config status.submodulesummary 10 &&
+	git status > output &&
+	git diff expect output
+'
+
+
+cat > expect <<EOF
+# On branch master
+# Changed but not updated:
+#   (use "git add <file>..." to update what will be committed)
+#
+#	modified:   dir1/modified
+#
+# Untracked files:
+#   (use "git add <file>..." to include in what will be committed)
+#
+#	dir1/untracked
+#	dir2/modified
+#	dir2/untracked
+#	expect
+#	output
+#	untracked
+no changes added to commit (use "git add" and/or "git commit -a")
+EOF
+test_expect_success "status submodule summary (clean submodule)" '
+	git commit -m "commit submodule" &&
+	git config status.submodulesummary 10 &&
+	! git status > output &&
+	git diff expect output
+'
+
+cat > expect <<EOF
+# On branch master
+# Changes to be committed:
+#   (use "git reset HEAD^1 <file>..." to unstage)
+#
+#	new file:   dir2/added
+#	new file:   sm
+#
+# Changed but not updated:
+#   (use "git add <file>..." to update what will be committed)
+#
+#	modified:   dir1/modified
+#
+# Modified submodules:
+#
+# * sm 0000000...$head (1):
+#   > Add foo
+#
+# Untracked files:
+#   (use "git add <file>..." to include in what will be committed)
+#
+#	dir1/untracked
+#	dir2/modified
+#	dir2/untracked
+#	expect
+#	output
+#	untracked
+EOF
+test_expect_success "status submodule summary (--amend)" '
+	git config status.submodulesummary 10 &&
+	git status --amend > output &&
+	git diff expect output
+'
+
 test_done
-- 
1.5.4.4.653.g7cf1e

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

* [PATCH v2 5/5] git-status: Mention status.submodulesummary config in the documentation
  2008-03-14 15:28       ` [PATCH v2 4/5] buitin-status: Add tests for submodule summary Ping Yin
@ 2008-03-14 15:28         ` Ping Yin
  0 siblings, 0 replies; 8+ messages in thread
From: Ping Yin @ 2008-03-14 15:28 UTC (permalink / raw)
  To: gitster; +Cc: git, Ping Yin

Signed-off-by: Ping Yin <pkufranky@gmail.com>
---
 Documentation/git-status.txt |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/Documentation/git-status.txt b/Documentation/git-status.txt
index 3ea269a..32b6660 100644
--- a/Documentation/git-status.txt
+++ b/Documentation/git-status.txt
@@ -52,6 +52,10 @@ If the config variable `status.relativePaths` is set to false, then all
 paths shown are relative to the repository root, not to the current
 directory.
 
+If 'status.submodulesummary' is set to a non zero number, the submodule
+summary will be enabled and a summary of commits for modified submodules
+will be shown (see --summary-limit option of linkgit:git-submodule[1]).
+
 See Also
 --------
 linkgit:gitignore[5]
-- 
1.5.4.4.653.g7cf1e

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

* Re: [PATCH v2 0/5] builtin-status submodule summary
  2008-03-14 15:28 [PATCH v2 0/5] builtin-status submodule summary Ping Yin
  2008-03-14 15:28 ` [PATCH v2 1/5] git-submodule summary: --for-status option Ping Yin
@ 2008-03-14 16:22 ` Johannes Sixt
  2008-03-14 17:42   ` Ping Yin
  1 sibling, 1 reply; 8+ messages in thread
From: Johannes Sixt @ 2008-03-14 16:22 UTC (permalink / raw)
  To: Ping Yin; +Cc: gitster, git

Ping Yin schrieb:
> IMO, git submodule summary is not so useful for me if it's not
> integrated into git-status. In fact i never use "git submodule
> summary" directly. git-status with submodule summary support is very
> useful to help user figure out what is going on in a more global level
> when cooking the commit message.
> 
> So i think this series should go along with the submodule summary series.

I think so, too. The changes and defaults in wt-status.c are trivial
enough that they don't penalize traditional git-status users.

> The v2 series has following commits adding a new commit for documentation
> 
>     1  git-submodule summary: --for-status option
>     2  builtin-status: submodule summary support
>     3  builtin-status: configurable submodule summary size
>     4  buitin-status: Add tests for submodule summary
>     5  git-status: Mention status.submodulesummary config in the documentation

I'd actually squash 2, 3, and 5.

You still have the statement before a declaration in 3/5.

> +	if (! wt_status_submodule_summary) return;

And here the important part (IMO) is actually that 'return' should go on a
line of its own.

-- Hannes

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

* Re: [PATCH v2 0/5] builtin-status submodule summary
  2008-03-14 16:22 ` [PATCH v2 0/5] builtin-status submodule summary Johannes Sixt
@ 2008-03-14 17:42   ` Ping Yin
  0 siblings, 0 replies; 8+ messages in thread
From: Ping Yin @ 2008-03-14 17:42 UTC (permalink / raw)
  To: Johannes Sixt; +Cc: gitster, git

On Sat, Mar 15, 2008 at 12:22 AM, Johannes Sixt <j.sixt@viscovery.net> wrote:
> Ping Yin schrieb:
>
> > IMO, git submodule summary is not so useful for me if it's not
>  > integrated into git-status. In fact i never use "git submodule
>  > summary" directly. git-status with submodule summary support is very
>  > useful to help user figure out what is going on in a more global level
>  > when cooking the commit message.
>  >
>  > So i think this series should go along with the submodule summary series.
>
>  I think so, too. The changes and defaults in wt-status.c are trivial
>  enough that they don't penalize traditional git-status users.
>
>
>  > The v2 series has following commits adding a new commit for documentation
>  >
>  >     1  git-submodule summary: --for-status option
>  >     2  builtin-status: submodule summary support
>  >     3  builtin-status: configurable submodule summary size
>  >     4  buitin-status: Add tests for submodule summary
>  >     5  git-status: Mention status.submodulesummary config in the documentation
>
>  I'd actually squash 2, 3, and 5.
>
>  You still have the statement before a declaration in 3/5.
Sorry i forgot about it.

>
>
>  > +     if (! wt_status_submodule_summary) return;
>
>  And here the important part (IMO) is actually that 'return' should go on a
>  line of its own.
OK



-- 
Ping Yin

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

end of thread, other threads:[~2008-03-14 17:43 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-03-14 15:28 [PATCH v2 0/5] builtin-status submodule summary Ping Yin
2008-03-14 15:28 ` [PATCH v2 1/5] git-submodule summary: --for-status option Ping Yin
2008-03-14 15:28   ` [PATCH v2 2/5] builtin-status: submodule summary support Ping Yin
2008-03-14 15:28     ` [PATCH v2 3/5] builtin-status: configurable submodule summary size Ping Yin
2008-03-14 15:28       ` [PATCH v2 4/5] buitin-status: Add tests for submodule summary Ping Yin
2008-03-14 15:28         ` [PATCH v2 5/5] git-status: Mention status.submodulesummary config in the documentation Ping Yin
2008-03-14 16:22 ` [PATCH v2 0/5] builtin-status submodule summary Johannes Sixt
2008-03-14 17:42   ` Ping Yin

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 NNTP newsgroup(s).