mercurial/dirstate.py
changeset 1476 17e8c70fb670
parent 1471 f56f38a1a85f
child 1487 2bc6cd62a29c
equal deleted inserted replaced
1475:d791c335fb7b 1476:17e8c70fb670
     9 
     9 
    10 import struct, os
    10 import struct, os
    11 from node import *
    11 from node import *
    12 from i18n import gettext as _
    12 from i18n import gettext as _
    13 from demandload import *
    13 from demandload import *
    14 demandload(globals(), "time bisect stat util re")
    14 demandload(globals(), "time bisect stat util re errno")
    15 
    15 
    16 class dirstate:
    16 class dirstate:
    17     def __init__(self, opener, ui, root):
    17     def __init__(self, opener, ui, root):
    18         self.opener = opener
    18         self.opener = opener
    19         self.root = root
    19         self.root = root
   370             try:
   370             try:
   371                 type, mode, size, time = self[fn]
   371                 type, mode, size, time = self[fn]
   372             except KeyError:
   372             except KeyError:
   373                 unknown.append(fn)
   373                 unknown.append(fn)
   374                 continue
   374                 continue
   375             # XXX: what to do with file no longer present in the fs
   375             if src == 'm':
   376             # who are not removed in the dirstate ?
   376                 try:
   377             if src == 'm' and not type == 'r':
   377                     st = os.stat(fn)
   378                 deleted.append(fn)
   378                 except OSError, inst:
   379                 continue
   379                 # XXX: what to do with file no longer present in the fs
       
   380                 # who are not removed in the dirstate ?
       
   381                     if inst.errno != errno.ENOENT:
       
   382                         raise
       
   383                     deleted.append(fn)
       
   384                     continue
   380             # check the common case first
   385             # check the common case first
   381             if type == 'n':
   386             if type == 'n':
   382                 if not st:
   387                 if not st:
   383                     st = os.stat(fn)
   388                     st = os.stat(fn)
   384                 if size != st.st_size or (mode ^ st.st_mode) & 0100:
   389                 if size != st.st_size or (mode ^ st.st_mode) & 0100: