Mercurial > public > mercurial-scm > hg-stable
diff mercurial/copies.py @ 10179:83cfa1baf8ad stable
copies: don't report copies with unrelated branch
author | Patrick Mezard <pmezard@gmail.com> |
---|---|
date | Fri, 01 Jan 2010 13:58:30 +0100 |
parents | 4c041f1ee1b4 |
children | eb243551cbd8 |
line wrap: on
line diff
--- a/mercurial/copies.py Wed Dec 30 20:39:59 2009 -0200 +++ b/mercurial/copies.py Fri Jan 01 13:58:30 2010 +0100 @@ -50,7 +50,9 @@ return [o[1] for o in sorted(old.values())] def _findlimit(repo, a, b): - "find the earliest revision that's an ancestor of a or b but not both" + """Find the earliest revision that's an ancestor of a or b but not both, + None if no such revision exists. + """ # basic idea: # - mark a and b with different sides # - if a parent's children are all on the same side, the parent is @@ -73,6 +75,7 @@ visit = [-a, -b] heapq.heapify(visit) interesting = len(visit) + hascommonancestor = False limit = working while interesting: @@ -82,6 +85,8 @@ else: parents = cl.parentrevs(r) for p in parents: + if p < 0: + continue if p not in side: # first time we see p; add it to visit side[p] = side[r] @@ -92,9 +97,13 @@ # p was interesting but now we know better side[p] = 0 interesting -= 1 + hascommonancestor = True if side[r]: limit = r # lowest rev visited interesting -= 1 + + if not hascommonancestor: + return None return limit def copies(repo, c1, c2, ca, checkdirs=False): @@ -110,6 +119,9 @@ return repo.dirstate.copies(), {} limit = _findlimit(repo, c1.rev(), c2.rev()) + if limit is None: + # no common ancestor, no copies + return {}, {} m1 = c1.manifest() m2 = c2.manifest() ma = ca.manifest()