Re: [PATCH 5/5] revert: simplify communicating command-line arguments

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Ramkumar Ramachandra wrote:

> From: Jonathan Nieder <jrnieder@xxxxxxxxx>
>
> Currently, command-line arguments are communicated using (argc, argv)
> until a prepare_revs() turns it into a terse structure.  However,
> since we plan to expose the cherry-picking machinery through a public
> API in the future, we want callers to be able to call in with a
> filled-in structure.  For the revert builtin, this means that the
> chief argument parser, parse_args(), should parse into such a
> structure.  Make this change.

Fine.  I guess it can be said more clearly while emphasizing public
interfaces over implementation details:

	Since the "multiple cherry-pick" feature was introduced (commit
	7e2bfd3f, 2010-07-02), the pick/revert machinery has kept track
	of the set of commits to be cherry-picked or reverted using
	commit_argc and commit_argv variables storing the relevant
	command-line parameters.

	Future callers as other commands are built in (am, rebase,
	sequencer) may find it easier to pass rev-list options to this
	machinery in already-parsed form, though.  So teach
	cmd_cherry_pick and cmd_revert to parse the rev-list arguments
	in advance and pass the commit set to pick_revisions() as a
	value of type "struct rev_info".

[...]
> @@ -222,7 +220,20 @@ static void parse_args(int argc, const char **argv, struct replay_opts *opts)
>  				"-x", opts->record_origin,
>  				"--edit", opts->edit,
>  				NULL);
> -	opts->commit_argv = argv;
> +
> +	if (opts->subcommand == REPLAY_NONE) {
> +		opts->revs = xmalloc(sizeof(*opts->revs));
> +		init_revisions(opts->revs, NULL);
> +		opts->revs->no_walk = 1;
> +		if (argc < 2)
> +			usage_with_options(usage_str, options);
> +		argc = setup_revisions(argc, argv, opts->revs, NULL);
> +	} else
> +		opts->revs = NULL;
> +
> +	/* Forbid stray command-line arguments */
> +	if (argc > 1)
> +		usage_with_options(usage_str, options);
>  }

Looks good.

Tests?  What happens if I try "git cherry-pick --all"?  How about "git
cherry-pick HEAD..HEAD"?

FWIW, with the commit message clarified and with or without new tests,
Acked-by: Jonathan Nieder <jrnieder@xxxxxxxxx>
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]