mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 00:14:35 +03:00
convert: use new-style progress bars
Reviewed By: quark-zju Differential Revision: D7329501 fbshipit-source-id: 5312f905b513200904c79acbdb1c7b17968a8aba
This commit is contained in:
parent
af359e3856
commit
eb318ffa63
@ -15,6 +15,7 @@ from mercurial import (
|
||||
encoding,
|
||||
error,
|
||||
hg,
|
||||
progress,
|
||||
scmutil,
|
||||
util,
|
||||
)
|
||||
@ -53,7 +54,7 @@ svn_source = subversion.svn_source
|
||||
orig_encoding = 'ascii'
|
||||
|
||||
def recode(s):
|
||||
if isinstance(s, unicode):
|
||||
if isinstance(s, unicode): # noqa
|
||||
return s.encode(orig_encoding, 'replace')
|
||||
else:
|
||||
return s.decode('utf-8').encode(orig_encoding, 'replace')
|
||||
@ -137,16 +138,14 @@ def convertsink(ui, path, type):
|
||||
raise error.Abort(_('%s: unknown repository type') % path)
|
||||
|
||||
class progresssource(object):
|
||||
def __init__(self, ui, source, filecount):
|
||||
self.ui = ui
|
||||
def __init__(self, source, prog):
|
||||
self.source = source
|
||||
self.filecount = filecount
|
||||
self.prog = prog
|
||||
self.retrieved = 0
|
||||
|
||||
def getfile(self, file, rev):
|
||||
self.retrieved += 1
|
||||
self.ui.progress(_('getting files'), self.retrieved,
|
||||
item=file, total=self.filecount, unit=_('files'))
|
||||
self.prog.value = (self.retrieved, file)
|
||||
return self.source.getfile(file, rev)
|
||||
|
||||
def targetfilebelongstosource(self, targetfilename):
|
||||
@ -155,9 +154,6 @@ class progresssource(object):
|
||||
def lookuprev(self, rev):
|
||||
return self.source.lookuprev(rev)
|
||||
|
||||
def close(self):
|
||||
self.ui.progress(_('getting files'), None)
|
||||
|
||||
class converter(object):
|
||||
def __init__(self, ui, source, dest, revmapfile, opts):
|
||||
|
||||
@ -236,6 +232,8 @@ class converter(object):
|
||||
known = set()
|
||||
parents = {}
|
||||
numcommits = self.source.numcommits()
|
||||
with progress.bar(self.ui, _('scanning'), _('revisions'),
|
||||
numcommits) as prog:
|
||||
while visit:
|
||||
n = visit.pop(0)
|
||||
if n in known:
|
||||
@ -245,14 +243,12 @@ class converter(object):
|
||||
if m == SKIPREV or self.dest.hascommitfrommap(m):
|
||||
continue
|
||||
known.add(n)
|
||||
self.ui.progress(_('scanning'), len(known), unit=_('revisions'),
|
||||
total=numcommits)
|
||||
prog.value = len(known)
|
||||
commit = self.cachecommit(n)
|
||||
parents[n] = []
|
||||
for p in commit.parents:
|
||||
parents[n].append(p)
|
||||
visit.append(p)
|
||||
self.ui.progress(_('scanning'), None)
|
||||
|
||||
return parents
|
||||
|
||||
@ -478,17 +474,19 @@ class converter(object):
|
||||
if len(pbranches) != 2:
|
||||
cleanp2 = set()
|
||||
if len(parents) < 3:
|
||||
source = progresssource(self.ui, self.source, len(files))
|
||||
sourcelength = len(files)
|
||||
else:
|
||||
# For an octopus merge, we end up traversing the list of
|
||||
# changed files N-1 times. This tweak to the number of
|
||||
# files makes it so the progress bar doesn't overflow
|
||||
# itself.
|
||||
source = progresssource(self.ui, self.source,
|
||||
len(files) * (len(parents) - 1))
|
||||
sourcelength = len(files) * (len(parents) - 1)
|
||||
|
||||
with progress.bar(self.ui, _('getting files'), _('files'),
|
||||
sourcelength) as prog:
|
||||
source = progresssource(self.source, prog)
|
||||
newnode = self.dest.putcommit(files, copies, parents, commit,
|
||||
source, self.map, full, cleanp2)
|
||||
source.close()
|
||||
self.source.converted(rev, newnode)
|
||||
self.map[rev] = newnode
|
||||
|
||||
@ -507,6 +505,8 @@ class converter(object):
|
||||
c = None
|
||||
|
||||
self.ui.status(_("converting...\n"))
|
||||
with progress.bar(self.ui, _('converting'), _('revisions'),
|
||||
len(t)) as prog:
|
||||
for i, c in enumerate(t):
|
||||
num -= 1
|
||||
desc = self.commitcache[c].desc
|
||||
@ -517,10 +517,8 @@ class converter(object):
|
||||
# uses is 'utf-8'
|
||||
self.ui.status("%d %s\n" % (num, recode(desc)))
|
||||
self.ui.note(_("source: %s\n") % recode(c))
|
||||
self.ui.progress(_('converting'), i, unit=_('revisions'),
|
||||
total=len(t))
|
||||
prog.value = i
|
||||
self.copy(c)
|
||||
self.ui.progress(_('converting'), None)
|
||||
|
||||
if not self.ui.configbool('convert', 'skiptags'):
|
||||
tags = self.source.gettags()
|
||||
|
@ -12,6 +12,7 @@ from mercurial.i18n import _
|
||||
from mercurial import (
|
||||
encoding,
|
||||
error,
|
||||
progress,
|
||||
pycompat,
|
||||
util,
|
||||
vfs as vfsmod,
|
||||
@ -745,9 +746,10 @@ class svn_source(converter_source):
|
||||
self.module = new_module
|
||||
self.reparent(self.module)
|
||||
|
||||
with progress.bar(self.ui, _('scanning paths'), _('paths'),
|
||||
len(paths)) as prog:
|
||||
for i, (path, ent) in enumerate(paths):
|
||||
self.ui.progress(_('scanning paths'), i, item=path,
|
||||
total=len(paths), unit=_('paths'))
|
||||
prog.value = (i, path)
|
||||
entrypath = self.getrelpath(path)
|
||||
|
||||
kind = self._checkpath(entrypath, revnum)
|
||||
@ -780,7 +782,8 @@ class svn_source(converter_source):
|
||||
children = self._iterfiles(oroot, prevnum)
|
||||
for childpath in children:
|
||||
childpath = childpath.replace(oroot, nroot)
|
||||
childpath = self.getrelpath("/" + childpath, pmodule)
|
||||
childpath = self.getrelpath("/" + childpath,
|
||||
pmodule)
|
||||
if childpath:
|
||||
removed.add(self.recode(childpath))
|
||||
else:
|
||||
@ -824,7 +827,8 @@ class svn_source(converter_source):
|
||||
continue
|
||||
self.ui.debug("mark %s came from %s:%d\n"
|
||||
% (path, copyfrompath, ent.copyfrom_rev))
|
||||
children = self._iterfiles(ent.copyfrom_path, ent.copyfrom_rev)
|
||||
children = self._iterfiles(ent.copyfrom_path,
|
||||
ent.copyfrom_rev)
|
||||
for childpath in children:
|
||||
childpath = self.getrelpath("/" + childpath, pmodule)
|
||||
if not childpath:
|
||||
@ -833,7 +837,6 @@ class svn_source(converter_source):
|
||||
copytopath = self.getrelpath(copytopath)
|
||||
copies[self.recode(copytopath)] = self.recode(childpath)
|
||||
|
||||
self.ui.progress(_('scanning paths'), None)
|
||||
changed.update(removed)
|
||||
return (list(changed), removed, copies)
|
||||
|
||||
|
@ -58,6 +58,7 @@ Remove the directory, then try to replace it with a file (issue754)
|
||||
$ hg convert --config extensions.progress= --config progress.assume-tty=1 \
|
||||
> --config progress.delay=0 --config progress.changedelay=0 \
|
||||
> --config progress.refresh=0 --config progress.width=60 \
|
||||
> --config progress.debug=1 \
|
||||
> --config progress.format='topic, bar, number' --datesort git-repo
|
||||
\r (no-eol) (esc)
|
||||
scanning [======> ] 1/6\r (no-eol) (esc)
|
||||
@ -178,6 +179,7 @@ full conversion
|
||||
> --config extensions.progress= --config progress.assume-tty=1 \
|
||||
> --config progress.delay=0 --config progress.changedelay=0 \
|
||||
> --config progress.refresh=0 --config progress.width=60 \
|
||||
> --config progress.debug=1 \
|
||||
> --config progress.format='topic, bar, number'
|
||||
\r (no-eol) (esc)
|
||||
scanning [===> ] 1/9\r (no-eol) (esc)
|
||||
|
@ -161,6 +161,7 @@ Test convert progress bar
|
||||
> format = topic bar number
|
||||
> refresh = 0
|
||||
> width = 60
|
||||
> debug = true
|
||||
> EOF
|
||||
|
||||
$ hg convert svn-repo hg-progress
|
||||
|
Loading…
Reference in New Issue
Block a user