Skip to content

Commit

Permalink
commit: support alternate status formats
Browse files Browse the repository at this point in the history
The status command recently grew "short" and "porcelain"
options for alternate output formats. Since status is no
longer "commit --dry-run", these formats are inaccessible to
people who do want to see a dry-run in a parseable form.

This patch makes those formats available to "git commit",
implying the "dry-run" option when they are used.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Jeff King authored and Junio C Hamano committed Sep 6, 2009
1 parent 6f15787 commit 7c9f703
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 7 deletions.
14 changes: 14 additions & 0 deletions Documentation/git-commit.txt
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,20 @@ OPTIONS
and paths that are untracked, similar to the one that is given
in the commit log editor.

--short::
When doing a dry-run, give the output in the short-format. See
linkgit:git-status[1] for details. Implies `--dry-run`.

--porcelain::
When doing a dry-run, give the output in a porcelain-ready
format. See linkgit:git-status[1] for details. Implies
`--dry-run`.

-z::
When showing `short` or `porcelain` status output, terminate
entries in the status output with NUL, instead of LF. If no
format is given, implies the `--porcelain` output format.

-F <file>::
--file=<file>::
Take the commit message from the given file. Use '-' to
Expand Down
39 changes: 32 additions & 7 deletions builtin-commit.c
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,15 @@ static int use_editor = 1, initial_commit, in_merge;
static const char *only_include_assumed;
static struct strbuf message;

static int null_termination;
static enum {
STATUS_FORMAT_LONG,
STATUS_FORMAT_SHORT,
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;
Expand Down Expand Up @@ -105,6 +114,12 @@ static struct option builtin_commit_options[] = {
OPT_BOOLEAN('o', "only", &only, "commit only specified files"),
OPT_BOOLEAN('n', "no-verify", &no_verify, "bypass pre-commit hook"),
OPT_BOOLEAN(0, "dry-run", &dry_run, "show what would be committed"),
OPT_SET_INT(0, "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"),
OPT_BOOLEAN(0, "amend", &amend, "amend previous commit"),
{ OPTION_STRING, 'u', "untracked-files", &untracked_files_arg, "mode", "show untracked files, optional modes: all, normal, no. (Default: all)", PARSE_OPT_OPTARG, NULL, (intptr_t)"all" },
OPT_BOOLEAN(0, "allow-empty", &allow_empty, "ok to record an empty change"),
Expand Down Expand Up @@ -363,7 +378,18 @@ static int run_status(FILE *fp, const char *index_file, const char *prefix, int
s->is_initial = get_sha1(s->reference, sha1) ? 1 : 0;

wt_status_collect(s);
wt_status_print(s);

switch (status_format) {
case STATUS_FORMAT_SHORT:
short_print(s, null_termination);
break;
case STATUS_FORMAT_PORCELAIN:
short_print(s, null_termination);
break;
case STATUS_FORMAT_LONG:
wt_status_print(s);
break;
}

return s->commitable;
}
Expand Down Expand Up @@ -821,6 +847,11 @@ static int parse_and_validate_options(int argc, const char *argv[],
else if (interactive && argc > 0)
die("Paths with --interactive does not make sense.");

if (null_termination && status_format == STATUS_FORMAT_LONG)
status_format = STATUS_FORMAT_PORCELAIN;
if (status_format != STATUS_FORMAT_LONG)
dry_run = 1;

return argc;
}

Expand Down Expand Up @@ -991,12 +1022,6 @@ static void short_print(struct wt_status *s, int null_termination)
int cmd_status(int argc, const char **argv, const char *prefix)
{
struct wt_status s;
static int null_termination;
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),
Expand Down

0 comments on commit 7c9f703

Please sign in to comment.