Skip to content

Commit

Permalink
Add support for -p/--patch to git-commit
Browse files Browse the repository at this point in the history
The --interactive flag is already shared by git add and git commit,
share the -p and --patch flags too.

Signed-off-by: Conrad Irwin <conrad.irwin@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
ConradIrwin authored and gitster committed May 10, 2011
1 parent e41fcfe commit b4bd466
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 16 deletions.
25 changes: 16 additions & 9 deletions Documentation/git-commit.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,12 @@ git-commit - Record changes to the repository
SYNOPSIS
--------
[verse]
'git commit' [-a | --interactive] [-s] [-v] [-u<mode>] [--amend] [--dry-run]
[(-c | -C | --fixup | --squash) <commit>] [-F <file> | -m <msg>]
[--reset-author] [--allow-empty] [--allow-empty-message] [--no-verify]
[-e] [--author=<author>] [--date=<date>] [--cleanup=<mode>]
[--status | --no-status] [-i | -o] [--] [<file>...]
'git commit' [-a | --interactive | --patch] [-s] [-v] [-u<mode>] [--amend]
[--dry-run] [(-c | -C | --fixup | --squash) <commit>]
[-F <file> | -m <msg>] [--reset-author] [--allow-empty]
[--allow-empty-message] [--no-verify] [-e] [--author=<author>]
[--date=<date>] [--cleanup=<mode>] [--status | --no-status]
[-i | -o] [--] [<file>...]

DESCRIPTION
-----------
Expand All @@ -39,10 +40,10 @@ The content to be added can be specified in several ways:
that have been removed from the working tree, and then perform the
actual commit;

5. by using the --interactive switch with the 'commit' command to decide one
by one which files should be part of the commit, before finalizing the
operation. Currently, this is done by invoking 'git add --interactive'
on a temporary index.
5. by using the --interactive or --patch switches with the 'commit' command
to decide one by one which files or hunks should be part of the commit,
before finalizing the operation. See the ``Interactive Mode`` section of
linkgit:git-add[1] to learn how to operate these modes.

The `--dry-run` option can be used to obtain a
summary of what is included by any of the above for the next
Expand All @@ -60,6 +61,12 @@ OPTIONS
been modified and deleted, but new files you have not
told git about are not affected.

-p::
--patch::
Use the interactive patch selection interface to chose
which changes to commit. See linkgit:git-add[1] for
details.

-C <commit>::
--reuse-message=<commit>::
Take an existing commit object, and reuse the log message
Expand Down
6 changes: 3 additions & 3 deletions builtin/add.c
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ int run_add_interactive(const char *revision, const char *patch_mode,
return status;
}

int interactive_add(int argc, const char **argv, const char *prefix)
int interactive_add(int argc, const char **argv, const char *prefix, int patch)
{
const char **pathspec = NULL;

Expand All @@ -252,7 +252,7 @@ int interactive_add(int argc, const char **argv, const char *prefix)
}

return run_add_interactive(NULL,
patch_interactive ? "--patch" : NULL,
patch ? "--patch" : NULL,
pathspec);
}

Expand Down Expand Up @@ -377,7 +377,7 @@ int cmd_add(int argc, const char **argv, const char *prefix)
if (patch_interactive)
add_interactive = 1;
if (add_interactive)
exit(interactive_add(argc - 1, argv + 1, prefix));
exit(interactive_add(argc - 1, argv + 1, prefix, patch_interactive));

if (edit_interactive)
return(edit_patch(argc, argv, prefix));
Expand Down
10 changes: 7 additions & 3 deletions builtin/commit.c
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ static const char *template_file;
static const char *author_message, *author_message_buffer;
static char *edit_message, *use_message;
static char *fixup_message, *squash_message;
static int all, edit_flag, also, interactive, only, amend, signoff;
static int all, edit_flag, also, interactive, patch_interactive, only, amend, signoff;
static int quiet, verbose, no_verify, allow_empty, dry_run, renew_authorship;
static int no_post_rewrite, allow_empty_message;
static char *untracked_files_arg, *force_date, *ignore_submodule_arg;
Expand Down Expand Up @@ -152,6 +152,7 @@ static struct option builtin_commit_options[] = {
OPT_BOOLEAN('a', "all", &all, "commit all changed files"),
OPT_BOOLEAN('i', "include", &also, "add specified files to index for commit"),
OPT_BOOLEAN(0, "interactive", &interactive, "interactively add files"),
OPT_BOOLEAN('p', "patch", &patch_interactive, "interactively add changes"),
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"),
Expand Down Expand Up @@ -360,7 +361,7 @@ static char *prepare_index(int argc, const char **argv, const char *prefix, int
old_index_env = getenv(INDEX_ENVIRONMENT);
setenv(INDEX_ENVIRONMENT, index_lock.filename, 1);

if (interactive_add(argc, argv, prefix) != 0)
if (interactive_add(argc, argv, prefix, patch_interactive) != 0)
die(_("interactive add failed"));

if (old_index_env && *old_index_env)
Expand Down Expand Up @@ -1061,8 +1062,11 @@ static int parse_and_validate_options(int argc, const char *argv[],
author_message_buffer = read_commit_message(author_message);
}

if (patch_interactive)
interactive = 1;

if (!!also + !!only + !!all + !!interactive > 1)
die(_("Only one of --include/--only/--all/--interactive can be used."));
die(_("Only one of --include/--only/--all/--interactive/--patch can be used."));
if (argc == 0 && (also || (only && !amend)))
die(_("No paths with --include/--only does not make sense."));
if (argc == 0 && only && amend)
Expand Down
2 changes: 1 addition & 1 deletion commit.h
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ extern struct commit_list *get_shallow_commits(struct object_array *heads,
int is_descendant_of(struct commit *, struct commit_list *);
int in_merge_bases(struct commit *, struct commit **, int);

extern int interactive_add(int argc, const char **argv, const char *prefix);
extern int interactive_add(int argc, const char **argv, const char *prefix, int patch);
extern int run_add_interactive(const char *revision, const char *patch_mode,
const char **pathspec);

Expand Down

0 comments on commit b4bd466

Please sign in to comment.