Mercurial > hg
comparison mercurial/bundlerepo.py @ 18568:cd403d6d96ef stable
incoming: fix incoming when a local head is remotely filtered (issue3805)
In its current state discovery may return (remotely) filtered elements
in "common". This has usually no impact as "missing" is kept clear of
filtered elements. However when the "remote" repo is a local repo (disk
accessible, and directly created in memory) the incoming code takes a
shortcut and directly uses the "remote" repo to generate the incoming
output. When some common elements are filtered this led to a crash. We
now ensure we use an unfiltered repository to generate the incoming
output. This does not change the behavior as missing is clear of
filtered revision.
Now that we have proper low level filtering, incoming code needs a
deeper cleanup but it is already planned.
author | Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
---|---|
date | Wed, 06 Feb 2013 07:55:29 +0000 |
parents | e72126135252 |
children | cc28a84db8c9 |
comparison
equal
deleted
inserted
replaced
18563:6d098adc5a46 | 18568:cd403d6d96ef |
---|---|
365 if not localrepo: | 365 if not localrepo: |
366 # use the created uncompressed bundlerepo | 366 # use the created uncompressed bundlerepo |
367 localrepo = bundlerepo = bundlerepository(ui, repo.root, fname) | 367 localrepo = bundlerepo = bundlerepository(ui, repo.root, fname) |
368 # this repo contains local and other now, so filter out local again | 368 # this repo contains local and other now, so filter out local again |
369 common = repo.heads() | 369 common = repo.heads() |
370 if localrepo: | |
371 # Part of common may be remotely filtered | |
372 # So use an unfiltered version | |
373 # The discovery process probably need cleanup to avoid that | |
374 localrepo = localrepo.unfiltered() | |
370 | 375 |
371 csets = localrepo.changelog.findmissing(common, rheads) | 376 csets = localrepo.changelog.findmissing(common, rheads) |
372 | 377 |
373 def cleanup(): | 378 def cleanup(): |
374 if bundlerepo: | 379 if bundlerepo: |