def __get_desc(self, cs): desc_msg = [(_('%s committed on %s') % (h.person(cs.author), h.fmt_date(cs.date))) + '<br/>'] #branches, tags, bookmarks if cs.branch: desc_msg.append('branch: %s<br/>' % cs.branch) if h.is_hg(c.db_repo_scm_instance): for book in cs.bookmarks: desc_msg.append('bookmark: %s<br/>' % book) for tag in cs.tags: desc_msg.append('tag: %s<br/>' % tag) diff_processor, changes = self.__changes(cs) # rev link _url = h.canonical_url('changeset_home', repo_name=c.db_repo.repo_name, revision=cs.raw_id) desc_msg.append('changeset: <a href="%s">%s</a>' % (_url, cs.raw_id[:8])) desc_msg.append('<pre>') desc_msg.append(h.urlify_text(cs.message)) desc_msg.append('\n') desc_msg.extend(changes) if self.include_diff: desc_msg.append('\n\n') desc_msg.append(diff_processor.as_raw()) desc_msg.append('</pre>') return map(safe_unicode, desc_msg)
def _get_repo_refs(self, repo, rev=None, branch=None, branch_rev=None): """return a structure with repo's interesting changesets, suitable for the selectors in pullrequest.html rev: a revision that must be in the list somehow and selected by default branch: a branch that must be in the list and selected by default - even if closed branch_rev: a revision of which peers should be preferred and available.""" # list named branches that has been merged to this named branch - it should probably merge back peers = [] if rev: rev = safe_str(rev) if branch: branch = safe_str(branch) if branch_rev: branch_rev = safe_str(branch_rev) # a revset not restricting to merge() would be better # (especially because it would get the branch point) # ... but is currently too expensive # including branches of children could be nice too peerbranches = set() for i in repo._repo.revs( "sort(parents(branch(id(%s)) and merge()) - branch(id(%s)), -rev)", branch_rev, branch_rev): abranch = repo.get_changeset(i).branch if abranch not in peerbranches: n = 'branch:%s:%s' % (abranch, repo.get_changeset(abranch).raw_id) peers.append((n, abranch)) peerbranches.add(abranch) selected = None tiprev = repo.tags.get('tip') tipbranch = None branches = [] for abranch, branchrev in repo.branches.iteritems(): n = 'branch:%s:%s' % (abranch, branchrev) desc = abranch if branchrev == tiprev: tipbranch = abranch desc = '%s (current tip)' % desc branches.append((n, desc)) if rev == branchrev: selected = n if branch == abranch: if not rev: selected = n branch = None if branch: # branch not in list - it is probably closed branchrev = repo.closed_branches.get(branch) if branchrev: n = 'branch:%s:%s' % (branch, branchrev) branches.append((n, _('%s (closed)') % branch)) selected = n branch = None if branch: log.debug('branch %r not found in %s', branch, repo) bookmarks = [] for bookmark, bookmarkrev in repo.bookmarks.iteritems(): n = 'book:%s:%s' % (bookmark, bookmarkrev) bookmarks.append((n, bookmark)) if rev == bookmarkrev: selected = n tags = [] for tag, tagrev in repo.tags.iteritems(): if tag == 'tip': continue n = 'tag:%s:%s' % (tag, tagrev) tags.append((n, tag)) if rev == tagrev: selected = n # prio 1: rev was selected as existing entry above # prio 2: create special entry for rev; rev _must_ be used specials = [] if rev and selected is None: selected = 'rev:%s:%s' % (rev, rev) specials = [(selected, '%s: %s' % (_("Changeset"), rev[:12]))] # prio 3: most recent peer branch if peers and not selected: selected = peers[0][0] # prio 4: tip revision if not selected: if h.is_hg(repo): if tipbranch: selected = 'branch:%s:%s' % (tipbranch, tiprev) else: selected = 'tag:null:' + repo.EMPTY_CHANGESET tags.append((selected, 'null')) else: if 'master' in repo.branches: selected = 'branch:master:%s' % repo.branches['master'] else: k, v = repo.branches.items()[0] selected = 'branch:%s:%s' % (k, v) groups = [(specials, _("Special")), (peers, _("Peer branches")), (bookmarks, _("Bookmarks")), (branches, _("Branches")), (tags, _("Tags")), ] return [g for g in groups if g[0]], selected
def _get_repo_refs(self, repo, rev=None, branch=None, branch_rev=None): """return a structure with repo's interesting changesets, suitable for the selectors in pullrequest.html rev: a revision that must be in the list somehow and selected by default branch: a branch that must be in the list and selected by default - even if closed branch_rev: a revision of which peers should be preferred and available.""" # list named branches that has been merged to this named branch - it should probably merge back peers = [] if rev: rev = safe_str(rev) if branch: branch = safe_str(branch) if branch_rev: branch_rev = safe_str(branch_rev) # a revset not restricting to merge() would be better # (especially because it would get the branch point) # ... but is currently too expensive # including branches of children could be nice too peerbranches = set() for i in repo._repo.revs( "sort(parents(branch(id(%s)) and merge()) - branch(id(%s)), -rev)", branch_rev, branch_rev): abranch = repo.get_changeset(i).branch if abranch not in peerbranches: n = 'branch:%s:%s' % (abranch, repo.get_changeset(abranch).raw_id) peers.append((n, abranch)) peerbranches.add(abranch) selected = None tiprev = repo.tags.get('tip') tipbranch = None branches = [] for abranch, branchrev in repo.branches.iteritems(): n = 'branch:%s:%s' % (abranch, branchrev) desc = abranch if branchrev == tiprev: tipbranch = abranch desc = '%s (current tip)' % desc branches.append((n, desc)) if rev == branchrev: selected = n if branch == abranch: if not rev: selected = n branch = None if branch: # branch not in list - it is probably closed branchrev = repo.closed_branches.get(branch) if branchrev: n = 'branch:%s:%s' % (branch, branchrev) branches.append((n, _('%s (closed)') % branch)) selected = n branch = None if branch: log.debug('branch %r not found in %s', branch, repo) bookmarks = [] for bookmark, bookmarkrev in repo.bookmarks.iteritems(): n = 'book:%s:%s' % (bookmark, bookmarkrev) bookmarks.append((n, bookmark)) if rev == bookmarkrev: selected = n tags = [] for tag, tagrev in repo.tags.iteritems(): if tag == 'tip': continue n = 'tag:%s:%s' % (tag, tagrev) tags.append((n, tag)) # note: even if rev == tagrev, don't select the static tag - it must be chosen explicitly # prio 1: rev was selected as existing entry above # prio 2: create special entry for rev; rev _must_ be used specials = [] if rev and selected is None: selected = 'rev:%s:%s' % (rev, rev) specials = [(selected, '%s: %s' % (_("Changeset"), rev[:12]))] # prio 3: most recent peer branch if peers and not selected: selected = peers[0][0] # prio 4: tip revision if not selected: if h.is_hg(repo): if tipbranch: selected = 'branch:%s:%s' % (tipbranch, tiprev) else: selected = 'tag:null:' + repo.EMPTY_CHANGESET tags.append((selected, 'null')) else: if 'master' in repo.branches: selected = 'branch:master:%s' % repo.branches['master'] else: k, v = repo.branches.items()[0] selected = 'branch:%s:%s' % (k, v) groups = [(specials, _("Special")), (peers, _("Peer branches")), (bookmarks, _("Bookmarks")), (branches, _("Branches")), (tags, _("Tags")), ] return [g for g in groups if g[0]], selected