I suspect my mailer dropped your response on the floor when it polled my ISP at around 21:27 my time. I found its log mentioning your address but no message in my mailbox. Since the last message I sent you, I updated read-tree.c to match the proposed behaviour, and I found a couple of problems with it by running the 3-way merge test we already have. I am attaching a revised one. I have not finished a new test suite that runs on a populated index file yet, which is what I plan to do next. There is one thing that the proposed table changes from the traditional 3-way merge semantics. I think this is a sensible change. - #2 and #3 (I botched #3 in the earlier one I sent you); traditionally we left <O,H,M>=<none,none,exists> and <O,H,M>=<none,exists,none> cases to the script policy; we could salvage a (potentially dirty) cache entry if we say we pick the one created in only one branch. Earlier I botched <O,H,M>=<some,H!=O,M!=O> case in the table; we should collapse to H/M if H==M; this is now handled differently from H!=O,M!=O,H!=M case (case #10) as case #11 in the updated table. ------------ "git-diff-tree -m O H M" O H M result index requirements ------------------------------------------------------------------ 1 missing missing missing - must not exist. ----------------------------------------------------------------- 2 missing missing exists take M must match M, if exists. ----------------------------------------------------------------- 3 missing exists missing take H must match H, if exists. ----------------------------------------------------------------- 4 missing exists exists no merge must match H and be up-to-date, if exists. ----------------------------------------------------------------- 5 exists missing missing no merge must not exist. ----------------------------------------------------------------- 6 exists missing O==M remove must not exist. ----------------------------------------------------------------- 7 exists missing O!=M no merge must not exist. ----------------------------------------------------------------- 8 exists O==H missing remove must match H and be up-to-date, if exists. ----------------------------------------------------------------- 9 exists O!=H missing no merge must match H and be up-to-date, if exists. ----------------------------------------------------------------- 10 exists O!=H O!=M no merge must match H and be M!=H up-to-date, if exists. ----------------------------------------------------------------- 11 exists O!=H O!=M take H must match H, if exists. M==H ----------------------------------------------------------------- 12 exists O!=H O==M take H must match H, if exists. ----------------------------------------------------------------- 13 exists O==H O!=M take M if exists, must either (1) match H and be up-to-date, or (2) match M. ----------------------------------------------------------------- 14 exists O==H O==M take M must match H if exists. ------------------------------------------------------------------ In all "take H" or "take M" cases, if the original index matches what is taken, I would reuse it, and keep it dirty if it is. The goal is, "(a) do not clobber the current index; (b) arrive at the same result as in the case started with an empty index; (c) favor success over failure as long as (a) and (b) are satisfied." - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.htmlReceived on Wed Jun 08 15:33:06 2005
This archive was generated by hypermail 2.1.8 : 2005-06-08 15:33:39 EST