From fc997dfbf2dff773b51cb25e3e0ccb1e9a35da23 Mon Sep 17 00:00:00 2001 From: Benoit Boissinot Date: Sun, 17 Dec 2006 05:00:22 +0100 Subject: [PATCH 1/2] fix calculation of new heads added during push with -r fix issue450 --- mercurial/localrepo.py | 2 +- mercurial/revlog.py | 14 ++++++++++---- tests/test-push-warn | 5 +++++ tests/test-push-warn.out | 14 ++++++++++++++ 4 files changed, 30 insertions(+), 5 deletions(-) diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py index 993bfe6ffc..620d34a813 100644 --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -1392,7 +1392,7 @@ class localrepository(repo.repository): newheads = list(heads) for r in remote_heads: if r in self.changelog.nodemap: - desc = self.changelog.heads(r) + desc = self.changelog.heads(r, heads) l = [h for h in heads if h in desc] if not l: newheads.append(r) diff --git a/mercurial/revlog.py b/mercurial/revlog.py index 6c76353b63..0ac7628bc1 100644 --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -717,15 +717,19 @@ class revlog(object): assert heads return (orderedout, roots, heads) - def heads(self, start=None): + def heads(self, start=None, stop=None): """return the list of all nodes that have no children if start is specified, only heads that are descendants of start will be returned - + if stop is specified, it will consider all the revs from stop + as if they had no children """ if start is None: start = nullid + if stop is None: + stop = [] + stoprevs = dict.fromkeys([self.rev(n) for n in stop]) startrev = self.rev(start) reachable = {startrev: 1} heads = {startrev: 1} @@ -734,10 +738,12 @@ class revlog(object): for r in xrange(startrev + 1, self.count()): for p in parentrevs(r): if p in reachable: - reachable[r] = 1 + if r not in stoprevs: + reachable[r] = 1 heads[r] = 1 - if p in heads: + if p in heads and p not in stoprevs: del heads[p] + return [self.node(r) for r in heads] def children(self, node): diff --git a/tests/test-push-warn b/tests/test-push-warn index 52c8a0c661..25f38b699a 100755 --- a/tests/test-push-warn +++ b/tests/test-push-warn @@ -54,4 +54,9 @@ hg push -r 3 -r 4 ../c; echo $? hg push -f -r 3 -r 4 ../c; echo $? hg push -r 5 ../c; echo $? +# issue 450 +hg init ../e +hg push -r 0 ../e ; echo $? +hg push -r 1 ../e ; echo $? + exit 0 diff --git a/tests/test-push-warn.out b/tests/test-push-warn.out index e6a92c687a..80fec98c34 100644 --- a/tests/test-push-warn.out +++ b/tests/test-push-warn.out @@ -62,3 +62,17 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files (-1 heads) 0 +pushing to ../e +searching for changes +adding changesets +adding manifests +adding file changes +added 1 changesets with 1 changes to 1 files +0 +pushing to ../e +searching for changes +adding changesets +adding manifests +adding file changes +added 1 changesets with 1 changes to 1 files +0 From 798c91c02ce5f099555632b978e75cbf1afd6ce4 Mon Sep 17 00:00:00 2001 From: Matt Mackall Date: Sun, 17 Dec 2006 19:17:18 -0600 Subject: [PATCH 2/2] Added signature for changeset b73092605dd7aba2a9c57c9a4c9f4f5d650a3166 --- .hgsigs | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgsigs b/.hgsigs index dd6015efed..29eabd2836 100644 --- a/.hgsigs +++ b/.hgsigs @@ -1,3 +1,4 @@ 35fb62a3a673d5322f6274a44ba6456e5e4b3b37 0 iD8DBQBEYmO2ywK+sNU5EO8RAnaYAKCO7x15xUn5mnhqWNXqk/ehlhRt2QCfRDfY0LrUq2q4oK/KypuJYPHgq1A= 2be3001847cb18a23c403439d9e7d0ace30804e9 0 iD8DBQBExUbjywK+sNU5EO8RAhzxAKCtyHAQUzcTSZTqlfJ0by6vhREwWQCghaQFHfkfN0l9/40EowNhuMOKnJk= 36a957364b1b89c150f2d0e60a99befe0ee08bd3 0 iD8DBQBFfL2QywK+sNU5EO8RAjYFAKCoGlaWRTeMsjdmxAjUYx6diZxOBwCfY6IpBYsKvPTwB3oktnPt5Rmrlys= +27230c29bfec36d5540fbe1c976810aefecfd1d2 0 iD8DBQBFheweywK+sNU5EO8RAt7VAKCrqJQWT2/uo2RWf0ZI4bLp6v82jACgjrMdsaTbxRsypcmEsdPhlG6/8F4=