Example #1
0
 def maxWidthValueForColumn(self, col):
     if self.graph is None:
         return 'XXXX'
     column = self._columns[col]
     if column == 'Rev':
         return '8' * len(str(len(self.repo))) + '+'
     if column == 'Node':
         return '8' * 12 + '+'
     if column in ('LocalTime', 'UTCTime'):
         return hglib.displaytime(util.makedate())
     if column in ('Tags', 'Latest tags'):
         try:
             return sorted(self.repo.tags().keys(),
                           key=lambda x: len(x))[-1][:10]
         except IndexError:
             pass
     if column == 'Branch':
         try:
             return sorted(self.repo.branchtags().keys(),
                           key=lambda x: len(x))[-1]
         except IndexError:
             pass
     if column == 'Filename':
         return self.filename
     if column == 'Graph':
         res = self.col2x(self.graph.max_cols)
         return min(res, 150)
     if column == 'Changes':
         return 'Changes'
     # Fall through for Description
     return None
Example #2
0
 def maxWidthValueForColumn(self, col):
     if self.graph is None:
         return 'XXXX'
     column = self._columns[col]
     if column == 'Rev':
         return '8' * len(str(len(self.repo))) + '+'
     if column == 'Node':
         return '8' * 12 + '+'
     if column in ('LocalTime', 'UTCTime'):
         return hglib.displaytime(util.makedate())
     if column in ('Tags', 'Latest tags'):
         try:
             return sorted(self.repo.tags().keys(), key=lambda x: len(x))[-1][:10]
         except IndexError:
             pass
     if column == 'Branch':
         try:
             return sorted(self.repo.branchtags().keys(), key=lambda x: len(x))[-1]
         except IndexError:
             pass
     if column == 'Filename':
         return self.filename
     if column == 'Graph':
         res = self.col2x(self.graph.max_cols)
         return min(res, 150)
     if column == 'Changes':
         return 'Changes'
     # Fall through for Description
     return None
Example #3
0
 def maxWidthValueForColumn(self, col):
     if self.graph is None:
         return "XXXX"
     column = self._columns[col]
     if column == "Rev":
         return "8" * len(str(len(self.repo))) + "+"
     if column == "Node":
         return "8" * 12 + "+"
     if column in ("LocalTime", "UTCTime"):
         return hglib.displaytime(util.makedate())
     if column == "Tags":
         try:
             return sorted(self.repo.tags().keys(), key=lambda x: len(x))[-1][:10]
         except IndexError:
             pass
     if column == "Branch":
         try:
             return sorted(self.repo.branchtags().keys(), key=lambda x: len(x))[-1]
         except IndexError:
             pass
     if column == "Filename":
         return self.filename
     if column == "Graph":
         res = self.col2x(self.graph.max_cols)
         return min(res, 150)
     if column == "Changes":
         return "Changes"
     # Fall through for Description
     return None
Example #4
0
 def get_rev_desc(self, rev):
     if rev in self.changedesc:
         return self.changedesc[rev]
     ctx = self.repo[rev]
     author = hglib.toutf(hglib.username(ctx.user()))
     date = hglib.toutf(hglib.displaytime(ctx.date()))
     text = hglib.tounicode(ctx.description()).replace(u'\0', '')
     lines = text.splitlines()
     summary = hglib.toutf(lines and lines[0] or '')
     desc = gtklib.markup_escape_text('%s@%s %s "%s"' % \
                                      (author, rev, date, summary))
     self.changedesc[rev] = (desc, author)
     return self.changedesc[rev]
