* [PATCH 1/2] builtin-commit: refactor short-status code into wt-status.c
2009-12-05 15:04 [PATCH 0/2] Refactor status producers and make status -s use color Michael J Gruber
@ 2009-12-05 15:04 ` Michael J Gruber
2009-12-07 0:30 ` Junio C Hamano
2009-12-05 15:04 ` [PATCH 2/2] status -s: obey color.status Michael J Gruber
1 sibling, 1 reply; 7+ messages in thread
From: Michael J Gruber @ 2009-12-05 15:04 UTC (permalink / raw)
To: git; +Cc: Junio C Hamano
Currently, builtin-commit.c contains most code producing the
short-status output, whereas wt-status.c contains most of the code for
the long format.
Refactor so that most of the long and short format producing code
resides in wt-status.c and is named analogously.
Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
---
builtin-commit.c | 101 ++---------------------------------------------------
wt-status.c | 89 +++++++++++++++++++++++++++++++++++++++++++++++
wt-status.h | 2 +
3 files changed, 95 insertions(+), 97 deletions(-)
diff --git a/builtin-commit.c b/builtin-commit.c
index c103beb..548bbf5 100644
--- a/builtin-commit.c
+++ b/builtin-commit.c
@@ -79,8 +79,6 @@ static enum {
STATUS_FORMAT_PORCELAIN,
} status_format = STATUS_FORMAT_LONG;
-static void short_print(struct wt_status *s, int null_termination);
-
static int opt_parse_m(const struct option *opt, const char *arg, int unset)
{
struct strbuf *buf = opt->value;
@@ -387,10 +385,10 @@ static int run_status(FILE *fp, const char *index_file, const char *prefix, int
switch (status_format) {
case STATUS_FORMAT_SHORT:
- short_print(s, null_termination);
+ wt_shortstatus_print(s, null_termination);
break;
case STATUS_FORMAT_PORCELAIN:
- short_print(s, null_termination);
+ wt_shortstatus_print(s, null_termination);
break;
case STATUS_FORMAT_LONG:
wt_status_print(s);
@@ -982,97 +980,6 @@ static int git_status_config(const char *k, const char *v, void *cb)
return git_diff_ui_config(k, v, NULL);
}
-#define quote_path quote_path_relative
-
-static void short_unmerged(int null_termination, struct string_list_item *it,
- struct wt_status *s)
-{
- struct wt_status_change_data *d = it->util;
- const char *how = "??";
-
- switch (d->stagemask) {
- case 1: how = "DD"; break; /* both deleted */
- case 2: how = "AU"; break; /* added by us */
- case 3: how = "UD"; break; /* deleted by them */
- case 4: how = "UA"; break; /* added by them */
- case 5: how = "DU"; break; /* deleted by us */
- case 6: how = "AA"; break; /* both added */
- case 7: how = "UU"; break; /* both modified */
- }
- printf("%s ", how);
- if (null_termination) {
- fprintf(stdout, "%s%c", it->string, 0);
- } else {
- struct strbuf onebuf = STRBUF_INIT;
- const char *one;
- one = quote_path(it->string, -1, &onebuf, s->prefix);
- printf("%s\n", one);
- strbuf_release(&onebuf);
- }
-}
-
-static void short_status(int null_termination, struct string_list_item *it,
- struct wt_status *s)
-{
- struct wt_status_change_data *d = it->util;
-
- printf("%c%c ",
- !d->index_status ? ' ' : d->index_status,
- !d->worktree_status ? ' ' : d->worktree_status);
- if (null_termination) {
- fprintf(stdout, "%s%c", it->string, 0);
- if (d->head_path)
- fprintf(stdout, "%s%c", d->head_path, 0);
- } else {
- struct strbuf onebuf = STRBUF_INIT;
- const char *one;
- if (d->head_path) {
- one = quote_path(d->head_path, -1, &onebuf, s->prefix);
- printf("%s -> ", one);
- strbuf_release(&onebuf);
- }
- one = quote_path(it->string, -1, &onebuf, s->prefix);
- printf("%s\n", one);
- strbuf_release(&onebuf);
- }
-}
-
-static void short_untracked(int null_termination, struct string_list_item *it,
- struct wt_status *s)
-{
- if (null_termination) {
- fprintf(stdout, "?? %s%c", it->string, 0);
- } else {
- struct strbuf onebuf = STRBUF_INIT;
- const char *one;
- one = quote_path(it->string, -1, &onebuf, s->prefix);
- printf("?? %s\n", one);
- strbuf_release(&onebuf);
- }
-}
-
-static void short_print(struct wt_status *s, int null_termination)
-{
- int i;
- for (i = 0; i < s->change.nr; i++) {
- struct wt_status_change_data *d;
- struct string_list_item *it;
-
- it = &(s->change.items[i]);
- d = it->util;
- if (d->stagemask)
- short_unmerged(null_termination, it, s);
- else
- short_status(null_termination, it, s);
- }
- for (i = 0; i < s->untracked.nr; i++) {
- struct string_list_item *it;
-
- it = &(s->untracked.items[i]);
- short_untracked(null_termination, it, s);
- }
-}
-
int cmd_status(int argc, const char **argv, const char *prefix)
{
struct wt_status s;
@@ -1115,10 +1022,10 @@ int cmd_status(int argc, const char **argv, const char *prefix)
case STATUS_FORMAT_SHORT:
if (s.relative_paths)
s.prefix = prefix;
- short_print(&s, null_termination);
+ wt_shortstatus_print(&s, null_termination);
break;
case STATUS_FORMAT_PORCELAIN:
- short_print(&s, null_termination);
+ wt_shortstatus_print(&s, null_termination);
break;
case STATUS_FORMAT_LONG:
s.verbose = verbose;
diff --git a/wt-status.c b/wt-status.c
index 3c2f580..93af994 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -600,3 +600,92 @@ void wt_status_print(struct wt_status *s)
printf("nothing to commit (working directory clean)\n");
}
}
+
+static void wt_shortstatus_unmerged(int null_termination, struct string_list_item *it,
+ struct wt_status *s)
+{
+ struct wt_status_change_data *d = it->util;
+ const char *how = "??";
+
+ switch (d->stagemask) {
+ case 1: how = "DD"; break; /* both deleted */
+ case 2: how = "AU"; break; /* added by us */
+ case 3: how = "UD"; break; /* deleted by them */
+ case 4: how = "UA"; break; /* added by them */
+ case 5: how = "DU"; break; /* deleted by us */
+ case 6: how = "AA"; break; /* both added */
+ case 7: how = "UU"; break; /* both modified */
+ }
+ printf("%s ", how);
+ if (null_termination) {
+ fprintf(stdout, "%s%c", it->string, 0);
+ } else {
+ struct strbuf onebuf = STRBUF_INIT;
+ const char *one;
+ one = quote_path(it->string, -1, &onebuf, s->prefix);
+ printf("%s\n", one);
+ strbuf_release(&onebuf);
+ }
+}
+
+static void wt_shortstatus_status(int null_termination, struct string_list_item *it,
+ struct wt_status *s)
+{
+ struct wt_status_change_data *d = it->util;
+
+ printf("%c%c ",
+ !d->index_status ? ' ' : d->index_status,
+ !d->worktree_status ? ' ' : d->worktree_status);
+ if (null_termination) {
+ fprintf(stdout, "%s%c", it->string, 0);
+ if (d->head_path)
+ fprintf(stdout, "%s%c", d->head_path, 0);
+ } else {
+ struct strbuf onebuf = STRBUF_INIT;
+ const char *one;
+ if (d->head_path) {
+ one = quote_path(d->head_path, -1, &onebuf, s->prefix);
+ printf("%s -> ", one);
+ strbuf_release(&onebuf);
+ }
+ one = quote_path(it->string, -1, &onebuf, s->prefix);
+ printf("%s\n", one);
+ strbuf_release(&onebuf);
+ }
+}
+
+static void wt_shortstatus_untracked(int null_termination, struct string_list_item *it,
+ struct wt_status *s)
+{
+ if (null_termination) {
+ fprintf(stdout, "?? %s%c", it->string, 0);
+ } else {
+ struct strbuf onebuf = STRBUF_INIT;
+ const char *one;
+ one = quote_path(it->string, -1, &onebuf, s->prefix);
+ printf("?? %s\n", one);
+ strbuf_release(&onebuf);
+ }
+}
+
+void wt_shortstatus_print(struct wt_status *s, int null_termination)
+{
+ int i;
+ for (i = 0; i < s->change.nr; i++) {
+ struct wt_status_change_data *d;
+ struct string_list_item *it;
+
+ it = &(s->change.items[i]);
+ d = it->util;
+ if (d->stagemask)
+ wt_shortstatus_unmerged(null_termination, it, s);
+ else
+ wt_shortstatus_status(null_termination, it, s);
+ }
+ for (i = 0; i < s->untracked.nr; i++) {
+ struct string_list_item *it;
+
+ it = &(s->untracked.items[i]);
+ wt_shortstatus_untracked(null_termination, it, s);
+ }
+}
diff --git a/wt-status.h b/wt-status.h
index 09fd9f1..39c9aef 100644
--- a/wt-status.h
+++ b/wt-status.h
@@ -56,4 +56,6 @@ void wt_status_prepare(struct wt_status *s);
void wt_status_print(struct wt_status *s);
void wt_status_collect(struct wt_status *s);
+void wt_shortstatus_print(struct wt_status *s, int null_termination);
+
#endif /* STATUS_H */
--
1.6.6.rc1.282.ge6667
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/2] status -s: obey color.status
2009-12-05 15:04 [PATCH 0/2] Refactor status producers and make status -s use color Michael J Gruber
2009-12-05 15:04 ` [PATCH 1/2] builtin-commit: refactor short-status code into wt-status.c Michael J Gruber
@ 2009-12-05 15:04 ` Michael J Gruber
2009-12-07 5:17 ` Jeff King
1 sibling, 1 reply; 7+ messages in thread
From: Michael J Gruber @ 2009-12-05 15:04 UTC (permalink / raw)
To: git; +Cc: Junio C Hamano
Make the short version of status obey the color.status boolean. We color
the status letters only, because they carry the state information and are
potentially colored differently, such as for a file with staged changes
as well as changes in the worktree against the index.
Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
---
builtin-commit.c | 4 ++++
wt-status.c | 21 ++++++++++++++-------
2 files changed, 18 insertions(+), 7 deletions(-)
diff --git a/builtin-commit.c b/builtin-commit.c
index 548bbf5..ddcfffb 100644
--- a/builtin-commit.c
+++ b/builtin-commit.c
@@ -1022,6 +1022,10 @@ int cmd_status(int argc, const char **argv, const char *prefix)
case STATUS_FORMAT_SHORT:
if (s.relative_paths)
s.prefix = prefix;
+ if (s.use_color == -1)
+ s.use_color = git_use_color_default;
+ if (diff_use_color_default == -1)
+ diff_use_color_default = git_use_color_default;
wt_shortstatus_print(&s, null_termination);
break;
case STATUS_FORMAT_PORCELAIN:
diff --git a/wt-status.c b/wt-status.c
index 93af994..a8b6d05 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -616,14 +616,14 @@ static void wt_shortstatus_unmerged(int null_termination, struct string_list_ite
case 6: how = "AA"; break; /* both added */
case 7: how = "UU"; break; /* both modified */
}
- printf("%s ", how);
+ color_fprintf(s->fp, color(WT_STATUS_UNMERGED, s), "%s", how);
if (null_termination) {
- fprintf(stdout, "%s%c", it->string, 0);
+ fprintf(stdout, " %s%c", it->string, 0);
} else {
struct strbuf onebuf = STRBUF_INIT;
const char *one;
one = quote_path(it->string, -1, &onebuf, s->prefix);
- printf("%s\n", one);
+ printf(" %s\n", one);
strbuf_release(&onebuf);
}
}
@@ -633,9 +633,15 @@ static void wt_shortstatus_status(int null_termination, struct string_list_item
{
struct wt_status_change_data *d = it->util;
- printf("%c%c ",
- !d->index_status ? ' ' : d->index_status,
- !d->worktree_status ? ' ' : d->worktree_status);
+ if (d->index_status)
+ color_fprintf(s->fp, color(WT_STATUS_UPDATED, s), "%c", d->index_status);
+ else
+ putchar(' ');
+ if (d->worktree_status)
+ color_fprintf(s->fp, color(WT_STATUS_CHANGED, s), "%c", d->worktree_status);
+ else
+ putchar(' ');
+ putchar(' ');
if (null_termination) {
fprintf(stdout, "%s%c", it->string, 0);
if (d->head_path)
@@ -663,7 +669,8 @@ static void wt_shortstatus_untracked(int null_termination, struct string_list_it
struct strbuf onebuf = STRBUF_INIT;
const char *one;
one = quote_path(it->string, -1, &onebuf, s->prefix);
- printf("?? %s\n", one);
+ color_fprintf(s->fp, color(WT_STATUS_UNTRACKED, s), "??");
+ printf(" %s\n", one);
strbuf_release(&onebuf);
}
}
--
1.6.6.rc1.282.ge6667
^ permalink raw reply related [flat|nested] 7+ messages in thread