git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCHv3 8/9] checkout-index: Fix negations of even numbers of -n

From
Stefan Beller <stefanbeller@googlemail.com>
Date
Aug 3, 2013, 11:51 UTC
Message-ID
<1375530686-2309-9-git-send-email-stefanbeller@googlemail.com>
In-Reply-To
<1375530686-2309-1-git-send-email-stefanbeller@googlemail.com>
The --no-create was parsed with OPT_BOOLEAN, which has a counting up
logic implemented. Since b04ba2bb (parse-options: deprecate OPT_BOOLEAN,
2011-09-27) the OPT_BOOLEAN is deprecated and is only a define:
	/* Deprecated synonym */
	#define OPTION_BOOLEAN OPTION_COUNTUP

However the variable not_new, which can be counted up by giving --no-create multiple times, is used to set a bit in the struct checkout bitfield (defined in cache.h:969, declared at builtin/checkout-index.c:19):

	state.not_new = not_new;

When assigning a value other than 0 or 1 to a bit, all leading digits but the last are ignored and only the last bit is used for setting the bit variable.

Hence the following:
	# in git.git:
	$ git status
	# working directory clean
	rm COPYING
	$ git status
	# deleted:    COPYING
	$ git checkout-index -a -n
	$ git status
	# deleted:    COPYING
	# which is expected as we're telling git to not restore or create
	# files, however:
	$ git checkout-index -a -n -n
	$ git status
	# working directory clean, COPYING is restored again!
	# That's the bug, we're fixing here.

By restraining the variable not_new to a value being definitely 0 or 1 by the macro OPT_BOOL the bug is fixed.

Signed-off-by: Stefan Beller <stefanbeller@googlemail.com>
---
 builtin/checkout-index.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/builtin/checkout-index.c b/builtin/checkout-index.c
index aa922ed..69e167b 100644
--- a/builtin/checkout-index.c
+++ b/builtin/checkout-index.c
@@ -188,7 +188,7 @@ int cmd_checkout_index(int argc, const char **argv, const char *prefix)
 		OPT__FORCE(&force, N_("force overwrite of existing files")),
 		OPT__QUIET(&quiet,
 			N_("no warning for existing files and files not in index")),
-		OPT_BOOLEAN('n', "no-create", &not_new,
+		OPT_BOOL('n', "no-create", &not_new,
 			N_("don't checkout new files")),
 		{ OPTION_CALLBACK, 'u', "index", &newfd, NULL,
 			N_("update stat information in the index file"),
-- 
1.8.4.rc0.16.g7fca822.dirty
Previous: Junio C HamanoNext: Stefan Beller
Message 11 of 27 in “[PATCHv3 0/9] Removing deprecated parsing macros”
  1. Stefan BellerAug 3, 2013
  2. 1/9 Remove deprecated OPTION_BOOLEAN for parsing argumentsStefan Beller, Aug 3, 2013
  3. 2/9 Replace deprecated OPT_BOOLEAN by OPT_BOOLStefan Beller, Aug 3, 2013
  4. 3/9 log, format-patch: parsing uses OPT__QUIETStefan Beller, Aug 3, 2013
  5. 4/9 checkout: remove superfluous local variableStefan Beller, Aug 3, 2013
  6. 5/9 branch, commit, name-rev: ease up boolean conditionsStefan Beller, Aug 3, 2013
  7. 6/9 hash-object: Replace stdin parsing OPT_BOOLEAN by OPT_COUNTUPStefan Beller, Aug 3, 2013
  8. Junio C HamanoAug 5, 2013
  9. 7/9 config parsing options: allow one flag multiple timesStefan Beller, Aug 3, 2013
  10. Junio C HamanoAug 5, 2013
  11. 8/9 checkout-index: Fix negations of even numbers of -nStefan Beller, Aug 3, 2013
  12. 9/9 revert: use the OPT_CMDMODE for parsing, reducing codeStefan Beller, Aug 3, 2013
  13. Stefan BellerAug 3, 2013
  14. Junio C HamanoAug 6, 2013
  15. Stefan BellerAug 6, 2013
  16. branch, commit, name-rev: ease up boolean conditionsStefan Beller, Aug 6, 2013
  17. Eric SunshineAug 6, 2013
  18. Stefan BellerAug 6, 2013
  19. branch, commit, name-rev: ease up boolean conditionsStefan Beller, Aug 6, 2013
  20. Junio C HamanoAug 6, 2013
  21. 0/4 Update built-in parseopt macrosJunio C Hamano, Aug 6, 2013
  22. 1/4 OPT__QUIET(): switch from count-up to true boolJunio C Hamano, Aug 6, 2013
  23. 2/4 OPT__VERBOSE(): clarify its expected use by using OPT_COUNTUPJunio C Hamano, Aug 6, 2013
  24. 3/4 OPT__DRY_RUN(): use OPT_BOOL, not OPT_BOOLEANJunio C Hamano, Aug 6, 2013
  25. 4/4 OPT__FORCE(): clarify its expected use by using OPT_COUNTUPJunio C Hamano, Aug 6, 2013
  26. Stefan BellerAug 7, 2013
  27. Junio C HamanoAug 7, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.