Example #5
0
    def __init__(self, parent=None):
        QDialog.__init__(self, parent)
        self.setWindowFlags(Qt.Window)
        self.setWindowIcon(qtlib.geticon("fileadd"))
        self.setWindowTitle(_('New Patch Branch'))

        def AddField(var, label, optional=False):
            hbox = QHBoxLayout()
            SP = QSizePolicy
            le = QLineEdit()
            le.setSizePolicy(SP(SP.Expanding, SP.Fixed))
            if optional:
                cb = QCheckBox(label)
                le.setEnabled(False)
                cb.toggled.connect(le.setEnabled)
                hbox.addWidget(cb)
                setattr(self, var + 'cb', cb)
            else:
                hbox.addWidget(QLabel(label))
            hbox.addWidget(le)
            setattr(self, var + 'le', le)
            return hbox

        def DialogButtons():
            BB = QDialogButtonBox
            bb = QDialogButtonBox(BB.Ok | BB.Cancel)
            bb.accepted.connect(self.accept)
            bb.rejected.connect(self.reject)
            bb.button(BB.Ok).setDefault(True)
            bb.button(BB.Cancel).setDefault(False)
            self.commitButton = bb.button(BB.Ok)
            self.commitButton.setText(_('Commit', 'action button'))
            self.bb = bb
            return bb

        layout = QVBoxLayout()
        layout.setContentsMargins(2, 2, 2, 2)
        self.setLayout(layout)
        layout.addLayout(AddField('patchname', _('Patch name:')))
        layout.addLayout(
            AddField('patchtext', _('Patch message:'), optional=True))
        layout.addLayout(AddField('patchdate', _('Patch date:'),
                                  optional=True))
        layout.addLayout(AddField('patchuser', _('Patch user:'),
                                  optional=True))
        layout.addWidget(DialogButtons())

        self.patchdatele.setText(
            hglib.tounicode(hglib.displaytime(util.makedate())))
Example #6
0
    def __init__(self, parent=None):
        QDialog.__init__(self, parent)
        self.setWindowFlags(Qt.Window)
        self.setWindowIcon(qtlib.geticon("fileadd"))
        self.setWindowTitle(_('New Patch Branch'))

        def AddField(var, label, optional=False):
            hbox = QHBoxLayout()
            SP = QSizePolicy
            le = QLineEdit()
            le.setSizePolicy(SP(SP.Expanding, SP.Fixed))
            if optional:
                cb = QCheckBox(label)
                le.setEnabled(False)
                cb.toggled.connect(le.setEnabled)
                hbox.addWidget(cb)
                setattr(self, var+'cb', cb)
            else:
                hbox.addWidget(QLabel(label))
            hbox.addWidget(le)
            setattr(self, var+'le', le)
            return hbox

        def DialogButtons():
            BB = QDialogButtonBox
            bb = QDialogButtonBox(BB.Ok|BB.Cancel)
            bb.accepted.connect(self.accept)
            bb.rejected.connect(self.reject)
            bb.button(BB.Ok).setDefault(True)
            bb.button(BB.Cancel).setDefault(False)
            self.commitButton = bb.button(BB.Ok)
            self.commitButton.setText(_('Commit', 'action button'))
            self.bb = bb
            return bb

        layout = QVBoxLayout()
        layout.setContentsMargins(2, 2, 2, 2)
        self.setLayout(layout)
        layout.addLayout(AddField('patchname',_('Patch name:')))
        layout.addLayout(AddField('patchtext',_('Patch message:'), optional=True))
        layout.addLayout(AddField('patchdate',_('Patch date:'), optional=True))
        layout.addLayout(AddField('patchuser',_('Patch user:'), optional=True))
        layout.addWidget(DialogButtons())

        self.patchdatele.setText(
                hglib.tounicode(hglib.displaytime(util.makedate())))
Example #7
0
    def __init__(self, repo, cfgname, branch, revset, rfilter, parent):
        """
        repo is a hg repo instance
        """
        QAbstractTableModel.__init__(self, parent)
        self._cache = []
        self.graph = None
        self.timerHandle = None
        self.dotradius = 8
        self.rowheight = 20
        self.rowcount = 0
        self.repo = repo
        self.revset = revset
        self.filterbyrevset = rfilter
        self.unicodestar = True
        self.unicodexinabox = True
        self.cfgname = cfgname

        # To be deleted
        self._user_colors = {}
        self._branch_colors = {}

        self._columnmap = {
            "Rev": self.getrev,
            "Node": lambda ctx, gnode: str(ctx),
            "Graph": lambda ctx, gnode: "",
            "Description": self.getlog,
            "Author": self.getauthor,
            "Tags": self.gettags,
            "Branch": self.getbranch,
            "Filename": lambda ctx, gnode: gnode.extra[0],
            "Age": lambda ctx, gnode: hglib.age(ctx.date()).decode("utf-8"),
            "LocalTime": lambda ctx, gnode: hglib.displaytime(ctx.date()),
            "UTCTime": lambda ctx, gnode: hglib.utctime(ctx.date()),
            "Changes": self.getchanges,
        }

        if repo:
            self.reloadConfig()
            self.updateColumns()
            self.setBranch(branch)
Example #8
0
 def showDiff(self, index):
     'User selected a row in the candidate tree'
     indexes = index.indexes()
     if not indexes:
         return
     index = indexes[0]
     ctx = self.repo['.']
     hu = htmlui.htmlui()
     row = self.matchtv.model().getRow(index)
     src, dest, percent = self.matchtv.model().getRow(index)
     aa = self.repo.wread(dest)
     rr = ctx.filectx(src).data()
     date = hglib.displaytime(ctx.date())
     difftext = mdiff.unidiff(rr, date, aa, date, src, dest, None)
     if not difftext:
         t = _('%s and %s have identical contents\n\n') % \
                 (hglib.tounicode(src), hglib.tounicode(dest))
         hu.write(t, label='ui.error')
     else:
         for t, l in patch.difflabel(difftext.splitlines, True):
             hu.write(t, label=l)
     self.difftb.setHtml(hu.getdata()[0])
Example #9
0
 def showDiff(self, index):
     'User selected a row in the candidate tree'
     indexes = index.indexes()
     if not indexes:
         return
     index = indexes[0]
     ctx = self.repo['.']
     hu = htmlui.htmlui()
     row = self.matchtv.model().getRow(index)
     src, dest, percent = self.matchtv.model().getRow(index)
     aa = self.repo.wread(dest)
     rr = ctx.filectx(src).data()
     date = hglib.displaytime(ctx.date())
     difftext = mdiff.unidiff(rr, date, aa, date, src, dest, None)
     if not difftext:
         t = _('%s and %s have identical contents\n\n') % \
                 (hglib.tounicode(src), hglib.tounicode(dest))
         hu.write(t, label='ui.error')
     else:
         for t, l in patch.difflabel(difftext.splitlines, True):
             hu.write(t, label=l)
     self.difftb.setHtml(hu.getdata()[0])
Example #10
0
 def maxWidthValueForColumn(self, column):
     if column == RevColumn:
         return '8' * len(str(len(self.repo))) + '+'
     if column == NodeColumn:
         return '8' * 12 + '+'
     if column in (LocalDateColumn, UtcDateColumn):
         return hglib.displaytime(util.makedate())
     if column in (TagsColumn, LatestTagColumn):
         try:
             return sorted(self.repo.tags().keys(), key=lambda x: len(x))[-1][:10]
         except IndexError:
             pass
     if column == BranchColumn:
         try:
             return sorted(self.repo.branchmap(), key=lambda x: len(x))[-1]
         except IndexError:
             pass
     if column == FileColumn:
         return self._filename
     if column == ChangesColumn:
         return 'Changes'
     # Fall through for DescColumn
     return None
