From: Shawn O. Pearce Date: Mon, 19 Jan 2009 17:51:54 GMT Subject: Re: [JGIT PATCH 8/8] Define a basic merge API, and a two-way tree merge strategy Message-ID: <20090119175154.GD14053@spearce.org> In-Reply-To: <20090119174254.GC14053@spearce.org> "Shawn O. Pearce" wrote: > Tomi Pakarinen wrote: > > testTrivialTwoWay_disjointhistories() failed because merge strategy > > didn't handle missing base > > version. Am'i right? > > If that isn't coming out right then perhaps tw.idEqual() is busted Yup, that's what it is, idEqual is busted. The definition of TreeWalk.idEqual is: public boolean idEqual(final int nthA, final int nthB) { final AbstractTreeIterator ch = currentHead; final AbstractTreeIterator a = trees[nthA]; final AbstractTreeIterator b = trees[nthB]; return a.matches == ch && b.matches == ch && a.idEqual(b); } The problem is this method always returns false if the name isn't defined in either path. I think this is the definition we want instead: if (a.matches == ch && b.matches == ch) return a.idEqual(b); if (a.matches != ch && b.matches != ch) { // If neither tree matches the current path node then neither // tree has this entry. In such case the ObjectId is zero(), // and zero() is always equal to zero(). // return true; } return false; Patch to follow. -- Shawn.