diff options
author | Cherry Mui <cherryyz@google.com> | 2024-01-24 15:00:47 -0500 |
---|---|---|
committer | Cherry Mui <cherryyz@google.com> | 2024-01-24 21:35:52 +0000 |
commit | 333ecd4b40a7c394366149ba3e87a519192836ce (patch) | |
tree | e2bb73db7cd5f706ed82707bb6351e47af8336ac | |
parent | 1e1da4910546d7ef7e256011f165cb6be1d56451 (diff) | |
download | go-333ecd4b40a7c394366149ba3e87a519192836ce.tar.gz go-333ecd4b40a7c394366149ba3e87a519192836ce.zip |
[release-branch.go1.22] Revert "archive/tar: add FileInfoNames interface"
This reverts CL 514235. Also reverts CL 518056 which is a followup
fix.
Reason for revert: Proposal #50102 defined an interface that is
too specific to UNIX-y systems and also didn't make much sense.
The proposal is un-accepted, and we'll revisit in Go 1.23.
Fixes #65245.
Updates #50102.
Change-Id: I41ba0ee286c1d893e6564a337e5d76418d19435d
Reviewed-on: https://go-review.googlesource.com/c/go/+/558295
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
(cherry picked from commit 5000b5168037d26a796da46a07088e834c3af1a0)
Reviewed-on: https://go-review.googlesource.com/c/go/+/558296
-rw-r--r-- | api/go1.22.txt | 9 | ||||
-rw-r--r-- | src/archive/tar/common.go | 32 | ||||
-rw-r--r-- | src/archive/tar/stat_unix.go | 10 | ||||
-rw-r--r-- | src/archive/tar/tar_test.go | 68 |
4 files changed, 0 insertions, 119 deletions
diff --git a/api/go1.22.txt b/api/go1.22.txt index 86eb80deaf..55f21857bc 100644 --- a/api/go1.22.txt +++ b/api/go1.22.txt @@ -1,13 +1,4 @@ pkg archive/tar, method (*Writer) AddFS(fs.FS) error #58000 -pkg archive/tar, type FileInfoNames interface { Gname, IsDir, ModTime, Mode, Name, Size, Sys, Uname } #50102 -pkg archive/tar, type FileInfoNames interface, Gname(int) (string, error) #50102 -pkg archive/tar, type FileInfoNames interface, IsDir() bool #50102 -pkg archive/tar, type FileInfoNames interface, ModTime() time.Time #50102 -pkg archive/tar, type FileInfoNames interface, Mode() fs.FileMode #50102 -pkg archive/tar, type FileInfoNames interface, Name() string #50102 -pkg archive/tar, type FileInfoNames interface, Size() int64 #50102 -pkg archive/tar, type FileInfoNames interface, Sys() interface{} #50102 -pkg archive/tar, type FileInfoNames interface, Uname(int) (string, error) #50102 pkg archive/zip, method (*Writer) AddFS(fs.FS) error #54898 pkg cmp, func Or[$0 comparable](...$0) $0 #60204 pkg crypto/x509, func OIDFromInts([]uint64) (OID, error) #60665 diff --git a/src/archive/tar/common.go b/src/archive/tar/common.go index e507d559cb..4910908f81 100644 --- a/src/archive/tar/common.go +++ b/src/archive/tar/common.go @@ -614,8 +614,6 @@ func (fi headerFileInfo) String() string { // sysStat, if non-nil, populates h from system-dependent fields of fi. var sysStat func(fi fs.FileInfo, h *Header) error -var loadUidAndGid func(fi fs.FileInfo, uid, gid *int) - const ( // Mode constants from the USTAR spec: // See http://pubs.opengroup.org/onlinepubs/9699919799/utilities/pax.html#tag_20_92_13_06 @@ -641,10 +639,6 @@ const ( // Since fs.FileInfo's Name method only returns the base name of // the file it describes, it may be necessary to modify Header.Name // to provide the full path name of the file. -// -// If fi implements [FileInfoNames] -// the Gname and Uname of the header are -// provided by the methods of the interface. func FileInfoHeader(fi fs.FileInfo, link string) (*Header, error) { if fi == nil { return nil, errors.New("archive/tar: FileInfo is nil") @@ -717,38 +711,12 @@ func FileInfoHeader(fi fs.FileInfo, link string) (*Header, error) { } } } - if iface, ok := fi.(FileInfoNames); ok { - var err error - if loadUidAndGid != nil { - loadUidAndGid(fi, &h.Uid, &h.Gid) - } - h.Gname, err = iface.Gname(h.Gid) - if err != nil { - return nil, err - } - h.Uname, err = iface.Uname(h.Uid) - if err != nil { - return nil, err - } - return h, nil - } if sysStat != nil { return h, sysStat(fi, h) } return h, nil } -// FileInfoNames extends [FileInfo] to translate UID/GID to names. -// Passing an instance of this to [FileInfoHeader] permits the caller -// to control UID/GID resolution. -type FileInfoNames interface { - fs.FileInfo - // Uname should translate a UID into a user name. - Uname(uid int) (string, error) - // Gname should translate a GID into a group name. - Gname(gid int) (string, error) -} - // isHeaderOnlyType checks if the given type flag is of the type that has no // data section even if a size is specified. func isHeaderOnlyType(flag byte) bool { diff --git a/src/archive/tar/stat_unix.go b/src/archive/tar/stat_unix.go index 5b23d3c830..0f3428bc24 100644 --- a/src/archive/tar/stat_unix.go +++ b/src/archive/tar/stat_unix.go @@ -17,7 +17,6 @@ import ( func init() { sysStat = statUnix - loadUidAndGid = loadUidAndGidFunc } // userMap and groupMap caches UID and GID lookups for performance reasons. @@ -100,12 +99,3 @@ func statUnix(fi fs.FileInfo, h *Header) error { } return nil } - -func loadUidAndGidFunc(fi fs.FileInfo, uid, gid *int) { - sys, ok := fi.Sys().(*syscall.Stat_t) - if !ok { - return - } - *uid = int(sys.Uid) - *gid = int(sys.Gid) -} diff --git a/src/archive/tar/tar_test.go b/src/archive/tar/tar_test.go index 49d31bb757..a476f5eb01 100644 --- a/src/archive/tar/tar_test.go +++ b/src/archive/tar/tar_test.go @@ -848,71 +848,3 @@ func Benchmark(b *testing.B) { }) } - -const ( - testUid = 10 - testGid = 20 -) - -type fileInfoNames struct{} - -func (f *fileInfoNames) Name() string { - return "tmp" -} - -func (f *fileInfoNames) Size() int64 { - return 0 -} - -func (f *fileInfoNames) Mode() fs.FileMode { - return 0777 -} - -func (f *fileInfoNames) ModTime() time.Time { - return time.Time{} -} - -func (f *fileInfoNames) IsDir() bool { - return false -} - -func (f *fileInfoNames) Sys() any { - return nil -} - -func (f *fileInfoNames) Uname(uid int) (string, error) { - if uid == testUid { - return "Uname", nil - } - return "", nil -} - -func (f *fileInfoNames) Gname(gid int) (string, error) { - if gid == testGid { - return "Gname", nil - } - return "", nil -} - -func TestFileInfoHeaderUseFileInfoNames(t *testing.T) { - origLoadUidAndGid := loadUidAndGid - defer func() { - loadUidAndGid = origLoadUidAndGid - }() - loadUidAndGid = func(fi fs.FileInfo, uid, gid *int) { - *uid = testUid - *gid = testGid - } - - info := &fileInfoNames{} - header, err := FileInfoHeader(info, "") - if err != nil { - t.Fatal(err) - } - if header.Uname != "Uname" { - t.Fatalf("header.Uname: got %v, want %v", header.Uname, "Uname") - } - if header.Gname != "Gname" { - t.Fatalf("header.Gname: got %v, want %v", header.Gname, "Gname") - } -} |