--- a/hgext3rd/evolve/obshistory.py Tue Aug 06 15:06:27 2019 +0200
+++ b/hgext3rd/evolve/obshistory.py Tue Aug 06 15:06:38 2019 +0200
@@ -31,13 +31,13 @@
eh = exthelper.exthelper()
# Config
-efd = {'default': True} # pass a default value unless the config is registered
+efd = {b'default': True} # pass a default value unless the config is registered
@eh.extsetup
def enableeffectflags(ui):
item = (getattr(ui, '_knownconfig', {})
- .get('experimental', {})
- .get('evolution.effect-flags'))
+ .get(b'experimental', {})
+ .get(b'evolution.effect-flags'))
if item is not None:
item.default = True
efd.clear()
@@ -79,10 +79,10 @@
Returns 0 on success.
"""
- ui.pager('obslog')
+ ui.pager(b'obslog')
revs = list(revs) + opts['rev']
if not revs:
- revs = ['.']
+ revs = [b'.']
revs = scmutil.revrange(repo, revs)
if opts['graph']:
@@ -131,7 +131,7 @@
values = []
for sset in fullsuccessorsets:
- values.append({'successors': sset, 'markers': sset.markers})
+ values.append({b'successors': sset, b'markers': sset.markers})
return values
@@ -154,10 +154,10 @@
# Compat 4.6
if not util.safehasattr(self, "_includediff"):
- self._includediff = diffopts and diffopts.get('patch')
+ self._includediff = diffopts and diffopts.get(b'patch')
- self.template = diffopts and diffopts.get('template')
- self.filter = diffopts and diffopts.get('filternonlocal')
+ self.template = diffopts and diffopts.get(b'template')
+ self.filter = diffopts and diffopts.get(b'filternonlocal')
def show(self, ctx, copies=None, matchfn=None, **props):
if self.buffered:
@@ -165,12 +165,12 @@
changenode = ctx.node()
- _props = {"template": self.template}
- fm = self.ui.formatter('debugobshistory', _props)
+ _props = {b"template": self.template}
+ fm = self.ui.formatter(b'debugobshistory', _props)
_debugobshistorydisplaynode(fm, self.repo, changenode)
- markerfm = fm.nested("markers")
+ markerfm = fm.nested(b"markers")
# Succs markers
if self.filter is False:
@@ -186,21 +186,21 @@
r = _successorsandmarkers(self.repo, ctx)
for succset in sorted(r):
- markers = succset["markers"]
+ markers = succset[b"markers"]
if not markers:
continue
- successors = succset["successors"]
+ successors = succset[b"successors"]
_debugobshistorydisplaysuccsandmarkers(markerfm, successors, markers, ctx.node(), self.repo, self._includediff)
markerfm.end()
- markerfm.plain('\n')
+ markerfm.plain(b'\n')
fm.end()
self.hunk[ctx.node()] = self.ui.popbuffer()
else:
### graph output is buffered only
- msg = 'cannot be used outside of the graphlog (yet)'
+ msg = b'cannot be used outside of the graphlog (yet)'
raise error.ProgrammingError(msg)
def flush(self, ctx):
@@ -211,43 +211,43 @@
def patchavailable(node, repo, successors):
if node not in repo:
- return False, "context is not local"
+ return False, b"context is not local"
if len(successors) == 0:
- return False, "no successors"
+ return False, b"no successors"
elif len(successors) > 1:
- return False, "too many successors (%d)" % len(successors)
+ return False, b"too many successors (%d)" % len(successors)
succ = successors[0]
if succ not in repo:
- return False, "successor is unknown locally"
+ return False, b"successor is unknown locally"
# Check that both node and succ have the same parents
nodep1, nodep2 = repo[node].p1(), repo[node].p2()
succp1, succp2 = repo[succ].p1(), repo[succ].p2()
if nodep1 != succp1 or nodep2 != succp2:
- return False, "changesets rebased"
+ return False, b"changesets rebased"
return True, succ
def getmarkerdescriptionpatch(repo, basedesc, succdesc):
# description are stored without final new line,
# add one to avoid ugly diff
- basedesc += '\n'
- succdesc += '\n'
+ basedesc += b'\n'
+ succdesc += b'\n'
# fake file name
- basename = "changeset-description"
- succname = "changeset-description"
+ basename = b"changeset-description"
+ succname = b"changeset-description"
d = compat.strdiff(basedesc, succdesc, basename, succname)
uheaders, hunks = d
# Copied from patch.diff
- text = ''.join(sum((list(hlines) for hrange, hlines in hunks), []))
- patch = "\n".join(uheaders + [text])
+ text = b''.join(sum((list(hlines) for hrange, hlines in hunks), []))
+ patch = b"\n".join(uheaders + [text])
return patch
@@ -333,7 +333,7 @@
# Then choose a random node from the cycle
breaknode = sorted(cycle)[0]
# And display it by force
- repo.ui.debug('obs-cycle detected, forcing display of %s\n'
+ repo.ui.debug(b'obs-cycle detected, forcing display of %s\n'
% nodemod.short(breaknode))
validcandidates = [breaknode]
@@ -435,7 +435,7 @@
def _debugobshistoryrevs(ui, repo, revs, opts):
""" Display the obsolescence history for revset
"""
- fm = ui.formatter('debugobshistory', pycompat.byteskwargs(opts))
+ fm = ui.formatter(b'debugobshistory', pycompat.byteskwargs(opts))
precursors = repo.obsstore.predecessors
successors = repo.obsstore.successors
nodec = repo.changelog.node
@@ -451,7 +451,7 @@
succs = successors.get(ctxnode, ())
- markerfm = fm.nested("markers")
+ markerfm = fm.nested(b"markers")
for successor in sorted(succs):
includediff = opts and opts.get("patch")
_debugobshistorydisplaymarker(markerfm, successor, ctxnode, unfi, includediff)
@@ -477,24 +477,24 @@
shortdescription = shortdescription.splitlines()[0]
fm.startitem()
- fm.write('node', '%s', bytes(ctx),
- label="evolve.node")
- fm.plain(' ')
+ fm.write(b'node', b'%s', bytes(ctx),
+ label=b"evolve.node")
+ fm.plain(b' ')
- fm.write('rev', '(%d)', ctx.rev(),
- label="evolve.rev")
- fm.plain(' ')
+ fm.write(b'rev', b'(%d)', ctx.rev(),
+ label=b"evolve.rev")
+ fm.plain(b' ')
- fm.write('shortdescription', '%s', shortdescription,
- label="evolve.short_description")
- fm.plain('\n')
+ fm.write(b'shortdescription', b'%s', shortdescription,
+ label=b"evolve.short_description")
+ fm.plain(b'\n')
def _debugobshistorydisplaymissingctx(fm, nodewithoutctx):
hexnode = nodemod.short(nodewithoutctx)
fm.startitem()
- fm.write('node', '%s', hexnode,
- label="evolve.node evolve.missing_change_ctx")
- fm.plain('\n')
+ fm.write(b'node', b'%s', hexnode,
+ label=b"evolve.node evolve.missing_change_ctx")
+ fm.plain(b'\n')
def _debugobshistorydisplaymarker(fm, marker, node, repo, includediff=False):
succnodes = marker[1]
@@ -502,18 +502,18 @@
metadata = dict(marker[3])
fm.startitem()
- fm.plain(' ')
+ fm.plain(b' ')
# Detect pruned revisions
if len(succnodes) == 0:
- verb = 'pruned'
+ verb = b'pruned'
else:
- verb = 'rewritten'
+ verb = b'rewritten'
- fm.write('verb', '%s', verb,
- label="evolve.verb")
+ fm.write(b'verb', b'%s', verb,
+ label=b"evolve.verb")
- effectflag = metadata.get('ef1')
+ effectflag = metadata.get(b'ef1')
if effectflag is not None:
try:
effectflag = int(effectflag)
@@ -524,50 +524,50 @@
# XXX should be a dict
if effectflag & DESCCHANGED:
- effect.append('description')
+ effect.append(b'description')
if effectflag & METACHANGED:
- effect.append('meta')
+ effect.append(b'meta')
if effectflag & USERCHANGED:
- effect.append('user')
+ effect.append(b'user')
if effectflag & DATECHANGED:
- effect.append('date')
+ effect.append(b'date')
if effectflag & BRANCHCHANGED:
- effect.append('branch')
+ effect.append(b'branch')
if effectflag & PARENTCHANGED:
- effect.append('parent')
+ effect.append(b'parent')
if effectflag & DIFFCHANGED:
- effect.append('content')
+ effect.append(b'content')
if effect:
- fmteffect = fm.formatlist(effect, 'effect', sep=', ')
- fm.write('effect', '(%s)', fmteffect)
+ fmteffect = fm.formatlist(effect, b'effect', sep=b', ')
+ fm.write(b'effect', b'(%s)', fmteffect)
if len(succnodes) > 0:
- fm.plain(' as ')
+ fm.plain(b' as ')
shortsnodes = (nodemod.short(succnode) for succnode in sorted(succnodes))
- nodes = fm.formatlist(shortsnodes, 'succnodes', sep=', ')
- fm.write('succnodes', '%s', nodes,
- label="evolve.node")
+ nodes = fm.formatlist(shortsnodes, b'succnodes', sep=b', ')
+ fm.write(b'succnodes', b'%s', nodes,
+ label=b"evolve.node")
- operation = metadata.get('operation')
+ operation = metadata.get(b'operation')
if operation:
- fm.plain(' using ')
- fm.write('operation', '%s', operation, label="evolve.operation")
+ fm.plain(b' using ')
+ fm.write(b'operation', b'%s', operation, label=b"evolve.operation")
- fm.plain(' by ')
+ fm.plain(b' by ')
- fm.write('user', '%s', metadata['user'],
- label="evolve.user")
- fm.plain(' ')
+ fm.write(b'user', b'%s', metadata[b'user'],
+ label=b"evolve.user")
+ fm.plain(b' ')
- fm.write('date', '(%s)', fm.formatdate(date),
- label="evolve.date")
+ fm.write(b'date', b'(%s)', fm.formatdate(date),
+ label=b"evolve.date")
# initial support for showing note
- if metadata.get('note'):
- fm.plain('\n note: ')
- fm.write('note', "%s", metadata['note'], label="evolve.note")
+ if metadata.get(b'note'):
+ fm.plain(b'\n note: ')
+ fm.write(b'note', b"%s", metadata[b'note'], label=b"evolve.note")
# Patch display
if includediff is True:
@@ -585,20 +585,20 @@
if descriptionpatch:
# add the diffheader
- diffheader = "diff -r %s -r %s changeset-description\n" % \
+ diffheader = b"diff -r %s -r %s changeset-description\n" %\
(basectx, succctx)
descriptionpatch = diffheader + descriptionpatch
def tolist(text):
return [text]
- fm.plain("\n")
+ fm.plain(b"\n")
for chunk, label in patch.difflabel(tolist, descriptionpatch):
- chunk = chunk.strip('\t')
- if chunk and chunk != '\n':
- fm.plain(' ')
- fm.write('desc-diff', '%s', chunk, label=label)
+ chunk = chunk.strip(b'\t')
+ if chunk and chunk != b'\n':
+ fm.plain(b' ')
+ fm.write(b'desc-diff', b'%s', chunk, label=label)
# Content patch
diffopts = patch.diffallopts(repo.ui, {})
@@ -607,18 +607,18 @@
for chunk, label in patch.diffui(repo, node, succ, matchfn,
opts=diffopts):
if firstline:
- fm.plain('\n')
+ fm.plain(b'\n')
firstline = False
- if chunk and chunk != '\n':
- fm.plain(' ')
- fm.write('patch', '%s', chunk, label=label)
+ if chunk and chunk != b'\n':
+ fm.plain(b' ')
+ fm.write(b'patch', b'%s', chunk, label=label)
else:
- nopatch = " (No patch available, %s)" % _patchavailable[1]
- fm.plain("\n")
+ nopatch = b" (No patch available, %s)" % _patchavailable[1]
+ fm.plain(b"\n")
# TODO: should be in json too
fm.plain(nopatch)
- fm.plain("\n")
+ fm.plain(b"\n")
def _debugobshistorydisplaysuccsandmarkers(fm, succnodes, markers, node, repo, includediff=False):
"""
@@ -626,17 +626,17 @@
to accept multiple markers as input.
"""
fm.startitem()
- fm.plain(' ')
+ fm.plain(b' ')
# Detect pruned revisions
- verb = _successorsetverb(succnodes, markers)["verb"]
+ verb = _successorsetverb(succnodes, markers)[b"verb"]
- fm.write('verb', '%s', verb,
- label="evolve.verb")
+ fm.write(b'verb', b'%s', verb,
+ label=b"evolve.verb")
# Effect flag
metadata = [dict(marker[3]) for marker in markers]
- ef1 = [data.get('ef1') for data in metadata]
+ ef1 = [data.get(b'ef1') for data in metadata]
effectflag = 0
for ef in ef1:
@@ -648,45 +648,45 @@
# XXX should be a dict
if effectflag & DESCCHANGED:
- effect.append('description')
+ effect.append(b'description')
if effectflag & METACHANGED:
- effect.append('meta')
+ effect.append(b'meta')
if effectflag & USERCHANGED:
- effect.append('user')
+ effect.append(b'user')
if effectflag & DATECHANGED:
- effect.append('date')
+ effect.append(b'date')
if effectflag & BRANCHCHANGED:
- effect.append('branch')
+ effect.append(b'branch')
if effectflag & PARENTCHANGED:
- effect.append('parent')
+ effect.append(b'parent')
if effectflag & DIFFCHANGED:
- effect.append('content')
+ effect.append(b'content')
if effect:
- fmteffect = fm.formatlist(effect, 'effect', sep=', ')
- fm.write('effect', '(%s)', fmteffect)
+ fmteffect = fm.formatlist(effect, b'effect', sep=b', ')
+ fm.write(b'effect', b'(%s)', fmteffect)
if len(succnodes) > 0:
- fm.plain(' as ')
+ fm.plain(b' as ')
shortsnodes = (nodemod.short(succnode) for succnode in sorted(succnodes))
- nodes = fm.formatlist(shortsnodes, 'succnodes', sep=', ')
- fm.write('succnodes', '%s', nodes,
- label="evolve.node")
+ nodes = fm.formatlist(shortsnodes, b'succnodes', sep=b', ')
+ fm.write(b'succnodes', b'%s', nodes,
+ label=b"evolve.node")
# Operations
operations = compat.markersoperations(markers)
if operations:
- fm.plain(' using ')
- fm.write('operation', '%s', ", ".join(operations), label="evolve.operation")
+ fm.plain(b' using ')
+ fm.write(b'operation', b'%s', b", ".join(operations), label=b"evolve.operation")
- fm.plain(' by ')
+ fm.plain(b' by ')
# Users
users = compat.markersusers(markers)
- fm.write('user', '%s', ", ".join(users),
- label="evolve.user")
- fm.plain(' ')
+ fm.write(b'user', b'%s', b", ".join(users),
+ label=b"evolve.user")
+ fm.plain(b' ')
# Dates
dates = compat.markersdates(markers)
@@ -695,10 +695,10 @@
max_date = max(dates)
if min_date == max_date:
- fm.write("date", "(at %s)", fm.formatdate(min_date), label="evolve.date")
+ fm.write(b"date", b"(at %s)", fm.formatdate(min_date), label=b"evolve.date")
else:
- fm.write("date", "(between %s and %s)", fm.formatdate(min_date),
- fm.formatdate(max_date), label="evolve.date")
+ fm.write(b"date", b"(between %s and %s)", fm.formatdate(min_date),
+ fm.formatdate(max_date), label=b"evolve.date")
# initial support for showing note
# if metadata.get('note'):
@@ -721,20 +721,20 @@
if descriptionpatch:
# add the diffheader
- diffheader = "diff -r %s -r %s changeset-description\n" % \
+ diffheader = b"diff -r %s -r %s changeset-description\n" %\
(basectx, succctx)
descriptionpatch = diffheader + descriptionpatch
def tolist(text):
return [text]
- fm.plain("\n")
+ fm.plain(b"\n")
for chunk, label in patch.difflabel(tolist, descriptionpatch):
- chunk = chunk.strip('\t')
- if chunk and chunk != '\n':
- fm.plain(' ')
- fm.write('desc-diff', '%s', chunk, label=label)
+ chunk = chunk.strip(b'\t')
+ if chunk and chunk != b'\n':
+ fm.plain(b' ')
+ fm.write(b'desc-diff', b'%s', chunk, label=label)
# Content patch
diffopts = patch.diffallopts(repo.ui, {})
@@ -743,18 +743,18 @@
for chunk, label in patch.diffui(repo, node, succ, matchfn,
opts=diffopts):
if firstline:
- fm.plain('\n')
+ fm.plain(b'\n')
firstline = False
- if chunk and chunk != '\n':
- fm.plain(' ')
- fm.write('patch', '%s', chunk, label=label)
+ if chunk and chunk != b'\n':
+ fm.plain(b' ')
+ fm.write(b'patch', b'%s', chunk, label=label)
else:
- nopatch = " (No patch available, %s)" % _patchavailable[1]
- fm.plain("\n")
+ nopatch = b" (No patch available, %s)" % _patchavailable[1]
+ fm.plain(b"\n")
# TODO: should be in json too
fm.plain(nopatch)
- fm.plain("\n")
+ fm.plain(b"\n")
# logic around storing and using effect flags
DESCCHANGED = 1 << 0 # action changed the description
@@ -814,17 +814,17 @@
if len(successorssets) == 0:
# The commit has been pruned
- return 'pruned'
+ return b'pruned'
elif len(successorssets) > 1:
- return 'diverged'
+ return b'diverged'
else:
# No divergence, only one set of successors
successors = successorssets[0]
if len(successors) == 1:
- return 'superseed'
+ return b'superseed'
else:
- return 'superseed_split'
+ return b'superseed_split'
def _getobsfateandsuccs(repo, revnode, successorssets=None):
""" Return a tuple containing:
@@ -857,8 +857,8 @@
dates = [m[4] for m in markers]
return {
- 'min_date': min(dates),
- 'max_date': max(dates)
+ b'min_date': min(dates),
+ b'max_date': max(dates)
}
def _successorsetusers(successorset, markers):
@@ -869,18 +869,18 @@
# Check that user is present in meta
markersmeta = [dict(m[3]) for m in markers]
- users = set(meta.get('user') for meta in markersmeta if meta.get('user'))
+ users = set(meta.get(b'user') for meta in markersmeta if meta.get(b'user'))
- return {'users': sorted(users)}
+ return {b'users': sorted(users)}
VERBMAPPING = {
- DESCCHANGED: "reworded",
- METACHANGED: "meta-changed",
- USERCHANGED: "reauthored",
- DATECHANGED: "date-changed",
- BRANCHCHANGED: "branch-changed",
- PARENTCHANGED: "rebased",
- DIFFCHANGED: "amended"
+ DESCCHANGED: b"reworded",
+ METACHANGED: b"meta-changed",
+ USERCHANGED: b"reauthored",
+ DATECHANGED: b"date-changed",
+ BRANCHCHANGED: b"branch-changed",
+ PARENTCHANGED: b"rebased",
+ DIFFCHANGED: b"amended"
}
def _successorsetverb(successorset, markers):
@@ -888,12 +888,12 @@
"""
verb = None
if not successorset:
- verb = 'pruned'
+ verb = b'pruned'
elif len(successorset) == 1:
# Check for effect flag
metadata = [dict(marker[3]) for marker in markers]
- ef1 = [data.get('ef1') for data in metadata]
+ ef1 = [data.get(b'ef1') for data in metadata]
if all(ef1):
combined = 0
@@ -905,17 +905,17 @@
verb = VERBMAPPING[combined]
if verb is None:
- verb = 'rewritten'
+ verb = b'rewritten'
else:
- verb = 'split'
- return {'verb': verb}
+ verb = b'split'
+ return {b'verb': verb}
# Use a more advanced version of obsfateverb that uses effect-flag
if util.safehasattr(obsutil, 'obsfateverb'):
@eh.wrapfunction(obsutil, 'obsfateverb')
def obsfateverb(orig, *args, **kwargs):
- return _successorsetverb(*args, **kwargs)['verb']
+ return _successorsetverb(*args, **kwargs)[b'verb']
# Hijack callers of successorsetverb
elif util.safehasattr(obsutil, 'obsfateprinter'):
@@ -924,7 +924,7 @@
def obsfateprinter(orig, successors, markers, ui):
def closure(successors):
- return _successorsetverb(successors, markers)['verb']
+ return _successorsetverb(successors, markers)[b'verb']
if not util.safehasattr(obsutil, 'successorsetverb'):
return orig(successors, markers, ui)
@@ -1000,8 +1000,8 @@
# Format basic data
data = {
- "successors": sorted(successorset),
- "markers": sorted(markers)
+ b"successors": sorted(successorset),
+ b"markers": sorted(markers)
}
# Call an extensible list of functions to override or add new data