sapling/eden/cli/buck.py
Wez Furlong 8a48fcccaa refactor and split out some cli functions
Summary:
This moves some things around in order to facilitate adding the migration
command in a separate file.

Reviewed By: bolinfest

Differential Revision: D7946842

fbshipit-source-id: 54a554fb02e83a12f1d626b81377bc042fac41aa
2018-05-10 13:49:44 -07:00

63 lines
2.3 KiB
Python

#!/usr/bin/env python3
#
# Copyright (c) 2016-present, Facebook, Inc.
# All rights reserved.
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree. An additional grant
# of patent rights can be found in the PATENTS file in the same directory.
import glob
import os
import subprocess
from typing import List
def find_buck_projects_in_repo(path: str) -> List[str]:
# This is a largely Facebook specific way to discover the likely
# buck project locations in our repos.
# While fbsource has a top level buckconfig, we don't really use
# it in our projects today. Instead, our projects tend to have
# their own configuration files one level down. This glob()
# finds those directories for us.
buck_configs = glob.glob(f"{path}/*/.buckconfig")
projects = [os.path.dirname(config) for config in buck_configs]
if os.path.isfile(f"{path}/.buckconfig"):
projects.append(path)
return projects
def stop_buckd_for_path(path: str) -> None:
print(f"Stopping buck in {path}...")
subprocess.run(
# Using BUCKVERSION=last here to avoid triggering a download
# of a new version of buck just to kill off buck.
# This is specific to Facebook's deployment of buck, and has
# no impact on the behavior of the opensource buck executable.
["env", "BUCKVERSION=last", "buck", "kill"],
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
cwd=path,
)
def stop_buckd_for_repo(path: str) -> None:
"""Stop the major buckd instances that are likely to be running for path"""
for project in find_buck_projects_in_repo(path):
stop_buckd_for_path(project)
def buck_clean_repo(path: str) -> None:
for project in find_buck_projects_in_repo(path):
print(f"Cleaning buck in {project}...")
subprocess.run(
# Using BUCKVERSION=last here to avoid triggering a download
# of a new version of buck just to remove some dirs
# This is specific to Facebook's deployment of buck, and has
# no impact on the behavior of the opensource buck executable.
["env", "NO_BUCKD=true", "BUCKVERSION=last", "buck", "clean"],
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
cwd=project,
)