mercurial/merge.py
branchstable
changeset 20588 4c4cd64c754b
parent 20415 e4d7cbc94219
child 20589 31993cd23b11
equal deleted inserted replaced
20577:de48422df393 20588:4c4cd64c754b
    11 import error, util, filemerge, copies, subrepo, worker, dicthelpers
    11 import error, util, filemerge, copies, subrepo, worker, dicthelpers
    12 import errno, os, shutil
    12 import errno, os, shutil
    13 
    13 
    14 class mergestate(object):
    14 class mergestate(object):
    15     '''track 3-way merge state of individual files'''
    15     '''track 3-way merge state of individual files'''
       
    16     statepath = "merge/state"
    16     def __init__(self, repo):
    17     def __init__(self, repo):
    17         self._repo = repo
    18         self._repo = repo
    18         self._dirty = False
    19         self._dirty = False
    19         self._read()
    20         self._read()
    20     def reset(self, node=None):
    21     def reset(self, node=None):
    24         shutil.rmtree(self._repo.join("merge"), True)
    25         shutil.rmtree(self._repo.join("merge"), True)
    25         self._dirty = False
    26         self._dirty = False
    26     def _read(self):
    27     def _read(self):
    27         self._state = {}
    28         self._state = {}
    28         try:
    29         try:
    29             f = self._repo.opener("merge/state")
    30             f = self._repo.opener(self.statepath)
    30             for i, l in enumerate(f):
    31             for i, l in enumerate(f):
    31                 if i == 0:
    32                 if i == 0:
    32                     self._local = bin(l[:-1])
    33                     self._local = bin(l[:-1])
    33                 else:
    34                 else:
    34                     bits = l[:-1].split("\0")
    35                     bits = l[:-1].split("\0")
    38             if err.errno != errno.ENOENT:
    39             if err.errno != errno.ENOENT:
    39                 raise
    40                 raise
    40         self._dirty = False
    41         self._dirty = False
    41     def commit(self):
    42     def commit(self):
    42         if self._dirty:
    43         if self._dirty:
    43             f = self._repo.opener("merge/state", "w")
    44             f = self._repo.opener(self.statepath, "w")
    44             f.write(hex(self._local) + "\n")
    45             f.write(hex(self._local) + "\n")
    45             for d, v in self._state.iteritems():
    46             for d, v in self._state.iteritems():
    46                 f.write("\0".join([d] + v) + "\n")
    47                 f.write("\0".join([d] + v) + "\n")
    47             f.close()
    48             f.close()
    48             self._dirty = False
    49             self._dirty = False