# HG changeset patch # User Pierre-Yves David # Date 2011-11-03 23:16:24 # Node ID cf729af2696347d622dd2aec484d61c9371af613 # Parent 5261140d93220d31a207c78bdeb6ebd17ea90df2 phases: basic I/O logic Add function to read and write phase roots. Add a _phaseroots filecache on localrepo class to access the phaseroots data. diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -8,7 +8,7 @@ from node import bin, hex, nullid, nullrev, short from i18n import _ import repo, changegroup, subrepo, discovery, pushkey -import changelog, dirstate, filelog, manifest, context, bookmarks +import changelog, dirstate, filelog, manifest, context, bookmarks, phases import lock, transaction, store, encoding import scmutil, util, extensions, hook, error, revset import match as matchmod @@ -170,6 +170,10 @@ class localrepository(repo.repository): def _writebookmarks(self, marks): bookmarks.write(self) + @filecache('phaseroots') + def _phaseroots(self): + return phases.readroots(self) + @filecache('00changelog.i', True) def changelog(self): c = changelog.changelog(self.sopener) diff --git a/mercurial/phases.py b/mercurial/phases.py --- a/mercurial/phases.py +++ b/mercurial/phases.py @@ -7,5 +7,33 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. +from node import nullid, bin, hex + allphases = range(2) trackedphases = allphases[1:] + +def readroots(repo): + """Read phase roots from disk""" + roots = [set() for i in allphases] + roots[0].add(nullid) + try: + f = repo.sopener('phaseroots') + try: + for line in f: + phase, nh = line.strip().split() + roots[int(phase)].add(bin(nh)) + finally: + f.close() + except IOError: + pass # default value are enough + return roots + +def writeroots(repo): + """Write phase roots from disk""" + f = repo.sopener('phaseroots', 'w', atomictemp=True) + try: + for phase, roots in enumerate(repo._phaseroots): + for h in roots: + f.write('%i %s\n' % (phase, hex(h))) + finally: + f.close()