On Wednesday 2014-03-12 11:29 -0700, Gregory Szorc wrote:
> I suggest everyone to the time to learn how to use revisions sets
> [1] along with the "not merge()" selector:
>
> $ hg log -r 'f66e3ccb0c41::a10d0ba50f64 and not merge()'
That's not going to work if your goal is to find a regression range.
"hg log -r 'fromchange::tochange'" shows changesets that are
descendants of fromchange *and* ancestors of tochange. This means
that if something was merged in along the path or paths between
these changesets, you'll see *only* the merge commit in that log,
and not the changesets that were merged in. In other words, you'd
see only a changeset with summary like "Merge mozilla-central to
fx-team".
If you remove merges from that set, then the log won't show you any
sign at all of the things that were merged in -- neither the changes
along the merged-in path, nor the merge commits themselves.
"hg log -r '(ancestors(tochange) - ancestors(fromchange)) and not
merge()'" may well be a useful command, though.
But in general, I think it makes much more sense to look for
regression ranges in 'ancestors(tochange) - ancestors(fromchange)'
than in 'ancestors(tochange) and descendants(fromchange)', since the
latter requires that you consider merges as significant rather than
showing you the merged-in changesets as part of the list.
Unfortunately :: in hg is syntactic sugar for the latter rather than
the former.