Re: [PATCHv2 8/9] checkout-index: Fix negations of even numbers of -n
- From
Eric Sunshine <sunshine@sunshineco.com>
- Date
- Jul 31, 2013, 17:21 UTC
- Message-ID
- <CAPig+cTfDnQEt72ON1g+T9UpHt9drJ8OmbuszPt4uU49Gj2Bow@mail.gmail.com>
- In-Reply-To
- <1375288117-1576-9-git-send-email-stefanbeller@googlemail.com>
On Wed, Jul 31, 2013 at 12:28 PM, Stefan Beller <stefanbeller@googlemail.com> wrote:
Show 24 quoted lines
> 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 multiple > --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
Missing "$ git status" at this point in example.
Show 12 quoted lines
> # 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>