Example #11
0
 def preset_func(widget, item, ctx):
     if item == "rev":
         revnum = self.get_data("revnum", *args)
         revid = self.get_data("revid", *args)
         if revid:
             return (revnum, revid)
         return None
     elif item == "revnum":
         return ctx.rev()
     elif item == "revid":
         return str(ctx)
     elif item == "desc":
         return hglib.tounicode(ctx.description().replace("\0", ""))
     elif item == "summary":
         summary = hglib.longsummary(ctx.description().replace("\0", ""))
         if len(summary) == 0:
             return None
         return summary
     elif item == "user":
         user = hglib.user(ctx)
         if user:
             return hglib.tounicode(user)
         return None
     elif item == "shortuser":
         return hglib.tounicode(hglib.username(hglib.user(ctx)))
     elif item == "dateage":
         date = self.get_data("date", *args)
         age = self.get_data("age", *args)
         if date and age:
             return (date, age)
         return None
     elif item == "date":
         date = ctx.date()
         if date:
             return hglib.displaytime(date)
         return None
     elif item == "age":
         date = ctx.date()
         if date:
             return hglib.age(date).decode("utf-8")
         return None
     elif item == "rawbranch":
         return ctx.branch() or None
     elif item == "branch":
         value = self.get_data("rawbranch", *args)
         if value:
             repo = ctx._repo
             if ctx.node() not in repo.branchtags().values():
                 return None
             if value in repo.deadbranches:
                 return None
             return value
         return None
     elif item == "close":
         return ctx.extra().get("close")
     elif item == "rawtags":
         return hglib.getrawctxtags(ctx)
     elif item == "tags":
         return hglib.getctxtags(ctx)
     elif item == "graft":
         extra = ctx.extra()
         try:
             return extra["source"]
         except KeyError:
             pass
         return None
     elif item == "transplant":
         extra = ctx.extra()
         try:
             ts = extra["transplant_source"]
             if ts:
                 return binascii.hexlify(ts)
         except KeyError:
             pass
         return None
     elif item == "obsolete":
         obsoletestate = []
         if ctx.obsolete():
             obsoletestate.append("obsolete")
         if ctx.extinct():
             obsoletestate.append("extinct")
         obsoletestate += ctx.troubles()
         if obsoletestate:
             return obsoletestate
         return None
     elif item == "p4":
         extra = ctx.extra()
         p4cl = extra.get("p4", None)
         return p4cl and ("changelist %s" % p4cl)
     elif item == "svn":
         extra = ctx.extra()
         cvt = extra.get("convert_revision", "")
         if cvt.startswith("svn:"):
             result = cvt.split("/", 1)[-1]
             if cvt != result:
                 return result
             return cvt.split("@")[-1]
         else:
             return None
     elif item == "converted":
         extra = ctx.extra()
         cvt = extra.get("convert_revision", "")
         if cvt and not cvt.startswith("svn:"):
             return cvt
         else:
             return None
     elif item == "ishead":
         childbranches = [cctx.branch() for cctx in ctx.children()]
         return ctx.branch() not in childbranches
     raise UnknownItem(item)
