{"thread":{"id":"22661","subject":"ce_stage(..) == 2?","startedAt":"2010-02-15T06:48:43Z","lastAt":"2010-02-15T06:53:34Z","messageCount":2,"participants":["cg","Junio C Hamano"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"134621","messageId":"4B78EE4B.2040707@gmail.com","threadId":"22661","inReplyTo":null,"subject":"ce_stage(..) == 2?","fromName":"cg","fromEmail":"chengang31@gmail.com","sentAt":"2010-02-15T06:48:43Z","receivedAt":"2010-02-15T06:48:43Z","isPatch":false,"sender":{"key":"chengang31@gmail.com","avatar":null},"body":"Hi,\n\nI  saw some code like:\nattr.c(365): if (ce_stage(istate->cache[i]) == 2)\n...\nrerere.c(352):  if (ce_stage(e2) == 2\n...\n\nbut there is no 0x200 in cache.h(158):\n#define CE_NAMEMASK  (0x0fff)\n#define CE_STAGEMASK (0x3000)\n#define CE_EXTENDED  (0x4000)\n#define CE_VALID     (0x8000)\n#define CE_STAGESHIFT 12\n\nso what does \"2\" mean?\n\nThanks\ncg\n"},{"id":"134622","messageId":"7vbpfrhtw1.fsf@alter.siamese.dyndns.org","threadId":"22661","inReplyTo":"4B78EE4B.2040707@gmail.com","subject":"Re: ce_stage(..) == 2?","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2010-02-15T06:53:34Z","receivedAt":"2010-02-15T06:53:34Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"cg <chengang31@gmail.com> writes:\n\n> I  saw some code like:\n> attr.c(365): if (ce_stage(istate->cache[i]) == 2)\n> ...\n> rerere.c(352):  if (ce_stage(e2) == 2\n> ...\n>\n> but there is no 0x200 in cache.h(158):\n> #define CE_NAMEMASK  (0x0fff)\n> #define CE_STAGEMASK (0x3000)\n> #define CE_EXTENDED  (0x4000)\n> #define CE_VALID     (0x8000)\n> #define CE_STAGESHIFT 12\n>\n> so what does \"2\" mean?\n\n#define ce_stage(ce) ((CE_STAGEMASK & (ce)->ce_flags) >> CE_STAGESHIFT)\n\n0x3000 shifted 12 places is a mask for two bits, as you can have cache\nentries at stage 0 (normal), or stage 1/2/3.\n"}]}