Show More
@@ -269,6 +269,66 b' class basectx(object):' | |||
|
269 | 269 | def dirty(self): |
|
270 | 270 | return False |
|
271 | 271 | |
|
272 | def status(self, other=None, match=None, listignored=False, | |
|
273 | listclean=False, listunknown=False, listsubrepos=False): | |
|
274 | """return status of files between two nodes or node and working | |
|
275 | directory. | |
|
276 | ||
|
277 | If other is None, compare this node with working directory. | |
|
278 | """ | |
|
279 | ||
|
280 | ctx1 = self | |
|
281 | ctx2 = self._repo[other] | |
|
282 | ||
|
283 | # This next code block is, admittedly, fragile logic that tests for | |
|
284 | # reversing the contexts and wouldn't need to exist if it weren't for | |
|
285 | # the fast (and common) code path of comparing the working directory | |
|
286 | # with its first parent. | |
|
287 | # | |
|
288 | # What we're aiming for here is the ability to call: | |
|
289 | # | |
|
290 | # workingctx.status(parentctx) | |
|
291 | # | |
|
292 | # If we always built the manifest for each context and compared those, | |
|
293 | # then we'd be done. But the special case of the above call means we | |
|
294 | # just copy the manifest of the parent. | |
|
295 | reversed = False | |
|
296 | if (not isinstance(ctx1, changectx) | |
|
297 | and isinstance(ctx2, changectx)): | |
|
298 | reversed = True | |
|
299 | ctx1, ctx2 = ctx2, ctx1 | |
|
300 | ||
|
301 | r = [[], [], [], [], [], [], []] | |
|
302 | match = ctx2._matchstatus(ctx1, r, match, listignored, listclean, | |
|
303 | listunknown) | |
|
304 | r = ctx2._prestatus(ctx1, r, match, listignored, listclean, listunknown) | |
|
305 | r = ctx2._buildstatus(ctx1, r, match, listignored, listclean, | |
|
306 | listunknown) | |
|
307 | r = ctx2._poststatus(ctx1, r, match, listignored, listclean, | |
|
308 | listunknown) | |
|
309 | ||
|
310 | if reversed: | |
|
311 | r[1], r[2], r[3], r[4] = r[2], r[1], r[4], r[3] | |
|
312 | ||
|
313 | if listsubrepos: | |
|
314 | for subpath, sub in scmutil.itersubrepos(ctx1, ctx2): | |
|
315 | rev2 = ctx2.subrev(subpath) | |
|
316 | try: | |
|
317 | submatch = matchmod.narrowmatcher(subpath, match) | |
|
318 | s = sub.status(rev2, match=submatch, ignored=listignored, | |
|
319 | clean=listclean, unknown=listunknown, | |
|
320 | listsubrepos=True) | |
|
321 | for rfiles, sfiles in zip(r, s): | |
|
322 | rfiles.extend("%s/%s" % (subpath, f) for f in sfiles) | |
|
323 | except error.LookupError: | |
|
324 | self._repo.ui.status(_("skipping missing " | |
|
325 | "subrepository: %s\n") % subpath) | |
|
326 | ||
|
327 | for l in r: | |
|
328 | l.sort() | |
|
329 | return r | |
|
330 | ||
|
331 | ||
|
272 | 332 | def makememctx(repo, parents, text, user, date, branch, files, store, |
|
273 | 333 | editor=None): |
|
274 | 334 | def getfilectx(repo, memctx, path): |
General Comments 0
You need to be logged in to leave comments.
Login now