Ping? Can we please get this merged? It's blocking docker 0.8.1

Thanks!
  Paul

On Wed, Feb 19, 2014 at 11:56:10PM -0800, Johan Euphrosine wrote:
> Package: golang
> Version: 2:1.2-2
> Severity: wishlist
> 
> to backport support for tar xattr from upcoming golang1.3
> ---
>  debian/golang-src.install                  |   1 +
>  debian/patches/add-tar-xattr-support.patch | 175 
> +++++++++++++++++++++++++++++
>  debian/patches/series                      |   1 +
>  debian/source/include-binaries             |   1 +
>  debian/xattrs.tar                          | Bin 0 -> 5120 bytes
>  5 files changed, 178 insertions(+)
>  create mode 100644 debian/patches/add-tar-xattr-support.patch
>  create mode 100644 debian/source/include-binaries
>  create mode 100644 debian/xattrs.tar
> 
> diff --git a/debian/golang-src.install b/debian/golang-src.install
> index f034ba5..726c5b4 100644
> --- a/debian/golang-src.install
> +++ b/debian/golang-src.install
> @@ -1,2 +1,3 @@
>  src /usr/share/go/
>  test /usr/share/go/
> +debian/xattrs.tar /usr/share/go/src/pkg/archive/tar/testdata
> diff --git a/debian/patches/add-tar-xattr-support.patch 
> b/debian/patches/add-tar-xattr-support.patch
> new file mode 100644
> index 0000000..904e011
> --- /dev/null
> +++ b/debian/patches/add-tar-xattr-support.patch
> @@ -0,0 +1,175 @@
> +--- a/src/pkg/archive/tar/common.go
> ++++ b/src/pkg/archive/tar/common.go
> +@@ -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     = ""
> + )
> + 
> +--- a/src/pkg/archive/tar/reader.go
> ++++ b/src/pkg/archive/tar/reader.go
> +@@ -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
> + }
> +--- a/src/pkg/archive/tar/reader_test.go
> ++++ b/src/pkg/archive/tar/reader_test.go
> +@@ -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])
> +             }
> +Binary files /dev/null and b/src/pkg/archive/tar/testdata/xattrs.tar differ
> +--- a/src/pkg/archive/tar/writer.go
> ++++ b/src/pkg/archive/tar/writer.go
> +@@ -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
> +--- a/src/pkg/archive/tar/writer_test.go
> ++++ b/src/pkg/archive/tar/writer_test.go
> +@@ -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/debian/patches/series b/debian/patches/series
> index 6da8b45..0a51bc1 100644
> --- a/debian/patches/series
> +++ b/debian/patches/series
> @@ -1 +1,2 @@
>  add-src-pkg-debug-elf-testdata-hello.patch
> +add-tar-xattr-support.patch
> diff --git a/debian/source/include-binaries b/debian/source/include-binaries
> new file mode 100644
> index 0000000..0222ae3
> --- /dev/null
> +++ b/debian/source/include-binaries
> @@ -0,0 +1 @@
> +debian/xattrs.tar
> \ No newline at end of file
> diff --git a/debian/xattrs.tar b/debian/xattrs.tar
> new file mode 100644
> index 
> 0000000000000000000000000000000000000000..9701950edd1f0dc82858b7117136b37391be0b08
> GIT binary patch
> literal 5120
> zcmeHJv2KGf5M|~o_yWg1+khiw>d;i}P^nX=$R$ooYd`|ilD{uBAv6g^kxC>6-(uu<
> zHg^v_-l5r}td>fyRbC(vfcdOQq}Iq(#u+Ja9X?}Dv(|CCVoJF~09ZgF;2a!G7^%~|
> zYNYoMUQ-rE=5<MfNf&^--n!;4I5LG45ME;9L@fvneeClfz=*LBI8bnFP`025LJ)!=
> zMno8J0GDDfIs&<m0>KzzBJ^EKyr-Mx-NQ4gq%k=v3zee}wOxElT`HH-ei(K*xV|_}
> zC{$GDvDu<R={PN`MVUrfx`|V@UX}Cg<y}Q)mCx5|BTH>oW?o>&odUrVuVHkt_w?IH
> zW3PV_@V!Jxt@A^i>Yrj(>;K=H?5X8!tJS~MYVd#a^`?|QJKb&Uduf~MfN4M7$J!Lr
> zF40zZMF!9x{tqJ#0F5+;{2!=)=Knre|G(mAKU`hAc#r>!#{V(9d;sW1hxVv7@B_zF
> ze)#eKF~#1~>@WTI`#+&4`lkel_5U6!N8h^5vRAE8lqGgr9-Ul!p=H1_U>TS&1K)l2
> B)fNB%
> 
> literal 0
> HcmV?d00001
> 
> -- 
> 1.9.0.rc1.175.g0b1dcb5
> 

-- 
 .''`.  Paul Tagliamonte <paul...@debian.org>  |   Proud Debian Developer
: :'  : 4096R / 8F04 9AD8 2C92 066C 7352  D28A 7B58 5B30 807C 2A87
`. `'`  http://people.debian.org/~paultag
 `-     http://people.debian.org/~paultag/conduct-statement.txt

Attachment: signature.asc
Description: Digital signature

Reply via email to