Example #12
0
    def on_get_value(self, rowref, column):
        (revid, graphnode, lines, path) = self.graphdata[rowref]

        if column == REVID: return revid
        if column == LINES: return lines
        if column == LAST_LINES:
            if rowref>0:
                return self.graphdata[rowref-1][2]
            return []
        if column == WFILE: return path or ''

        try:
            ctx = self.repo[revid]
        except IndexError:
            return None

        # non-cached columns

        if column in (HEXID, REVHEX, BRANCH, LOCALTIME, UTC):
            if column == HEXID:
                return str(ctx)
            if column == REVHEX:
                hexid = gtklib.markup(str(ctx), face='monospace')
                return '%s: %s' % (revid, hexid)
            if column == BRANCH:
                return ctx.branch()
            if column == LOCALTIME:
                return hglib.displaytime(ctx.date())
            if column == UTC:
                return hglib.utctime(ctx.date())

        # cached columns

        if revid not in self.revisions:
            self.revisions[revid] = {}
        cache = self.revisions[revid]

        if cache.has_key(column):
            return cache[column]

        if column in (COMMITER, FGCOLOR):
            cache[COMMITER] = hglib.toutf(hglib.username(ctx.user()))

        if column == TAGS:
            tags = self.repo.nodetags(ctx.node())
            cache[TAGS] = hglib.toutf(', '.join(tags))

        elif column == SVNREV:
            extra = ctx.extra()
            cvt = extra.get('convert_revision', '')
            if cvt.startswith('svn:'):
                rev = cvt.split('/', 1)[-1]
                rev = rev.split('@', 1)[-1]
            else:
                rev = None
            cache[SVNREV] = rev and hglib.toutf('r%s' % rev) or ''

        elif column == AGE:
            cache[AGE] = hglib.age(ctx.date())

        elif column == FGCOLOR:
            cache[FGCOLOR] = self.color_func(revid, cache[COMMITER])

        elif column == CHANGES:
            parent = self.parents.get(revid, None)
            if parent is None:
                parent = ctx.parents()[0].node()
            M, A, R = self.repo.status(parent, ctx.node())[:3]
            common = dict(color=gtklib.BLACK)
            M = M and gtklib.markup(' %s ' % len(M),
                             background=gtklib.PORANGE, **common) or ''
            A = A and gtklib.markup(' %s ' % len(A),
                             background=gtklib.PGREEN, **common) or ''
            R = R and gtklib.markup(' %s ' % len(R),
                             background=gtklib.PRED, **common) or ''
            cache[CHANGES] = ''.join((M, A, R))

        elif column in (MESSAGE, GRAPHNODE):
            # convert to Unicode for valid string operations
            summary = hglib.tounicode(ctx.description()).replace(u'\0', '')
            if self.longsummary:
                limit = 80
                lines = summary.splitlines()
                if lines:
                    summary = lines.pop(0)
                    while len(summary) < limit and lines:
                        summary += u'  ' + lines.pop(0)
                    summary = summary[0:limit]
                else:
                    summary = ''
            else:
                lines = summary.splitlines()
                summary = lines and lines[0] or ''
            escape = gtklib.markup_escape_text
            summary = escape(hglib.toutf(summary))

            tstr = ''
            for tag in ctx.tags():
                if tag not in self.hidetags:
                    if tag in self.mqpatches:
                        bg = gtklib.PBLUE
                    else:
                        bg = gtklib.PYELLOW
                    style = {'color': gtklib.BLACK, 'background': bg}
                    tstr += gtklib.markup(' %s ' % tag, **style) + ' '
            for mark in ctx.bookmarks():
                if mark == self.curbookmark:
                    bg = gtklib.PORANGE
                else:
                    bg = gtklib.PLIME
                style = {'color': gtklib.BLACK, 'background': bg}
                tstr += gtklib.markup(' %s ' % mark, **style) + ' '

            node = ctx.node()
            branch = ctx.branch()
            bstr = ''
            status = 0
            if self.branchtags.get(branch) == node:
                bstr += gtklib.markup(' %s ' % branch, color=gtklib.BLACK,
                                      background=gtklib.PGREEN) + ' '
                status = 8

            if revid in self.wcparents:
                sumstr = bstr + tstr + '<b><u>' + summary + '</u></b>'
                status += 4
            else:
                sumstr = bstr + tstr + summary
                status += 0

            if node in self.outgoing:
                # outgoing
                if not self.showgraph:
                    marker = hglib.toutf(u'\u2191 ') # up arrow
                    sumstr = marker + sumstr
                status += 1
            elif revid >= self.origtip:
                if revid >= len(self.repo) - self.npreviews:
                    # incoming
                    if not self.showgraph:
                        marker = hglib.toutf(u'\u2193 ') # down arrow
                        sumstr = marker + sumstr
                    status += 3
                else:
                    # new
                    status += 2

            cache[MESSAGE] = sumstr
            gcolumn, gcolor = graphnode
            cache[GRAPHNODE] = (gcolumn, gcolor, status)

        return cache[column]
