aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCherry Mui <cherryyz@google.com>2024-01-24 15:00:47 -0500
committerCherry Mui <cherryyz@google.com>2024-01-24 21:35:52 +0000
commit333ecd4b40a7c394366149ba3e87a519192836ce (patch)
treee2bb73db7cd5f706ed82707bb6351e47af8336ac
parent1e1da4910546d7ef7e256011f165cb6be1d56451 (diff)
downloadgo-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.txt9
-rw-r--r--src/archive/tar/common.go32
-rw-r--r--src/archive/tar/stat_unix.go10
-rw-r--r--src/archive/tar/tar_test.go68
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")
- }
-}