Mercurial > public > mercurial-scm > hg
comparison mercurial/context.py @ 11101:502474839293
context: only scan unknowns when needed
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Wed, 05 May 2010 20:21:57 -0500 |
parents | 83968ae4aaf2 |
children | 6f4543842795 |
comparison
equal
deleted
inserted
replaced
11100:83968ae4aaf2 | 11101:502474839293 |
---|---|
562 if date: | 562 if date: |
563 self._date = util.parsedate(date) | 563 self._date = util.parsedate(date) |
564 if user: | 564 if user: |
565 self._user = user | 565 self._user = user |
566 if changes: | 566 if changes: |
567 self._status = list(changes[:5]) | 567 self._status = list(changes[:4]) |
568 self._unknown = changes[4] | |
568 self._ignored = changes[5] | 569 self._ignored = changes[5] |
569 self._clean = changes[6] | 570 self._clean = changes[6] |
570 else: | 571 else: |
572 self._unknown = None | |
571 self._ignored = None | 573 self._ignored = None |
572 self._clean = None | 574 self._clean = None |
573 | 575 |
574 self._extra = {} | 576 self._extra = {} |
575 if extra: | 577 if extra: |
594 return self._repo.dirstate[key] not in "?r" | 596 return self._repo.dirstate[key] not in "?r" |
595 | 597 |
596 @propertycache | 598 @propertycache |
597 def _manifest(self): | 599 def _manifest(self): |
598 """generate a manifest corresponding to the working directory""" | 600 """generate a manifest corresponding to the working directory""" |
601 | |
602 if self._unknown is None: | |
603 self.status(unknown=True) | |
599 | 604 |
600 man = self._parents[0].manifest().copy() | 605 man = self._parents[0].manifest().copy() |
601 copied = self._repo.dirstate.copies() | 606 copied = self._repo.dirstate.copies() |
602 if len(self._parents) > 1: | 607 if len(self._parents) > 1: |
603 man2 = self.p2().manifest() | 608 man2 = self.p2().manifest() |
609 getman = lambda f: man | 614 getman = lambda f: man |
610 def cf(f): | 615 def cf(f): |
611 f = copied.get(f, f) | 616 f = copied.get(f, f) |
612 return getman(f).flags(f) | 617 return getman(f).flags(f) |
613 ff = self._repo.dirstate.flagfunc(cf) | 618 ff = self._repo.dirstate.flagfunc(cf) |
614 modified, added, removed, deleted, unknown = self._status[:5] | 619 modified, added, removed, deleted = self._status |
620 unknown = self._unknown | |
615 for i, l in (("a", added), ("m", modified), ("u", unknown)): | 621 for i, l in (("a", added), ("m", modified), ("u", unknown)): |
616 for f in l: | 622 for f in l: |
617 orig = copied.get(f, f) | 623 orig = copied.get(f, f) |
618 man[f] = getman(orig).get(orig, nullid) + i | 624 man[f] = getman(orig).get(orig, nullid) + i |
619 try: | 625 try: |
627 | 633 |
628 return man | 634 return man |
629 | 635 |
630 @propertycache | 636 @propertycache |
631 def _status(self): | 637 def _status(self): |
632 return self._repo.status(unknown=True)[:5] | 638 return self._repo.status()[:4] |
633 | 639 |
634 @propertycache | 640 @propertycache |
635 def _user(self): | 641 def _user(self): |
636 return self._repo.ui.username() | 642 return self._repo.ui.username() |
637 | 643 |
651 """Explicit status query | 657 """Explicit status query |
652 Unless this method is used to query the working copy status, the | 658 Unless this method is used to query the working copy status, the |
653 _status property will implicitly read the status using its default | 659 _status property will implicitly read the status using its default |
654 arguments.""" | 660 arguments.""" |
655 stat = self._repo.status(ignored=ignored, clean=clean, unknown=unknown) | 661 stat = self._repo.status(ignored=ignored, clean=clean, unknown=unknown) |
656 self._ignored = ignored and stat[5] or None | 662 self._unknown = self._ignored = self._clean = None |
657 self._clean = clean and stat[6] or None | 663 if unknown: |
658 self._status = stat[:5] | 664 self._unknown = stat[4] |
659 return self._status | 665 if ignored: |
666 self._ignored = stat[5] | |
667 if clean: | |
668 self._clean = stat[6] | |
669 self._status = stat[:4] | |
670 return stat | |
660 | 671 |
661 def manifest(self): | 672 def manifest(self): |
662 return self._manifest | 673 return self._manifest |
663 def user(self): | 674 def user(self): |
664 return self._user or self._repo.ui.username() | 675 return self._user or self._repo.ui.username() |
676 def removed(self): | 687 def removed(self): |
677 return self._status[2] | 688 return self._status[2] |
678 def deleted(self): | 689 def deleted(self): |
679 return self._status[3] | 690 return self._status[3] |
680 def unknown(self): | 691 def unknown(self): |
681 return self._status[4] | 692 assert self._unknown is not None # must call status first |
693 return self._unknown | |
682 def ignored(self): | 694 def ignored(self): |
683 assert self._ignored is not None # must call status first | 695 assert self._ignored is not None # must call status first |
684 return self._ignored | 696 return self._ignored |
685 def clean(self): | 697 def clean(self): |
686 assert self._clean is not None # must call status first | 698 assert self._clean is not None # must call status first |