Example #13
0
            return ''
        try:
            return ctx.phasestr()
        except:
            return 'draft'

    _columnmap = {
        RevColumn: _getrev,
        BranchColumn: _getbranch,
        DescColumn: _getlog,
        AuthorColumn: _getauthor,
        TagsColumn: _gettags,
        LatestTagColumn: _getlatesttags,
        NodeColumn: lambda self, ctx: str(ctx),
        AgeColumn: lambda self, ctx: hglib.age(ctx.date()).decode('utf-8'),
        LocalDateColumn: lambda self, ctx: hglib.displaytime(ctx.date()),
        UtcDateColumn: lambda self, ctx: hglib.utctime(ctx.date()),
        ConvertedColumn: _getconv,
        PhaseColumn: _getphase,
        }


class FileRevModel(HgRepoListModel):
    """
    Model used to manage the list of revisions of a file, in file
    viewer of in diff-file viewer dialogs.
    """

    _defaultcolumns = ('Graph', 'Rev', 'Branch', 'Description', 'Author',
                       'Age', 'Filename')
Example #14
0
 def preset_func(widget, item, ctx):
     if item == 'rev':
         revnum = self.get_data('revnum', *args)
         revid = self.get_data('revid', *args)
         if revid:
             return (revnum, revid)
         return None
     elif item == 'revnum':
         return ctx.rev()
     elif item == 'revid':
         return str(ctx)
     elif item == 'desc':
         return hglib.tounicode(ctx.description().replace('\0', ''))
     elif item == 'summary':
         value = ctx.description().replace('\0', '').split('\n')[0]
         if len(value) == 0:
             return None
         return hglib.tounicode(value)[:80]
     elif item == 'user':
         user = hglib.user(ctx)
         if user:
             return hglib.tounicode(user)
         return None
     elif item == 'shortuser':
         return hglib.tounicode(hglib.username(hglib.user(ctx)))
     elif item == 'dateage':
         date = self.get_data('date', *args)
         age = self.get_data('age', *args)
         if date and age:
             return (date, age)
         return None
     elif item == 'date':
         date = ctx.date()
         if date:
             return hglib.displaytime(date)
         return None
     elif item == 'age':
         date = ctx.date()
         if date:
             return hglib.age(date).decode('utf-8')
         return None
     elif item == 'rawbranch':
         return ctx.branch() or None
     elif item == 'branch':
         value = self.get_data('rawbranch', *args)
         if value:
             repo = ctx._repo
             if ctx.node() not in repo.branchtags().values():
                 return None
             if value in repo.deadbranches:
                 return None
             return value
         return None
     elif item == 'close':
         return ctx.extra().get('close')
     elif item == 'rawtags':
         return hglib.getrawctxtags(ctx)
     elif item == 'tags':
         return hglib.getctxtags(ctx)
     elif item == 'graft':
         extra = ctx.extra()
         try:
             return extra['source']
         except KeyError:
             pass
         return None
     elif item == 'transplant':
         extra = ctx.extra()
         try:
             ts = extra['transplant_source']
             if ts:
                 return binascii.hexlify(ts)
         except KeyError:
             pass
         return None
     elif item == 'p4':
         extra = ctx.extra()
         p4cl = extra.get('p4', None)
         return p4cl and ('changelist %s' % p4cl)
     elif item == 'svn':
         extra = ctx.extra()
         cvt = extra.get('convert_revision', '')
         if cvt.startswith('svn:'):
             result = cvt.split('/', 1)[-1]
             if cvt != result:
                 return result
             return cvt.split('@')[-1]
         else:
             return None
     elif item == 'converted':
         extra = ctx.extra()
         cvt = extra.get('convert_revision', '')
         if cvt and not cvt.startswith('svn:'):
             return cvt
         else:
             return None
     elif item == 'ishead':
         childbranches = [cctx.branch() for cctx in ctx.children()]
         return ctx.branch() not in childbranches
     raise UnknownItem(item)
