1666 def istreemanifest(repo) -> bool: |
1666 def istreemanifest(repo) -> bool: |
1667 """returns whether the repository is using treemanifest or not""" |
1667 """returns whether the repository is using treemanifest or not""" |
1668 return requirementsmod.TREEMANIFEST_REQUIREMENT in repo.requirements |
1668 return requirementsmod.TREEMANIFEST_REQUIREMENT in repo.requirements |
1669 |
1669 |
1670 |
1670 |
1671 def writereporequirements(repo, requirements=None) -> None: |
1671 def writereporequirements(repo, requirements=None, maywritestore=True) -> None: |
1672 """writes requirements for the repo |
1672 """writes requirements for the repo |
1673 |
1673 |
1674 Requirements are written to .hg/requires and .hg/store/requires based |
1674 Requirements are written to .hg/requires and .hg/store/requires based |
1675 on whether share-safe mode is enabled and which requirements are wdir |
1675 on whether share-safe mode is enabled and which requirements are wdir |
1676 requirements and which are store requirements |
1676 requirements and which are store requirements |
1679 repo.requirements = requirements |
1679 repo.requirements = requirements |
1680 wcreq, storereq = filterrequirements(repo.requirements) |
1680 wcreq, storereq = filterrequirements(repo.requirements) |
1681 if wcreq is not None: |
1681 if wcreq is not None: |
1682 writerequires(repo.vfs, wcreq) |
1682 writerequires(repo.vfs, wcreq) |
1683 if storereq is not None: |
1683 if storereq is not None: |
1684 writerequires(repo.svfs, storereq) |
1684 writerequires(repo.svfs, storereq, maywrite=maywritestore) |
1685 elif repo.ui.configbool(b'format', b'usestore'): |
1685 elif repo.ui.configbool(b'format', b'usestore'): |
1686 # only remove store requires if we are using store |
1686 # only remove store requires if we are using store |
1687 repo.svfs.tryunlink(b'requires') |
1687 if maywritestore: |
|
1688 repo.svfs.tryunlink(b'requires') |
1688 |
1689 |
1689 |
1690 |
1690 def readrequires(vfs, allowmissing): |
1691 def readrequires(vfs, allowmissing): |
1691 """reads the require file present at root of this vfs |
1692 """reads the require file present at root of this vfs |
1692 and return a set of requirements |
1693 and return a set of requirements |
1699 # a missing file translates to no requirements. |
1700 # a missing file translates to no requirements. |
1700 read = vfs.tryread if allowmissing else vfs.read |
1701 read = vfs.tryread if allowmissing else vfs.read |
1701 return set(read(b'requires').splitlines()) |
1702 return set(read(b'requires').splitlines()) |
1702 |
1703 |
1703 |
1704 |
1704 def writerequires(opener, requirements) -> None: |
1705 def writerequires(opener, requirements, maywrite=True) -> None: |
1705 on_disk = readrequires(opener, True) |
1706 on_disk = readrequires(opener, True) |
1706 if not (on_disk == set(requirements)): |
1707 if not (on_disk == set(requirements)): |
|
1708 if not maywrite: |
|
1709 raise error.Abort(_(b"store requirements are not as expected")) |
1707 with opener(b'requires', b'w', atomictemp=True) as fp: |
1710 with opener(b'requires', b'w', atomictemp=True) as fp: |
1708 for r in sorted(requirements): |
1711 for r in sorted(requirements): |
1709 fp.write(b"%s\n" % r) |
1712 fp.write(b"%s\n" % r) |
1710 |
1713 |
1711 |
1714 |