mercurial/upgrade_utils/engine.py
changeset 49306 2e726c934fcd
parent 48875 6000f5b25c9b
child 49552 1994842955db
equal deleted inserted replaced
49305:53e9422a9b45 49306:2e726c934fcd
     4 #
     4 #
     5 # This software may be used and distributed according to the terms of the
     5 # This software may be used and distributed according to the terms of the
     6 # GNU General Public License version 2 or any later version.
     6 # GNU General Public License version 2 or any later version.
     7 
     7 
     8 
     8 
     9 import errno
       
    10 import stat
     9 import stat
    11 
    10 
    12 from ..i18n import _
    11 from ..i18n import _
    13 from ..pycompat import getattr
    12 from ..pycompat import getattr
    14 from .. import (
    13 from .. import (
   644         )
   643         )
   645         try:
   644         try:
   646             util.copyfile(
   645             util.copyfile(
   647                 srcrepo.vfs.join(b'dirstate'), backupvfs.join(b'dirstate')
   646                 srcrepo.vfs.join(b'dirstate'), backupvfs.join(b'dirstate')
   648             )
   647             )
   649         except (IOError, OSError) as e:
   648         except FileNotFoundError:
   650             # The dirstate does not exist on an empty repo or a repo with no
   649             # The dirstate does not exist on an empty repo or a repo with no
   651             # revision checked out
   650             # revision checked out
   652             if e.errno != errno.ENOENT:
   651             pass
   653                 raise
       
   654 
   652 
   655     assert srcrepo.dirstate._use_dirstate_v2 == (old == b'v2')
   653     assert srcrepo.dirstate._use_dirstate_v2 == (old == b'v2')
   656     srcrepo.dirstate._map.preload()
   654     srcrepo.dirstate._map.preload()
   657     srcrepo.dirstate._use_dirstate_v2 = new == b'v2'
   655     srcrepo.dirstate._use_dirstate_v2 = new == b'v2'
   658     srcrepo.dirstate._map._use_dirstate_v2 = srcrepo.dirstate._use_dirstate_v2
   656     srcrepo.dirstate._map._use_dirstate_v2 = srcrepo.dirstate._use_dirstate_v2
   659     srcrepo.dirstate._dirty = True
   657     srcrepo.dirstate._dirty = True
   660     try:
   658     try:
   661         srcrepo.vfs.unlink(b'dirstate')
   659         srcrepo.vfs.unlink(b'dirstate')
   662     except (IOError, OSError) as e:
   660     except FileNotFoundError:
   663         # The dirstate does not exist on an empty repo or a repo with no
   661         # The dirstate does not exist on an empty repo or a repo with no
   664         # revision checked out
   662         # revision checked out
   665         if e.errno != errno.ENOENT:
   663         pass
   666             raise
       
   667 
   664 
   668     srcrepo.dirstate.write(None)
   665     srcrepo.dirstate.write(None)
   669 
   666 
   670     scmutil.writereporequirements(srcrepo, upgrade_op.new_requirements)
   667     scmutil.writereporequirements(srcrepo, upgrade_op.new_requirements)
   671 
   668