commit 1318683961fedd00746cbe3146f7310b9a5ec024
Author: Adam Miller <[email protected]>
Date: Wed Feb 19 10:31:14 2014 -0600
pull in xattr archive/tar from upstream
.gitignore | 1 +
golang-1.2-archive_tar-xattr.patch | 197 ++++++++++++++++++++++++++++++++++++
golang-f21-hostname.patch | 13 ---
golang.spec | 20 ++++-
sources | 1 +
5 files changed, 218 insertions(+), 14 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index b049d62..6caf296 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
/go1.1.1.src.tar.gz
/go1.1.2.src.tar.gz
/go1.2.src.tar.gz
+/golang-19087:a15f344a9efa-xattrs.tar
diff --git a/golang-1.2-archive_tar-xattr.patch
b/golang-1.2-archive_tar-xattr.patch
new file mode 100644
index 0000000..10c8f3d
--- /dev/null
+++ b/golang-1.2-archive_tar-xattr.patch
@@ -0,0 +1,197 @@
+# HG changeset patch
+# User Alexander Larsson <[email protected]>
+# 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 <[email protected]>
+
+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)
diff --git a/golang.spec b/golang.spec
index d9f4ca8..90b56be 100644
--- a/golang.spec
+++ b/golang.spec
@@ -25,7 +25,7 @@
Name: golang
Version: 1.2
-Release: 5%{?dist}
+Release: 6%{?dist}
Summary: The Go Programming Language
License: BSD
@@ -61,6 +61,11 @@ Patch2: golang-1.2-remove-ECC-p224.patch
# http://code.google.com/p/go/issues/detail?id=6522
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
Obsoletes: %{name}-docs < 1.1-4
@@ -72,6 +77,10 @@ ExclusiveArch: %{ix86} x86_64 %{arm}
Source100: golang-gdbinit
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
%{summary}.
@@ -135,6 +144,8 @@ end
%prep
%setup -q -n go
+cp %SOURCE400 src/pkg/archive/tar/testdata/xattrs.tar
+
# increase verbosity of build
%patch0 -p1
@@ -144,6 +155,9 @@ end
# skip flaky test
%patch3 -p1
+# new archive/tar implementation from upstream
+%patch4 -p1
+
# 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)
# 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
+* Wed Feb 19 2014 Adam Miller <[email protected]> 1.2-6
+- pull in upstream archive/tar implementation that supports xattr for
+ docker 0.8.1
+
* Tue Feb 18 2014 Vincent Batts <[email protected]> 1.2-5
- provide 'go', so users can yum install 'go'
diff --git a/sources b/sources
index f14eee7..506d921 100644
--- a/sources
+++ b/sources
@@ -1 +1,2 @@
c2ace56f6b6413a5c6318b9527a8b763 go1.2.src.tar.gz
+d76dc07e475b2905b5fec1cf319b6356 golang-19087:a15f344a9efa-xattrs.tar
_______________________________________________
golang mailing list
[email protected]
https://lists.fedoraproject.org/mailman/listinfo/golang