def add(store, cache, pack, mf, linkrev, p1, p2, forcenode=False): try: store.get(mf._dir, p1) p1mf = read(store, mf._dir, p1) except KeyError: p1mf = manifest.treemanifest() try: store.get(mf._dir, p2) p2mf = read(store, mf._dir, p2) except KeyError: p2mf = manifest.treemanifest() return _addtree(store, cache, pack, mf, linkrev, p1mf, p2mf, forcenode=forcenode)
def read(store, dir, node): def gettext(): return store.get(dir, node) def readsubtree(dir, subm): return read(store, dir, subm) m = manifest.treemanifest(dir=dir) m.read(gettext, readsubtree) m.setnode(node) return m
def buildtreepack(repo, pack, revs): mf = repo.manifest cache = cachestore() packstore = datapack.datapackstore(repo.ui, pack.opener.base) store = contentstore.unioncontentstore(cache, packstore) ctxs = list(repo.set(revs)) for count, ctx in enumerate(ctxs): repo.ui.progress(('manifests'), count, total=len(ctxs)) mfnode = ctx.manifestnode() try: store.get('', mfnode) continue except KeyError: pass try: # if we have the parent tree, let's use it p1, p2 = mf.parents(mfnode) p1rev = mf.rev(p1) mfrev = mf.rev(mfnode) store.get('', p1) if p2 == nullid and mf.deltaparent(mfrev) == p1rev: mfdelta = mf.readdelta(mfnode) adds = list((filename, n, f) for (filename, n, f) in mfdelta.iterentries()) deletes = set(ctx.files()).difference( filename for filename, n, f in adds) else: mfctx = ctx.manifest() mfdiff = mf.read(p1).diff(mfctx) adds = list((f, bn, bf) for f, ((an, af), (bn, bf)) in mfdiff.iteritems() if bn is not None) deletes = list(f for f, ((an, af), (bn, bf)) in mfdiff.iteritems() if bn is None) tmfctx = read(store, '', p1).copy() for filename in deletes: del tmfctx[filename] for filename, n, f in adds: tmfctx[filename] = n tmfctx.setflag(filename, f) except KeyError: mfctx = ctx.manifest() tmfctx = manifest.treemanifest(text=mfctx.text()) p1, p2 = mf.parents(mfnode) add(store, cache, pack, tmfctx, ctx.rev(), p1, p2, forcenode=ctx.manifestnode()) repo.ui.progress(('manifests'), None)
def parsemanifest(self, text): return manifestmod.treemanifest(b'', text)
def parsemanifest(self, text): return manifestmod.treemanifest('', text)