This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-compress.git
commit f5eb9e28edf8a661ac5efc43b7853ee49bb73b3a Author: Gary D. Gregory <garydgreg...@gmail.com> AuthorDate: Sat Jul 26 20:36:19 2025 +0000 Prepare for the next release candidate --- CONTRIBUTING.md | 4 +- README.md | 6 +- RELEASE-NOTES.txt | 154 +++++++++++++++++++++++++++++++++++++++++++++++- src/changes/changes.xml | 2 +- 4 files changed, 157 insertions(+), 9 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b77d4c50b..da4826d9d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -61,11 +61,11 @@ Making Changes + Create a _topic branch_ for your isolated work. * Usually you should base your branch from the `master` branch. - * A good topic branch name can be the JIRA bug ID plus a keyword, for example, `COMPRESS-123-InputStream`. + * A good topic branch name can be the JIRA bug ID plus a keyword, e.g. `COMPRESS-123-InputStream`. * If you have submitted multiple JIRA issues, try to maintain separate branches and pull requests. + Make commits of logical units. * Make sure your commit messages are meaningful and in the proper format. Your commit message should contain the key of the JIRA issue. - * For example, `[COMPRESS-123] Close input stream earlier` + * For example, `[COMPRESS-123] Close input stream sooner` + Respect the original code style: + Only use spaces for indentation; you can check for unnecessary whitespace with `git diff` before committing. + Create minimal diffs - disable _On Save_ actions like _Reformat Source Code_ or _Organize Imports_. If you feel the source code should be reformatted create a separate PR for this change first. diff --git a/README.md b/README.md index 14438ae86..6cab46e04 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ Apache Commons Compress [](https://github.com/apache/commons-compress/actions/workflows/maven.yml) [](https://search.maven.org/artifact/org.apache.commons/commons-compress) -[](https://javadoc.io/doc/org.apache.commons/commons-compress/1.27.1) +[](https://javadoc.io/doc/org.apache.commons/commons-compress/1.28.0) [](https://github.com/apache/commons-compress/actions/workflows/codeql-analysis.yml) [](https://api.securityscorecards.dev/projects/github.com/apache/commons-compress) @@ -71,7 +71,7 @@ Alternatively, you can pull it from the central Maven repositories: <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-compress</artifactId> - <version>1.27.1</version> + <version>1.28.0</version> </dependency> ``` @@ -93,7 +93,7 @@ There are some guidelines which will make applying PRs easier for us: + Create minimal diffs - disable on save actions like reformat source code or organize imports. If you feel the source code should be reformatted create a separate PR for this change. + Provide JUnit tests for your changes and make sure your changes don't break any existing tests by running `mvn`. + Before you pushing a PR, run `mvn` (by itself), this runs the default goal, which contains all build checks. -+ To see the code coverage report, regardless of coverage failures, run `mvn clean site -Dcommons.jacoco.haltOnFailure=false` ++ To see the code coverage report, regardless of coverage failures, run `mvn clean site -Dcommons.jacoco.haltOnFailure=false -Pjacoco` If you plan to contribute on a regular basis, please consider filing a [contributor license agreement](https://www.apache.org/licenses/#clas). You can learn more about contributing via GitHub in our [contribution guidelines](CONTRIBUTING.md). diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index 58deb0cea..e83501dbd 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -1,3 +1,151 @@ +Apache Commons Compress 1.28.0 Release Notes +-------------------------------------------- + +The Apache Commons Compress team is pleased to announce the release of Apache Commons Compress 1.28.0. + +Apache Commons Compress defines an API for working with +compression and archive formats. These include bzip2, gzip, pack200, +LZMA, XZ, Snappy, traditional Unix Compress, DEFLATE, DEFLATE64, LZ4, +Brotli, Zstandard and ar, cpio, jar, tar, zip, dump, 7z, arj. + +This is a feature and maintenance release. Java 8 or later is required. + +Changes in this version +----------------------- + +Changes in this version include the following. + +New Features +------------ + +* Add GzipParameters.getModificationInstant(). Thanks to Gary Gregory. +* Add GzipParameters.setModificationInstant(Instant). Thanks to Gary Gregory. +* Add GzipParameters.OS, setOS(OS), getOS(). Thanks to Gary Gregory. +* Add GzipParameters.toString(). Thanks to Gary Gregory. +* COMPRESS-638: Add GzipParameters.setFileNameCharset(Charset) and getFileNameCharset() to override the default ISO-8859-1 Charset #602. Thanks to vincexjl, Gary Gregory, Piotr P. Karwasz. +* Add support for gzip extra subfields, see GzipParameters.setExtra(HeaderExtraField) #604. Thanks to ddeschenes-1, Gary Gregory. +* Add CompressFilterOutputStream and refactor to use. Thanks to Gary Gregory. +* Add ZipFile.stream(). Thanks to Gary Gregory. +* GzipCompressorInputStream reads the modification time (MTIME) and stores its value incorrectly multiplied by 1,000. Thanks to Danny Deschenes, Gary Gregory. +* GzipCompressorInputStream writes the modification time (MTIME) the value incorrectly divided by 1,000. Thanks to Danny Deschenes, Gary Gregory. +* Add optional FHCRC to GZIP header #627. Thanks to Danny Deschenes, Gary Gregory. +* Add GzipCompressorInputStream.Builder allowing to customize the file name and comment Charsets. Thanks to Gary Gregory. +* Add GzipCompressorInputStream.Builder.setOnMemberStart(IOConsumer) to monitor member parsing. Thanks to Gary Gregory. +* Add GzipCompressorInputStream.Builder.setOnMemberEnd(IOConsumer) to monitor member parsing. Thanks to Gary Gregory. +* Add PMD check to default Maven goal. Thanks to Gary Gregory. +* Add SevenZFile.Builder.setMaxMemoryLimitKiB(int). Thanks to Gary Gregory. +* Add MemoryLimitException.MemoryLimitException(long, int, Throwable) and deprecate MemoryLimitException.MemoryLimitException(long, int, Exception). Thanks to Gary Gregory. +* COMPRESS-692: Add support for zstd compression in zip archives. Thanks to Mehmet Karaman, Andrey Loskutov, Gary Gregory. +* Add support for XZ compression in ZIP archives. Thanks to Gary Gregory. +* COMPRESS-695: Add ZipArchiveInputStream.createZstdInputStream(InputStream) to provide a different InputStream implementation for Zstandard (Zstd) #649. Thanks to Gary Gregory. +* Add org.apache.commons.compress.harmony.pack200.Pack200Exception.Pack200Exception(String, Throwable). Thanks to Gary Gregory. +* COMPRESS-697: Move BitStream.nextBit() method to BitInputStream #663. Thanks to Fredrik Kjellberg, Gary Gregory. +* Add org.apache.commons.compress.compressors.lzma.LZMACompressorInputStream.builder/Builder(). Thanks to Gary Gregory. +* Add org.apache.commons.compress.compressors.lzma.LZMACompressorOutputStream.builder/Builder(). Thanks to Gary Gregory. +* Add org.apache.commons.compress.compressors.xz.XZCompressorInputStream.builder/Builder(). Thanks to Gary Gregory. +* Add org.apache.commons.compress.compressors.xz.XZCompressorOutputStream.builder/Builder(). Thanks to Gary Gregory. +* Add org.apache.commons.compress.compressors.xz.ZstdCompressorOutputStream.builder/Builder() #666. Thanks to Gary Gregory, David Walluck, Piotr P. Karwasz. +* Add org.apache.commons.compress.compressors.xz.ZstdConstants #666. Thanks to Gary Gregory, David Walluck, Piotr P. Karwasz. +* Add org.apache.commons.compress.archivers.ArchiveException.requireNonNull(T, Supplier<String>). Thanks to Gary Gregory, Zaki. +* Add org.apache.commons.compress.compressors.CompressorException as the root for all custom exceptions ArchiveException and CompressorException. Thanks to Gary Gregory. +* Add ArchiveException.ArchiveException(String, Throwable). Thanks to Gary Gregory. +* Add ArchiveException.ArchiveException(Throwable). Thanks to Gary Gregory. +* Add org.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry.isEmptyStream(). Thanks to Gary Gregory. +* Add generics for org.apache.commons.compress.compressors.CompressorStreamProvider.createCompressorOutputStream(String, T). Thanks to Gary Gregory. + +Fixed Bugs +---------- + +* COMPRESS-686: Better exception messages in SeekableInMemoryByteChannel. Thanks to Richard Blank, Gary Gregory. +* COMPRESS-691: ZipArchiveOutputStream.addRawArchiveEntry() should check is2PhaseSource #571. Thanks to yujincheng08, Gary Gregory. +* ArchiveException extends IOException #605, see also https://github.com/apache/httpcomponents-client/pull/580. Thanks to Gary Gregory, Arturo Bernal. +* CompressorException extends IOException #605, see also https://github.com/apache/httpcomponents-client/pull/580. Thanks to Gary Gregory, Arturo Bernal. +* Update outdated descriptions in IOUtils and IOUtilsTest #612. Thanks to Glavo. +* Remove unused local variable in ZipFile #615. Thanks to Glavo. +* Optimize ZipEightByteInteger #614. Thanks to Glavo, Gary Gregory. +* ZipEightByteInteger.toString() now returns a number string without text prefix, like BigInteger. Thanks to Gary Gregory. +* Throw an IllegalArgumentException when a file name or comment in gzip parameters encodes to a byte array with a 0 byte #618. Thanks to ddeschenes-1, Gary Gregory. +* Update outdated links in ZipMethod Javadoc #619. Thanks to Glavo. +* Deprecate ZipUtil.signedByteToUnsignedInt(byte) in favor of Byte.toUnsignedInt(byte). Thanks to Gary Gregory. +* ZipArchiveOutputStream.close() does not close its underlying output stream. Thanks to Gary Gregory. +* ZipArchiveOutputStream.close() does not close its underlying output stream. Thanks to Gary Gregory. +* Don't use deprecated code in TarArchiveInputStream. Thanks to Gary Gregory. +* Don't use deprecated code in TarFile. Thanks to Gary Gregory. +* CpioArchiveInputStream.read(byte[], int, int) now throws an IOException on a data pad count mismatch. Thanks to Gary Gregory. +* CpioArchiveInputStream.readNewEntry(boolean) now throws an IOException on a header pad count mismatch. Thanks to Gary Gregory. +* CpioArchiveInputStream.readOldBinaryEntry(boolean) now throws an IOException on a header pad count mismatch. Thanks to Gary Gregory. +* Fix Javadoc and names in the org.apache.commons.compress.archivers.sevenz package to specify kibibyte scale in memory limits. Thanks to Gary Gregory. +* Fix Javadoc and names in the org.apache.commons.compress.compressors.lzw package to specify kibibyte scale in memory limits. Thanks to Gary Gregory. +* Fix Javadoc and names in the org.apache.commons.compress.compressors.z package to specify kibibyte scale in memory limits. Thanks to Gary Gregory. +* Refactor LZ77Compressor block classes to reduce duplication. Thanks to Gary Gregory. +* Package-private and private classes can be final. Thanks to Gary Gregory. +* Deprecate ArjArchiveEntry.HostOs.HostOs(). Thanks to Gary Gregory. +* Drop coveralls reference (no longer needed) +* Some ZIP operations won't read all data from a non-blocking file channel. Thanks to Gary Gregory. +* COMPRESS-696: ZipArchiveInputStream.getCompressedCount() throws NullPointerException if called before getNextEntry(). Thanks to Steve Roughley, Gary Gregory. +* org.apache.commons.compress.harmony.unpack200.SegmentConstantPool.getConstantPoolEntry(int, long) now throws Pack200Exception instead of Error and does better range checking of the index argument. Thanks to Gary Gregory. +* org.apache.commons.compress.harmony.unpack200.SegmentConstantPool.getInitMethodPoolEntry(int, long, String) now throws Pack200Exception instead of Error and does better range checking of the index argument. Thanks to Gary Gregory. +* org.apache.commons.compress.harmony.unpack200.SegmentConstantPool.getInitMethodPoolEntry(int, long, String) now throws Pack200Exception instead of Error on bad constant pool type input. Thanks to Gary Gregory. +* org.apache.commons.compress.harmony.unpack200.SegmentConstantPool.getClassSpecificPoolEntry(int, long, String) now throws Pack200Exception instead of Error on bad constant pool type input. Thanks to Gary Gregory. +* org.apache.commons.compress.harmony.unpack200.SegmentConstantPool.getClassPoolEntry(String) now throws Pack200Exception instead of Error on some bad inputs and states. Thanks to Gary Gregory. +* org.apache.commons.compress.harmony.unpack200.bytecode.ByteCode.extractOperands(OperandManager, Segment, int) now throws Pack200Exception instead of Error on some bad inputs and states. Thanks to Gary Gregory. +* org.apache.commons.compress.harmony.unpack200.bytecode.forms.ByteCodeForm.setByteCodeOperands(ByteCode, OperandManager, int) now throws Pack200Exception instead of Error on some bad inputs and states. Thanks to Gary Gregory. +* org.apache.commons.compress.harmony.unpack200.bytecode.CodeAttribute.CodeAttribute(int, int, byte[], Segment, OperandManager, List) now throws Pack200Exception instead of Error on some bad inputs and states. Thanks to Gary Gregory. +* org.apache.commons.compress.harmony.unpack200.bytecode.forms.IMethodRefForm.setByteCodeOperands(ByteCode, OperandManager, int) now throws Pack200Exception instead of Error on some bad inputs and states. Thanks to Gary Gregory. +* org.apache.commons.compress.harmony.unpack200.bytecode.forms.MultiANewArrayForm.setByteCodeOperands(ByteCode, OperandManager, int) now throws Pack200Exception instead of Error on some bad inputs and states. Thanks to Gary Gregory. +* org.apache.commons.compress.harmony.unpack200.bytecode.forms.NewClassRefForm.setByteCodeOperands(ByteCode, OperandManager, int) now throws Pack200Exception instead of Error on some bad inputs and states. Thanks to Gary Gregory. +* org.apache.commons.compress.harmony.unpack200.bytecode.forms.ReferenceForm.setByteCodeOperands(ByteCode, OperandManager, int) now throws Pack200Exception instead of Error on some bad inputs and states. Thanks to Gary Gregory. +* Deprecate org.apache.commons.compress.harmony.pack200.CanonicalCodecFamilies.CanonicalCodecFamilies(). Thanks to Gary Gregory. +* Deprecate FileNameUtils#getBaseName(Path). Thanks to Gary Gregory. +* Deprecate FileNameUtils#getExtension(Path). Thanks to Gary Gregory. +* org.apache.commons.compress.harmony.unpack200.Archive.unpack() should not log to system out (the console). Thanks to Alexis Jehan, Gary Gregory. +* [site] Fix minor zip docs type: remove extraneous 'a' #665. Thanks to aSemy. +* Throw a better exception in org.apache.commons.compress.archivers.sevenz.SevenZFile.readFilesInfo(ByteBuffer, Archive). Thanks to Zaki, Gary Gregory. +* MemoryLimitException now extends CompressException instead of IOException (CompressException extends IOException). Thanks to Gary Gregory. +* DumpArchiveException now extends ArchiveException instead of IOException (ArchiveException extends CompressException). Thanks to Gary Gregory. +* PasswordRequiredException now extends CompressException instead of IOException (CompressException extends IOException). Thanks to Gary Gregory. +* Pack200Exception now extends CompressException instead of IOException (CompressException extends IOException). Thanks to Gary Gregory. +* ArArchiveInputStream.getBSDLongName(String) now throws its EOFException with a message. Thanks to Gary Gregory. +* ZipEncodingHelper.getZipEncoding(*) can throw NullPointerException and IllegalArgumentException on bad input instead of returning a value using the default Charset. Thanks to Gary Gregory. +* Javadoc improvements throughout. Thanks to Gary Gregory. +* COMPRESS-699: ArchiveStreamFactory.detect(inputStream) ArchiveException for TAR regression. Thanks to Gary Gregory. +* COMPRESS-700: Can't detect file flutter_awesome_buttons-0.1.0.tar as a TAR file. Thanks to Gary Gregory. +* Deprecate org.apache.commons.compress.utils.TimeUtils.toUnixTime(FileTime) in favor of org.apache.commons.io.file.attribute.FileTimes.toUnixTime(FileTime). Thanks to Gary Gregory. +* Deprecate org.apache.commons.compress.utils.TimeUtils.truncateToHundredNanos(FileTime). Thanks to Gary Gregory. + +Changes +------- + +* Bump org.apache.commons:commons-parent from 72 to 85 #563, #567, #574, #582, #587, #595, #668. Thanks to Dependabot, Gary Gregory, sebb. +* Bump com.github.luben:zstd-jni from 1.5.6-4 to 1.5.7-4 #565, #578, #601, #616, #630, #640, #642. Version 1.5.7-3 fixes https://github.com/luben/zstd-jni/pull/356 Thanks to Dependabot, Gary Gregory. +* Bump org.apache.commons:commons-lang3 from 3.16.0 to 3.18.0 #568, #678. Thanks to Dependabot, Gary Gregory. +* Bump commons-io:commons-io from 2.16.1 to 2.20.0 #575, #610. Thanks to Dependabot, Gary Gregory. +* Bump com.github.marschall:memoryfilesystem from 2.8.0 to 2.8.1 #577. Thanks to Dependabot, Gary Gregory. +* Bump org.ow2.asm:asm from 9.7 to 9.7.1 #586. Thanks to Dependabot, Gary Gregory. +* Bump commons-codec:commons-codec from 1.17.1 to 1.19.0 #636. Thanks to Gary Gregory. + +Removed +------- + +* COMPRESS-638: GzipCompressorOutputStream no longer percent-endcodes in US-ASCII a file name or comment that the Charset in GzipParameters.setFileNameCharset(Charset) cannot encode. Thanks to vincexjl, Gary Gregory, Piotr P. Karwasz. +* Remove ZstdCompressorOutputStream.toString(), it was misleading by returning the delegate's toString(). Thanks to Gary Gregory. + +Resources +--------- + +Historical list of changes: https://commons.apache.org/proper/commons-compress/changes.html + +For complete information on Apache Commons Compress, including instructions on how to submit bug reports, +patches, or suggestions for improvement, see the Apache Commons Compress website: + +https://commons.apache.org/proper/commons-compress/ + +Download page: https://commons.apache.org/proper/commons-compress/download_compress.cgi + +Have fun! +-Apache Commons Team + +----------------------------------------------------------------------------- Apache Commons Compress Version 1.27.1 @@ -145,7 +293,7 @@ Fixed Bugs * ArArchiveOutputStream doesn't pad correctly when a file name length is odd and greater than 16 (padding missing). Thanks to takaaki nakama, Gary Gregory. * COMPRESS-678: ArArchiveOutputStream should check that a file name length greater than 16 fits in a header. Thanks to Gary Gregory. * ArArchiveOutputStream implicit narrowing conversion in compound assignment. Thanks to Gary Gregory. -* COMPRESS-679: Regression on parallel processing of 7zip files. Thanks to Mika�l MECHOULAM, Gary Gregory. +* COMPRESS-679: Regression on parallel processing of 7zip files. Thanks to Mika�l MECHOULAM, Gary Gregory. * COMPRESS-675: Regression in pack200's Archive class -- underlying InputStream is now closed. Thanks to Tim Allison, Gary Gregory. * Avoid NullPointerException in java.nio.channels.spi.AbstractInterruptibleChannel.close() when calling org.apache.commons.compress.archivers.zip.FileRandomAccessOutputStream.close(). Thanks to Gary Gregory. * Fix SpotBugs NP_NULL_PARAM_DEREF in Sets.newHashSet(). Thanks to Gary Gregory. @@ -489,7 +637,7 @@ Fixed Bugs * Add TarArchiveEntry.getLinkFlag() #365. Issue: COMPRESS-641. Thanks to XenoAmess, Gary Gregory, Bruno P. Kinoshita. * Integer overflow ArithmeticException in TarArchiveOutputStream #368. - Issue: COMPRESS-642. Thanks to Anton Klar�n, Gary Gregory. + Issue: COMPRESS-642. Thanks to Anton Klar�n, Gary Gregory. * org.apache.commons.compress.archivers.zip.ZipFile.finalize() should not write to std err. Issue: COMPRESS-642. Thanks to Dominik Stadler, Stefan Bodewig, Gary Gregory. @@ -544,7 +692,7 @@ Fixed Bugs avoid reading more from a channel than asked for. Github Pull Request #214. Issue: COMPRESS-584. Thanks to Matthijs Laan, Peter Lee. -* Documentation nits #217. Thanks to Helder Magalh�es, Gary Gregory, PeterAlfredLee. +* Documentation nits #217. Thanks to Helder Magalh�es, Gary Gregory, PeterAlfredLee. * Replace wrapper Collections.sort is with an instance method directly. #245. Thanks to Arturo Bernal. * Replace manual comparisons with Comparator.comparingInt() #244. Thanks to Arturo Bernal. * Replace manual copy of array contents with System.arraycopy() #246. Thanks to Arturo Bernal. diff --git a/src/changes/changes.xml b/src/changes/changes.xml index d5fac3dbf..dc9dd4c84 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -42,7 +42,7 @@ The <action> type attribute can be add,update,fix,remove. <title>Apache Commons Compress Release Notes</title> </properties> <body> - <release version="1.28.0" date="YYYY-MM-DD" description="This is a feature and maintenance release. Java 8 or later is required."> + <release version="1.28.0" date="2025-07-26" description="This is a feature and maintenance release. Java 8 or later is required."> <!-- FIX --> <action type="fix" issue="COMPRESS-686" dev="ggregory" due-to="Richard Blank, Gary Gregory">Better exception messages in SeekableInMemoryByteChannel.</action> <action type="fix" issue="COMPRESS-691" dev="ggregory" due-to="yujincheng08, Gary Gregory">ZipArchiveOutputStream.addRawArchiveEntry() should check is2PhaseSource #571.</action>