Search in sources :

Example 11 with Paths

use of java.nio.file.Paths in project jabref by JabRef.

the class FileLink method format.

@Override
public String format(String field) {
    if (field == null) {
        return "";
    }
    List<LinkedFile> fileList = FileFieldParser.parse(field);
    LinkedFile link = null;
    if (fileType == null) {
        // No file type specified. Simply take the first link.
        if (!(fileList.isEmpty())) {
            link = fileList.get(0);
        }
    } else {
        // A file type is specified:
        for (LinkedFile flEntry : fileList) {
            if (flEntry.getFileType().equalsIgnoreCase(fileType)) {
                link = flEntry;
                break;
            }
        }
    }
    if (link == null) {
        return "";
    }
    List<String> dirs;
    // starting the export, which contains the database's file directory:
    if (prefs.getFileDirForDatabase() == null) {
        dirs = prefs.getGeneratedDirForDatabase();
    } else {
        dirs = prefs.getFileDirForDatabase();
    }
    return link.findIn(dirs.stream().map(Paths::get).collect(Collectors.toList())).map(path -> path.normalize().toString()).orElse(link.getLink());
}
Also used : FileFieldParser(org.jabref.model.entry.FileFieldParser) List(java.util.List) ParamLayoutFormatter(org.jabref.logic.layout.ParamLayoutFormatter) Paths(java.nio.file.Paths) Log(org.apache.commons.logging.Log) LogFactory(org.apache.commons.logging.LogFactory) Collectors(java.util.stream.Collectors) LinkedFile(org.jabref.model.entry.LinkedFile) LinkedFile(org.jabref.model.entry.LinkedFile) Paths(java.nio.file.Paths)

Example 12 with Paths

use of java.nio.file.Paths 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 13 with Paths

use of java.nio.file.Paths in project buck by facebook.

the class JsLibraryDescription method changePathPrefix.

private static Path changePathPrefix(SourcePath sourcePath, String basePath, BuildRuleParams params, SourcePathResolver sourcePathResolver, UnflavoredBuildTarget target) {
    final Path directoryOfBuildFile = target.getCellPath().resolve(target.getBasePath());
    final Path transplantTo = MorePaths.normalize(directoryOfBuildFile.resolve(basePath));
    final Path absolutePath = sourcePathResolver.getPathSourcePath(sourcePath).map(// for sub paths, replace the leading directory with the base path
    pathSourcePath -> transplantTo.resolve(MorePaths.relativize(directoryOfBuildFile, sourcePathResolver.getAbsolutePath(sourcePath)))).orElse(// build target output paths are replaced completely
    transplantTo);
    return params.getProjectFilesystem().getPathRelativeToProjectRoot(absolutePath).orElseThrow(() -> new HumanReadableException("%s: Using '%s' as base path for '%s' would move the file " + "out of the project root.", target, basePath, sourcePathResolver.getRelativePath(sourcePath)));
}
Also used : SourcePath(com.facebook.buck.rules.SourcePath) Path(java.nio.file.Path) UnflavoredBuildTarget(com.facebook.buck.model.UnflavoredBuildTarget) Iterables(com.google.common.collect.Iterables) SourcePathRuleFinder(com.facebook.buck.rules.SourcePathRuleFinder) SourcePath(com.facebook.buck.rules.SourcePath) Either(com.facebook.buck.model.Either) Flavored(com.facebook.buck.model.Flavored) Function(java.util.function.Function) BuildRule(com.facebook.buck.rules.BuildRule) ImmutableBiMap(com.google.common.collect.ImmutableBiMap) ImmutableList(com.google.common.collect.ImmutableList) NoSuchBuildTargetException(com.facebook.buck.parser.NoSuchBuildTargetException) SourcePathResolver(com.facebook.buck.rules.SourcePathResolver) Pair(com.facebook.buck.model.Pair) BuildRuleParams(com.facebook.buck.rules.BuildRuleParams) Path(java.nio.file.Path) Nullable(javax.annotation.Nullable) MoreCollectors(com.facebook.buck.util.MoreCollectors) ImmutableSortedSet(com.google.common.collect.ImmutableSortedSet) ImmutableSet(com.google.common.collect.ImmutableSet) TargetGraph(com.facebook.buck.rules.TargetGraph) HumanReadableException(com.facebook.buck.util.HumanReadableException) BuildTarget(com.facebook.buck.model.BuildTarget) SuppressFieldNotInitialized(com.facebook.infer.annotation.SuppressFieldNotInitialized) MorePaths(com.facebook.buck.io.MorePaths) AbstractDescriptionArg(com.facebook.buck.rules.AbstractDescriptionArg) Paths(java.nio.file.Paths) Hint(com.facebook.buck.rules.Hint) WorkerTool(com.facebook.buck.shell.WorkerTool) Optional(java.util.Optional) Preconditions(com.google.common.base.Preconditions) Flavor(com.facebook.buck.model.Flavor) BuildRuleResolver(com.facebook.buck.rules.BuildRuleResolver) Description(com.facebook.buck.rules.Description) HumanReadableException(com.facebook.buck.util.HumanReadableException)

