From 8ec7fc968784a77e302ae79053e817710f0237d4 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Sat, 24 Aug 2013 09:07:13 -0700 Subject: [PATCH] emerge --sync: discard timestamp for partial sync --- pym/_emerge/actions.py | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py index 52ceba49e..bb6e49690 100644 --- a/pym/_emerge/actions.py +++ b/pym/_emerge/actions.py @@ -2533,8 +2533,31 @@ def _sync_repo(emerge_config, repo): elif (servertimestamp == 0) or (servertimestamp > mytimestamp): # actual sync mycommand = rsynccommand + [dosyncuri+"/", repo.location] - exitcode = portage.process.spawn(mycommand, - **portage._native_kwargs(spawn_kwargs)) + exitcode = None + try: + exitcode = portage.process.spawn(mycommand, + **portage._native_kwargs(spawn_kwargs)) + finally: + if exitcode is None: + # interrupted + exitcode = 128 + signal.SIGINT + + # 0 Success + # 1 Syntax or usage error + # 2 Protocol incompatibility + # 5 Error starting client-server protocol + # 35 Timeout waiting for daemon connection + if exitcode not in (0, 1, 2, 5, 35): + # If the exit code is not among those listed above, + # then we may have a partial/inconsistent sync state, + # so our previously read timestamp as well as the + # corresponding file can no longer be trusted. + mytimestamp = 0 + try: + os.unlink(servertimestampfile) + except OSError: + pass + if exitcode in [0,1,3,4,11,14,20,21]: break elif exitcode in [1,3,4,11,14,20,21]: -- 2.26.2