pull in xattr archive/tar from upstream
This commit is contained in:
parent
77cba216ba
commit
1318683961
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,3 +1,4 @@
|
|||||||
/go1.1.1.src.tar.gz
|
/go1.1.1.src.tar.gz
|
||||||
/go1.1.2.src.tar.gz
|
/go1.1.2.src.tar.gz
|
||||||
/go1.2.src.tar.gz
|
/go1.2.src.tar.gz
|
||||||
|
/golang-19087:a15f344a9efa-xattrs.tar
|
||||||
|
197
golang-1.2-archive_tar-xattr.patch
Normal file
197
golang-1.2-archive_tar-xattr.patch
Normal file
@ -0,0 +1,197 @@
|
|||||||
|
# HG changeset patch
|
||||||
|
# User Alexander Larsson <alexander.larsson@gmail.com>
|
||||||
|
# Date 1392282510 -39600
|
||||||
|
# Node ID a15f344a9efa35ef168c8feaa92a15a1cdc93db5
|
||||||
|
# Parent 1a32fe60e0798d82bbff6c945001c7f0ba8de5ea
|
||||||
|
archive/tar: support extended attributes
|
||||||
|
|
||||||
|
This adds support for archives with the SCHILY.xattr field in the
|
||||||
|
pax header. This is what gnu tar and star generate.
|
||||||
|
Fixes issue 7154.
|
||||||
|
|
||||||
|
LGTM=dsymonds
|
||||||
|
R=golang-codereviews, gobot, dsymonds
|
||||||
|
CC=golang-codereviews
|
||||||
|
https://codereview.appspot.com/54570043
|
||||||
|
|
||||||
|
Committer: David Symonds <dsymonds@golang.org>
|
||||||
|
|
||||||
|
diff -r 1a32fe60e079 -r a15f344a9efa src/pkg/archive/tar/common.go
|
||||||
|
--- a/src/pkg/archive/tar/common.go Thu Feb 13 03:09:03 2014 -0500
|
||||||
|
+++ b/src/pkg/archive/tar/common.go Thu Feb 13 20:08:30 2014 +1100
|
||||||
|
@@ -57,6 +57,7 @@
|
||||||
|
Devminor int64 // minor number of character or block device
|
||||||
|
AccessTime time.Time // access time
|
||||||
|
ChangeTime time.Time // status change time
|
||||||
|
+ Xattrs map[string]string
|
||||||
|
}
|
||||||
|
|
||||||
|
// File name constants from the tar spec.
|
||||||
|
@@ -189,6 +190,7 @@
|
||||||
|
paxSize = "size"
|
||||||
|
paxUid = "uid"
|
||||||
|
paxUname = "uname"
|
||||||
|
+ paxXattr = "SCHILY.xattr."
|
||||||
|
paxNone = ""
|
||||||
|
)
|
||||||
|
|
||||||
|
diff -r 1a32fe60e079 -r a15f344a9efa src/pkg/archive/tar/reader.go
|
||||||
|
--- a/src/pkg/archive/tar/reader.go Thu Feb 13 03:09:03 2014 -0500
|
||||||
|
+++ b/src/pkg/archive/tar/reader.go Thu Feb 13 20:08:30 2014 +1100
|
||||||
|
@@ -139,8 +139,14 @@
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
hdr.Size = int64(size)
|
||||||
|
+ default:
|
||||||
|
+ if strings.HasPrefix(k, paxXattr) {
|
||||||
|
+ if hdr.Xattrs == nil {
|
||||||
|
+ hdr.Xattrs = make(map[string]string)
|
||||||
|
+ }
|
||||||
|
+ hdr.Xattrs[k[len(paxXattr):]] = v
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
-
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
diff -r 1a32fe60e079 -r a15f344a9efa src/pkg/archive/tar/reader_test.go
|
||||||
|
--- a/src/pkg/archive/tar/reader_test.go Thu Feb 13 03:09:03 2014 -0500
|
||||||
|
+++ b/src/pkg/archive/tar/reader_test.go Thu Feb 13 20:08:30 2014 +1100
|
||||||
|
@@ -161,6 +161,46 @@
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
+ {
|
||||||
|
+ file: "testdata/xattrs.tar",
|
||||||
|
+ headers: []*Header{
|
||||||
|
+ {
|
||||||
|
+ Name: "small.txt",
|
||||||
|
+ Mode: 0644,
|
||||||
|
+ Uid: 1000,
|
||||||
|
+ Gid: 10,
|
||||||
|
+ Size: 5,
|
||||||
|
+ ModTime: time.Unix(1386065770, 448252320),
|
||||||
|
+ Typeflag: '0',
|
||||||
|
+ Uname: "alex",
|
||||||
|
+ Gname: "wheel",
|
||||||
|
+ AccessTime: time.Unix(1389782991, 419875220),
|
||||||
|
+ ChangeTime: time.Unix(1389782956, 794414986),
|
||||||
|
+ Xattrs: map[string]string{
|
||||||
|
+ "user.key": "value",
|
||||||
|
+ "user.key2": "value2",
|
||||||
|
+ // Interestingly, selinux encodes the terminating null inside the xattr
|
||||||
|
+ "security.selinux": "unconfined_u:object_r:default_t:s0\x00",
|
||||||
|
+ },
|
||||||
|
+ },
|
||||||
|
+ {
|
||||||
|
+ Name: "small2.txt",
|
||||||
|
+ Mode: 0644,
|
||||||
|
+ Uid: 1000,
|
||||||
|
+ Gid: 10,
|
||||||
|
+ Size: 11,
|
||||||
|
+ ModTime: time.Unix(1386065770, 449252304),
|
||||||
|
+ Typeflag: '0',
|
||||||
|
+ Uname: "alex",
|
||||||
|
+ Gname: "wheel",
|
||||||
|
+ AccessTime: time.Unix(1389782991, 419875220),
|
||||||
|
+ ChangeTime: time.Unix(1386065770, 449252304),
|
||||||
|
+ Xattrs: map[string]string{
|
||||||
|
+ "security.selinux": "unconfined_u:object_r:default_t:s0\x00",
|
||||||
|
+ },
|
||||||
|
+ },
|
||||||
|
+ },
|
||||||
|
+ },
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestReader(t *testing.T) {
|
||||||
|
@@ -180,7 +220,7 @@
|
||||||
|
f.Close()
|
||||||
|
continue testLoop
|
||||||
|
}
|
||||||
|
- if *hdr != *header {
|
||||||
|
+ if !reflect.DeepEqual(*hdr, *header) {
|
||||||
|
t.Errorf("test %d, entry %d: Incorrect header:\nhave %+v\nwant %+v",
|
||||||
|
i, j, *hdr, *header)
|
||||||
|
}
|
||||||
|
@@ -253,7 +293,7 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
// check the header
|
||||||
|
- if *hdr != *headers[nread] {
|
||||||
|
+ if !reflect.DeepEqual(*hdr, *headers[nread]) {
|
||||||
|
t.Errorf("Incorrect header:\nhave %+v\nwant %+v",
|
||||||
|
*hdr, headers[nread])
|
||||||
|
}
|
||||||
|
diff -r 1a32fe60e079 -r a15f344a9efa src/pkg/archive/tar/writer.go
|
||||||
|
--- a/src/pkg/archive/tar/writer.go Thu Feb 13 03:09:03 2014 -0500
|
||||||
|
+++ b/src/pkg/archive/tar/writer.go Thu Feb 13 20:08:30 2014 +1100
|
||||||
|
@@ -236,6 +236,12 @@
|
||||||
|
return tw.err
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if allowPax {
|
||||||
|
+ for k, v := range hdr.Xattrs {
|
||||||
|
+ paxHeaders[paxXattr+k] = v
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if len(paxHeaders) > 0 {
|
||||||
|
if !allowPax {
|
||||||
|
return errInvalidHeader
|
||||||
|
diff -r 1a32fe60e079 -r a15f344a9efa src/pkg/archive/tar/writer_test.go
|
||||||
|
--- a/src/pkg/archive/tar/writer_test.go Thu Feb 13 03:09:03 2014 -0500
|
||||||
|
+++ b/src/pkg/archive/tar/writer_test.go Thu Feb 13 20:08:30 2014 +1100
|
||||||
|
@@ -10,6 +10,7 @@
|
||||||
|
"io"
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
+ "reflect"
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
"testing/iotest"
|
||||||
|
@@ -338,6 +339,45 @@
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+func TestPaxXattrs(t *testing.T) {
|
||||||
|
+ xattrs := map[string]string{
|
||||||
|
+ "user.key": "value",
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ // Create an archive with an xattr
|
||||||
|
+ fileinfo, err := os.Stat("testdata/small.txt")
|
||||||
|
+ if err != nil {
|
||||||
|
+ t.Fatal(err)
|
||||||
|
+ }
|
||||||
|
+ hdr, err := FileInfoHeader(fileinfo, "")
|
||||||
|
+ if err != nil {
|
||||||
|
+ t.Fatalf("os.Stat: %v", err)
|
||||||
|
+ }
|
||||||
|
+ contents := "Kilts"
|
||||||
|
+ hdr.Xattrs = xattrs
|
||||||
|
+ var buf bytes.Buffer
|
||||||
|
+ writer := NewWriter(&buf)
|
||||||
|
+ if err := writer.WriteHeader(hdr); err != nil {
|
||||||
|
+ t.Fatal(err)
|
||||||
|
+ }
|
||||||
|
+ if _, err = writer.Write([]byte(contents)); err != nil {
|
||||||
|
+ t.Fatal(err)
|
||||||
|
+ }
|
||||||
|
+ if err := writer.Close(); err != nil {
|
||||||
|
+ t.Fatal(err)
|
||||||
|
+ }
|
||||||
|
+ // Test that we can get the xattrs back out of the archive.
|
||||||
|
+ reader := NewReader(&buf)
|
||||||
|
+ hdr, err = reader.Next()
|
||||||
|
+ if err != nil {
|
||||||
|
+ t.Fatal(err)
|
||||||
|
+ }
|
||||||
|
+ if !reflect.DeepEqual(hdr.Xattrs, xattrs) {
|
||||||
|
+ t.Fatalf("xattrs did not survive round trip: got %+v, want %+v",
|
||||||
|
+ hdr.Xattrs, xattrs)
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
func TestPAXHeader(t *testing.T) {
|
||||||
|
medName := strings.Repeat("CD", 50)
|
||||||
|
longName := strings.Repeat("AB", 100)
|
@ -1,13 +0,0 @@
|
|||||||
Index: go/src/pkg/os/os_test.go
|
|
||||||
===================================================================
|
|
||||||
--- go.orig/src/pkg/os/os_test.go
|
|
||||||
+++ go/src/pkg/os/os_test.go
|
|
||||||
@@ -842,7 +842,7 @@ func run(t *testing.T, cmd []string) str
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
- p, err := StartProcess("/bin/hostname", []string{"hostname"}, &ProcAttr{Files: []*File{nil, w, Stderr}})
|
|
||||||
+ p, err := StartProcess("/usr/bin/hostname", []string{"hostname"}, &ProcAttr{Files: []*File{nil, w, Stderr}})
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
20
golang.spec
20
golang.spec
@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
Name: golang
|
Name: golang
|
||||||
Version: 1.2
|
Version: 1.2
|
||||||
Release: 5%{?dist}
|
Release: 6%{?dist}
|
||||||
Summary: The Go Programming Language
|
Summary: The Go Programming Language
|
||||||
|
|
||||||
License: BSD
|
License: BSD
|
||||||
@ -61,6 +61,11 @@ Patch2: golang-1.2-remove-ECC-p224.patch
|
|||||||
# http://code.google.com/p/go/issues/detail?id=6522
|
# http://code.google.com/p/go/issues/detail?id=6522
|
||||||
Patch3: ./golang-1.2-skipCpuProfileTest.patch
|
Patch3: ./golang-1.2-skipCpuProfileTest.patch
|
||||||
|
|
||||||
|
# Pull in new archive/tar upstream patch to support xattrs for
|
||||||
|
# docker-0.8.1
|
||||||
|
# https://code.google.com/p/go/source/detail?r=a15f344a9efa
|
||||||
|
Patch4: golang-1.2-archive_tar-xattr.patch
|
||||||
|
|
||||||
# Having documentation separate was broken
|
# Having documentation separate was broken
|
||||||
Obsoletes: %{name}-docs < 1.1-4
|
Obsoletes: %{name}-docs < 1.1-4
|
||||||
|
|
||||||
@ -72,6 +77,10 @@ ExclusiveArch: %{ix86} x86_64 %{arm}
|
|||||||
Source100: golang-gdbinit
|
Source100: golang-gdbinit
|
||||||
Source101: golang-prelink.conf
|
Source101: golang-prelink.conf
|
||||||
|
|
||||||
|
# Patch4 - pull in new archive/tar upstream patch, this file is part
|
||||||
|
# of the upstream merge and is used for test cases.
|
||||||
|
Source400: golang-19087:a15f344a9efa-xattrs.tar
|
||||||
|
|
||||||
%description
|
%description
|
||||||
%{summary}.
|
%{summary}.
|
||||||
|
|
||||||
@ -135,6 +144,8 @@ end
|
|||||||
%prep
|
%prep
|
||||||
%setup -q -n go
|
%setup -q -n go
|
||||||
|
|
||||||
|
cp %SOURCE400 src/pkg/archive/tar/testdata/xattrs.tar
|
||||||
|
|
||||||
# increase verbosity of build
|
# increase verbosity of build
|
||||||
%patch0 -p1
|
%patch0 -p1
|
||||||
|
|
||||||
@ -144,6 +155,9 @@ end
|
|||||||
# skip flaky test
|
# skip flaky test
|
||||||
%patch3 -p1
|
%patch3 -p1
|
||||||
|
|
||||||
|
# new archive/tar implementation from upstream
|
||||||
|
%patch4 -p1
|
||||||
|
|
||||||
# create a [dirty] gcc wrapper to allow us to build with our own flags
|
# create a [dirty] gcc wrapper to allow us to build with our own flags
|
||||||
# (dirty because it is spoofing 'gcc' since CC value is stored in the go tool)
|
# (dirty because it is spoofing 'gcc' since CC value is stored in the go tool)
|
||||||
# TODO: remove this and just set CFLAGS/LDFLAGS once upstream supports it
|
# TODO: remove this and just set CFLAGS/LDFLAGS once upstream supports it
|
||||||
@ -295,6 +309,10 @@ cp -av %{SOURCE101} $RPM_BUILD_ROOT%{_sysconfdir}/prelink.conf.d/golang.conf
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Feb 19 2014 Adam Miller <maxamillion@fedoraproject.org> 1.2-6
|
||||||
|
- pull in upstream archive/tar implementation that supports xattr for
|
||||||
|
docker 0.8.1
|
||||||
|
|
||||||
* Tue Feb 18 2014 Vincent Batts <vbatts@redhat.com> 1.2-5
|
* Tue Feb 18 2014 Vincent Batts <vbatts@redhat.com> 1.2-5
|
||||||
- provide 'go', so users can yum install 'go'
|
- provide 'go', so users can yum install 'go'
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user