Example #15
0
            cvt = extra.get('p4', '')
            if cvt:
                return cvt
        return ''

    def getphase(self, ctx, gnode):
        if ctx.rev() is None:
            return ''
        try:
            return ctx.phasestr()
        except:
            return 'draft'

    _columnmap = {
        'Rev':      getrev,
        'Node':     lambda self, ctx, gnode: str(ctx),
        'Graph':    lambda self, ctx, gnode: "",
        'Description': getlog,
        'Author':   getauthor,
        'Tags':     gettags,
        'Latest tags':     getlatesttags,
        'Branch':   getbranch,
        'Filename': lambda self, ctx, gnode: gnode.extra[0],
        'Age':      lambda self, ctx, gnode: hglib.age(ctx.date()).decode('utf-8'),
        'LocalTime':lambda self, ctx, gnode: hglib.displaytime(ctx.date()),
        'UTCTime':  lambda self, ctx, gnode: hglib.utctime(ctx.date()),
        'Changes':  getchanges,
        'Converted': getconv,
        'Phase':    getphase,
    }
Example #16
0
 def preset_func(widget, item, ctx):
     if item == "rev":
         revnum = self.get_data("revnum", *args)
         revid = self.get_data("revid", *args)
         if revid:
             return (revnum, revid)
         return None
     elif item == "revnum":
         return ctx.rev()
     elif item == "revid":
         return str(ctx)
     elif item == "desc":
         return hglib.toutf(ctx.description().replace("\0", ""))
     elif item == "summary":
         value = ctx.description().replace("\0", "").split("\n")[0]
         if len(value) == 0:
             return None
         return hglib.toutf(hglib.tounicode(value)[:80])
     elif item == "user":
         return hglib.toutf(ctx.user())
     elif item == "shortuser":
         return hglib.toutf(hglib.username(ctx.user()))
     elif item == "dateage":
         date = self.get_data("date", *args)
         age = self.get_data("age", *args)
         if date and age:
             return (date, age)
         return None
     elif item == "date":
         date = ctx.date()
         if date:
             return hglib.displaytime(date)
         return None
     elif item == "age":
         date = ctx.date()
         if date:
             return hglib.age(date)
         return None
     elif item == "rawbranch":
         value = ctx.branch()
         if value:
             return hglib.toutf(value)
         return None
     elif item == "branch":
         value = self.get_data("rawbranch", *args)
         if value:
             repo = ctx._repo
             if ctx.node() not in repo.branchtags().values():
                 return None
             dblist = hglib.getdeadbranch(repo.ui)
             if value in dblist:
                 return None
             return value
         return None
     elif item == "rawtags":
         value = [hglib.toutf(tag) for tag in ctx.tags()]
         if len(value) == 0:
             return None
         return value
     elif item == "tags":
         value = self.get_data("rawtags", *args)
         if value:
             htlist = hglib.gethidetags(ctx._repo.ui)
             tags = [tag for tag in value if tag not in htlist]
             if len(tags) == 0:
                 return None
             return tags
         return None
     elif item == "transplant":
         extra = ctx.extra()
         try:
             ts = extra["transplant_source"]
             if ts:
                 return binascii.hexlify(ts)
         except KeyError:
             pass
         return None
     elif item == "p4":
         extra = ctx.extra()
         p4cl = extra.get("p4", None)
         return p4cl and ("changelist %s" % p4cl)
     elif item == "svn":
         extra = ctx.extra()
         cvt = extra.get("convert_revision", "")
         if cvt.startswith("svn:"):
             result = cvt.split("/", 1)[-1]
             if cvt != result:
                 return result
             return cvt.split("@")[-1]
         else:
             return None
     elif item == "ishead":
         childbranches = [cctx.branch() for cctx in ctx.children()]
         return ctx.branch() not in childbranches
     raise UnknownItem(item)
