diff options
author | David Chen <dzc@google.com> | 2016-02-16 08:59:53 +0000 |
---|---|---|
committer | Damien Martin-Guillerez <dmarting@google.com> | 2016-02-16 09:42:01 +0000 |
commit | bc66523bbea2c5901b709f4d80d0a90d5b681293 (patch) | |
tree | f1d3c8eaea2cd96f67420fa0d5272adb616cdc26 | |
parent | 4aa76cc73822f5e6a7980433148289b783f31e81 (diff) |
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
3 files changed, 46 insertions, 1 deletions
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 |