Re: [RFC PATCH] revert: Persist per-session opts

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

 



Hi Ram,

On Saturday 09 July 2011 17:41:58 Ramkumar Ramachandra wrote:
> Save the replay_opts struct in .git/sequencer/opts using a simple "key
> = value" format.  Parse it and populate the options structure before
> replaying.

[...]

>  static void format_todo(struct strbuf *buf, struct commit_list *todo_list,
>  			struct replay_opts *opts)
>  {
> @@ -733,6 +759,102 @@ error:
>  	die(_("Malformed instruction sheet: %s"), git_path(SEQ_TODO_FILE));
>  }
> 
> +static char *parse_opt_value(char *p, void *key, enum seq_opt_type type,
> +			parse_opt_cb *cb_function) {
> +	struct option opt;
> +	char *val, *cur, *end;
> +
> +	if (!(val = strchr(p, '=')))
> +		goto error;
> +	if (!*(val + 1))
> +		goto error;
> +	if (!(end = strchr(p, '\n')))
> +		goto error;
> +	val += 2;

It looks like you rely on all lines ending with \n and having a space after 
the '='. It may be a little bit too fragile.

> +	*end = '\0'; /* Remove trailing '\n' */
> +
> +	switch (type) {
> +	case SEQ_OPTION_BOOLEAN:
> +		if (!strncmp(val, "true", strlen("true")))
> +			*(int *)key = 1;
> +		else if (!strncmp(val, "false", strlen("false")))
> +			*(int *)key = 0;
> +		else
> +			goto error;
> +		break;
> +	case SEQ_OPTION_INTEGER:
> +		*(int *)key = strtol(val, NULL, 10);
> +		break;
> +	case SEQ_OPTION_STRING:
> +		*(char **)key = xstrdup(val);
> +		break;
> +	case SEQ_OPTION_CALLBACK:
> +		opt.value = (struct replay_opts **)key;
> +		while (val) {
> +			if ((cur = strchr(val, '|'))) {
> +				*(cur - 1) = '\0';
> +				(*cb_function)(&opt, val, 0);
> +				val = cur + 2;
> +			} else {
> +				(*cb_function)(&opt, val, 0);
> +				break;
> +			}
> +		}
> +		break;
> +	default:
> +		die(_("program error"));
> +	}
> +	return end + 1;
> +error:
> +	die(_("Malformed options sheet: %s"), git_path(SEQ_OPTS_FILE));
> +}

Otherwise it looks good to me.

Thanks,
Christian.
--
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]