in src/com/facebook/buck/parser/buck.py [0:0]
def main():
parser = optparse.OptionParser()
parser.add_option('--project_root', action='store', type='string', dest='project_root')
parser.add_option('--include', action='append', dest='include')
parser.add_option('--ignore_path', action='append', dest='ignore_paths')
parser.add_option('--server', action='store_true', dest='server',
help='Invoke as a server to parse individual BUCK files on demand.')
(options, args) = parser.parse_args()
# Even though project_root is absolute path, it may not be concise. For example, it might be
# like "C:\project\.\rule". We normalize it in order to make it consistent with ignore_paths.
project_root = os.path.abspath(options.project_root)
build_files = []
if args:
# The user has specified which build files to parse.
build_files = args
elif not options.server:
# Find all of the build files in the project root. Symlinks will not be traversed.
# Search must be done top-down so that directory filtering works as desired.
# options.ignore_paths may contain /, which is needed to be normalized in order to do string
# pattern matching.
ignore_paths = [os.path.abspath(os.path.join(project_root, d))
for d in options.ignore_paths or []]
build_files = []
for dirpath, dirnames, filenames in symlink_aware_walk(project_root):
# Do not walk directories that contain generated/non-source files.
# All modifications to dirnames must occur in-place.
dirnames[:] = [d for d in dirnames if not (os.path.join(dirpath, d) in ignore_paths)]
if BUILD_RULES_FILE_NAME in filenames:
build_file = os.path.join(dirpath, BUILD_RULES_FILE_NAME)
build_files.append(build_file)
buildFileProcessor = BuildFileProcessor(project_root, options.include or [], options.server)
for build_file in build_files:
buildFileProcessor.process(build_file)
if options.server:
# Apparently for ... in sys.stdin doesn't work with Jython when a custom stdin is
# provided by the caller in Java-land. Claims that sys.stdin is a filereader which doesn't
# offer an iterator.
for build_file in iter(sys.stdin.readline, ''):
buildFileProcessor.process(build_file.rstrip())