mercurial/pure/parsers.py
changeset 48261 1730b2fceaa1
parent 48244 f7fd629ffb98
child 48262 dfc5a505ddc5
equal deleted inserted replaced
48260:e9faae0f445c 48261:1730b2fceaa1
    51 DIRSTATE_V2_HAS_MODE_AND_SIZE = 1 << 3
    51 DIRSTATE_V2_HAS_MODE_AND_SIZE = 1 << 3
    52 DIRSTATE_V2_HAS_FILE_MTIME = 1 << 4
    52 DIRSTATE_V2_HAS_FILE_MTIME = 1 << 4
    53 _DIRSTATE_V2_HAS_DIRCTORY_MTIME = 1 << 5  # Unused when Rust is not available
    53 _DIRSTATE_V2_HAS_DIRCTORY_MTIME = 1 << 5  # Unused when Rust is not available
    54 DIRSTATE_V2_MODE_EXEC_PERM = 1 << 6
    54 DIRSTATE_V2_MODE_EXEC_PERM = 1 << 6
    55 DIRSTATE_V2_MODE_IS_SYMLINK = 1 << 7
    55 DIRSTATE_V2_MODE_IS_SYMLINK = 1 << 7
       
    56 DIRSTATE_V2_EXPECTED_STATE_IS_MODIFIED = 1 << 8
    56 
    57 
    57 
    58 
    58 @attr.s(slots=True, init=False)
    59 @attr.s(slots=True, init=False)
    59 class DirstateItem(object):
    60 class DirstateItem(object):
    60     """represent a dirstate entry
    61     """represent a dirstate entry
   121 
   122 
   122     @classmethod
   123     @classmethod
   123     def from_v2_data(cls, flags, size, mtime):
   124     def from_v2_data(cls, flags, size, mtime):
   124         """Build a new DirstateItem object from V2 data"""
   125         """Build a new DirstateItem object from V2 data"""
   125         has_mode_size = bool(flags & DIRSTATE_V2_HAS_MODE_AND_SIZE)
   126         has_mode_size = bool(flags & DIRSTATE_V2_HAS_MODE_AND_SIZE)
       
   127         has_meaningful_mtime = bool(flags & DIRSTATE_V2_HAS_FILE_MTIME)
   126         mode = None
   128         mode = None
       
   129 
       
   130         if flags & +DIRSTATE_V2_EXPECTED_STATE_IS_MODIFIED:
       
   131             # we do not have support for this flag in the code yet,
       
   132             # force a lookup for this file.
       
   133             has_mode_size = False
       
   134             has_meaningful_mtime = False
       
   135 
   127         if has_mode_size:
   136         if has_mode_size:
   128             assert stat.S_IXUSR == 0o100
   137             assert stat.S_IXUSR == 0o100
   129             if flags & DIRSTATE_V2_MODE_EXEC_PERM:
   138             if flags & DIRSTATE_V2_MODE_EXEC_PERM:
   130                 mode = 0o755
   139                 mode = 0o755
   131             else:
   140             else:
   137         return cls(
   146         return cls(
   138             wc_tracked=bool(flags & DIRSTATE_V2_WDIR_TRACKED),
   147             wc_tracked=bool(flags & DIRSTATE_V2_WDIR_TRACKED),
   139             p1_tracked=bool(flags & DIRSTATE_V2_P1_TRACKED),
   148             p1_tracked=bool(flags & DIRSTATE_V2_P1_TRACKED),
   140             p2_info=bool(flags & DIRSTATE_V2_P2_INFO),
   149             p2_info=bool(flags & DIRSTATE_V2_P2_INFO),
   141             has_meaningful_data=has_mode_size,
   150             has_meaningful_data=has_mode_size,
   142             has_meaningful_mtime=bool(flags & DIRSTATE_V2_HAS_FILE_MTIME),
   151             has_meaningful_mtime=has_meaningful_mtime,
   143             parentfiledata=(mode, size, mtime),
   152             parentfiledata=(mode, size, mtime),
   144         )
   153         )
   145 
   154 
   146     @classmethod
   155     @classmethod
   147     def from_v1_data(cls, state, mode, size, mtime):
   156     def from_v1_data(cls, state, mode, size, mtime):