##// END OF EJS Templates
context: move flags overrides from committablectx to workingctx...
Martin von Zweigbergk -
r42478:491855ea default
parent child Browse files
Show More
@@ -1136,42 +1136,6 b' class committablectx(basectx):'
1136
1136
1137 __bool__ = __nonzero__
1137 __bool__ = __nonzero__
1138
1138
1139 def _buildflagfunc(self):
1140 # Create a fallback function for getting file flags when the
1141 # filesystem doesn't support them
1142
1143 copiesget = self._repo.dirstate.copies().get
1144 parents = self.parents()
1145 if len(parents) < 2:
1146 # when we have one parent, it's easy: copy from parent
1147 man = parents[0].manifest()
1148 def func(f):
1149 f = copiesget(f, f)
1150 return man.flags(f)
1151 else:
1152 # merges are tricky: we try to reconstruct the unstored
1153 # result from the merge (issue1802)
1154 p1, p2 = parents
1155 pa = p1.ancestor(p2)
1156 m1, m2, ma = p1.manifest(), p2.manifest(), pa.manifest()
1157
1158 def func(f):
1159 f = copiesget(f, f) # may be wrong for merges with copies
1160 fl1, fl2, fla = m1.flags(f), m2.flags(f), ma.flags(f)
1161 if fl1 == fl2:
1162 return fl1
1163 if fl1 == fla:
1164 return fl2
1165 if fl2 == fla:
1166 return fl1
1167 return '' # punt for conflicts
1168
1169 return func
1170
1171 @propertycache
1172 def _flagfunc(self):
1173 return self._repo.dirstate.flagfunc(self._buildflagfunc)
1174
1175 @propertycache
1139 @propertycache
1176 def _status(self):
1140 def _status(self):
1177 return self._repo.status()
1141 return self._repo.status()
@@ -1241,18 +1205,6 b' class committablectx(basectx):'
1241 def children(self):
1205 def children(self):
1242 return []
1206 return []
1243
1207
1244 def flags(self, path):
1245 if r'_manifest' in self.__dict__:
1246 try:
1247 return self._manifest.flags(path)
1248 except KeyError:
1249 return ''
1250
1251 try:
1252 return self._flagfunc(path)
1253 except OSError:
1254 return ''
1255
1256 def ancestor(self, c2):
1208 def ancestor(self, c2):
1257 """return the "best" ancestor context of self and c2"""
1209 """return the "best" ancestor context of self and c2"""
1258 return self._parents[0].ancestor(c2) # punt on two parents for now
1210 return self._parents[0].ancestor(c2) # punt on two parents for now
@@ -1339,6 +1291,54 b' class workingctx(committablectx):'
1339 self._manifest
1291 self._manifest
1340 return super(workingctx, self)._fileinfo(path)
1292 return super(workingctx, self)._fileinfo(path)
1341
1293
1294 def _buildflagfunc(self):
1295 # Create a fallback function for getting file flags when the
1296 # filesystem doesn't support them
1297
1298 copiesget = self._repo.dirstate.copies().get
1299 parents = self.parents()
1300 if len(parents) < 2:
1301 # when we have one parent, it's easy: copy from parent
1302 man = parents[0].manifest()
1303 def func(f):
1304 f = copiesget(f, f)
1305 return man.flags(f)
1306 else:
1307 # merges are tricky: we try to reconstruct the unstored
1308 # result from the merge (issue1802)
1309 p1, p2 = parents
1310 pa = p1.ancestor(p2)
1311 m1, m2, ma = p1.manifest(), p2.manifest(), pa.manifest()
1312
1313 def func(f):
1314 f = copiesget(f, f) # may be wrong for merges with copies
1315 fl1, fl2, fla = m1.flags(f), m2.flags(f), ma.flags(f)
1316 if fl1 == fl2:
1317 return fl1
1318 if fl1 == fla:
1319 return fl2
1320 if fl2 == fla:
1321 return fl1
1322 return '' # punt for conflicts
1323
1324 return func
1325
1326 @propertycache
1327 def _flagfunc(self):
1328 return self._repo.dirstate.flagfunc(self._buildflagfunc)
1329
1330 def flags(self, path):
1331 if r'_manifest' in self.__dict__:
1332 try:
1333 return self._manifest.flags(path)
1334 except KeyError:
1335 return ''
1336
1337 try:
1338 return self._flagfunc(path)
1339 except OSError:
1340 return ''
1341
1342 def filectx(self, path, filelog=None):
1342 def filectx(self, path, filelog=None):
1343 """get a file context from the working directory"""
1343 """get a file context from the working directory"""
1344 return workingfilectx(self._repo, path, workingctx=self,
1344 return workingfilectx(self._repo, path, workingctx=self,
General Comments 0
You need to be logged in to leave comments. Login now