708 |
708 |
709 def use_template(self, t): |
709 def use_template(self, t): |
710 '''set template string to use''' |
710 '''set template string to use''' |
711 self.t.cache['changeset'] = t |
711 self.t.cache['changeset'] = t |
712 |
712 |
|
713 def _meaningful_parentrevs(self, ctx): |
|
714 """Return list of meaningful (or all if debug) parentrevs for rev. |
|
715 """ |
|
716 parents = ctx.parents() |
|
717 if len(parents) > 1: |
|
718 return parents |
|
719 if self.ui.debugflag: |
|
720 return [parents[0], self.repo['null']] |
|
721 if parents[0].rev() >= ctx.rev() - 1: |
|
722 return [] |
|
723 return parents |
|
724 |
713 def _show(self, ctx, copies, props): |
725 def _show(self, ctx, copies, props): |
714 '''show a single changeset or file revision''' |
726 '''show a single changeset or file revision''' |
715 changenode = ctx.node() |
|
716 rev = ctx.rev() |
|
717 |
|
718 log = self.repo.changelog |
|
719 changes = log.read(changenode) |
|
720 |
727 |
721 def showlist(name, values, plural=None, **args): |
728 def showlist(name, values, plural=None, **args): |
722 '''expand set of values. |
729 '''expand set of values. |
723 name is name of key in template map. |
730 name is name of key in template map. |
724 values is list of strings or dicts. |
731 values is list of strings or dicts. |
778 endname = 'end_' + names |
785 endname = 'end_' + names |
779 if endname in self.t: |
786 if endname in self.t: |
780 yield self.t(endname, **args) |
787 yield self.t(endname, **args) |
781 |
788 |
782 def showbranches(**args): |
789 def showbranches(**args): |
783 branch = changes[5].get("branch") |
790 branch = ctx.branch() |
784 if branch != 'default': |
791 if branch != 'default': |
785 branch = util.tolocal(branch) |
792 branch = util.tolocal(branch) |
786 return showlist('branch', [branch], plural='branches', **args) |
793 return showlist('branch', [branch], plural='branches', **args) |
787 |
794 |
788 def showparents(**args): |
795 def showparents(**args): |
789 parents = [[('rev', p), ('node', hex(log.node(p)))] |
796 parents = [[('rev', p.rev()), ('node', p.hex())] |
790 for p in self._meaningful_parentrevs(log, rev)] |
797 for p in self._meaningful_parentrevs(ctx)] |
791 return showlist('parent', parents, **args) |
798 return showlist('parent', parents, **args) |
792 |
799 |
793 def showtags(**args): |
800 def showtags(**args): |
794 return showlist('tag', self.repo.nodetags(changenode), **args) |
801 return showlist('tag', ctx.tags(), **args) |
795 |
802 |
796 def showextras(**args): |
803 def showextras(**args): |
797 for key, value in util.sort(changes[5].items()): |
804 for key, value in util.sort(ctx.extra().items()): |
798 args = args.copy() |
805 args = args.copy() |
799 args.update(dict(key=key, value=value)) |
806 args.update(dict(key=key, value=value)) |
800 yield self.t('extra', **args) |
807 yield self.t('extra', **args) |
801 |
808 |
802 def showcopies(**args): |
809 def showcopies(**args): |
804 return showlist('file_copy', c, plural='file_copies', **args) |
811 return showlist('file_copy', c, plural='file_copies', **args) |
805 |
812 |
806 files = [] |
813 files = [] |
807 def getfiles(): |
814 def getfiles(): |
808 if not files: |
815 if not files: |
809 files[:] = self.repo.status( |
816 files[:] = self.repo.status(ctx.parents()[0].node(), |
810 log.parents(changenode)[0], changenode)[:3] |
817 ctx.node())[:3] |
811 return files |
818 return files |
812 def showfiles(**args): |
819 def showfiles(**args): |
813 return showlist('file', changes[3], **args) |
820 return showlist('file', ctx.files(), **args) |
814 def showmods(**args): |
821 def showmods(**args): |
815 return showlist('file_mod', getfiles()[0], **args) |
822 return showlist('file_mod', getfiles()[0], **args) |
816 def showadds(**args): |
823 def showadds(**args): |
817 return showlist('file_add', getfiles()[1], **args) |
824 return showlist('file_add', getfiles()[1], **args) |
818 def showdels(**args): |
825 def showdels(**args): |
819 return showlist('file_del', getfiles()[2], **args) |
826 return showlist('file_del', getfiles()[2], **args) |
820 def showmanifest(**args): |
827 def showmanifest(**args): |
821 args = args.copy() |
828 args = args.copy() |
822 args.update(dict(rev=self.repo.manifest.rev(changes[0]), |
829 args.update(dict(rev=self.repo.manifest.rev(ctx.changeset()[0]), |
823 node=hex(changes[0]))) |
830 node=hex(ctx.changeset()[0]))) |
824 return self.t('manifest', **args) |
831 return self.t('manifest', **args) |
825 |
832 |
826 defprops = { |
833 defprops = { |
827 'author': changes[1], |
834 'author': ctx.user(), |
828 'branches': showbranches, |
835 'branches': showbranches, |
829 'date': changes[2], |
836 'date': ctx.date(), |
830 'desc': changes[4].strip(), |
837 'desc': ctx.description().strip(), |
831 'file_adds': showadds, |
838 'file_adds': showadds, |
832 'file_dels': showdels, |
839 'file_dels': showdels, |
833 'file_mods': showmods, |
840 'file_mods': showmods, |
834 'files': showfiles, |
841 'files': showfiles, |
835 'file_copies': showcopies, |
842 'file_copies': showcopies, |
836 'manifest': showmanifest, |
843 'manifest': showmanifest, |
837 'node': hex(changenode), |
844 'node': ctx.hex(), |
838 'parents': showparents, |
845 'parents': showparents, |
839 'rev': rev, |
846 'rev': ctx.rev(), |
840 'tags': showtags, |
847 'tags': showtags, |
841 'extras': showextras, |
848 'extras': showextras, |
842 } |
849 } |
843 props = props.copy() |
850 props = props.copy() |
844 props.update(defprops) |
851 props.update(defprops) |
867 elif self.ui.verbose and 'changeset_verbose' in self.t: |
874 elif self.ui.verbose and 'changeset_verbose' in self.t: |
868 key = 'changeset_verbose' |
875 key = 'changeset_verbose' |
869 else: |
876 else: |
870 key = 'changeset' |
877 key = 'changeset' |
871 self.ui.write(templater.stringify(self.t(key, **props))) |
878 self.ui.write(templater.stringify(self.t(key, **props))) |
872 self.showpatch(changenode) |
879 self.showpatch(ctx.node()) |
873 except KeyError, inst: |
880 except KeyError, inst: |
874 raise util.Abort(_("%s: no key named '%s'") % (self.t.mapfile, |
881 raise util.Abort(_("%s: no key named '%s'") % (self.t.mapfile, |
875 inst.args[0])) |
882 inst.args[0])) |
876 except SyntaxError, inst: |
883 except SyntaxError, inst: |
877 raise util.Abort(_('%s: %s') % (self.t.mapfile, inst.args[0])) |
884 raise util.Abort(_('%s: %s') % (self.t.mapfile, inst.args[0])) |