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

Reply via email to