Search in sources :

Example 6 with PathOrGlobMatcher

use of com.facebook.buck.io.PathOrGlobMatcher in project buck by facebook.

the class WatchmanWatcherTest method watchmanQueryWithExcludeGlobsAddsExpressionToQuery.

@Test
public void watchmanQueryWithExcludeGlobsAddsExpressionToQuery() {
    WatchmanQuery query = WatchmanWatcher.createQuery(ProjectWatch.of("/path/to/repo", Optional.empty()), ImmutableSet.of(new PathOrGlobMatcher("*.pbxproj")), ImmutableSet.of(Watchman.Capability.DIRNAME));
    assertEquals(WatchmanQuery.of("/path/to/repo", ImmutableMap.of("expression", ImmutableList.of("not", ImmutableList.of("anyof", ImmutableList.of("type", "d"), ImmutableList.of("match", "*.pbxproj", "wholename", ImmutableMap.<String, Object>of("includedotfiles", true)))), "empty_on_fresh_instance", true, "fields", ImmutableList.of("name", "exists", "new"))), query);
}
Also used : WatchmanQuery(com.facebook.buck.io.WatchmanQuery) PathOrGlobMatcher(com.facebook.buck.io.PathOrGlobMatcher) EasyMock.anyObject(org.easymock.EasyMock.anyObject) Test(org.junit.Test)

Example 7 with PathOrGlobMatcher

use of com.facebook.buck.io.PathOrGlobMatcher in project buck by facebook.

the class Project method addRootExcludes.

@VisibleForTesting
static void addRootExcludes(SerializableModule module, @Nullable BuildRule buildRule, ProjectFilesystem projectFilesystem) {
    // If in the root of the project, specify ignored paths.
    if (buildRule != null && buildRule.getBuildTarget().isInCellRoot()) {
        for (Path path : FluentIterable.from(projectFilesystem.getIgnorePaths()).filter(input -> input.getType() == PathOrGlobMatcher.Type.PATH).transform(PathOrGlobMatcher::getPath)) {
            // only the appropriate subfolders of buck-out instead.
            if (projectFilesystem.getBuckPaths().getBuckOut().equals(path)) {
                addRootExclude(module, projectFilesystem.getBuckPaths().getScratchDir());
                addRootExclude(module, projectFilesystem.getBuckPaths().getLogDir());
                /**
           * Directory in buck-out which holds temporary files. This should be explicitly excluded
           * from the IntelliJ project because it causes IntelliJ to try and index temporary files
           * that buck creates whilst a build it taking place.
           */
                addRootExclude(module, projectFilesystem.getBuckPaths().getTmpDir());
            } else {
                addRootExclude(module, path);
            }
        }
        module.isRootModule = true;
    }
}
Also used : Path(java.nio.file.Path) PathSourcePath(com.facebook.buck.rules.PathSourcePath) SourcePath(com.facebook.buck.rules.SourcePath) AbstractBreadthFirstTraversal(com.facebook.buck.graph.AbstractBreadthFirstTraversal) JsonProperty(com.fasterxml.jackson.annotation.JsonProperty) LIBRARY(com.facebook.buck.rules.BuildableProperties.Kind.LIBRARY) BuildFileTree(com.facebook.buck.model.BuildFileTree) SortedSet(java.util.SortedSet) KeystoreProperties(com.facebook.buck.android.KeystoreProperties) ProjectConfig(com.facebook.buck.rules.ProjectConfig) JavaBinary(com.facebook.buck.jvm.java.JavaBinary) SourceRoot(com.facebook.buck.rules.SourceRoot) JavaLibrary(com.facebook.buck.jvm.java.JavaLibrary) AndroidPrebuiltAar(com.facebook.buck.android.AndroidPrebuiltAar) Ansi(com.facebook.buck.util.Ansi) AndroidResource(com.facebook.buck.android.AndroidResource) ProjectFilesystem(com.facebook.buck.io.ProjectFilesystem) ProcessExecutor(com.facebook.buck.util.ProcessExecutor) FluentIterable(com.google.common.collect.FluentIterable) SourcePathResolver(com.facebook.buck.rules.SourcePathResolver) JavaTest(com.facebook.buck.jvm.java.JavaTest) Map(java.util.Map) AndroidPackageableCollection(com.facebook.buck.android.AndroidPackageableCollection) SerializableAndroidAar.createSerializableAndroidAar(com.facebook.buck.jvm.java.intellij.SerializableAndroidAar.createSerializableAndroidAar) Splitter(com.google.common.base.Splitter) Path(java.nio.file.Path) JavaPackageFinder(com.facebook.buck.jvm.core.JavaPackageFinder) Verbosity(com.facebook.buck.util.Verbosity) ImmutableSet(com.google.common.collect.ImmutableSet) ObjectWriter(com.fasterxml.jackson.databind.ObjectWriter) ImmutableMap(com.google.common.collect.ImmutableMap) AndroidLibraryGraphEnhancer(com.facebook.buck.android.AndroidLibraryGraphEnhancer) Set(java.util.Set) AndroidBinary(com.facebook.buck.android.AndroidBinary) ProcessExecutorParams(com.facebook.buck.util.ProcessExecutorParams) PathOrGlobMatcher(com.facebook.buck.io.PathOrGlobMatcher) BuildTarget(com.facebook.buck.model.BuildTarget) Sets(com.google.common.collect.Sets) List(java.util.List) Writer(java.io.Writer) PathSourcePath(com.facebook.buck.rules.PathSourcePath) Optional(java.util.Optional) PACKAGING(com.facebook.buck.rules.BuildableProperties.Kind.PACKAGING) ShellStep(com.facebook.buck.shell.ShellStep) Joiner(com.google.common.base.Joiner) Iterables(com.google.common.collect.Iterables) SourcePath(com.facebook.buck.rules.SourcePath) AndroidLibrary(com.facebook.buck.android.AndroidLibrary) BuildRule(com.facebook.buck.rules.BuildRule) ExecutionContext(com.facebook.buck.step.ExecutionContext) HashSet(java.util.HashSet) Lists(com.google.common.collect.Lists) ImmutableList(com.google.common.collect.ImmutableList) LinkedHashSet(java.util.LinkedHashSet) Nullable(javax.annotation.Nullable) ExportDependencies(com.facebook.buck.rules.ExportDependencies) ImmutableSortedSet(com.google.common.collect.ImmutableSortedSet) PrintStream(java.io.PrintStream) Logger(com.facebook.buck.log.Logger) SerializableIntellijSettings.createSerializableIntellijSettings(com.facebook.buck.jvm.java.intellij.SerializableIntellijSettings.createSerializableIntellijSettings) PrebuiltJar(com.facebook.buck.jvm.java.PrebuiltJar) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) FileWriter(java.io.FileWriter) MoreObjects(com.google.common.base.MoreObjects) Include(com.fasterxml.jackson.annotation.JsonInclude.Include) IOException(java.io.IOException) Console(com.facebook.buck.util.Console) Maps(com.google.common.collect.Maps) File(java.io.File) ANDROID(com.facebook.buck.rules.BuildableProperties.Kind.ANDROID) MorePaths(com.facebook.buck.io.MorePaths) CxxLibrary(com.facebook.buck.cxx.CxxLibrary) Paths(java.nio.file.Paths) DummyRDotJava(com.facebook.buck.android.DummyRDotJava) JsonInclude(com.fasterxml.jackson.annotation.JsonInclude) AndroidPrebuiltAarCollection(com.facebook.buck.android.AndroidPrebuiltAarCollection) Preconditions(com.google.common.base.Preconditions) NdkLibrary(com.facebook.buck.android.NdkLibrary) VisibleForTesting(com.google.common.annotations.VisibleForTesting) PathOrGlobMatcher(com.facebook.buck.io.PathOrGlobMatcher) VisibleForTesting(com.google.common.annotations.VisibleForTesting)

