diff options
-rwxr-xr-x | bin/emerge | 93 |
1 files changed, 43 insertions, 50 deletions
diff --git a/bin/emerge b/bin/emerge index 330e8bc6f..471f8336b 100755 --- a/bin/emerge +++ b/bin/emerge @@ -3784,32 +3784,23 @@ def action_sync(settings, trees, mtimedb, myopts, myaction): rsync_opts.append("--bwlimit=%s" % \ settings["RSYNC_RATELIMIT"]) - servertimestampdir = settings.depcachedir+"/" - servertimestampfile = settings.depcachedir+"/timestamp.chk" - tmpservertimestampdir = settings["PORTAGE_TMPDIR"]+"/" - tmpservertimestampfile = settings["PORTAGE_TMPDIR"]+"/timestamp.chk" - - # We only use the backup if a timestamp exists in the portdir. - content=None - if os.path.exists(myportdir+"/metadata/timestamp.chk"): - content=portage.grabfile(servertimestampfile) - if (not content): - content=portage.grabfile(myportdir+"/metadata/timestamp.chk") - - if (content): + # Real local timestamp file. + servertimestampfile = os.path.join( + myportdir, "metadata", "timestamp.chk") + # Temporary file for remote server timestamp comparison. + tmpservertimestampfile = os.path.join( + settings["PORTAGE_TMPDIR"], "timestamp.chk") + + content = portage_util.grabfile(servertimestampfile) + mytimestamp = 0 + if content: try: - mytimestamp=time.mktime(time.strptime(content[0], "%a, %d %b %Y %H:%M:%S +0000")) - except ValueError: - mytimestamp=0 - else: - mytimestamp=0 - - if not os.path.exists(servertimestampdir): - os.mkdir(servertimestampdir) - os.chown(servertimestampdir, os.getuid(), portage.portage_gid) - os.chmod(servertimestampdir, 02775) + mytimestamp = time.mktime(time.strptime(content[0], + "%a, %d %b %Y %H:%M:%S +0000")) + except OverflowError, ValueError: + pass + del content - #exitcode=0 try: if settings.has_key("RSYNC_RETRIES"): print yellow("WARNING:")+" usage of RSYNC_RETRIES is deprecated, use PORTAGE_RSYNC_RETRIES instead" @@ -3884,7 +3875,7 @@ def action_sync(settings, trees, mtimedb, myopts, myaction): (retries,maxretries,dosyncuri)) print "\n\n>>> Starting retry %d of %d with %s" % (retries,maxretries,dosyncuri) - if "--quiet" not in myopts: + if mytimestamp != 0 and "--quiet" not in myopts: print ">>> Checking server timestamp ..." rsynccommand = " ".join(["/usr/bin/rsync", " ".join(rsync_opts), @@ -3893,18 +3884,32 @@ def action_sync(settings, trees, mtimedb, myopts, myaction): if "--debug" in myopts: print rsynccommand - mycommand = " ".join([rsynccommand, - dosyncuri + "/metadata/timestamp.chk", - tmpservertimestampdir]) - exitcode=portage.spawn(mycommand,settings,free=1) - if (exitcode==0): + exitcode = os.EX_OK + servertimestamp = 0 + if mytimestamp != 0: + mycommand = rsynccommand.split() + mycommand.append(dosyncuri.rstrip("/") + \ + "/metadata/timestamp.chk") + mycommand.append(tmpservertimestampfile) + import portage_exec try: - servertimestamp = time.mktime(time.strptime(portage.grabfile(tmpservertimestampfile)[0], "%a, %d %b %Y %H:%M:%S +0000")) - except SystemExit, e: - raise # Needed else can't exit - except: - servertimestamp = 0 - + exitcode = portage_exec.spawn( + mycommand, env=settings.environ()) + content = portage.grabfile(tmpservertimestampfile) + if content: + try: + servertimestamp = time.mktime(time.strptime( + content[0], "%a, %d %b %Y %H:%M:%S +0000")) + except OverflowError, ValueError: + pass + del content + finally: + try: + os.unlink(tmpservertimestampfile) + except OSError: + pass + del mycommand + if exitcode == os.EX_OK: if (servertimestamp != 0) and (servertimestamp == mytimestamp): emergelog(xterm_titles, ">>> Cancelling sync -- Already current.") @@ -3913,7 +3918,7 @@ def action_sync(settings, trees, mtimedb, myopts, myaction): print ">>> Timestamps on the server and in the local repository are the same." print ">>> Cancelling all further sync action. You are already up to date." print ">>>" - print ">>> In order to force sync, remove '%s'." % tmpservertimestampfile + print ">>> In order to force sync, remove '%s'." % servertimestampfile print ">>>" print sys.exit(0) @@ -3924,7 +3929,7 @@ def action_sync(settings, trees, mtimedb, myopts, myaction): print ">>>" print ">>> SERVER OUT OF DATE: %s" % dosyncuri print ">>>" - print ">>> In order to force sync, remove '%s'." % tmpservertimestampfile + print ">>> In order to force sync, remove '%s'." % servertimestampfile print ">>>" print elif (servertimestamp == 0) or (servertimestamp > mytimestamp): @@ -3949,18 +3954,6 @@ def action_sync(settings, trees, mtimedb, myopts, myaction): if (exitcode==0): emergelog(xterm_titles, "=== Sync completed with %s" % dosyncuri) - # save timestamp.chk for next timestamp check. - try: - if tmpservertimestampfile is not None: - portage.movefile(tmpservertimestampfile, - servertimestampfile, mysettings=settings) - except SystemExit, e: - raise - except Exception, e: - portage.writemsg("!!! Failed to save current timestamp.\n", - noiselevel=-1) - portage.writemsg("!!! %s\n" % str(e), noiselevel=-1) - del e elif (exitcode>0): print if exitcode==1: |