From 77cba216ba54726cd0e60a92a465105620d2e23e Mon Sep 17 00:00:00 2001 From: Vincent Batts Date: Tue, 18 Feb 2014 16:56:24 -0500 Subject: [PATCH 1/2] Provide 'go' --- golang.spec | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/golang.spec b/golang.spec index 21428aa..d9f4ca8 100644 --- a/golang.spec +++ b/golang.spec @@ -25,7 +25,7 @@ Name: golang Version: 1.2 -Release: 4%{?dist} +Release: 5%{?dist} Summary: The Go Programming Language License: BSD @@ -40,6 +40,8 @@ Patch1: golang-f21-hostname.patch BuildRequires: /bin/hostname %endif +Provides: go = %{version}-%{release} + BuildRequires: emacs # xemacs on fedora only %if 0%{?fedora} @@ -293,6 +295,9 @@ cp -av %{SOURCE101} $RPM_BUILD_ROOT%{_sysconfdir}/prelink.conf.d/golang.conf %changelog +* Tue Feb 18 2014 Vincent Batts 1.2-5 +- provide 'go', so users can yum install 'go' + * Thu Jan 24 2014 Vincent Batts 1.2-4 - skip a flaky test that is sporadically failing on the build server From 1318683961fedd00746cbe3146f7310b9a5ec024 Mon Sep 17 00:00:00 2001 From: Adam Miller Date: Wed, 19 Feb 2014 10:31:14 -0600 Subject: [PATCH 2/2] 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(-) create mode 100644 golang-1.2-archive_tar-xattr.patch delete mode 100644 golang-f21-hostname.patch 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 +# 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 + +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-f21-hostname.patch b/golang-f21-hostname.patch deleted file mode 100644 index acc3c6c..0000000 --- a/golang-f21-hostname.patch +++ /dev/null @@ -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) - } 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 1.2-6 +- pull in upstream archive/tar implementation that supports xattr for + docker 0.8.1 + * Tue Feb 18 2014 Vincent Batts 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