Example 8 with PathOrGlobMatcher

use of com.facebook.buck.io.PathOrGlobMatcher in project buck by facebook.

the class WatchmanWatcher method createQuery.

@VisibleForTesting
static WatchmanQuery createQuery(ProjectWatch projectWatch, ImmutableSet<PathOrGlobMatcher> ignorePaths, Set<Capability> watchmanCapabilities) {
    String watchRoot = projectWatch.getWatchRoot();
    Optional<String> watchPrefix = projectWatch.getProjectPrefix();
    // Exclude any expressions added to this list.
    List<Object> excludeAnyOf = Lists.newArrayList("anyof");
    // Exclude all directories.
    excludeAnyOf.add(Lists.newArrayList("type", "d"));
    Path projectRoot = Paths.get(watchRoot);
    projectRoot = projectRoot.resolve(watchPrefix.orElse(""));
    // is applied.
    for (PathOrGlobMatcher ignorePathOrGlob : ignorePaths) {
        switch(ignorePathOrGlob.getType()) {
            case PATH:
                Path ignorePath = ignorePathOrGlob.getPath();
                if (ignorePath.isAbsolute()) {
                    ignorePath = MorePaths.relativize(projectRoot, ignorePath);
                }
                if (watchmanCapabilities.contains(Capability.DIRNAME)) {
                    excludeAnyOf.add(Lists.newArrayList("dirname", ignorePath.toString()));
                } else {
                    excludeAnyOf.add(Lists.newArrayList("match", ignorePath.toString() + File.separator + "*", "wholename"));
                }
                break;
            case GLOB:
                String ignoreGlob = ignorePathOrGlob.getGlob();
                excludeAnyOf.add(Lists.newArrayList("match", ignoreGlob, "wholename", ImmutableMap.of("includedotfiles", true)));
                break;
            default:
                throw new RuntimeException(String.format("Unsupported type: '%s'", ignorePathOrGlob.getType()));
        }
    }
    // Note that we use LinkedHashMap so insertion order is preserved. That
    // helps us write tests that don't depend on the undefined order of HashMap.
    Map<String, Object> sinceParams = new LinkedHashMap<>();
    sinceParams.put("expression", Lists.newArrayList("not", excludeAnyOf));
    sinceParams.put("empty_on_fresh_instance", true);
    sinceParams.put("fields", Lists.newArrayList("name", "exists", "new"));
    if (watchPrefix.isPresent()) {
        sinceParams.put("relative_root", watchPrefix.get());
    }
    return WatchmanQuery.of(watchRoot, sinceParams);
}
Also used : Path(java.nio.file.Path) PathOrGlobMatcher(com.facebook.buck.io.PathOrGlobMatcher) LinkedHashMap(java.util.LinkedHashMap) VisibleForTesting(com.google.common.annotations.VisibleForTesting)

Example 9 with PathOrGlobMatcher

use of com.facebook.buck.io.PathOrGlobMatcher in project buck by facebook.

the class WatchmanWatcherTest method watchmanQueryWithExcludePathsAddsExpressionToQuery.

@Test
public void watchmanQueryWithExcludePathsAddsExpressionToQuery() {
    WatchmanQuery query = WatchmanWatcher.createQuery(ProjectWatch.of("/path/to/repo", Optional.empty()), ImmutableSet.of(new PathOrGlobMatcher(Paths.get("foo")), new PathOrGlobMatcher(Paths.get("bar/baz"))), ImmutableSet.of(Watchman.Capability.DIRNAME));
    assertEquals(WatchmanQuery.of("/path/to/repo", ImmutableMap.of("expression", ImmutableList.of("not", ImmutableList.of("anyof", ImmutableList.of("type", "d"), ImmutableList.of("dirname", "foo"), ImmutableList.of("dirname", MorePaths.pathWithPlatformSeparators("bar/baz")))), "empty_on_fresh_instance", true, "fields", ImmutableList.of("name", "exists", "new"))), query);
}
Also used : WatchmanQuery(com.facebook.buck.io.WatchmanQuery) PathOrGlobMatcher(com.facebook.buck.io.PathOrGlobMatcher) Test(org.junit.Test)

Example 10 with PathOrGlobMatcher

use of com.facebook.buck.io.PathOrGlobMatcher in project buck by facebook.

the class Main method runMainWithExitCode.

/**
   * @param buildId an identifier for this command execution.
   * @param context an optional NGContext that is present if running inside a Nailgun server.
   * @param initTimestamp Value of System.nanoTime() when process got main()/nailMain() invoked.
   * @param unexpandedCommandLineArgs command line arguments
   * @return an exit code or {@code null} if this is a process that should not exit
   */