Example 14 with Paths

use of java.nio.file.Paths 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)

Example 15 with Paths

use of java.nio.file.Paths in project buck by facebook.

the class PrebuiltCxxLibraryDescription method parseExportedHeaders.

private static <A extends Arg> ImmutableMap<Path, SourcePath> parseExportedHeaders(BuildRuleParams params, BuildRuleResolver resolver, CxxPlatform cxxPlatform, A args) throws NoSuchBuildTargetException {
    ImmutableMap.Builder<String, SourcePath> headers = ImmutableMap.builder();
    SourcePathRuleFinder ruleFinder = new SourcePathRuleFinder(resolver);
    SourcePathResolver pathResolver = new SourcePathResolver(ruleFinder);
    headers.putAll(CxxDescriptionEnhancer.parseOnlyHeaders(params.getBuildTarget(), ruleFinder, pathResolver, "exported_headers", args.exportedHeaders));
    headers.putAll(CxxDescriptionEnhancer.parseOnlyPlatformHeaders(params.getBuildTarget(), resolver, ruleFinder, pathResolver, cxxPlatform, "exported_headers", args.exportedHeaders, "exported_platform, headers", args.exportedPlatformHeaders));
    return CxxPreprocessables.resolveHeaderMap(args.headerNamespace.map(Paths::get).orElse(params.getBuildTarget().getBasePath()), headers.build());
}
Also used : PathSourcePath(com.facebook.buck.rules.PathSourcePath) SourcePath(com.facebook.buck.rules.SourcePath) BuildTargetSourcePath(com.facebook.buck.rules.BuildTargetSourcePath) ExplicitBuildTargetSourcePath(com.facebook.buck.rules.ExplicitBuildTargetSourcePath) Paths(java.nio.file.Paths) SourcePathRuleFinder(com.facebook.buck.rules.SourcePathRuleFinder) SourcePathResolver(com.facebook.buck.rules.SourcePathResolver) ImmutableMap(com.google.common.collect.ImmutableMap)

Aggregations

Paths (java.nio.file.Paths)19 Path (java.nio.file.Path)12 IOException (java.io.IOException)10 ProjectFilesystem (com.facebook.buck.io.ProjectFilesystem)8 SourcePathResolver (com.facebook.buck.rules.SourcePathResolver)8 ImmutableSet (com.google.common.collect.ImmutableSet)8 SourcePathRuleFinder (com.facebook.buck.rules.SourcePathRuleFinder)7 ExecutionContext (com.facebook.buck.step.ExecutionContext)7 List (java.util.List)7 BuildRuleResolver (com.facebook.buck.rules.BuildRuleResolver)6 ImmutableList (com.google.common.collect.ImmutableList)6 ImmutableMap (com.google.common.collect.ImmutableMap)6 Optional (java.util.Optional)6 BuckEventBusFactory (com.facebook.buck.event.BuckEventBusFactory)5 DefaultTargetNodeToBuildRuleTransformer (com.facebook.buck.rules.DefaultTargetNodeToBuildRuleTransformer)5 SourcePath (com.facebook.buck.rules.SourcePath)5 StepExecutionResult (com.facebook.buck.step.StepExecutionResult)5 TestExecutionContext (com.facebook.buck.step.TestExecutionContext)5 FakeProjectFilesystem (com.facebook.buck.testutil.FakeProjectFilesystem)5 BuildTarget (com.facebook.buck.model.BuildTarget)4