blob: 16f5a5e67091f347d69c8157c80adce6da6dc1c8 [file] [log] [blame]
// Copyright 2014 The Bazel Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.devtools.build.lib.runtime.commands;
import com.google.common.annotations.VisibleForTesting;
import com.google.devtools.build.lib.analysis.BlazeVersionInfo;
import com.google.devtools.build.lib.analysis.NoBuildEvent;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.runtime.BlazeCommand;
import com.google.devtools.build.lib.runtime.BlazeCommandResult;
import com.google.devtools.build.lib.runtime.Command;
import com.google.devtools.build.lib.runtime.CommandEnvironment;
import com.google.devtools.build.lib.util.ExitCode;
import com.google.devtools.common.options.Option;
import com.google.devtools.common.options.OptionDocumentationCategory;
import com.google.devtools.common.options.OptionEffectTag;
import com.google.devtools.common.options.OptionsBase;
import com.google.devtools.common.options.OptionsParser;
import com.google.devtools.common.options.OptionsParsingResult;
import java.io.IOException;
/**
* The 'blaze version' command, which informs users about the blaze version
* information.
*/
@Command(name = "version",
options = { VersionCommand.VersionOptions.class },
allowResidue = false,
mustRunInWorkspace = false,
help = "resource:version.txt",
shortDescription = "Prints version information for %{product}.")
public final class VersionCommand implements BlazeCommand {
/** Options for the "version" command. */
public static class VersionOptions extends OptionsBase {
@Option(
name = "gnu_format",
defaultValue = "false",
documentationCategory = OptionDocumentationCategory.OUTPUT_PARAMETERS,
effectTags = {OptionEffectTag.AFFECTS_OUTPUTS, OptionEffectTag.EXECUTION},
help =
"If set, write the version to stdout using the conventions described in the GNU"
+ " standards."
)
public boolean gnuFormat;
}
@Override
public void editOptions(OptionsParser optionsParser) {}
@Override
public BlazeCommandResult exec(CommandEnvironment env, OptionsParsingResult options) {
env.getEventBus().post(new NoBuildEvent());
try {
env.getReporter().getOutErr().printOutLn(
getInfo(
env.getRuntime().getProductName(),
BlazeVersionInfo.instance(),
options.getOptions(VersionOptions.class).gnuFormat));
} catch (IOException e) {
env.getReporter().handle(Event.error(e.getMessage()));
return BlazeCommandResult.exitCode(ExitCode.COMMAND_LINE_ERROR);
}
return BlazeCommandResult.exitCode(ExitCode.SUCCESS);
}
@VisibleForTesting
static String getInfo(String productName, BlazeVersionInfo info, boolean gnuFormat)
throws IOException {
if (info.getSummary() == null) {
throw new IOException("Version information not available");
}
if (gnuFormat) {
return productName + " " + (info.isReleasedBlaze() ? info.getVersion() : "no_version");
} else {
return info.getSummary();
}
}
}