@SuppressWarnings("PMD.PrematureDeclaration")
public int runMainWithExitCode(BuildId buildId, Path projectRoot, Optional<NGContext> context, ImmutableMap<String, String> clientEnvironment, CommandMode commandMode, WatchmanWatcher.FreshInstanceAction watchmanFreshInstanceAction, final long initTimestamp, String... unexpandedCommandLineArgs) throws IOException, InterruptedException {
    String[] args = BuckArgsMethods.expandAtFiles(unexpandedCommandLineArgs);
    // Parse the command line args.
    BuckCommand command = new BuckCommand();
    AdditionalOptionsCmdLineParser cmdLineParser = new AdditionalOptionsCmdLineParser(command);
    try {
        cmdLineParser.parseArgument(args);
    } catch (CmdLineException e) {
        // Can't go through the console for prettification since that needs the BuckConfig, and that
        // needs to be created with the overrides, which are parsed from the command line here, which
        // required the console to print the message that parsing has failed. So just write to stderr
        // and be done with it.
        stdErr.println(e.getLocalizedMessage());
        stdErr.println("For help see 'buck --help'.");
        return 1;
    }
    {
        // Return help strings fast if the command is a help request.
        OptionalInt result = command.runHelp(stdErr);
        if (result.isPresent()) {
            return result.getAsInt();
        }
    }
    // Setup logging.
    if (commandMode.isLoggingEnabled()) {
        // Reset logging each time we run a command while daemonized.
        // This will cause us to write a new log per command.
        LOG.debug("Rotating log.");
        LogConfig.flushLogs();
        LogConfig.setupLogging(command.getLogConfig());
        if (LOG.isDebugEnabled()) {
            Long gitCommitTimestamp = Long.getLong("buck.git_commit_timestamp");
            String buildDateStr;
            if (gitCommitTimestamp == null) {
                buildDateStr = "(unknown)";
            } else {
                buildDateStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z", Locale.US).format(new Date(TimeUnit.SECONDS.toMillis(gitCommitTimestamp)));
            }
            String buildRev = System.getProperty("buck.git_commit", "(unknown)");
            LOG.debug("Starting up (build date %s, rev %s), args: %s", buildDateStr, buildRev, Arrays.toString(args));
            LOG.debug("System properties: %s", System.getProperties());
        }
    }
    // Setup filesystem and buck config.
    Path canonicalRootPath = projectRoot.toRealPath().normalize();
    Config config = Configs.createDefaultConfig(canonicalRootPath, command.getConfigOverrides().getForCell(RelativeCellName.ROOT_CELL_NAME));
    ProjectFilesystem filesystem = new ProjectFilesystem(canonicalRootPath, config);
    DefaultCellPathResolver cellPathResolver = new DefaultCellPathResolver(filesystem.getRootPath(), config);
    BuckConfig buckConfig = new BuckConfig(config, filesystem, architecture, platform, clientEnvironment, cellPathResolver);
    ImmutableSet<Path> projectWatchList = ImmutableSet.<Path>builder().add(canonicalRootPath).addAll(buckConfig.getView(ParserConfig.class).getWatchCells() ? cellPathResolver.getTransitivePathMapping().values() : ImmutableList.of()).build();
    Optional<ImmutableList<String>> allowedJavaSpecificiationVersions = buckConfig.getAllowedJavaSpecificationVersions();
    if (allowedJavaSpecificiationVersions.isPresent()) {
        String specificationVersion = System.getProperty("java.specification.version");
        boolean javaSpecificationVersionIsAllowed = allowedJavaSpecificiationVersions.get().contains(specificationVersion);
        if (!javaSpecificationVersionIsAllowed) {
            throw new HumanReadableException("Current Java version '%s' is not in the allowed java specification versions:\n%s", specificationVersion, Joiner.on(", ").join(allowedJavaSpecificiationVersions.get()));
        }
    }
    // Setup the console.
    Verbosity verbosity = VerbosityParser.parse(args);
    Optional<String> color;
    if (context.isPresent() && (context.get().getEnv() != null)) {
        String colorString = context.get().getEnv().getProperty(BUCKD_COLOR_DEFAULT_ENV_VAR);
        color = Optional.ofNullable(colorString);
    } else {
        color = Optional.empty();
    }
    final Console console = new Console(verbosity, stdOut, stdErr, buckConfig.createAnsi(color));
    // No more early outs: if this command is not read only, acquire the command semaphore to
    // become the only executing read/write command.
    // This must happen immediately before the try block to ensure that the semaphore is released.
    boolean commandSemaphoreAcquired = false;
    boolean shouldCleanUpTrash = false;
    if (!command.isReadOnly()) {
        commandSemaphoreAcquired = commandSemaphore.tryAcquire();
        if (!commandSemaphoreAcquired) {
            LOG.warn("Buck server was busy executing a command. Maybe retrying later will help.");
            return BUSY_EXIT_CODE;
        }
    }
    try {
        if (commandSemaphoreAcquired) {
            commandSemaphoreNgClient = context;
        }
        if (!command.isReadOnly()) {
            Optional<String> currentVersion = filesystem.readFileIfItExists(filesystem.getBuckPaths().getCurrentVersionFile());
            BuckPaths unconfiguredPaths = filesystem.getBuckPaths().withConfiguredBuckOut(filesystem.getBuckPaths().getBuckOut());
            if (!currentVersion.isPresent() || !currentVersion.get().equals(BuckVersion.getVersion()) || (filesystem.exists(unconfiguredPaths.getGenDir(), LinkOption.NOFOLLOW_LINKS) && (filesystem.isSymLink(unconfiguredPaths.getGenDir()) ^ buckConfig.getBuckOutCompatLink()))) {
                // Migrate any version-dependent directories (which might be huge) to a trash directory
                // so we can delete it asynchronously after the command is done.
                moveToTrash(filesystem, console, buildId, filesystem.getBuckPaths().getAnnotationDir(), filesystem.getBuckPaths().getGenDir(), filesystem.getBuckPaths().getScratchDir(), filesystem.getBuckPaths().getResDir());
                shouldCleanUpTrash = true;
                filesystem.mkdirs(filesystem.getBuckPaths().getCurrentVersionFile().getParent());
                filesystem.writeContentsToPath(BuckVersion.getVersion(), filesystem.getBuckPaths().getCurrentVersionFile());
            }
        }
        AndroidBuckConfig androidBuckConfig = new AndroidBuckConfig(buckConfig, platform);
        AndroidDirectoryResolver androidDirectoryResolver = new DefaultAndroidDirectoryResolver(filesystem.getRootPath().getFileSystem(), clientEnvironment, androidBuckConfig.getBuildToolsVersion(), androidBuckConfig.getNdkVersion());
        ProcessExecutor processExecutor = new DefaultProcessExecutor(console);
        Clock clock;
        boolean enableThreadCpuTime = buckConfig.getBooleanValue("build", "enable_thread_cpu_time", true);
        if (BUCKD_LAUNCH_TIME_NANOS.isPresent()) {
            long nanosEpoch = Long.parseLong(BUCKD_LAUNCH_TIME_NANOS.get(), 10);
            LOG.verbose("Using nanos epoch: %d", nanosEpoch);
            clock = new NanosAdjustedClock(nanosEpoch, enableThreadCpuTime);
        } else {
            clock = new DefaultClock(enableThreadCpuTime);
        }
        ParserConfig parserConfig = buckConfig.getView(ParserConfig.class);
        try (Watchman watchman = buildWatchman(context, parserConfig, projectWatchList, clientEnvironment, console, clock)) {
            final boolean isDaemon = context.isPresent() && (watchman != Watchman.NULL_WATCHMAN);
            if (!isDaemon && shouldCleanUpTrash) {
                // Clean up the trash on a background thread if this was a
                // non-buckd read-write command. (We don't bother waiting
                // for it to complete; the thread is a daemon thread which
                // will just be terminated at shutdown time.)
                TRASH_CLEANER.startCleaningDirectory(filesystem.getBuckPaths().getTrashDir());
            }
            KnownBuildRuleTypesFactory factory = new KnownBuildRuleTypesFactory(processExecutor, androidDirectoryResolver);
            Cell rootCell = CellProvider.createForLocalBuild(filesystem, watchman, buckConfig, command.getConfigOverrides(), factory).getCellByPath(filesystem.getRootPath());
            int exitCode;
            ImmutableList<BuckEventListener> eventListeners = ImmutableList.of();
            ExecutionEnvironment executionEnvironment = new DefaultExecutionEnvironment(clientEnvironment, System.getProperties());
            ImmutableList.Builder<ProjectFileHashCache> allCaches = ImmutableList.builder();
            // Build up the hash cache, which is a collection of the stateful cell cache and some
            // per-run caches.
            //
            // TODO(Coneko, ruibm, andrewjcg): Determine whether we can use the existing filesystem
            // object that is in scope instead of creating a new rootCellProjectFilesystem. The primary
            // difference appears to be that filesystem is created with a Config that is used to produce
            // ImmutableSet<PathOrGlobMatcher> and BuckPaths for the ProjectFilesystem, whereas this one
            // uses the defaults.
            ProjectFilesystem rootCellProjectFilesystem = ProjectFilesystem.createNewOrThrowHumanReadableException(rootCell.getFilesystem().getRootPath());
            if (isDaemon) {
                allCaches.addAll(getFileHashCachesFromDaemon(rootCell));
            } else {
                getTransitiveCells(rootCell).stream().map(cell -> DefaultFileHashCache.createDefaultFileHashCache(cell.getFilesystem())).forEach(allCaches::add);
                allCaches.add(DefaultFileHashCache.createBuckOutFileHashCache(rootCellProjectFilesystem, rootCell.getFilesystem().getBuckPaths().getBuckOut()));
            }
            // A cache which caches hashes of cell-relative paths which may have been ignore by
            // the main cell cache, and only serves to prevent rehashing the same file multiple
            // times in a single run.
            allCaches.add(DefaultFileHashCache.createDefaultFileHashCache(rootCellProjectFilesystem));
            allCaches.addAll(DefaultFileHashCache.createOsRootDirectoriesCaches());
            StackedFileHashCache fileHashCache = new StackedFileHashCache(allCaches.build());
            Optional<WebServer> webServer = getWebServerIfDaemon(context, rootCell);
            Optional<ConcurrentMap<String, WorkerProcessPool>> persistentWorkerPools = getPersistentWorkerPoolsIfDaemon(context, rootCell);
            TestConfig testConfig = new TestConfig(buckConfig);
            ArtifactCacheBuckConfig cacheBuckConfig = new ArtifactCacheBuckConfig(buckConfig);
            ExecutorService diskIoExecutorService = MostExecutors.newSingleThreadExecutor("Disk I/O");
            ListeningExecutorService httpWriteExecutorService = getHttpWriteExecutorService(cacheBuckConfig);
            ScheduledExecutorService counterAggregatorExecutor = Executors.newSingleThreadScheduledExecutor(new CommandThreadFactory("CounterAggregatorThread"));
            VersionControlStatsGenerator vcStatsGenerator;
            // Eventually, we'll want to get allow websocket and/or nailgun clients to specify locale
            // when connecting. For now, we'll use the default from the server environment.
            Locale locale = Locale.getDefault();
            // Create a cached thread pool for cpu intensive tasks
            Map<ExecutorPool, ListeningExecutorService> executors = new HashMap<>();
            executors.put(ExecutorPool.CPU, listeningDecorator(Executors.newCachedThreadPool()));
            // Create a thread pool for network I/O tasks
            executors.put(ExecutorPool.NETWORK, newDirectExecutorService());
            executors.put(ExecutorPool.PROJECT, listeningDecorator(MostExecutors.newMultiThreadExecutor("Project", buckConfig.getNumThreads())));
            // Create and register the event buses that should listen to broadcast events.
            // If the build doesn't have a daemon create a new instance.
            BroadcastEventListener broadcastEventListener = getBroadcastEventListener(isDaemon, rootCell, objectMapper);
            // The order of resources in the try-with-resources block is important: the BuckEventBus
            // must be the last resource, so that it is closed first and can deliver its queued events
            // to the other resources before they are closed.
            InvocationInfo invocationInfo = InvocationInfo.of(buildId, isSuperConsoleEnabled(console), isDaemon, command.getSubCommandNameForLogging(), filesystem.getBuckPaths().getLogDir());
            try (GlobalStateManager.LoggerIsMappedToThreadScope loggerThreadMappingScope = GlobalStateManager.singleton().setupLoggers(invocationInfo, console.getStdErr(), stdErr, verbosity);
                AbstractConsoleEventBusListener consoleListener = createConsoleEventListener(clock, new SuperConsoleConfig(buckConfig), console, testConfig.getResultSummaryVerbosity(), executionEnvironment, webServer, locale, filesystem.getBuckPaths().getLogDir().resolve("test.log"));
                AsyncCloseable asyncCloseable = new AsyncCloseable(diskIoExecutorService);
                BuckEventBus buildEventBus = new BuckEventBus(clock, buildId);
                BroadcastEventListener.BroadcastEventBusClosable broadcastEventBusClosable = broadcastEventListener.addEventBus(buildEventBus);
                // stderr.
                Closeable logErrorToEventBus = loggerThreadMappingScope.setWriter(createWriterForConsole(consoleListener));
                // NOTE: This will only run during the lifetime of the process and will flush on close.
                CounterRegistry counterRegistry = new CounterRegistryImpl(counterAggregatorExecutor, buildEventBus, buckConfig.getCountersFirstFlushIntervalMillis(), buckConfig.getCountersFlushIntervalMillis());
                PerfStatsTracking perfStatsTracking = new PerfStatsTracking(buildEventBus, invocationInfo);
                ProcessTracker processTracker = buckConfig.isProcessTrackerEnabled() && platform != Platform.WINDOWS ? new ProcessTracker(buildEventBus, invocationInfo, isDaemon, buckConfig.isProcessTrackerDeepEnabled()) : null) {
                LOG.debug(invocationInfo.toLogLine(args));
                buildEventBus.register(HANG_MONITOR.getHangMonitor());
                ArtifactCaches artifactCacheFactory = new ArtifactCaches(cacheBuckConfig, buildEventBus, filesystem, executionEnvironment.getWifiSsid(), httpWriteExecutorService, Optional.of(asyncCloseable));
                ProgressEstimator progressEstimator = new ProgressEstimator(filesystem.resolve(filesystem.getBuckPaths().getBuckOut()).resolve(ProgressEstimator.PROGRESS_ESTIMATIONS_JSON), buildEventBus, objectMapper);
                consoleListener.setProgressEstimator(progressEstimator);
                BuildEnvironmentDescription buildEnvironmentDescription = getBuildEnvironmentDescription(executionEnvironment, buckConfig);
                Iterable<BuckEventListener> commandEventListeners = command.getSubcommand().isPresent() ? command.getSubcommand().get().getEventListeners(invocationInfo.getLogDirectoryPath(), filesystem) : ImmutableList.of();
                Supplier<BuckEventListener> missingSymbolsListenerSupplier = () -> {
                    return MissingSymbolsHandler.createListener(rootCell.getFilesystem(), rootCell.getKnownBuildRuleTypes().getAllDescriptions(), rootCell.getBuckConfig(), buildEventBus, console, buckConfig.getView(JavaBuckConfig.class).getDefaultJavacOptions(), clientEnvironment);
                };
                eventListeners = addEventListeners(buildEventBus, rootCell.getFilesystem(), invocationInfo, rootCell.getBuckConfig(), webServer, clock, consoleListener, missingSymbolsListenerSupplier, counterRegistry, commandEventListeners);
                if (commandMode == CommandMode.RELEASE && buckConfig.isPublicAnnouncementsEnabled()) {
                    PublicAnnouncementManager announcementManager = new PublicAnnouncementManager(clock, buildEventBus, consoleListener, buckConfig.getRepository().orElse("unknown"), new RemoteLogBuckConfig(buckConfig), executors.get(ExecutorPool.CPU));
                    announcementManager.getAndPostAnnouncements();
                }
                // This needs to be after the registration of the event listener so they can pick it up.
                if (watchmanFreshInstanceAction == WatchmanWatcher.FreshInstanceAction.NONE) {
                    buildEventBus.post(DaemonEvent.newDaemonInstance());
                }
                if (command.subcommand instanceof AbstractCommand) {
                    AbstractCommand subcommand = (AbstractCommand) command.subcommand;
                    VersionControlBuckConfig vcBuckConfig = new VersionControlBuckConfig(buckConfig);
                    if (!commandMode.equals(CommandMode.TEST) && (subcommand.isSourceControlStatsGatheringEnabled() || vcBuckConfig.shouldGenerateStatistics())) {
                        vcStatsGenerator = new VersionControlStatsGenerator(diskIoExecutorService, new DefaultVersionControlCmdLineInterfaceFactory(rootCell.getFilesystem().getRootPath(), new PrintStreamProcessExecutorFactory(), vcBuckConfig, buckConfig.getEnvironment()), buildEventBus);
                        vcStatsGenerator.generateStatsAsync();
                    }
                }
                ImmutableList<String> remainingArgs = args.length > 1 ? ImmutableList.copyOf(Arrays.copyOfRange(args, 1, args.length)) : ImmutableList.of();
                CommandEvent.Started startedEvent = CommandEvent.started(args.length > 0 ? args[0] : "", remainingArgs, isDaemon, getBuckPID());
                buildEventBus.post(startedEvent);
                // Create or get Parser and invalidate cached command parameters.
                Parser parser = null;
                VersionedTargetGraphCache versionedTargetGraphCache = null;
                ActionGraphCache actionGraphCache = null;
                Optional<RuleKeyCacheRecycler<RuleKey>> defaultRuleKeyFactoryCacheRecycler = Optional.empty();
                if (isDaemon) {
                    try {
                        Daemon daemon = getDaemon(rootCell, objectMapper);
                        WatchmanWatcher watchmanWatcher = createWatchmanWatcher(daemon, watchman.getProjectWatches(), daemon.getFileEventBus(), ImmutableSet.<PathOrGlobMatcher>builder().addAll(filesystem.getIgnorePaths()).addAll(DEFAULT_IGNORE_GLOBS).build(), watchman);
                        parser = getParserFromDaemon(context, rootCell, startedEvent, buildEventBus, watchmanWatcher, watchmanFreshInstanceAction);
                        versionedTargetGraphCache = daemon.getVersionedTargetGraphCache();
                        actionGraphCache = daemon.getActionGraphCache();
                        if (buckConfig.getRuleKeyCaching()) {
                            LOG.debug("Using rule key calculation caching");
                            defaultRuleKeyFactoryCacheRecycler = Optional.of(daemon.getDefaultRuleKeyFactoryCacheRecycler());
                        }
                    } catch (WatchmanWatcherException | IOException e) {
                        buildEventBus.post(ConsoleEvent.warning("Watchman threw an exception while parsing file changes.\n%s", e.getMessage()));
                    }
                }
                if (versionedTargetGraphCache == null) {
                    versionedTargetGraphCache = new VersionedTargetGraphCache();
                }
                if (actionGraphCache == null) {
                    actionGraphCache = new ActionGraphCache(broadcastEventListener);
                }
                if (parser == null) {
                    TypeCoercerFactory typeCoercerFactory = new DefaultTypeCoercerFactory(objectMapper);
                    parser = new Parser(broadcastEventListener, rootCell.getBuckConfig().getView(ParserConfig.class), typeCoercerFactory, new ConstructorArgMarshaller(typeCoercerFactory));
                }
                // Because the Parser is potentially constructed before the CounterRegistry,
                // we need to manually register its counters after it's created.
                //
                // The counters will be unregistered once the counter registry is closed.
                counterRegistry.registerCounters(parser.getCounters());
                JavaUtilsLoggingBuildListener.ensureLogFileIsWritten(rootCell.getFilesystem());
                Optional<ProcessManager> processManager;
                if (platform == Platform.WINDOWS) {
                    processManager = Optional.empty();
                } else {
                    processManager = Optional.of(new PkillProcessManager(processExecutor));
                }
                Supplier<AndroidPlatformTarget> androidPlatformTargetSupplier = createAndroidPlatformTargetSupplier(androidDirectoryResolver, androidBuckConfig, buildEventBus);
                // event-listener.
                if (command.subcommand instanceof AbstractCommand) {
                    AbstractCommand subcommand = (AbstractCommand) command.subcommand;
                    Optional<Path> eventsOutputPath = subcommand.getEventsOutputPath();
                    if (eventsOutputPath.isPresent()) {
                        BuckEventListener listener = new FileSerializationEventBusListener(eventsOutputPath.get(), objectMapper);
                        buildEventBus.register(listener);
                    }
                }
                buildEventBus.post(new BuckInitializationDurationEvent(TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - initTimestamp)));
                try {
                    exitCode = command.run(CommandRunnerParams.builder().setConsole(console).setStdIn(stdIn).setCell(rootCell).setAndroidPlatformTargetSupplier(androidPlatformTargetSupplier).setArtifactCacheFactory(artifactCacheFactory).setBuckEventBus(buildEventBus).setParser(parser).setPlatform(platform).setEnvironment(clientEnvironment).setJavaPackageFinder(rootCell.getBuckConfig().getView(JavaBuckConfig.class).createDefaultJavaPackageFinder()).setObjectMapper(objectMapper).setClock(clock).setProcessManager(processManager).setPersistentWorkerPools(persistentWorkerPools).setWebServer(webServer).setBuckConfig(buckConfig).setFileHashCache(fileHashCache).setExecutors(executors).setBuildEnvironmentDescription(buildEnvironmentDescription).setVersionedTargetGraphCache(versionedTargetGraphCache).setActionGraphCache(actionGraphCache).setKnownBuildRuleTypesFactory(factory).setInvocationInfo(Optional.of(invocationInfo)).setDefaultRuleKeyFactoryCacheRecycler(defaultRuleKeyFactoryCacheRecycler).build());
                } catch (InterruptedException | ClosedByInterruptException e) {
                    exitCode = INTERRUPTED_EXIT_CODE;
                    buildEventBus.post(CommandEvent.interrupted(startedEvent, INTERRUPTED_EXIT_CODE));
                    throw e;
                }
                // Let's avoid an infinite loop
                if (exitCode == BUSY_EXIT_CODE) {
                    // Some loss of info here, but better than looping
                    exitCode = FAIL_EXIT_CODE;
                    LOG.error("Buck return with exit code %d which we use to indicate busy status. " + "This is probably propagating an exit code from a sub process or tool. " + "Coercing to %d to avoid retries.", BUSY_EXIT_CODE, FAIL_EXIT_CODE);
                }
                // Wait for HTTP writes to complete.
                closeHttpExecutorService(cacheBuckConfig, Optional.of(buildEventBus), httpWriteExecutorService);
                closeExecutorService("CounterAggregatorExecutor", counterAggregatorExecutor, COUNTER_AGGREGATOR_SERVICE_TIMEOUT_SECONDS);
                buildEventBus.post(CommandEvent.finished(startedEvent, exitCode));
            } catch (Throwable t) {
                LOG.debug(t, "Failing build on exception.");
                closeHttpExecutorService(cacheBuckConfig, Optional.empty(), httpWriteExecutorService);
                closeDiskIoExecutorService(diskIoExecutorService);
                flushEventListeners(console, buildId, eventListeners);
                throw t;
            } finally {
                if (commandSemaphoreAcquired) {
                    commandSemaphoreNgClient = Optional.empty();
                    BgProcessKiller.disarm();
                    // Allow another command to execute while outputting traces.
                    commandSemaphore.release();
                    commandSemaphoreAcquired = false;
                }
                if (isDaemon && shouldCleanUpTrash) {
                    // Clean up the trash in the background if this was a buckd
                    // read-write command. (We don't bother waiting for it to
                    // complete; the cleaner will ensure subsequent cleans are
                    // serialized with this one.)
                    TRASH_CLEANER.startCleaningDirectory(filesystem.getBuckPaths().getTrashDir());
                }
                // shut down the cached thread pools
                for (ExecutorPool p : executors.keySet()) {
                    closeExecutorService(p.toString(), executors.get(p), EXECUTOR_SERVICES_TIMEOUT_SECONDS);
                }
            }
            if (context.isPresent() && !rootCell.getBuckConfig().getFlushEventsBeforeExit()) {
                // Avoid client exit triggering client disconnection handling.
                context.get().in.close();
                // Allow nailgun client to exit while outputting traces.
                context.get().exit(exitCode);
            }
            closeDiskIoExecutorService(diskIoExecutorService);
            flushEventListeners(console, buildId, eventListeners);
            return exitCode;
        }
    } finally {
        if (commandSemaphoreAcquired) {
            commandSemaphoreNgClient = Optional.empty();
            BgProcessKiller.disarm();
            commandSemaphore.release();
        }
    }
}
Also used : OverlappingFileLockException(java.nio.channels.OverlappingFileLockException) BroadcastEventListener(com.facebook.buck.event.listener.BroadcastEventListener) Arrays(java.util.Arrays) ArtifactCache(com.facebook.buck.artifact_cache.ArtifactCache) RelativeCellName(com.facebook.buck.rules.RelativeCellName) ObjectMappers(com.facebook.buck.util.ObjectMappers) TypeCoercerFactory(com.facebook.buck.rules.coercer.TypeCoercerFactory) Ansi(com.facebook.buck.util.Ansi) NGListeningAddress(com.martiansoftware.nailgun.NGListeningAddress) ProjectFilesystem(com.facebook.buck.io.ProjectFilesystem) URLClassLoader(java.net.URLClassLoader) WatchedFileHashCache(com.facebook.buck.util.cache.WatchedFileHashCache) BuildId(com.facebook.buck.model.BuildId) RuleKey(com.facebook.buck.rules.RuleKey) WorkerProcessPool(com.facebook.buck.shell.WorkerProcessPool) ProcessExecutor(com.facebook.buck.util.ProcessExecutor) InterruptionFailedException(com.facebook.buck.util.InterruptionFailedException) Duration(java.time.Duration) Map(java.util.Map) ChromeTraceBuildListener(com.facebook.buck.event.listener.ChromeTraceBuildListener) DefaultTypeCoercerFactory(com.facebook.buck.rules.coercer.DefaultTypeCoercerFactory) LastErrorException(com.sun.jna.LastErrorException) ClassPath(com.google.common.reflect.ClassPath) Path(java.nio.file.Path) ConsoleHandlerState(com.facebook.buck.log.ConsoleHandlerState) WatchmanWatcherException(com.facebook.buck.util.WatchmanWatcherException) AndroidPlatformTarget(com.facebook.buck.android.AndroidPlatformTarget) Verbosity(com.facebook.buck.util.Verbosity) NonReentrantSystemExit(com.facebook.buck.util.shutdown.NonReentrantSystemExit) TestResultSummaryVerbosity(com.facebook.buck.test.TestResultSummaryVerbosity) Native(com.sun.jna.Native) SuperConsoleConfig(com.facebook.buck.event.listener.SuperConsoleConfig) Set(java.util.Set) PathOrGlobMatcher(com.facebook.buck.io.PathOrGlobMatcher) Executors(java.util.concurrent.Executors) CommandThreadFactory(com.facebook.buck.log.CommandThreadFactory) KnownBuildRuleTypesFactory(com.facebook.buck.rules.KnownBuildRuleTypesFactory) ClosedByInterruptException(java.nio.channels.ClosedByInterruptException) LoggingBuildListener(com.facebook.buck.event.listener.LoggingBuildListener) WatchmanWatcher(com.facebook.buck.util.WatchmanWatcher) NanosAdjustedClock(com.facebook.buck.timing.NanosAdjustedClock) ArtifactCacheBuckConfig(com.facebook.buck.artifact_cache.ArtifactCacheBuckConfig) DefaultProcessExecutor(com.facebook.buck.util.DefaultProcessExecutor) Joiner(com.google.common.base.Joiner) ListeningExecutorService(com.google.common.util.concurrent.ListeningExecutorService) BuckEventBus(com.facebook.buck.event.BuckEventBus) DefaultExecutionEnvironment(com.facebook.buck.util.environment.DefaultExecutionEnvironment) WebServer(com.facebook.buck.httpserver.WebServer) ProjectFileHashCache(com.facebook.buck.util.cache.ProjectFileHashCache) Config(com.facebook.buck.config.Config) FileSerializationEventBusListener(com.facebook.buck.event.listener.FileSerializationEventBusListener) MoreExecutors.newDirectExecutorService(com.google.common.util.concurrent.MoreExecutors.newDirectExecutorService) RuleKeyCacheRecycler(com.facebook.buck.rules.keys.RuleKeyCacheRecycler) SimpleDateFormat(java.text.SimpleDateFormat) GlobalStateManager(com.facebook.buck.log.GlobalStateManager) TestConfig(com.facebook.buck.test.TestConfig) Watchman(com.facebook.buck.io.Watchman) ArtifactCaches(com.facebook.buck.artifact_cache.ArtifactCaches) ConsoleEvent(com.facebook.buck.event.ConsoleEvent) BuckVersion(com.facebook.buck.model.BuckVersion) StandardCopyOption(java.nio.file.StandardCopyOption) AndroidBuckConfig(com.facebook.buck.android.AndroidBuckConfig) ParserConfig(com.facebook.buck.parser.ParserConfig) DefaultClock(com.facebook.buck.timing.DefaultClock) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) ManagementFactory(java.lang.management.ManagementFactory) Nullable(javax.annotation.Nullable) BgProcessKiller(com.facebook.buck.util.BgProcessKiller) MachineReadableLoggerListener(com.facebook.buck.event.listener.MachineReadableLoggerListener) VersionControlBuckConfig(com.facebook.buck.util.versioncontrol.VersionControlBuckConfig) IOException(java.io.IOException) BuckArgsMethods(com.facebook.buck.util.BuckArgsMethods) Architecture(com.facebook.buck.util.environment.Architecture) Pointer(com.sun.jna.Pointer) Paths(java.nio.file.Paths) DefaultAndroidDirectoryResolver(com.facebook.buck.android.DefaultAndroidDirectoryResolver) ProcessTracker(com.facebook.buck.util.perf.ProcessTracker) DaemonEvent(com.facebook.buck.event.DaemonEvent) Preconditions(com.google.common.base.Preconditions) ProcessManager(com.facebook.buck.util.ProcessManager) VersionControlStatsGenerator(com.facebook.buck.util.versioncontrol.VersionControlStatsGenerator) ProjectWatch(com.facebook.buck.io.ProjectWatch) NoSuchFileException(java.nio.file.NoSuchFileException) SuperConsoleEventBusListener(com.facebook.buck.event.listener.SuperConsoleEventBusListener) URL(java.net.URL) Date(java.util.Date) PrintStreamProcessExecutorFactory(com.facebook.buck.util.PrintStreamProcessExecutorFactory) JavaBuckConfig(com.facebook.buck.jvm.java.JavaBuckConfig) ImmutableCollection(com.google.common.collect.ImmutableCollection) RichStream(com.facebook.buck.util.RichStream) FileLock(java.nio.channels.FileLock) JavaUtilsLoggingBuildListener(com.facebook.buck.event.listener.JavaUtilsLoggingBuildListener) NGServer(com.martiansoftware.nailgun.NGServer) PkillProcessManager(com.facebook.buck.util.PkillProcessManager) AnsiEnvironmentChecking(com.facebook.buck.util.AnsiEnvironmentChecking) Locale(java.util.Locale) VersionedTargetGraphCache(com.facebook.buck.versions.VersionedTargetGraphCache) Clock(com.facebook.buck.timing.Clock) NoAndroidSdkException(com.facebook.buck.android.NoAndroidSdkException) Cell(com.facebook.buck.rules.Cell) ImmutableSet(com.google.common.collect.ImmutableSet) ImmutableMap(com.google.common.collect.ImmutableMap) TimeZone(java.util.TimeZone) Platform(com.facebook.buck.util.environment.Platform) StandardOpenOption(java.nio.file.StandardOpenOption) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Configs(com.facebook.buck.config.Configs) UUID(java.util.UUID) DefaultCellPathResolver(com.facebook.buck.rules.DefaultCellPathResolver) DefaultFileHashCache(com.facebook.buck.util.cache.DefaultFileHashCache) BuckPaths(com.facebook.buck.io.BuckPaths) WatchmanDiagnosticEventListener(com.facebook.buck.io.WatchmanDiagnosticEventListener) FileNotFoundException(java.io.FileNotFoundException) CmdLineException(org.kohsuke.args4j.CmdLineException) ConstructorArgMarshaller(com.facebook.buck.rules.ConstructorArgMarshaller) CounterRegistryImpl(com.facebook.buck.counters.CounterRegistryImpl) SimpleConsoleEventBusListener(com.facebook.buck.event.listener.SimpleConsoleEventBusListener) ExecutorPool(com.facebook.buck.step.ExecutorPool) AndroidDirectoryResolver(com.facebook.buck.android.AndroidDirectoryResolver) Optional(java.util.Optional) IntByReference(com.sun.jna.ptr.IntByReference) InvocationInfo(com.facebook.buck.log.InvocationInfo) MoreExecutors.listeningDecorator(com.google.common.util.concurrent.MoreExecutors.listeningDecorator) LogConfig(com.facebook.buck.log.LogConfig) BuckEventListener(com.facebook.buck.event.BuckEventListener) CounterRegistry(com.facebook.buck.counters.CounterRegistry) Supplier(com.google.common.base.Supplier) RemoteLogBuckConfig(com.facebook.buck.util.network.RemoteLogBuckConfig) HashMap(java.util.HashMap) OptionalInt(java.util.OptionalInt) BuildEnvironmentDescription(com.facebook.buck.util.environment.BuildEnvironmentDescription) Libc(com.facebook.buck.util.Libc) ConcurrentMap(java.util.concurrent.ConcurrentMap) EventBus(com.google.common.eventbus.EventBus) HashSet(java.util.HashSet) PublicAnnouncementManager(com.facebook.buck.event.listener.PublicAnnouncementManager) LinkOption(java.nio.file.LinkOption) HttpArtifactCacheEvent(com.facebook.buck.artifact_cache.HttpArtifactCacheEvent) ImmutableList(com.google.common.collect.ImmutableList) CommandMode(com.facebook.buck.util.environment.CommandMode) AsynchronousDirectoryContentsCleaner(com.facebook.buck.io.AsynchronousDirectoryContentsCleaner) WatchmanCursor(com.facebook.buck.io.WatchmanCursor) ExecutionEnvironment(com.facebook.buck.util.environment.ExecutionEnvironment) ExecutorService(java.util.concurrent.ExecutorService) ActionGraphCache(com.facebook.buck.rules.ActionGraphCache) PerfStatsTracking(com.facebook.buck.util.perf.PerfStatsTracking) PrintStream(java.io.PrintStream) Logger(com.facebook.buck.log.Logger) NGContext(com.martiansoftware.nailgun.NGContext) Parser(com.facebook.buck.parser.Parser) LoadBalancerEventsListener(com.facebook.buck.event.listener.LoadBalancerEventsListener) DefaultRuleKeyCache(com.facebook.buck.rules.keys.DefaultRuleKeyCache) MalformedURLException(java.net.MalformedURLException) Semaphore(java.util.concurrent.Semaphore) CacheRateStatsListener(com.facebook.buck.event.listener.CacheRateStatsListener) CellProvider(com.facebook.buck.rules.CellProvider) MostExecutors(com.facebook.buck.util.concurrent.MostExecutors) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) Console(com.facebook.buck.util.Console) HumanReadableException(com.facebook.buck.util.HumanReadableException) BuckInitializationDurationEvent(com.facebook.buck.event.BuckInitializationDurationEvent) StackedFileHashCache(com.facebook.buck.util.cache.StackedFileHashCache) TimeUnit(java.util.concurrent.TimeUnit) ProgressEstimator(com.facebook.buck.event.listener.ProgressEstimator) BuckIsDyingException(com.facebook.buck.util.BuckIsDyingException) Closeable(java.io.Closeable) RuleKeyLoggerListener(com.facebook.buck.event.listener.RuleKeyLoggerListener) DefaultVersionControlCmdLineInterfaceFactory(com.facebook.buck.util.versioncontrol.DefaultVersionControlCmdLineInterfaceFactory) AtomicMoveNotSupportedException(java.nio.file.AtomicMoveNotSupportedException) AsyncCloseable(com.facebook.buck.util.AsyncCloseable) VisibleForTesting(com.google.common.annotations.VisibleForTesting) MoreFiles(com.facebook.buck.io.MoreFiles) FileChannel(java.nio.channels.FileChannel) CommandEvent(com.facebook.buck.event.CommandEvent) AbstractConsoleEventBusListener(com.facebook.buck.event.listener.AbstractConsoleEventBusListener) InputStream(java.io.InputStream) BuckEventBus(com.facebook.buck.event.BuckEventBus) RemoteLogBuckConfig(com.facebook.buck.util.network.RemoteLogBuckConfig) CounterRegistryImpl(com.facebook.buck.counters.CounterRegistryImpl) WatchmanWatcherException(com.facebook.buck.util.WatchmanWatcherException) BuckEventListener(com.facebook.buck.event.BuckEventListener) NanosAdjustedClock(com.facebook.buck.timing.NanosAdjustedClock) DefaultClock(com.facebook.buck.timing.DefaultClock) Clock(com.facebook.buck.timing.Clock) ClosedByInterruptException(java.nio.channels.ClosedByInterruptException) Watchman(com.facebook.buck.io.Watchman) SuperConsoleConfig(com.facebook.buck.event.listener.SuperConsoleConfig) ArtifactCacheBuckConfig(com.facebook.buck.artifact_cache.ArtifactCacheBuckConfig) AndroidBuckConfig(com.facebook.buck.android.AndroidBuckConfig) VersionControlBuckConfig(com.facebook.buck.util.versioncontrol.VersionControlBuckConfig) JavaBuckConfig(com.facebook.buck.jvm.java.JavaBuckConfig) RemoteLogBuckConfig(com.facebook.buck.util.network.RemoteLogBuckConfig) DefaultClock(com.facebook.buck.timing.DefaultClock) ProjectFileHashCache(com.facebook.buck.util.cache.ProjectFileHashCache) PerfStatsTracking(com.facebook.buck.util.perf.PerfStatsTracking) DefaultAndroidDirectoryResolver(com.facebook.buck.android.DefaultAndroidDirectoryResolver) AndroidDirectoryResolver(com.facebook.buck.android.AndroidDirectoryResolver) BuildEnvironmentDescription(com.facebook.buck.util.environment.BuildEnvironmentDescription) DefaultExecutionEnvironment(com.facebook.buck.util.environment.DefaultExecutionEnvironment) BroadcastEventListener(com.facebook.buck.event.listener.BroadcastEventListener) DefaultTypeCoercerFactory(com.facebook.buck.rules.coercer.DefaultTypeCoercerFactory) ProcessExecutor(com.facebook.buck.util.ProcessExecutor) DefaultProcessExecutor(com.facebook.buck.util.DefaultProcessExecutor) Parser(com.facebook.buck.parser.Parser) WatchmanWatcher(com.facebook.buck.util.WatchmanWatcher) NanosAdjustedClock(com.facebook.buck.timing.NanosAdjustedClock) ConstructorArgMarshaller(com.facebook.buck.rules.ConstructorArgMarshaller) WebServer(com.facebook.buck.httpserver.WebServer) ExecutorPool(com.facebook.buck.step.ExecutorPool) ListeningExecutorService(com.google.common.util.concurrent.ListeningExecutorService) CmdLineException(org.kohsuke.args4j.CmdLineException) ImmutableList(com.google.common.collect.ImmutableList) KnownBuildRuleTypesFactory(com.facebook.buck.rules.KnownBuildRuleTypesFactory) VersionControlBuckConfig(com.facebook.buck.util.versioncontrol.VersionControlBuckConfig) TypeCoercerFactory(com.facebook.buck.rules.coercer.TypeCoercerFactory) DefaultTypeCoercerFactory(com.facebook.buck.rules.coercer.DefaultTypeCoercerFactory) BuckPaths(com.facebook.buck.io.BuckPaths) ProcessManager(com.facebook.buck.util.ProcessManager) PkillProcessManager(com.facebook.buck.util.PkillProcessManager) ClassPath(com.google.common.reflect.ClassPath) Path(java.nio.file.Path) DefaultVersionControlCmdLineInterfaceFactory(com.facebook.buck.util.versioncontrol.DefaultVersionControlCmdLineInterfaceFactory) FileSerializationEventBusListener(com.facebook.buck.event.listener.FileSerializationEventBusListener) ProgressEstimator(com.facebook.buck.event.listener.ProgressEstimator) OptionalInt(java.util.OptionalInt) IOException(java.io.IOException) ActionGraphCache(com.facebook.buck.rules.ActionGraphCache) PkillProcessManager(com.facebook.buck.util.PkillProcessManager) PathOrGlobMatcher(com.facebook.buck.io.PathOrGlobMatcher) StackedFileHashCache(com.facebook.buck.util.cache.StackedFileHashCache) ProcessTracker(com.facebook.buck.util.perf.ProcessTracker) Locale(java.util.Locale) InvocationInfo(com.facebook.buck.log.InvocationInfo) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) HashMap(java.util.HashMap) Closeable(java.io.Closeable) AsyncCloseable(com.facebook.buck.util.AsyncCloseable) JavaBuckConfig(com.facebook.buck.jvm.java.JavaBuckConfig) Verbosity(com.facebook.buck.util.Verbosity) TestResultSummaryVerbosity(com.facebook.buck.test.TestResultSummaryVerbosity) ArtifactCacheBuckConfig(com.facebook.buck.artifact_cache.ArtifactCacheBuckConfig) ProjectFilesystem(com.facebook.buck.io.ProjectFilesystem) PrintStreamProcessExecutorFactory(com.facebook.buck.util.PrintStreamProcessExecutorFactory) Cell(com.facebook.buck.rules.Cell) CounterRegistry(com.facebook.buck.counters.CounterRegistry) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) TestConfig(com.facebook.buck.test.TestConfig) ArtifactCaches(com.facebook.buck.artifact_cache.ArtifactCaches) ConcurrentMap(java.util.concurrent.ConcurrentMap) GlobalStateManager(com.facebook.buck.log.GlobalStateManager) AndroidPlatformTarget(com.facebook.buck.android.AndroidPlatformTarget) AbstractConsoleEventBusListener(com.facebook.buck.event.listener.AbstractConsoleEventBusListener) AndroidBuckConfig(com.facebook.buck.android.AndroidBuckConfig) DefaultExecutionEnvironment(com.facebook.buck.util.environment.DefaultExecutionEnvironment) ExecutionEnvironment(com.facebook.buck.util.environment.ExecutionEnvironment) DefaultProcessExecutor(com.facebook.buck.util.DefaultProcessExecutor) PublicAnnouncementManager(com.facebook.buck.event.listener.PublicAnnouncementManager) SuperConsoleConfig(com.facebook.buck.event.listener.SuperConsoleConfig) ArtifactCacheBuckConfig(com.facebook.buck.artifact_cache.ArtifactCacheBuckConfig) Config(com.facebook.buck.config.Config) TestConfig(com.facebook.buck.test.TestConfig) AndroidBuckConfig(com.facebook.buck.android.AndroidBuckConfig) ParserConfig(com.facebook.buck.parser.ParserConfig) VersionControlBuckConfig(com.facebook.buck.util.versioncontrol.VersionControlBuckConfig) JavaBuckConfig(com.facebook.buck.jvm.java.JavaBuckConfig) LogConfig(com.facebook.buck.log.LogConfig) RemoteLogBuckConfig(com.facebook.buck.util.network.RemoteLogBuckConfig) VersionedTargetGraphCache(com.facebook.buck.versions.VersionedTargetGraphCache) AsyncCloseable(com.facebook.buck.util.AsyncCloseable) Console(com.facebook.buck.util.Console) CommandEvent(com.facebook.buck.event.CommandEvent) VersionControlStatsGenerator(com.facebook.buck.util.versioncontrol.VersionControlStatsGenerator) BuckInitializationDurationEvent(com.facebook.buck.event.BuckInitializationDurationEvent) DefaultCellPathResolver(com.facebook.buck.rules.DefaultCellPathResolver) DefaultAndroidDirectoryResolver(com.facebook.buck.android.DefaultAndroidDirectoryResolver) CommandThreadFactory(com.facebook.buck.log.CommandThreadFactory) Date(java.util.Date) HumanReadableException(com.facebook.buck.util.HumanReadableException) ListeningExecutorService(com.google.common.util.concurrent.ListeningExecutorService) MoreExecutors.newDirectExecutorService(com.google.common.util.concurrent.MoreExecutors.newDirectExecutorService) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) ExecutorService(java.util.concurrent.ExecutorService) RuleKeyCacheRecycler(com.facebook.buck.rules.keys.RuleKeyCacheRecycler) SimpleDateFormat(java.text.SimpleDateFormat) ParserConfig(com.facebook.buck.parser.ParserConfig)

Aggregations

PathOrGlobMatcher (com.facebook.buck.io.PathOrGlobMatcher)11 Path (java.nio.file.Path)7 Test (org.junit.Test)6 ProjectFilesystem (com.facebook.buck.io.ProjectFilesystem)3 WatchmanQuery (com.facebook.buck.io.WatchmanQuery)3 VisibleForTesting (com.google.common.annotations.VisibleForTesting)3 ImmutableSet (com.google.common.collect.ImmutableSet)3 IOException (java.io.IOException)3 NdkLibrary (com.facebook.buck.android.NdkLibrary)2 BuckEventBus (com.facebook.buck.event.BuckEventBus)2 Logger (com.facebook.buck.log.Logger)2 BuildId (com.facebook.buck.model.BuildId)2 FakeClock (com.facebook.buck.timing.FakeClock)2 Ansi (com.facebook.buck.util.Ansi)2 Console (com.facebook.buck.util.Console)2 ProcessExecutor (com.facebook.buck.util.ProcessExecutor)2 Verbosity (com.facebook.buck.util.Verbosity)2 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)2 Joiner (com.google.common.base.Joiner)2 Preconditions (com.google.common.base.Preconditions)2