Show More
@@ -1136,42 +1136,6 b' class committablectx(basectx):' | |||
|
1136 | 1136 | |
|
1137 | 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 | 1139 | @propertycache |
|
1176 | 1140 | def _status(self): |
|
1177 | 1141 | return self._repo.status() |
@@ -1241,18 +1205,6 b' class committablectx(basectx):' | |||
|
1241 | 1205 | def children(self): |
|
1242 | 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 | 1208 | def ancestor(self, c2): |
|
1257 | 1209 | """return the "best" ancestor context of self and c2""" |
|
1258 | 1210 | return self._parents[0].ancestor(c2) # punt on two parents for now |
@@ -1339,6 +1291,54 b' class workingctx(committablectx):' | |||
|
1339 | 1291 | self._manifest |
|
1340 | 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 | 1342 | def filectx(self, path, filelog=None): |
|
1343 | 1343 | """get a file context from the working directory""" |
|
1344 | 1344 | return workingfilectx(self._repo, path, workingctx=self, |
General Comments 0
You need to be logged in to leave comments.
Login now