mirror of
https://gerrit.googlesource.com/git-repo
synced 2024-12-21 07:16:21 +00:00
sync: merge project updates with status bar
The current sync output displays "Fetching project" and "Checking out project" messages and progress bar updates independently leading to a lot of spam. Lets merge these periodic outputs with the status bar to get a little bit tighter output in the normal case. This doesn't solve all our problems, but gets us closer. Bug: https://crbug.com/gerrit/11293 Change-Id: Icd627830af4dd934a9355b7ace754b56dc96cfef Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/244934 Reviewed-by: David Pursehouse <dpursehouse@collab.net> Tested-by: Mike Frysinger <vapier@google.com>
This commit is contained in:
parent
b610b850ac
commit
3538dd224d
@ -39,7 +39,7 @@ class Progress(object):
|
|||||||
self._print_newline = print_newline
|
self._print_newline = print_newline
|
||||||
self._always_print_percentage = always_print_percentage
|
self._always_print_percentage = always_print_percentage
|
||||||
|
|
||||||
def update(self, inc=1):
|
def update(self, inc=1, msg=''):
|
||||||
self._done += inc
|
self._done += inc
|
||||||
|
|
||||||
if _NOT_TTY or IsTrace():
|
if _NOT_TTY or IsTrace():
|
||||||
@ -62,12 +62,13 @@ class Progress(object):
|
|||||||
|
|
||||||
if self._lastp != p or self._always_print_percentage:
|
if self._lastp != p or self._always_print_percentage:
|
||||||
self._lastp = p
|
self._lastp = p
|
||||||
sys.stderr.write('%s\r%s: %3d%% (%d%s/%d%s)%s' % (
|
sys.stderr.write('%s\r%s: %3d%% (%d%s/%d%s)%s%s%s' % (
|
||||||
CSI_ERASE_LINE,
|
CSI_ERASE_LINE,
|
||||||
self._title,
|
self._title,
|
||||||
p,
|
p,
|
||||||
self._done, self._units,
|
self._done, self._units,
|
||||||
self._total, self._units,
|
self._total, self._units,
|
||||||
|
' ' if msg else '', msg,
|
||||||
"\n" if self._print_newline else ""))
|
"\n" if self._print_newline else ""))
|
||||||
sys.stderr.flush()
|
sys.stderr.flush()
|
||||||
|
|
||||||
|
@ -315,9 +315,6 @@ later is required to fix a server side protocol bug.
|
|||||||
# We'll set to true once we've locked the lock.
|
# We'll set to true once we've locked the lock.
|
||||||
did_lock = False
|
did_lock = False
|
||||||
|
|
||||||
if not opt.quiet:
|
|
||||||
print('Fetching project %s' % project.name)
|
|
||||||
|
|
||||||
# Encapsulate everything in a try/except/finally so that:
|
# Encapsulate everything in a try/except/finally so that:
|
||||||
# - We always set err_event in the case of an exception.
|
# - We always set err_event in the case of an exception.
|
||||||
# - We always make sure we unlock the lock if we locked it.
|
# - We always make sure we unlock the lock if we locked it.
|
||||||
@ -350,7 +347,7 @@ later is required to fix a server side protocol bug.
|
|||||||
raise _FetchError()
|
raise _FetchError()
|
||||||
|
|
||||||
fetched.add(project.gitdir)
|
fetched.add(project.gitdir)
|
||||||
pm.update()
|
pm.update(msg=project.name)
|
||||||
except _FetchError:
|
except _FetchError:
|
||||||
pass
|
pass
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@ -371,7 +368,6 @@ later is required to fix a server side protocol bug.
|
|||||||
fetched = set()
|
fetched = set()
|
||||||
lock = _threading.Lock()
|
lock = _threading.Lock()
|
||||||
pm = Progress('Fetching projects', len(projects),
|
pm = Progress('Fetching projects', len(projects),
|
||||||
print_newline=not(opt.quiet),
|
|
||||||
always_print_percentage=opt.quiet)
|
always_print_percentage=opt.quiet)
|
||||||
|
|
||||||
objdir_project_map = dict()
|
objdir_project_map = dict()
|
||||||
@ -461,9 +457,6 @@ later is required to fix a server side protocol bug.
|
|||||||
# We'll set to true once we've locked the lock.
|
# We'll set to true once we've locked the lock.
|
||||||
did_lock = False
|
did_lock = False
|
||||||
|
|
||||||
if not opt.quiet:
|
|
||||||
print('Checking out project %s' % project.name)
|
|
||||||
|
|
||||||
# Encapsulate everything in a try/except/finally so that:
|
# Encapsulate everything in a try/except/finally so that:
|
||||||
# - We always set err_event in the case of an exception.
|
# - We always set err_event in the case of an exception.
|
||||||
# - We always make sure we unlock the lock if we locked it.
|
# - We always make sure we unlock the lock if we locked it.
|
||||||
@ -474,11 +467,11 @@ later is required to fix a server side protocol bug.
|
|||||||
try:
|
try:
|
||||||
try:
|
try:
|
||||||
project.Sync_LocalHalf(syncbuf, force_sync=opt.force_sync)
|
project.Sync_LocalHalf(syncbuf, force_sync=opt.force_sync)
|
||||||
success = syncbuf.Finish()
|
|
||||||
|
|
||||||
# Lock around all the rest of the code, since printing, updating a set
|
# Lock around all the rest of the code, since printing, updating a set
|
||||||
# and Progress.update() are not thread safe.
|
# and Progress.update() are not thread safe.
|
||||||
lock.acquire()
|
lock.acquire()
|
||||||
|
success = syncbuf.Finish()
|
||||||
did_lock = True
|
did_lock = True
|
||||||
|
|
||||||
if not success:
|
if not success:
|
||||||
@ -487,7 +480,7 @@ later is required to fix a server side protocol bug.
|
|||||||
file=sys.stderr)
|
file=sys.stderr)
|
||||||
raise _CheckoutError()
|
raise _CheckoutError()
|
||||||
|
|
||||||
pm.update()
|
pm.update(msg=project.name)
|
||||||
except _CheckoutError:
|
except _CheckoutError:
|
||||||
pass
|
pass
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@ -527,7 +520,7 @@ later is required to fix a server side protocol bug.
|
|||||||
syncjobs = 1
|
syncjobs = 1
|
||||||
|
|
||||||
lock = _threading.Lock()
|
lock = _threading.Lock()
|
||||||
pm = Progress('Syncing work tree', len(all_projects))
|
pm = Progress('Checking out projects', len(all_projects))
|
||||||
|
|
||||||
threads = set()
|
threads = set()
|
||||||
sem = _threading.Semaphore(syncjobs)
|
sem = _threading.Semaphore(syncjobs)
|
||||||
|
Loading…
Reference in New Issue
Block a user