oras-project / oras

OCI registry client - managing content like artifacts, images, packages
https://oras.land
Apache License 2.0
1.42k stars 172 forks source link

Durable mkdir using oras pull #1457

Open mushka-stara opened 1 month ago

mushka-stara commented 1 month ago

What happened in your environment?

Error: failed to extract tar to C:\temp\org_platypus-hatchery: mkdir C:\temp\org_platypus-hatchery\dashboards\Inflation - US ZOO: NonAvian Data (Reptiles, Amphibians, etc): The directory name is invalid.

(There are two problems here, first are invalid characters, the colon, in the directory name. oras could possibly defensively escape the colon with something like whatever is used in html, whatever works. The second problem is a bit more fundamental, where the user will have used a descriptive long directory name in the original application, in this case Grafana. For me, it would be sufficient to address this second problem.)

What did you expect to happen?

orcas pull should have at least done mkdir "C:\temp\org_platypus-hatchery\dashboards\Inflation - US ZOO NonAvian Data (Reptiles, Amphibians, etc)" (put double quotes around the windows directory name and maybe remove invalid characters) As for the other problem, the vendor Grafana has been informed.

How can we reproduce it?

orcas pull a registry containing

What is the version of your ORAS CLI?

C:\temp>oras version Version: 1.2.0 Go version: go1.22.3 Git commit: dcef719e208a9b226b15bc6512ad729a7dd93270 Git tree state: clean

What is your OS environment?

WIndows 10

Are you willing to submit PRs to fix it?

shizhMSFT commented 1 month ago

Linking #1159 as a potential workaround.

shizhMSFT commented 1 month ago

Tested with tar in Windows 11, invalid characters like : in the file name is converted to _ in windows.

shizhMSFT commented 1 month ago

Repo steps: On Linux with Bash:

$ echo hello world > "hello: world"
$ ls
'hello: world'
$ tar cf hello.tar hello\:\ world

Copy hello.tar to Windows. On windows with PowerShell,

> tar.exe xvf .\hello.tar
x hello: world
> dir

    Directory: D:\Test

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         7/30/2024   1:53 PM          10240 hello.tar
-a----         7/30/2024   1:52 PM             12 hello_ world
FeynmanZhou commented 1 month ago

Linking #1159 as a potential workaround.

@mushka-stara If ORAS allows to customize file/directory name in oras pull, will it resolve your issue?

qweeah commented 1 month ago

It's hard to cover all edge cases for pathing, e.g. a Linux user may create a file named C:\Users\my\file and on windows it will always be parsed as absolute path. Rather than adding special handling for OS specific characters, I suggest 1) content producer should remove those characters before pushing via oras or 2) content consumer should utlize facilities like #1159 to customize pulled artifacts.

mushka-stara commented 1 month ago

@FeynmanZhou custom directory or file name would work well @shizhMSFT WIndows 11 name substitution with _ also good, easy to explain @qweeah in contact with contact producer, so far no answer. I have advised our users to use Linux for now, though our company is moving to more Windows 😢 for end-user computing Thanks very much for looking at the problem