Skip to content

Commit

Permalink
status: add --porcelain output format
Browse files Browse the repository at this point in the history
The "short" format was added to "git status" recently to
provide a less verbose way of looking at the same
information. This has two practical uses:

  1. Users who want a more dense display of the information.

  2. Scripts which want to parse the information and need a
     stable, easy-to-parse interface.

For now, the "--short" format covers both of those uses.
However, as time goes on, users of (1) may want additional
format tweaks, or for "git status" to change its behavior
based on configuration variables. Those wishes will be at
odds with (2), which wants to stability for scripts.

This patch introduces a separate --porcelain option early to
avoid problems later on.  Right now the --short and
--porcelain outputs are identical. However, as time goes on,
we will have the freedom to customize --short for human
consumption while keeping --porcelain stable.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
peff authored and gitster committed Sep 6, 2009
1 parent dd2be24 commit 6f15787
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 3 deletions.
9 changes: 7 additions & 2 deletions Documentation/git-status.txt
Expand Up @@ -27,6 +27,11 @@ OPTIONS
--short::
Give the output in the short-format.

--porcelain::
Give the output in a stable, easy-to-parse format for scripts.
Currently this is identical to --short output, but is guaranteed
not to change in the future, making it safe for scripts.

-u[<mode>]::
--untracked-files[=<mode>]::
Show untracked files (Default: 'all').
Expand All @@ -45,8 +50,8 @@ used to change the default for when the option is not
specified.

-z::
Terminate entries with NUL, instead of LF. This implies `-s`
(short status) output format.
Terminate entries with NUL, instead of LF. This implies
the `--porcelain` output format if no other format is given.


OUTPUT
Expand Down
9 changes: 8 additions & 1 deletion builtin-commit.c
Expand Up @@ -995,12 +995,16 @@ int cmd_status(int argc, const char **argv, const char *prefix)
static enum {
STATUS_FORMAT_LONG,
STATUS_FORMAT_SHORT,
STATUS_FORMAT_PORCELAIN,
} status_format = STATUS_FORMAT_LONG;
unsigned char sha1[20];
static struct option builtin_status_options[] = {
OPT__VERBOSE(&verbose),
OPT_SET_INT('s', "short", &status_format,
"show status concisely", STATUS_FORMAT_SHORT),
OPT_SET_INT(0, "porcelain", &status_format,
"show porcelain output format",
STATUS_FORMAT_PORCELAIN),
OPT_BOOLEAN('z', "null", &null_termination,
"terminate entries with NUL"),
{ OPTION_STRING, 'u', "untracked-files", &untracked_files_arg,
Expand All @@ -1011,7 +1015,7 @@ int cmd_status(int argc, const char **argv, const char *prefix)
};

if (null_termination && status_format == STATUS_FORMAT_LONG)
status_format = STATUS_FORMAT_SHORT;
status_format = STATUS_FORMAT_PORCELAIN;

wt_status_prepare(&s);
git_config(git_status_config, &s);
Expand All @@ -1032,6 +1036,9 @@ int cmd_status(int argc, const char **argv, const char *prefix)
case STATUS_FORMAT_SHORT:
short_print(&s, null_termination);
break;
case STATUS_FORMAT_PORCELAIN:
short_print(&s, null_termination);
break;
case STATUS_FORMAT_LONG:
s.verbose = verbose;
if (s.relative_paths)
Expand Down

0 comments on commit 6f15787

Please sign in to comment.