comparison mercurial/scmutil.py @ 45482:9a99ab8217bd

scmutil: introduce filterrequirements() to split reqs into wc and store ones In upcoming patches where we try to implement requirements in store, we will need a mechanism to split all requirements on some basis and decide which one goes to `.hg/requires` and which one goes to `.hg/store/requires`. This patch introduce a separate function for that. Filtering logic for now is put under an `if False:`. In upcoming patches it will be removed. Differential Revision: https://phab.mercurial-scm.org/D8913
author Pulkit Goyal <7895pulkit@gmail.com>
date Fri, 07 Aug 2020 16:11:19 +0530
parents a03c177a4679
children d252f51ab032
comparison
equal deleted inserted replaced
45481:bddc4f2ef317 45482:9a99ab8217bd
36 obsutil, 36 obsutil,
37 pathutil, 37 pathutil,
38 phases, 38 phases,
39 policy, 39 policy,
40 pycompat, 40 pycompat,
41 requirements as requirementsmod,
41 revsetlang, 42 revsetlang,
42 similar, 43 similar,
43 smartset, 44 smartset,
44 url, 45 url,
45 util, 46 util,
1468 src = None 1469 src = None
1469 ds.copy(src, dst) 1470 ds.copy(src, dst)
1470 repo._quick_access_changeid_invalidate() 1471 repo._quick_access_changeid_invalidate()
1471 1472
1472 1473
1474 def filterrequirements(requirements):
1475 """ filters the requirements into two sets:
1476
1477 wcreq: requirements which should be written in .hg/requires
1478 storereq: which should be written in .hg/store/requires
1479
1480 Returns (wcreq, storereq)
1481 """
1482 if False:
1483 wc, store = set(), set()
1484 for r in requirements:
1485 if r in requirementsmod.WORKING_DIR_REQUIREMENTS:
1486 wc.add(r)
1487 else:
1488 store.add(r)
1489 return wc, store
1490 return requirements, None
1491
1492
1473 def writereporequirements(repo, requirements=None): 1493 def writereporequirements(repo, requirements=None):
1474 """ writes requirements for the repo to .hg/requires """ 1494 """ writes requirements for the repo to .hg/requires """
1475 if requirements: 1495 if requirements:
1476 repo.requirements = requirements 1496 repo.requirements = requirements
1477 writerequires(repo.vfs, repo.requirements) 1497 wcreq, storereq = filterrequirements(repo.requirements)
1498 if wcreq is not None:
1499 writerequires(repo.vfs, wcreq)
1500 if storereq is not None:
1501 writerequires(repo.svfs, storereq)
1478 1502
1479 1503
1480 def writerequires(opener, requirements): 1504 def writerequires(opener, requirements):
1481 with opener(b'requires', b'w', atomictemp=True) as fp: 1505 with opener(b'requires', b'w', atomictemp=True) as fp:
1482 for r in sorted(requirements): 1506 for r in sorted(requirements):