##// END OF EJS Templates
changegroupsubset(): refactor the prune() functions
Benoit Boissinot -
r11659:deecf195 default
parent child Browse files
Show More
@@ -1342,14 +1342,6 b' class localrepository(repo.repository):'
1342 def identity(x):
1342 def identity(x):
1343 return x
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 # A function generating function that sets up the initial environment
1345 # A function generating function that sets up the initial environment
1354 # the inner function.
1346 # the inner function.
1355 def filenode_collector(changedfiles):
1347 def filenode_collector(changedfiles):
@@ -1393,18 +1385,22 b' class localrepository(repo.repository):'
1393 ndset.setdefault(fnode, clnode)
1385 ndset.setdefault(fnode, clnode)
1394 return collect_msng_filenodes
1386 return collect_msng_filenodes
1395
1387
1396 # We have a list of filenodes we think we need for a file, lets remove
1388 # If we determine that a particular file or manifest node must be a
1397 # all those we know the recipient must have.
1389 # node that the recipient of the changegroup will already have, we can
1398 def prune_filenodes(f, filerevlog, missingnodes):
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 hasset = set()
1394 hasset = set()
1400 # If a 'missing' filenode thinks it belongs to a changenode we
1395 # If a 'missing' filenode thinks it belongs to a changenode we
1401 # assume the recipient must have, then the recipient must have
1396 # assume the recipient must have, then the recipient must have
1402 # that filenode.
1397 # that filenode.
1403 for n in missingnodes:
1398 for n in missingnodes:
1404 clnode = cl.node(filerevlog.linkrev(filerevlog.rev(n)))
1399 clnode = cl.node(revlog.linkrev(revlog.rev(n)))
1405 if clnode in has_cl_set:
1400 if clnode in has_cl_set:
1406 hasset.add(n)
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 # Add the nodes that were explicitly requested.
1405 # Add the nodes that were explicitly requested.
1410 def add_extra_nodes(name, nodes):
1406 def add_extra_nodes(name, nodes):
@@ -1432,19 +1428,7 b' class localrepository(repo.repository):'
1432 cnt += 1
1428 cnt += 1
1433 self.ui.progress(_('bundling changes'), None)
1429 self.ui.progress(_('bundling changes'), None)
1434
1430
1435
1431 prune(mnfst, msng_mnfst_set)
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)
1448 add_extra_nodes(1, msng_mnfst_set)
1432 add_extra_nodes(1, msng_mnfst_set)
1449 msng_mnfst_lst = msng_mnfst_set.keys()
1433 msng_mnfst_lst = msng_mnfst_set.keys()
1450 # Sort the manifestnodes by revision number.
1434 # Sort the manifestnodes by revision number.
@@ -1481,7 +1465,7 b' class localrepository(repo.repository):'
1481 # Toss out the filenodes that the recipient isn't really
1465 # Toss out the filenodes that the recipient isn't really
1482 # missing.
1466 # missing.
1483 missingfnodes = msng_filenode_set.pop(fname, {})
1467 missingfnodes = msng_filenode_set.pop(fname, {})
1484 prune_filenodes(fname, filerevlog, missingfnodes)
1468 prune(filerevlog, missingfnodes)
1485 add_extra_nodes(fname, missingfnodes)
1469 add_extra_nodes(fname, missingfnodes)
1486 # If any filenodes are left, generate the group for them,
1470 # If any filenodes are left, generate the group for them,
1487 # otherwise don't bother.
1471 # otherwise don't bother.
General Comments 0
You need to be logged in to leave comments. Login now