Example #17
0
 def preset_func(widget, item, ctx):
     if item == 'rev':
         revnum = self.get_data('revnum', *args)
         revid = self.get_data('revid', *args)
         if revid:
             return (revnum, revid)
         return None
     elif item == 'revnum':
         return ctx.rev()
     elif item == 'revid':
         return str(ctx)
     elif item == 'desc':
         return hglib.tounicode(ctx.description().replace('\0', ''))
     elif item == 'summary':
         summary = hglib.longsummary(
             ctx.description().replace('\0', ''))
         if len(summary) == 0:
             return None
         return summary
     elif item == 'user':
         user = hglib.user(ctx)
         if user:
             return hglib.tounicode(user)
         return None
     elif item == 'shortuser':
         return hglib.tounicode(hglib.username(hglib.user(ctx)))
     elif item == 'dateage':
         date = self.get_data('date', *args)
         age = self.get_data('age', *args)
         if date and age:
             return (date, age)
         return None
     elif item == 'date':
         date = ctx.date()
         if date:
             return hglib.displaytime(date)
         return None
     elif item == 'age':
         date = ctx.date()
         if date:
             return hglib.age(date).decode('utf-8')
         return None
     elif item == 'rawbranch':
         return ctx.branch() or None
     elif item == 'branch':
         value = self.get_data('rawbranch', *args)
         if value:
             repo = ctx._repo
             try:
                 if ctx.node() != repo.branchtip(ctx.branch()):
                     return None
             except error.RepoLookupError:
                 # ctx.branch() can be invalid for null or workingctx
                 return None
             if value in repo.deadbranches:
                 return None
             return value
         return None
     elif item == 'close':
         return ctx.extra().get('close')
     elif item == 'tags':
         return ctx.thgtags() or None
     elif item == 'graft':
         extra = ctx.extra()
         try:
             return extra['source']
         except KeyError:
             pass
         return None
     elif item == 'transplant':
         extra = ctx.extra()
         try:
             ts = extra['transplant_source']
             if ts:
                 return binascii.hexlify(ts)
         except KeyError:
             pass
         return None
     elif item == 'obsolete':
         obsoletestate = []
         if ctx.obsolete():
             obsoletestate.append('obsolete')
         if ctx.extinct():
             obsoletestate.append('extinct')
         obsoletestate += ctx.troubles()
         if obsoletestate:
             return obsoletestate
         return None
     elif item == 'p4':
         extra = ctx.extra()
         p4cl = extra.get('p4', None)
         return p4cl and ('changelist %s' % p4cl)
     elif item == 'svn':
         extra = ctx.extra()
         cvt = extra.get('convert_revision', '')
         if cvt.startswith('svn:'):
             result = cvt.split('/', 1)[-1]
             if cvt != result:
                 return result
             return cvt.split('@')[-1]
         else:
             return None
     elif item == 'converted':
         extra = ctx.extra()
         cvt = extra.get('convert_revision', '')
         if cvt and not cvt.startswith('svn:'):
             return cvt
         else:
             return None
     elif item == 'ishead':
         childbranches = [cctx.branch() for cctx in ctx.children()]
         return ctx.branch() not in childbranches
     elif item == 'mqoriginalparent':
         target = ctx.thgmqoriginalparent()
         if not target:
             return None
         p1 = ctx.p1()
         if p1 is not None and p1.hex() == target:
             return None
         if target not in ctx._repo:
             return None
         return target
     raise UnknownItem(item)
Example #18
0
            cvt = extra.get('p4', '')
            if cvt:
                return cvt
        return ''

    def getphase(self, ctx, gnode):
        if ctx.rev() is None:
            return ''
        try:
            return ctx.phasestr()
        except:
            return 'draft'

    _columnmap = {
        'Rev': getrev,
        'Node': lambda self, ctx, gnode: str(ctx),
        'Graph': lambda self, ctx, gnode: "",
        'Description': getlog,
        'Author': getauthor,
        'Tags': gettags,
        'Latest tags': getlatesttags,
        'Branch': getbranch,
        'Filename': lambda self, ctx, gnode: gnode.extra[0],
        'Age': lambda self, ctx, gnode: hglib.age(ctx.date()).decode('utf-8'),
        'LocalTime': lambda self, ctx, gnode: hglib.displaytime(ctx.date()),
        'UTCTime': lambda self, ctx, gnode: hglib.utctime(ctx.date()),
        'Changes': getchanges,
        'Converted': getconv,
        'Phase': getphase,
    }