From 2d009f5bef5ce825d78d414cf41657f2e0e4d2f2 Mon Sep 17 00:00:00 2001 From: Mike Hommey Date: Thu, 15 Aug 2013 23:45:07 +0900 Subject: [PATCH] Bug 904329 - Fix rebuild_check.py when files are removed. r=gps --- config/rebuild_check.py | 24 +++++++++++++++++++----- js/src/config/rebuild_check.py | 24 +++++++++++++++++++----- 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/config/rebuild_check.py b/config/rebuild_check.py index d4c598a774bd..a6c3dc87acd8 100644 --- a/config/rebuild_check.py +++ b/config/rebuild_check.py @@ -3,25 +3,39 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. import os +import errno def mtime(path): - return os.stat(path).st_mtime + try: + return os.stat(path).st_mtime + except OSError as e: + if e.errno == errno.ENOENT: + return -1 + raise def rebuild_check(args): target = args[0] deps = args[1:] - if not os.path.exists(target): + t = mtime(target) + if t < 0: print target return - t = mtime(target) newer = [] + removed = [] for dep in deps: - if mtime(dep) > t: + deptime = mtime(dep) + if deptime < 0: + removed.append(dep) + elif mtime(dep) > t: newer.append(dep) - if newer: + if newer and removed: + print 'Rebuilding %s because %s changed and %s was removed' % (target, ', '.join(newer), ', '.join(removed)) + elif newer: print 'Rebuilding %s because %s changed' % (target, ', '.join(newer)) + elif removed: + print 'Rebuilding %s because %s was removed' % (target, ', '.join(removed)) else: print 'Rebuilding %s for an unknown reason' % target diff --git a/js/src/config/rebuild_check.py b/js/src/config/rebuild_check.py index d4c598a774bd..a6c3dc87acd8 100644 --- a/js/src/config/rebuild_check.py +++ b/js/src/config/rebuild_check.py @@ -3,25 +3,39 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. import os +import errno def mtime(path): - return os.stat(path).st_mtime + try: + return os.stat(path).st_mtime + except OSError as e: + if e.errno == errno.ENOENT: + return -1 + raise def rebuild_check(args): target = args[0] deps = args[1:] - if not os.path.exists(target): + t = mtime(target) + if t < 0: print target return - t = mtime(target) newer = [] + removed = [] for dep in deps: - if mtime(dep) > t: + deptime = mtime(dep) + if deptime < 0: + removed.append(dep) + elif mtime(dep) > t: newer.append(dep) - if newer: + if newer and removed: + print 'Rebuilding %s because %s changed and %s was removed' % (target, ', '.join(newer), ', '.join(removed)) + elif newer: print 'Rebuilding %s because %s changed' % (target, ', '.join(newer)) + elif removed: + print 'Rebuilding %s because %s was removed' % (target, ', '.join(removed)) else: print 'Rebuilding %s for an unknown reason' % target