Show More
@@ -1342,14 +1342,6 b' class localrepository(repo.repository):' | |||
|
1342 | 1342 | def identity(x): |
|
1343 | 1343 | return x |
|
1344 | 1344 | |
|
1345 | # If we determine that a particular file or manifest node must be a | |
|
1346 | # node that the recipient of the changegroup will already have, we can | |
|
1347 | # also assume the recipient will have all the parents. This function | |
|
1348 | # prunes them from the set of missing nodes. | |
|
1349 | def prune_parents(revlog, hasset, msngset): | |
|
1350 | for r in revlog.ancestors(*[revlog.rev(n) for n in hasset]): | |
|
1351 | msngset.pop(revlog.node(r), None) | |
|
1352 | ||
|
1353 | 1345 | # A function generating function that sets up the initial environment |
|
1354 | 1346 | # the inner function. |
|
1355 | 1347 | def filenode_collector(changedfiles): |
@@ -1393,18 +1385,22 b' class localrepository(repo.repository):' | |||
|
1393 | 1385 | ndset.setdefault(fnode, clnode) |
|
1394 | 1386 | return collect_msng_filenodes |
|
1395 | 1387 | |
|
1396 | # We have a list of filenodes we think we need for a file, lets remove | |
|
1397 | # all those we know the recipient must have. | |
|
1398 | def prune_filenodes(f, filerevlog, missingnodes): | |
|
1388 | # If we determine that a particular file or manifest node must be a | |
|
1389 | # node that the recipient of the changegroup will already have, we can | |
|
1390 | # also assume the recipient will have all the parents. This function | |
|
1391 | # prunes them from the set of missing nodes. | |
|
1392 | # XXX is it even useful? the testsuite doesn't trigger it | |
|
1393 | def prune(revlog, missingnodes): | |
|
1399 | 1394 | hasset = set() |
|
1400 | 1395 | # If a 'missing' filenode thinks it belongs to a changenode we |
|
1401 | 1396 | # assume the recipient must have, then the recipient must have |
|
1402 | 1397 | # that filenode. |
|
1403 | 1398 | for n in missingnodes: |
|
1404 |
clnode = cl.node( |
|
|
1399 | clnode = cl.node(revlog.linkrev(revlog.rev(n))) | |
|
1405 | 1400 | if clnode in has_cl_set: |
|
1406 | 1401 | hasset.add(n) |
|
1407 | prune_parents(filerevlog, hasset, missingnodes) | |
|
1402 | for r in revlog.ancestors(*[revlog.rev(n) for n in hasset]): | |
|
1403 | missingnodes.pop(revlog.node(r), None) | |
|
1408 | 1404 | |
|
1409 | 1405 | # Add the nodes that were explicitly requested. |
|
1410 | 1406 | def add_extra_nodes(name, nodes): |
@@ -1432,19 +1428,7 b' class localrepository(repo.repository):' | |||
|
1432 | 1428 | cnt += 1 |
|
1433 | 1429 | self.ui.progress(_('bundling changes'), None) |
|
1434 | 1430 | |
|
1435 | ||
|
1436 | # Figure out which manifest nodes (of the ones we think might be | |
|
1437 | # part of the changegroup) the recipient must know about and | |
|
1438 | # remove them from the changegroup. | |
|
1439 | has_mnfst_set = set() | |
|
1440 | for n in msng_mnfst_set: | |
|
1441 | # If a 'missing' manifest thinks it belongs to a changenode | |
|
1442 | # the recipient is assumed to have, obviously the recipient | |
|
1443 | # must have that manifest. | |
|
1444 | linknode = cl.node(mnfst.linkrev(mnfst.rev(n))) | |
|
1445 | if linknode in has_cl_set: | |
|
1446 | has_mnfst_set.add(n) | |
|
1447 | prune_parents(mnfst, has_mnfst_set, msng_mnfst_set) | |
|
1431 | prune(mnfst, msng_mnfst_set) | |
|
1448 | 1432 | add_extra_nodes(1, msng_mnfst_set) |
|
1449 | 1433 | msng_mnfst_lst = msng_mnfst_set.keys() |
|
1450 | 1434 | # Sort the manifestnodes by revision number. |
@@ -1481,7 +1465,7 b' class localrepository(repo.repository):' | |||
|
1481 | 1465 | # Toss out the filenodes that the recipient isn't really |
|
1482 | 1466 | # missing. |
|
1483 | 1467 | missingfnodes = msng_filenode_set.pop(fname, {}) |
|
1484 |
prune |
|
|
1468 | prune(filerevlog, missingfnodes) | |
|
1485 | 1469 | add_extra_nodes(fname, missingfnodes) |
|
1486 | 1470 | # If any filenodes are left, generate the group for them, |
|
1487 | 1471 | # otherwise don't bother. |
General Comments 0
You need to be logged in to leave comments.
Login now