#!/usr/bin/env python3
# Copyright 2016 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Runs gn format on all of Cobalt's gn files."""

import sys
import os
# Ensure that this file can import from cobalt root even if run as a script.
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

import subprocess

from tools import get_files

THIS_DIR = os.path.dirname(__file__)
SRC_ROOT_DIR = os.path.abspath(os.path.join(THIS_DIR, os.pardir))


def main(only_directories=[], all_files=False):
  status = 0
  files_to_lint = get_files.files_to_lint(('.gn', '.gni'),
                                          only_directories=only_directories,
                                          all_files=all_files)

  for f in files_to_lint:
    try:
      subprocess.check_call(['gn', 'format', '--dry-run', f])
    except:
      print('%(file)s: Does not match expected format. '
            'Please run `sysroot/bin/gn format %(file)s`' %
            {'file': os.path.relpath(f, SRC_ROOT_DIR)})
      status += 1

  return status


if __name__ == '__main__':
  exit(main())
