-
Notifications
You must be signed in to change notification settings - Fork 198
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add an append_link()
method to handle long link targets
#273
Conversation
This passes my unit test, but I'm still doing some more real world testing and comparing this (and my higher level code) with what GNU |
4b142ab
to
fb31a75
Compare
We should support appending long symlink targets, because this occurs in real world filesystems. In my case, RPM set up `.build-id` symlinks which can get long. Add an `append_link()` method following the precendent of `append_path()` - we're just supporting *two* potentially long filenames. As a side benefit, we can just do the `std::io::empty()` dance internally and not require the caller to specify it. The addition of special case `append()` methods is unfortunate, because the header API methods are then really an attractive nuisance. We should potentially consider deprecating them. Closes: alexcrichton#192
fb31a75
to
02a9426
Compare
I hit this when exporting Fedora Silverblue, there are some long symlinks in there. Depends: alexcrichton/tar-rs#273 Closes: ostreedev#162
OK this works, I tested in concert with ostreedev/ostree-rs-ext#165 |
I hit this when exporting Fedora Silverblue, there are some long symlinks in there. Depends: alexcrichton/tar-rs#273 Closes: ostreedev#162
Thanks! |
I hit this when exporting Fedora Silverblue, there are some long symlinks in there. Depends: alexcrichton/tar-rs#273 Closes: ostreedev#162
Without this, users trying to run `x.py dist` under a sufficiently long path run into problems when we build the resulting tarballs due to length limits in the original tar spec. The error looks like: Finished release [optimized + debuginfo] target(s) in 0.34s Copying stage0 std from stage0 (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu / x86_64-unknown-linux-musl) Building stage0 tool rust-installer (x86_64-unknown-linux-gnu) Finished release [optimized] target(s) in 0.35s Dist rust-std-1.67.1-x86_64-unknown-linux-musl Error: failed to generate installer Caused by: 0: failed to tar file '/home/AAAAAAAAAAAAAA/BBBBBB/CCCC/DDD/EEEEE/FFFFFFFFFFFF/GGGGGGGGGGGGGGGG/HHHHHHHHHH/IIIIIIIIIIIIIII/JJJJJ/KKKKKKK/src/build/tmp/tarball/rust-std/x86_64-unknown-linux-musl/rust-std-1.67.1-x86_64-unknown-linux-musl/rust-std-x86_64-unknown-linux-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/self-contained/libc.a' 1: provided value is too long when setting link name for Build completed unsuccessfully in 0:00:03 The fix is to make use of the widely-supported GNU tar extensions which lift this restriction. Switching to [`tar::Builder::append_link`] takes care of that for us. See also alexcrichton/tar-rs#273. [`tar::Builder::append_link`]: https://docs.rs/tar/0.4.38/tar/struct.Builder.html#method.append_link
…crum [rust-installer] Allow long link names in tar files Without this, users trying to run `x.py dist` under a sufficiently long path run into problems when we build the resulting tarballs due to length limits in the original tar spec. The error looks like: Finished release [optimized + debuginfo] target(s) in 0.34s Copying stage0 std from stage0 (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu / x86_64-unknown-linux-musl) Building stage0 tool rust-installer (x86_64-unknown-linux-gnu) Finished release [optimized] target(s) in 0.35s Dist rust-std-1.67.1-x86_64-unknown-linux-musl Error: failed to generate installer Caused by: 0: failed to tar file '/home/AAAAAAAAAAAAAA/BBBBBB/CCCC/DDD/EEEEE/FFFFFFFFFFFF/GGGGGGGGGGGGGGGG/HHHHHHHHHH/IIIIIIIIIIIIIII/JJJJJ/KKKKKKK/src/build/tmp/tarball/rust-std/x86_64-unknown-linux-musl/rust-std-1.67.1-x86_64-unknown-linux-musl/rust-std-x86_64-unknown-linux-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/self-contained/libc.a' 1: provided value is too long when setting link name for Build completed unsuccessfully in 0:00:03 The fix is to make use of the widely-supported GNU tar extensions which lift this restriction. Switching to [`tar::Builder::append_link`] takes care of that for us. See also alexcrichton/tar-rs#273. [`tar::Builder::append_link`]: https://docs.rs/tar/0.4.38/tar/struct.Builder.html#method.append_link
[rust-installer] Allow long link names in tar files Without this, users trying to run `x.py dist` under a sufficiently long path run into problems when we build the resulting tarballs due to length limits in the original tar spec. The error looks like: Finished release [optimized + debuginfo] target(s) in 0.34s Copying stage0 std from stage0 (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu / x86_64-unknown-linux-musl) Building stage0 tool rust-installer (x86_64-unknown-linux-gnu) Finished release [optimized] target(s) in 0.35s Dist rust-std-1.67.1-x86_64-unknown-linux-musl Error: failed to generate installer Caused by: 0: failed to tar file '/home/AAAAAAAAAAAAAA/BBBBBB/CCCC/DDD/EEEEE/FFFFFFFFFFFF/GGGGGGGGGGGGGGGG/HHHHHHHHHH/IIIIIIIIIIIIIII/JJJJJ/KKKKKKK/src/build/tmp/tarball/rust-std/x86_64-unknown-linux-musl/rust-std-1.67.1-x86_64-unknown-linux-musl/rust-std-x86_64-unknown-linux-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/self-contained/libc.a' 1: provided value is too long when setting link name for Build completed unsuccessfully in 0:00:03 The fix is to make use of the widely-supported GNU tar extensions which lift this restriction. Switching to [`tar::Builder::append_link`] takes care of that for us. See also alexcrichton/tar-rs#273. [`tar::Builder::append_link`]: https://docs.rs/tar/0.4.38/tar/struct.Builder.html#method.append_link
We should support appending long symlink targets, because this
occurs in real world filesystems. In my case, RPM set up
.build-id
symlinks which can get long.Add an
append_link()
method following the precendent ofappend_path()
- we're just supporting two potentiallylong filenames.
As a side benefit, we can just do the
std::io::empty()
danceinternally and not require the caller to specify it.
The addition of special case
append()
methods is unfortunate,because the header API methods are then really an attractive nuisance.
We should potentially consider deprecating them.
Closes: #192