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

Unified Diff: sky/tools/missing_from_gn

Issue 675283002: Teach missing_from_gn about gn 'inputs' (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years, 2 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 | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/tools/missing_from_gn
diff --git a/sky/tools/missing_from_gn b/sky/tools/missing_from_gn
index 262e20b08528688b26b2e216f2fed2c12bd69638..d8d6ebe6073e3a57689fd414630405596d09a531 100755
--- a/sky/tools/missing_from_gn
+++ b/sky/tools/missing_from_gn
@@ -11,49 +11,53 @@ import logging
ROOT_DIR = os.path.abspath(os.path.join(__file__, os.pardir, os.pardir,
os.pardir))
-def dependencies():
- args = [
- 'gn',
- 'desc',
- os.path.join('out', 'Debug'),
- '//sky/engine/public:blink',
- 'deps', '--all'
- ]
- targets = subprocess.check_output(args).splitlines()
- return map(str.strip, targets)
+# Where to cache GN results (they're expensive to compute).
+GN_CACHE_PATH = os.path.abspath(os.path.join(ROOT_DIR, 'in_gn.txt'))
+
+def stripped_lines_from_command(cmd, cwd=None):
+ lines = subprocess.check_output(cmd, cwd=cwd).splitlines()
+ return map(str.strip, lines)
-def sources(target):
- print target
- args = [
- 'gn',
- 'desc',
+
+def gn_desc(*args):
+ # GN doesn't understand absolute paths yet, so use a relative BUILD_DIR
+ # and pass ROOT_DIR as the CWD.
+ cmd = [
+ 'gn', 'desc',
brettw 2014/10/24 19:58:47 For "desc" you will have to specify a build direct
eseidel 2014/10/24 20:42:59 Great. Will do in the next patch! Thanks!
+ # Hard-coding Debug for now:
os.path.join('out', 'Debug'),
- target,
- 'sources'
- ]
- sources = subprocess.check_output(args).splitlines()
- return map(lambda s: s[2:], map(str.strip, sources))
+ ] + list(args)
+ return stripped_lines_from_command(cmd, cwd=ROOT_DIR)
+
+
+def targets_under(target):
+ targets = gn_desc(target, 'deps', '--all')
+ return filter(lambda s: s.startswith(target), targets)
+
+
+def used_files(target):
+ logging.info(target)
+ sources = map(lambda s: s[2:], gn_desc(target, 'sources'))
+ inputs = map(lambda s: s[2:], gn_desc(target, 'inputs'))
+ return sources + inputs
def find_on_disk(path):
# FIXME: Use os.walk and do fancier ignoring.
- find_output = subprocess.check_output(['find', path, '-type', 'f'])
- return map(str.strip, find_output.splitlines())
+ return stripped_lines_from_command(['find', path, '-type', 'f'])
def main():
- logging.basicConfig()
+ logging.basicConfig(level=logging.INFO)
- os.chdir(ROOT_DIR)
- if os.path.exists('in_gn.txt'):
- logging.info('Using cached GN list: %s' % os.path.abspath('in_gn.txt'))
- in_gn = set(map(str.strip, open('in_gn.txt').readlines()))
+ if os.path.exists(GN_CACHE_PATH):
+ logging.info('Using cached GN list: %s' % GN_CACHE_PATH)
+ in_gn = set(map(str.strip, open(GN_CACHE_PATH).readlines()))
else:
- logging.info('No gn cache found, rebuilding: %s' % os.abspath('in_gn.txt'))
- targets = filter(lambda s: '//sky' in s, dependencies())
- in_gn = set(sum(map(sources, targets), []))
- open('in_gn.txt', 'w+').write('\n'.join(in_gn))
+ logging.info('No gn cache found, rebuilding: %s' % GN_CACHE_PATH)
+ in_gn = set(sum(map(used_files, targets_under('//sky')), []))
+ open(GN_CACHE_PATH, 'w+').write('\n'.join(in_gn))
on_disk = set(find_on_disk('sky/engine'))
# Ignore web/tests and bindings/tests
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698