{"thread":{"id":"12694","subject":"[PATCH v2 1/5] git-submodule summary: --for-status option","startedAt":"2008-03-14T15:28:36Z","lastAt":"2008-03-14T17:42:57Z","messageCount":8,"participants":["Ping Yin","Johannes Sixt"],"isPatch":true,"patchVersion":2,"patchTotal":5},"messages":[{"id":"72097","messageId":"1205508521-7407-1-git-send-email-pkufranky@gmail.com","threadId":"12694","inReplyTo":null,"subject":"[PATCH v2 0/5] builtin-status submodule summary","fromName":"Ping Yin","fromEmail":"pkufranky@gmail.com","sentAt":"2008-03-14T15:28:36Z","receivedAt":"2008-03-14T15:28:36Z","isPatch":true,"sender":{"key":"pkufranky@gmail.com","avatar":"https://avatars.githubusercontent.com/u/5346?v=4"},"body":"IMO, git submodule summary is not so useful for me if it's not\nintegrated into git-status. In fact i never use \"git submodule\nsummary\" directly. git-status with submodule summary support is very\nuseful to help user figure out what is going on in a more global level\nwhen cooking the commit message.\n\nSo i think this series should go along with the submodule summary series.\n\nThe v2 series has following commits adding a new commit for documentation\n\n      git-submodule summary: --for-status option\n      builtin-status: submodule summary support\n      builtin-status: configurable submodule summary size\n      buitin-status: Add tests for submodule summary\n      git-status: Mention status.submodulesummary config in the documentation\n\nand diff relative to v1 is (not containing the documetation patch)\n\ndiff --git a/t/t7502-status.sh b/t/t7502-status.sh\nindex a4cd553..33882c9 100755\n--- a/t/t7502-status.sh\n+++ b/t/t7502-status.sh\n@@ -187,9 +187,7 @@ test_expect_success \"status submodule summary is disabled by default\" '\n \tgit diff expect output\n '\n \n-cd sm &&\n-head=$(git rev-parse --verify HEAD | cut -c1-7) &&\n-cd ..\n+head=$(cd sm && git rev-parse --short=7 --verify HEAD)\n \n cat > expect <<EOF\n # On branch master\ndiff --git a/wt-status.c b/wt-status.c\nindex c7cb69c..7a32c51 100644\n--- a/wt-status.c\n+++ b/wt-status.c\n@@ -223,7 +223,7 @@ static void wt_status_print_changed(struct wt_status *s)\n }\n static void wt_status_print_submodule_summary(struct wt_status *s)\n {\n-\tif (wt_status_submodule_summary == 0) return;\n+\tif (! wt_status_submodule_summary) return;\n \tstruct child_process sm_summary;\n \tchar summary_limit[64];\n \tsprintf(summary_limit, \"%d\", wt_status_submodule_summary);\n@@ -339,8 +339,6 @@ void wt_status_print(struct wt_status *s)\n \t}\n \n \twt_status_print_changed(s);\n-\t// must flush s->fp since following call will write to s->fp in a child process\n-\tfflush(s->fp);\n \twt_status_print_submodule_summary(s);\n \twt_status_print_untracked(s);\n \n"},{"id":"72095","messageId":"1205508521-7407-2-git-send-email-pkufranky@gmail.com","threadId":"12694","inReplyTo":"1205508521-7407-1-git-send-email-pkufranky@gmail.com","subject":"[PATCH v2 1/5] git-submodule summary: --for-status option","fromName":"Ping Yin","fromEmail":"pkufranky@gmail.com","sentAt":"2008-03-14T15:28:37Z","receivedAt":"2008-03-14T15:28:37Z","isPatch":true,"sender":{"key":"pkufranky@gmail.com","avatar":"https://avatars.githubusercontent.com/u/5346?v=4"},"body":"The --for-status option is mainly used by builtin-status/commit.\nIt adds 'Modified submodules:' line at top and  '# ' prefix to all\nfollowing lines.\n\nSigned-off-by: Ping Yin <pkufranky@gmail.com>\n---\n git-submodule.sh             |   17 ++++++++++++++++-\n t/t7401-submodule-summary.sh |   13 +++++++++++++\n 2 files changed, 29 insertions(+), 1 deletions(-)\n\ndiff --git a/git-submodule.sh b/git-submodule.sh\nindex 56ec353..d7937a5 100755\n--- a/git-submodule.sh\n+++ b/git-submodule.sh\n@@ -342,6 +342,7 @@ set_name_rev () {\n #\n cmd_summary() {\n \tsummary_limit=-1\n+\tfor_status=\n \n \t# parse $args after \"submodule ... summary\".\n \twhile test $# -ne 0\n@@ -350,6 +351,9 @@ cmd_summary() {\n \t\t--cached)\n \t\t\tcached=\"$1\"\n \t\t\t;;\n+\t\t--for-status)\n+\t\t\tfor_status=\"$1\"\n+\t\t\t;;\n \t\t-n|--summary-limit)\n \t\t\tif summary_limit=$(($2 + 0)) 2>/dev/null && test \"$summary_limit\" = \"$2\"\n \t\t\tthen\n@@ -398,6 +402,12 @@ cmd_summary() {\n \t)\n \n \ttest -n \"$modules\" &&\n+\tif test -n \"$for_status\"; then\n+\t\techo \"# Modified submodules:\"\n+\t\techo \"#\"\n+\telse\n+\t\ttrue\n+\tfi &&\n \tgit diff-index $cached --raw $head -- $modules |\n \tgrep -e '^:160000' -e '^:[0-7]* 160000' |\n \tcut -c2- |\n@@ -499,7 +509,12 @@ cmd_summary() {\n \t\t\techo\n \t\tfi\n \t\techo\n-\tdone\n+\tdone |\n+\tif test -n \"$for_status\"; then\n+\t\tsed -e \"s|^|# |\" -e 's|^# $|#|'\n+\telse\n+\t\tcat\n+\tfi\n }\n #\n # List all submodules, prefixed with:\ndiff --git a/t/t7401-submodule-summary.sh b/t/t7401-submodule-summary.sh\nindex 0f3c42a..1dbb39d 100755\n--- a/t/t7401-submodule-summary.sh\n+++ b/t/t7401-submodule-summary.sh\n@@ -192,4 +192,17 @@ test_expect_success 'given commit' \"\n EOF\n \"\n \n+test_expect_success '--for-status' \"\n+    git submodule summary --for-status HEAD^ >actual &&\n+    diff actual - <<-EOF\n+# Modified submodules:\n+#\n+# * sm1 $head6...0000000:\n+#\n+# * sm2 0000000...$head7 (2):\n+#   > Add foo9\n+#\n+EOF\n+\"\n+\n test_done\n-- \n1.5.4.4.653.g7cf1e\n"},{"id":"72096","messageId":"1205508521-7407-3-git-send-email-pkufranky@gmail.com","threadId":"12694","inReplyTo":"1205508521-7407-2-git-send-email-pkufranky@gmail.com","subject":"[PATCH v2 2/5] builtin-status: submodule summary support","fromName":"Ping Yin","fromEmail":"pkufranky@gmail.com","sentAt":"2008-03-14T15:28:38Z","receivedAt":"2008-03-14T15:28:38Z","isPatch":true,"sender":{"key":"pkufranky@gmail.com","avatar":"https://avatars.githubusercontent.com/u/5346?v=4"},"body":"This commit teaches 'git commit/status' show 'Modified submodules'\nsection given by 'git submodule summary --cached --for-status'\njust before 'Untracked files' section.\n\nSigned-off-by: Ping Yin <pkufranky@gmail.com>\n---\n wt-status.c |   26 ++++++++++++++++++++++++++\n 1 files changed, 26 insertions(+), 0 deletions(-)\n\ndiff --git a/wt-status.c b/wt-status.c\nindex b3fd57b..dc4a88f 100644\n--- a/wt-status.c\n+++ b/wt-status.c\n@@ -8,6 +8,7 @@\n #include \"revision.h\"\n #include \"diffcore.h\"\n #include \"quote.h\"\n+#include \"run-command.h\"\n \n int wt_status_relative_paths = 1;\n int wt_status_use_color = -1;\n@@ -219,6 +220,30 @@ static void wt_status_print_changed(struct wt_status *s)\n \trev.diffopt.format_callback_data = s;\n \trun_diff_files(&rev, 0);\n }\n+static void wt_status_print_submodule_summary(struct wt_status *s)\n+{\n+\tstruct child_process sm_summary;\n+\tconst char *argv[] = {\n+\t\t\"submodule\",\n+\t\t\"summary\",\n+\t\t\"--cached\",\n+\t\t\"--for-status\",\n+\t\ts->amend ? \"HEAD^\" : \"HEAD\",\n+\t\tNULL\n+\t};\n+\tchar index[PATH_MAX];\n+\tconst char *env[2] = { index, NULL };\n+\tsnprintf(index, sizeof(index), \"GIT_INDEX_FILE=%s\", s->index_file);\n+\n+\tmemset(&sm_summary, 0, sizeof(sm_summary));\n+\tsm_summary.argv = argv;\n+\tsm_summary.env = env;\n+\tsm_summary.git_cmd = 1;\n+\tsm_summary.no_stdin = 1;\n+\tfflush(s->fp);\n+\tsm_summary.out = dup(fileno(s->fp));    /* run_command closes it */\n+\trun_command(&sm_summary);\n+}\n \n static void wt_status_print_untracked(struct wt_status *s)\n {\n@@ -308,6 +333,7 @@ void wt_status_print(struct wt_status *s)\n \t}\n \n \twt_status_print_changed(s);\n+\twt_status_print_submodule_summary(s);\n \twt_status_print_untracked(s);\n \n \tif (s->verbose && !s->is_initial)\n-- \n1.5.4.4.653.g7cf1e\n"},{"id":"72098","messageId":"1205508521-7407-4-git-send-email-pkufranky@gmail.com","threadId":"12694","inReplyTo":"1205508521-7407-3-git-send-email-pkufranky@gmail.com","subject":"[PATCH v2 3/5] builtin-status: configurable submodule summary size","fromName":"Ping Yin","fromEmail":"pkufranky@gmail.com","sentAt":"2008-03-14T15:28:39Z","receivedAt":"2008-03-14T15:28:39Z","isPatch":true,"sender":{"key":"pkufranky@gmail.com","avatar":"https://avatars.githubusercontent.com/u/5346?v=4"},"body":"Add config variable status.submodulesummary which is passed as\narg for '--summary-limit' of 'git submodule summary' to limit the\nsubmodule summary size.\n\nstatus.submodulesummary is 0 by default which disables the summary.\n\nSigned-off-by: Ping Yin <pkufranky@gmail.com>\n---\n wt-status.c |   10 ++++++++++\n 1 files changed, 10 insertions(+), 0 deletions(-)\n\ndiff --git a/wt-status.c b/wt-status.c\nindex dc4a88f..7a32c51 100644\n--- a/wt-status.c\n+++ b/wt-status.c\n@@ -12,6 +12,7 @@\n \n int wt_status_relative_paths = 1;\n int wt_status_use_color = -1;\n+int wt_status_submodule_summary = 0;\n static char wt_status_colors[][COLOR_MAXLEN] = {\n \t\"\",         /* WT_STATUS_HEADER: normal */\n \t\"\\033[32m\", /* WT_STATUS_UPDATED: green */\n@@ -222,12 +223,17 @@ static void wt_status_print_changed(struct wt_status *s)\n }\n static void wt_status_print_submodule_summary(struct wt_status *s)\n {\n+\tif (! wt_status_submodule_summary) return;\n \tstruct child_process sm_summary;\n+\tchar summary_limit[64];\n+\tsprintf(summary_limit, \"%d\", wt_status_submodule_summary);\n \tconst char *argv[] = {\n \t\t\"submodule\",\n \t\t\"summary\",\n \t\t\"--cached\",\n \t\t\"--for-status\",\n+\t\t\"--summary-limit\",\n+\t\tsummary_limit,\n \t\ts->amend ? \"HEAD^\" : \"HEAD\",\n \t\tNULL\n \t};\n@@ -356,6 +362,10 @@ void wt_status_print(struct wt_status *s)\n \n int git_status_config(const char *k, const char *v)\n {\n+\tif (!strcmp(k, \"status.submodulesummary\")) {\n+\t\twt_status_submodule_summary = atoi(v);\n+\t\treturn 0;\n+\t}\n \tif (!strcmp(k, \"status.color\") || !strcmp(k, \"color.status\")) {\n \t\twt_status_use_color = git_config_colorbool(k, v, -1);\n \t\treturn 0;\n-- \n1.5.4.4.653.g7cf1e\n"},{"id":"72100","messageId":"1205508521-7407-5-git-send-email-pkufranky@gmail.com","threadId":"12694","inReplyTo":"1205508521-7407-4-git-send-email-pkufranky@gmail.com","subject":"[PATCH v2 4/5] buitin-status: Add tests for submodule summary","fromName":"Ping Yin","fromEmail":"pkufranky@gmail.com","sentAt":"2008-03-14T15:28:40Z","receivedAt":"2008-03-14T15:28:40Z","isPatch":true,"sender":{"key":"pkufranky@gmail.com","avatar":"https://avatars.githubusercontent.com/u/5346?v=4"},"body":"Signed-off-by: Ping Yin <pkufranky@gmail.com>\n---\n t/t7502-status.sh |  134 +++++++++++++++++++++++++++++++++++++++++++++++++++++\n 1 files changed, 134 insertions(+), 0 deletions(-)\n\ndiff --git a/t/t7502-status.sh b/t/t7502-status.sh\nindex cd08516..33882c9 100755\n--- a/t/t7502-status.sh\n+++ b/t/t7502-status.sh\n@@ -149,4 +149,138 @@ test_expect_success 'status of partial commit excluding new file in index' '\n \ttest_cmp expect output\n '\n \n+test_expect_success \"setup status submodule summary\" '\n+\ttest_create_repo sm &&\n+\tcd sm &&\n+\t: >foo &&\n+\tgit add foo &&\n+\tgit commit -m \"Add foo\" &&\n+\tcd .. &&\n+\tgit add sm\n+'\n+\n+cat > expect <<EOF\n+# On branch master\n+# Changes to be committed:\n+#   (use \"git reset HEAD <file>...\" to unstage)\n+#\n+#\tnew file:   dir2/added\n+#\tnew file:   sm\n+#\n+# Changed but not updated:\n+#   (use \"git add <file>...\" to update what will be committed)\n+#\n+#\tmodified:   dir1/modified\n+#\n+# Untracked files:\n+#   (use \"git add <file>...\" to include in what will be committed)\n+#\n+#\tdir1/untracked\n+#\tdir2/modified\n+#\tdir2/untracked\n+#\texpect\n+#\toutput\n+#\tuntracked\n+EOF\n+test_expect_success \"status submodule summary is disabled by default\" '\n+\tgit status > output &&\n+\tgit diff expect output\n+'\n+\n+head=$(cd sm && git rev-parse --short=7 --verify HEAD)\n+\n+cat > expect <<EOF\n+# On branch master\n+# Changes to be committed:\n+#   (use \"git reset HEAD <file>...\" to unstage)\n+#\n+#\tnew file:   dir2/added\n+#\tnew file:   sm\n+#\n+# Changed but not updated:\n+#   (use \"git add <file>...\" to update what will be committed)\n+#\n+#\tmodified:   dir1/modified\n+#\n+# Modified submodules:\n+#\n+# * sm 0000000...$head (1):\n+#   > Add foo\n+#\n+# Untracked files:\n+#   (use \"git add <file>...\" to include in what will be committed)\n+#\n+#\tdir1/untracked\n+#\tdir2/modified\n+#\tdir2/untracked\n+#\texpect\n+#\toutput\n+#\tuntracked\n+EOF\n+test_expect_success \"status submodule summary\" '\n+\tgit config status.submodulesummary 10 &&\n+\tgit status > output &&\n+\tgit diff expect output\n+'\n+\n+\n+cat > expect <<EOF\n+# On branch master\n+# Changed but not updated:\n+#   (use \"git add <file>...\" to update what will be committed)\n+#\n+#\tmodified:   dir1/modified\n+#\n+# Untracked files:\n+#   (use \"git add <file>...\" to include in what will be committed)\n+#\n+#\tdir1/untracked\n+#\tdir2/modified\n+#\tdir2/untracked\n+#\texpect\n+#\toutput\n+#\tuntracked\n+no changes added to commit (use \"git add\" and/or \"git commit -a\")\n+EOF\n+test_expect_success \"status submodule summary (clean submodule)\" '\n+\tgit commit -m \"commit submodule\" &&\n+\tgit config status.submodulesummary 10 &&\n+\t! git status > output &&\n+\tgit diff expect output\n+'\n+\n+cat > expect <<EOF\n+# On branch master\n+# Changes to be committed:\n+#   (use \"git reset HEAD^1 <file>...\" to unstage)\n+#\n+#\tnew file:   dir2/added\n+#\tnew file:   sm\n+#\n+# Changed but not updated:\n+#   (use \"git add <file>...\" to update what will be committed)\n+#\n+#\tmodified:   dir1/modified\n+#\n+# Modified submodules:\n+#\n+# * sm 0000000...$head (1):\n+#   > Add foo\n+#\n+# Untracked files:\n+#   (use \"git add <file>...\" to include in what will be committed)\n+#\n+#\tdir1/untracked\n+#\tdir2/modified\n+#\tdir2/untracked\n+#\texpect\n+#\toutput\n+#\tuntracked\n+EOF\n+test_expect_success \"status submodule summary (--amend)\" '\n+\tgit config status.submodulesummary 10 &&\n+\tgit status --amend > output &&\n+\tgit diff expect output\n+'\n+\n test_done\n-- \n1.5.4.4.653.g7cf1e\n"},{"id":"72099","messageId":"1205508521-7407-6-git-send-email-pkufranky@gmail.com","threadId":"12694","inReplyTo":"1205508521-7407-5-git-send-email-pkufranky@gmail.com","subject":"[PATCH v2 5/5] git-status: Mention status.submodulesummary config in the documentation","fromName":"Ping Yin","fromEmail":"pkufranky@gmail.com","sentAt":"2008-03-14T15:28:41Z","receivedAt":"2008-03-14T15:28:41Z","isPatch":true,"sender":{"key":"pkufranky@gmail.com","avatar":"https://avatars.githubusercontent.com/u/5346?v=4"},"body":"Signed-off-by: Ping Yin <pkufranky@gmail.com>\n---\n Documentation/git-status.txt |    4 ++++\n 1 files changed, 4 insertions(+), 0 deletions(-)\n\ndiff --git a/Documentation/git-status.txt b/Documentation/git-status.txt\nindex 3ea269a..32b6660 100644\n--- a/Documentation/git-status.txt\n+++ b/Documentation/git-status.txt\n@@ -52,6 +52,10 @@ If the config variable `status.relativePaths` is set to false, then all\n paths shown are relative to the repository root, not to the current\n directory.\n \n+If 'status.submodulesummary' is set to a non zero number, the submodule\n+summary will be enabled and a summary of commits for modified submodules\n+will be shown (see --summary-limit option of linkgit:git-submodule[1]).\n+\n See Also\n --------\n linkgit:gitignore[5]\n-- \n1.5.4.4.653.g7cf1e\n"},{"id":"72107","messageId":"47DAA638.6060108@viscovery.net","threadId":"12694","inReplyTo":"1205508521-7407-1-git-send-email-pkufranky@gmail.com","subject":"Re: [PATCH v2 0/5] builtin-status submodule summary","fromName":"Johannes Sixt","fromEmail":"j.sixt@viscovery.net","sentAt":"2008-03-14T16:22:16Z","receivedAt":"2008-03-14T16:22:16Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"Ping Yin schrieb:\n> IMO, git submodule summary is not so useful for me if it's not\n> integrated into git-status. In fact i never use \"git submodule\n> summary\" directly. git-status with submodule summary support is very\n> useful to help user figure out what is going on in a more global level\n> when cooking the commit message.\n> \n> So i think this series should go along with the submodule summary series.\n\nI think so, too. The changes and defaults in wt-status.c are trivial\nenough that they don't penalize traditional git-status users.\n\n> The v2 series has following commits adding a new commit for documentation\n> \n>     1  git-submodule summary: --for-status option\n>     2  builtin-status: submodule summary support\n>     3  builtin-status: configurable submodule summary size\n>     4  buitin-status: Add tests for submodule summary\n>     5  git-status: Mention status.submodulesummary config in the documentation\n\nI'd actually squash 2, 3, and 5.\n\nYou still have the statement before a declaration in 3/5.\n\n> +\tif (! wt_status_submodule_summary) return;\n\nAnd here the important part (IMO) is actually that 'return' should go on a\nline of its own.\n\n-- Hannes\n"},{"id":"72120","messageId":"46dff0320803141042g561f94aen2bf8396a2766054b@mail.gmail.com","threadId":"12694","inReplyTo":"47DAA638.6060108@viscovery.net","subject":"Re: [PATCH v2 0/5] builtin-status submodule summary","fromName":"Ping Yin","fromEmail":"pkufranky@gmail.com","sentAt":"2008-03-14T17:42:57Z","receivedAt":"2008-03-14T17:42:57Z","isPatch":true,"sender":{"key":"pkufranky@gmail.com","avatar":"https://avatars.githubusercontent.com/u/5346?v=4"},"body":"On Sat, Mar 15, 2008 at 12:22 AM, Johannes Sixt <j.sixt@viscovery.net> wrote:\n> Ping Yin schrieb:\n>\n> > IMO, git submodule summary is not so useful for me if it's not\n>  > integrated into git-status. In fact i never use \"git submodule\n>  > summary\" directly. git-status with submodule summary support is very\n>  > useful to help user figure out what is going on in a more global level\n>  > when cooking the commit message.\n>  >\n>  > So i think this series should go along with the submodule summary series.\n>\n>  I think so, too. The changes and defaults in wt-status.c are trivial\n>  enough that they don't penalize traditional git-status users.\n>\n>\n>  > The v2 series has following commits adding a new commit for documentation\n>  >\n>  >     1  git-submodule summary: --for-status option\n>  >     2  builtin-status: submodule summary support\n>  >     3  builtin-status: configurable submodule summary size\n>  >     4  buitin-status: Add tests for submodule summary\n>  >     5  git-status: Mention status.submodulesummary config in the documentation\n>\n>  I'd actually squash 2, 3, and 5.\n>\n>  You still have the statement before a declaration in 3/5.\nSorry i forgot about it.\n\n>\n>\n>  > +     if (! wt_status_submodule_summary) return;\n>\n>  And here the important part (IMO) is actually that 'return' should go on a\n>  line of its own.\nOK\n\n\n\n-- \nPing Yin\n"}]}