From: Junio C Hamano <gitster@pobox.com>
Date: Mon, 13 Dec 2010 05:49:53 +0000 (-0800)
Subject: Merge branch 'jn/parse-options-extra'
X-Git-Tag: v1.7.4-rc0~51
X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=6e67619;p=git.git

Merge branch 'jn/parse-options-extra'

* jn/parse-options-extra:
  update-index: migrate to parse-options API
  setup: save prefix (original cwd relative to toplevel) in startup_info
  parse-options: make resuming easier after PARSE_OPT_STOP_AT_NON_OPTION
  parse-options: allow git commands to invent new option types
  parse-options: never suppress arghelp if LITERAL_ARGHELP is set
  parse-options: do not infer PARSE_OPT_NOARG from option type
  parse-options: sanity check PARSE_OPT_NOARG flag
  parse-options: move NODASH sanity checks to parse_options_check
  parse-options: clearer reporting of API misuse
  parse-options: Don't call parse_options_check() so much
---

6e67619d0cdc175557ca633dec391d4e795cf965
diff --cc builtin/update-index.c
index 200c7efed,571b57964..56baf27fb
--- a/builtin/update-index.c
+++ b/builtin/update-index.c
@@@ -585,13 -702,91 +702,94 @@@ int cmd_update_index(int argc, const ch
  	int read_from_stdin = 0;
  	int prefix_length = prefix ? strlen(prefix) : 0;
  	char set_executable_bit = 0;
- 	unsigned int refresh_flags = 0;
+ 	struct refresh_params refresh_args = {0, &has_errors};
  	int lock_error = 0;
  	struct lock_file *lock_file;
+ 	struct parse_opt_ctx_t ctx;
+ 	int parseopt_state = PARSE_OPT_UNKNOWN;
+ 	struct option options[] = {
+ 		OPT_BIT('q', NULL, &refresh_args.flags,
+ 			"continue refresh even when index needs update",
+ 			REFRESH_QUIET),
+ 		OPT_BIT(0, "ignore-submodules", &refresh_args.flags,
+ 			"refresh: ignore submodules",
+ 			REFRESH_IGNORE_SUBMODULES),
+ 		OPT_SET_INT(0, "add", &allow_add,
+ 			"do not ignore new files", 1),
+ 		OPT_SET_INT(0, "replace", &allow_replace,
+ 			"let files replace directories and vice-versa", 1),
+ 		OPT_SET_INT(0, "remove", &allow_remove,
+ 			"notice files missing from worktree", 1),
+ 		OPT_BIT(0, "unmerged", &refresh_args.flags,
+ 			"refresh even if index contains unmerged entries",
+ 			REFRESH_UNMERGED),
+ 		{OPTION_CALLBACK, 0, "refresh", &refresh_args, NULL,
+ 			"refresh stat information",
+ 			PARSE_OPT_NOARG | PARSE_OPT_NONEG,
+ 			refresh_callback},
+ 		{OPTION_CALLBACK, 0, "really-refresh", &refresh_args, NULL,
+ 			"like --refresh, but ignore assume-unchanged setting",
+ 			PARSE_OPT_NOARG | PARSE_OPT_NONEG,
+ 			really_refresh_callback},
+ 		{OPTION_LOWLEVEL_CALLBACK, 0, "cacheinfo", NULL,
+ 			"<mode> <object> <path>",
+ 			"add the specified entry to the index",
+ 			PARSE_OPT_NOARG |	/* disallow --cacheinfo=<mode> form */
+ 			PARSE_OPT_NONEG | PARSE_OPT_LITERAL_ARGHELP,
+ 			(parse_opt_cb *) cacheinfo_callback},
+ 		{OPTION_CALLBACK, 0, "chmod", &set_executable_bit, "(+/-)x",
+ 			"override the executable bit of the listed files",
+ 			PARSE_OPT_NONEG | PARSE_OPT_LITERAL_ARGHELP,
+ 			chmod_callback},
+ 		{OPTION_SET_INT, 0, "assume-unchanged", &mark_valid_only, NULL,
+ 			"mark files as \"not changing\"",
+ 			PARSE_OPT_NOARG | PARSE_OPT_NONEG, NULL, MARK_FLAG},
+ 		{OPTION_SET_INT, 0, "no-assume-unchanged", &mark_valid_only, NULL,
+ 			"clear assumed-unchanged bit",
+ 			PARSE_OPT_NOARG | PARSE_OPT_NONEG, NULL, UNMARK_FLAG},
+ 		{OPTION_SET_INT, 0, "skip-worktree", &mark_skip_worktree_only, NULL,
+ 			"mark files as \"index-only\"",
+ 			PARSE_OPT_NOARG | PARSE_OPT_NONEG, NULL, MARK_FLAG},
+ 		{OPTION_SET_INT, 0, "no-skip-worktree", &mark_skip_worktree_only, NULL,
+ 			"clear skip-worktree bit",
+ 			PARSE_OPT_NOARG | PARSE_OPT_NONEG, NULL, UNMARK_FLAG},
+ 		OPT_SET_INT(0, "info-only", &info_only,
+ 			"add to index only; do not add content to object database", 1),
+ 		OPT_SET_INT(0, "force-remove", &force_remove,
+ 			"remove named paths even if present in worktree", 1),
+ 		OPT_SET_INT('z', NULL, &line_termination,
+ 			"with --stdin: input lines are terminated by null bytes", '\0'),
+ 		{OPTION_LOWLEVEL_CALLBACK, 0, "stdin", &read_from_stdin, NULL,
+ 			"read list of paths to be updated from standard input",
+ 			PARSE_OPT_NONEG | PARSE_OPT_NOARG,
+ 			(parse_opt_cb *) stdin_callback},
+ 		{OPTION_LOWLEVEL_CALLBACK, 0, "index-info", &line_termination, NULL,
+ 			"add entries from standard input to the index",
+ 			PARSE_OPT_NONEG | PARSE_OPT_NOARG,
+ 			(parse_opt_cb *) stdin_cacheinfo_callback},
+ 		{OPTION_LOWLEVEL_CALLBACK, 0, "unresolve", &has_errors, NULL,
+ 			"repopulate stages #2 and #3 for the listed paths",
+ 			PARSE_OPT_NONEG | PARSE_OPT_NOARG,
+ 			(parse_opt_cb *) unresolve_callback},
+ 		{OPTION_LOWLEVEL_CALLBACK, 'g', "again", &has_errors, NULL,
+ 			"only update entries that differ from HEAD",
+ 			PARSE_OPT_NONEG | PARSE_OPT_NOARG,
+ 			(parse_opt_cb *) reupdate_callback},
+ 		OPT_BIT(0, "ignore-missing", &refresh_args.flags,
+ 			"ignore files missing from worktree",
+ 			REFRESH_IGNORE_MISSING),
+ 		OPT_SET_INT(0, "verbose", &verbose,
+ 			"report actions to standard output", 1),
+ 		{OPTION_CALLBACK, 0, "clear-resolve-undo", NULL, NULL,
+ 			"(for porcelains) forget saved unresolved conflicts",
+ 			PARSE_OPT_NOARG | PARSE_OPT_NONEG,
+ 			resolve_undo_clear_callback},
+ 		OPT_END()
+ 	};
  
 +	if (argc == 2 && !strcmp(argv[1], "-h"))
- 		usage(update_index_usage);
++		usage(update_index_usage[0]);
 +
  	git_config(git_default_config, NULL);
  
  	/* We can't free this memory, it becomes part of a linked list parsed atexit() */