From bc66523bbea2c5901b709f4d80d0a90d5b681293 Mon Sep 17 00:00:00 2001 From: David Chen Date: Tue, 16 Feb 2016 08:59:53 +0000 Subject: Add support for downloading .tar.bz2 files with http_archive rules. Fixes #897 RELNOTES: Add support for .tar.bz2 archives to http_archive rules. -- MOS_MIGRATED_REVID=114729580 --- .../lib/bazel/repository/DecompressorValue.java | 5 ++- .../build/lib/bazel/repository/TarBz2Function.java | 40 ++++++++++++++++++++++ .../bazel/repository/DecompressorValueTest.java | 2 ++ 3 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/google/devtools/build/lib/bazel/repository/TarBz2Function.java diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/DecompressorValue.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/DecompressorValue.java index 9bf8df6279..0d5ee8fc09 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/repository/DecompressorValue.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/DecompressorValue.java @@ -66,10 +66,13 @@ public class DecompressorValue implements SkyValue { return TarGzFunction.INSTANCE; } else if (baseName.endsWith(".tar.xz")) { return TarXzFunction.INSTANCE; + } else if (baseName.endsWith(".tar.bz2")) { + return TarBz2Function.INSTANCE; } else { throw new RepositoryFunctionException( new EvalException(null, String.format( - "Expected a file with a .zip, .jar, .war, .tar.gz, .tgz, or .tar.xz suffix (got %s)", + "Expected a file with a .zip, .jar, .war, .tar.gz, .tgz, .tar.xz, or .tar.bz2 " + + "suffix (got %s)", archivePath)), Transience.PERSISTENT); } diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/TarBz2Function.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/TarBz2Function.java new file mode 100644 index 0000000000..8566afd3b4 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/TarBz2Function.java @@ -0,0 +1,40 @@ +// Copyright 2015 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.bazel.repository; + +import com.google.devtools.build.lib.bazel.repository.DecompressorValue.Decompressor; + +import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream; + +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; + +/** + * Creates a repository by unarchiving a .tar.bz2 file. + */ +public class TarBz2Function extends CompressedTarFunction { + public static final Decompressor INSTANCE = new TarBz2Function(); + + private TarBz2Function() { + } + + @Override + protected InputStream getDecompressorStream(DecompressorDescriptor descriptor) + throws IOException { + return new BZip2CompressorInputStream( + new FileInputStream(descriptor.archivePath().getPathFile())); + } +} diff --git a/src/test/java/com/google/devtools/build/lib/bazel/repository/DecompressorValueTest.java b/src/test/java/com/google/devtools/build/lib/bazel/repository/DecompressorValueTest.java index f0a6ee3618..c1de6b19ab 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/repository/DecompressorValueTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/repository/DecompressorValueTest.java @@ -48,6 +48,8 @@ public class DecompressorValueTest { DecompressorDescriptor.builder().setArchivePath(path).build(); path = fs.getPath("/foo/.external-repositories/some-repo/bar.baz.tar.xz"); DecompressorDescriptor.builder().setArchivePath(path).build(); + path = fs.getPath("/foo/.external-repositories/some-repo/bar.baz.tar.bz2"); + DecompressorDescriptor.builder().setArchivePath(path).build(); } @Test -- cgit v1.2.3