Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Unified Diff: tools/mb/mb.py

Issue 1338123002: Make MB clobber build directories when switching between GYP and GN. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | tools/mb/mb_unittest.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/mb/mb.py
diff --git a/tools/mb/mb.py b/tools/mb/mb.py
index f1a223ea373a4142c5b2479695954150a5e9698b..57054e9ea3fbfe0240c0e6d8c89b8eb886dda5e1 100755
--- a/tools/mb/mb.py
+++ b/tools/mb/mb.py
@@ -135,6 +135,9 @@ class MetaBuildWrapper(object):
def CmdGen(self):
vals = self.GetConfig()
+
+ self.ClobberIfNeeded(vals)
+
if vals['type'] == 'gn':
return self.RunGNGen(vals)
if vals['type'] == 'gyp':
@@ -290,7 +293,7 @@ class MetaBuildWrapper(object):
'type': None,
'gn_args': [],
'gyp_config': [],
- 'gyp_defines': [],
+ 'gyp_defines': '',
Dirk Pranke 2015/09/12 00:49:41 this was a bug caught by the new unit tests.
'gyp_crosscompile': False,
}
@@ -328,6 +331,33 @@ class MetaBuildWrapper(object):
self.FlattenMixins(mixin_vals['mixins'], vals, visited)
return vals
+ def ClobberIfNeeded(self, vals):
+ path = self.args.path[0]
+ build_dir = self.ToAbsPath(path)
+ mb_type_path = os.path.join(build_dir, 'mb_type')
+ needs_clobber = False
+ new_mb_type = vals['type']
+ if self.Exists(build_dir):
+ if self.Exists(mb_type_path):
+ old_mb_type = self.ReadFile(mb_type_path)
+ if old_mb_type != new_mb_type:
+ self.Print("Build type mismatch: was %s, will be %s, clobbering %s" %
+ (old_mb_type, new_mb_type, path))
+ needs_clobber = True
+ else:
+ # There is no 'mb_type' file in the build directory, so this probably
+ # means that the prior build(s) were not done through mb, and we
+ # have no idea if this was a GYP build or a GN build. Clobber it
+ # to be safe.
+ self.Print("%s/mb_type missing, clobbering to be safe" % path)
+ needs_clobber = True
+
+ if needs_clobber:
+ self.RemoveDirectory(build_dir)
+
+ self.MaybeMakeDirectory(build_dir)
+ self.WriteFile(mb_type_path, new_mb_type)
+
def RunGNGen(self, vals):
path = self.args.path[0]
@@ -821,6 +851,17 @@ class MetaBuildWrapper(object):
# This function largely exists so it can be overriden for testing.
os.remove(path)
+ def RemoveDirectory(self, abs_path):
+ if sys.platform == 'win32':
+ # In other places in chromium, we often have to retry this command
brettw 2015/09/12 02:08:25 But doesn't shutil still work? I don't see the nee
+ # because we're worried about other processes still holding on to
+ # file handles, but when MB is invoked, it will be early enough in the
+ # build that their should be no other processes to interfere. We
+ # can change this if need be.
+ self.Run(['cmd.exe', '/c', 'rmdir', '/q', '/s', abs_path])
+ else:
+ shutil.rmtree(abs_path, ignore_errors=True)
+
def TempFile(self, mode='w'):
# This function largely exists so it can be overriden for testing.
return tempfile.NamedTemporaryFile(mode=mode, delete=False)
« no previous file with comments | « no previous file | tools/mb/mb_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698