Re: [JGIT PATCH 8/8] Define a basic merge API, and a two-way tree merge strategy
- From
Shawn O. Pearce <spearce@spearce.org>
- Date
- Jan 19, 2009, 17:51 UTC
- Message-ID
- <20090119175154.GD14053@spearce.org>
- In-Reply-To
- <20090119174254.GC14053@spearce.org>
"Shawn O. Pearce" <spearce@spearce.org> wrote:
Show 6 quoted lines
> Tomi Pakarinen <tomi.pakarinen@gmail.com> 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.