blob: 3a9feb7a345255cd0a3671483898f059f373de1b [file] [log] [blame]
The following is a list of things I would like to see
done with libarchive. It's sorted roughly in priority;
more feasible and more often-requested items are higher
on the list. If you think you have time to work on any
of these, please let me know.
* NetBSD's mtree supports various checksum algorithms.
It would be useful if the reader could verify them and
the writer could compute them.
* archive_entry_from_file(). This would be very useful.
Ideally, it would accept a pathname (required) and an
optional fd. This will allow it to optimize by using
fstat() and friends to eliminate races on platforms that
support those interfaces.
* cpio front-end. The basic bsdcpio front-end is now
working. I'm looking for feedback about what additional
features are necessary.
* pax front-end. Once cpio is a little more stable, I plan
to fork it as the basis of a pax front-end. The only really
tricky part will be implementing the header-editing features
from POSIX 2001 'pax', which will require some changes to
the libarchive API.
* libarchive on Windows. Recent changes should allow libarchive
to port to Visual Studio pretty quickly (large parts of
archive_write_disk will have to be customized or replaced,
but that's only about five percent of the entire library).
* bsdtar on Windows. After libarchive is working on Windows,
this should be much simpler. At worst, you can just disable
* Writing tar sparse entries. The GNU "1.0" format mentioned above
sucks a lot less than the old GNU sparse format, so I'm finally
dropping my objections to sparse file writing. This requires
extending archive_entry to support a block list, and will
require extensive changes to bsdtar to generate block lists.
The sparse read code will also need to put block lists into
the entry so that archive-to-archive copies preserve sparseness.
* ISO9660 writing. Writing ISO9660 requires two passes, and
libarchive is a single-pass API. For ISO9660, you can hide
that behind a temp file, though. Collect metadata in memory,
append file bodies (properly padded to 2k sector boundaries)
to a temp file, then format the directory section and copy
the file data through at format close.
* Augmenting bsdtar's archive-copy feature: Being able to "update"
one archive with the contents of another would be a very
useful feature, especially for building software packages.
Consider being able to generate a tar archive of a directory,
then "fixing" the ownership and permissions based on an
mtree file. (Equivalently, reading a tar archive and
replacing the file contents while retaining the metadata.)
mtree format, which represents file and directory metadata
in an easily-editable format, is a natural counterpart to this.
* archive_read_disk: Currently, libarchive can generate a stream
of entries from an archive file and can feed entries to an
archive file or a directory. The missing corner is pulling
entries from a directory. With that, libarchive can provide
efficient bulk copy services for dir-to-dir, dir-to-archive,
archive-to-dir, and archive-to-archive. Right now, the
read-from-disk capabilities are handled in the client.
* ISO9660 Level 3. ISO9660 Level 3 supports files over 4GB.
* --split=<limit> option to bsdtar. This would watch the total output
size and begin a new archive file whenever <next file size> +
<total archive size> exceeded <limit>. Not as robust as
GNU tar's ability to split an entry across archives, but still
useful in many situations.
* Filename matching extensions: ^ to anchor a pattern to the
beginning of the file, [!...] negated character classes, etc.