]> Cypherpunks.ru repositories - gostls13.git/commitdiff
[release-branch.go1.22] Revert "archive/tar: add FileInfoNames interface"
authorCherry Mui <cherryyz@google.com>
Wed, 24 Jan 2024 20:00:47 +0000 (15:00 -0500)
committerCherry Mui <cherryyz@google.com>
Wed, 24 Jan 2024 21:35:52 +0000 (21:35 +0000)
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

api/go1.22.txt
src/archive/tar/common.go
src/archive/tar/stat_unix.go
src/archive/tar/tar_test.go

index 86eb80deafe4a1fde03373773b9d30099f70883b..55f21857bc5d642e2f468b4322ce5f8a411fe172 100644 (file)
@@ -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
index e507d559cb60b97bdce679bef661863ae5930f9f..4910908f81e64f9dbf746dc862fa8bc902b9adac 100644 (file)
@@ -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 {
index 5b23d3c8302f488cee4f504183fc20b32a1bc10a..0f3428bc24b47d3683ace47bd38bd0548f7d5dd7 100644 (file)
@@ -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)
-}
index 49d31bb757bcdecb948baa0b443896fe41bf9193..a476f5eb010f21d7cc4559bf860a83aa516a0553 100644 (file)
@@ -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")
-       }
-}