Description: <short summary of the patch>
 TODO: Put a short summary on the line above and replace this paragraph
 with a longer explanation of this change. Complete the meta-information
 with other relevant fields (see below for details). To make it easier, the
 information below has been extracted from the changelog. Adjust it or drop
 it.
 .
 snapd (2.20-1) unstable; urgency=medium
 .
   * New upstream release.
Author: Michael Hudson-Doyle <michael.hudson@ubuntu.com>

---
The information above should follow the Patch Tagging Guidelines, please
checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here
are templates for supplementary fields that you might want to add:

Origin: <vendor|upstream|other>, <url of original patch>
Bug: <url in upstream bugtracker>
Bug-Debian: https://bugs.debian.org/<bugnumber>
Bug-Ubuntu: https://launchpad.net/bugs/<bugnumber>
Forwarded: <no|not-needed|url proving that it has been forwarded>
Reviewed-By: <name and email of someone who approved the patch>
Last-Update: <YYYY-MM-DD>

--- snapd-2.21.orig/progress/progress.go
+++ snapd-2.21/progress/progress.go
@@ -25,7 +25,7 @@ import (
 	"os"
 	"unicode"
 
-	"github.com/cheggaaa/pb"
+	"gopkg.in/cheggaaa/pb.v1"
 	"golang.org/x/crypto/ssh/terminal"
 )
 
--- snapd-2.21.orig/cmd/snap/cmd_interfaces_test.go
+++ snapd-2.21/cmd/snap/cmd_interfaces_test.go
@@ -60,7 +60,8 @@ Help Options:
       -i=                          Constrain listing to specific interfaces
 
 [interfaces command arguments]
-  <snap>:<slot or plug>:           Constrain listing to a specific snap or snap:name
+  <snap>:<slot or plug>:           Constrain listing to a specific snap or
+                                   snap:name
 `
 	rest, err := Parser().ParseArgs([]string{"interfaces", "--help"})
 	c.Assert(err.Error(), Equals, msg)
--- snapd-2.21.orig/i18n/i18n.go
+++ snapd-2.21/i18n/i18n.go
@@ -21,82 +21,15 @@ package i18n
 
 //go:generate update-pot
 
-import (
-	"fmt"
-	"os"
-	"path/filepath"
-	"strings"
-
-	/* this is actually "github.com/ojii/gettext.go", however because
-	     https://github.com/ojii/gettext.go/pull/4
-	   is not merged as of this writtting we want to use this fork
-	*/
-	"github.com/mvo5/gettext.go"
-
-	"github.com/snapcore/snapd/osutil"
-)
-
-// TEXTDOMAIN is the message domain used by snappy; see dgettext(3)
-// for more information.
-var (
-	TEXTDOMAIN   = "snappy"
-	locale       gettext.Catalog
-	translations gettext.Translations
-)
-
-func init() {
-	bindTextDomain(TEXTDOMAIN, "/usr/share/locale")
-	setLocale("")
-}
-
-func langpackResolver(root string, locale string, domain string) string {
-
-	// first check for the real locale (e.g. de_DE)
-	// then try to simplify the locale (e.g. de_DE -> de)
-	locales := []string{locale, strings.SplitN(locale, "_", 2)[0]}
-	for _, locale := range locales {
-		r := filepath.Join(locale, "LC_MESSAGES", fmt.Sprintf("%s.mo", domain))
-
-		// ubuntu uses /usr/lib/locale-langpack and patches the glibc gettext
-		// implementation
-		langpack := filepath.Join(root, "..", "locale-langpack", r)
-		if osutil.FileExists(langpack) {
-			return langpack
-		}
-
-		regular := filepath.Join(root, r)
-		if osutil.FileExists(regular) {
-			return regular
-		}
-	}
-
-	return ""
-}
+import ()
 
 func bindTextDomain(domain, dir string) {
-	translations = gettext.NewTranslations(dir, domain, langpackResolver)
 }
 
 func setLocale(loc string) {
-	if loc == "" {
-		loc = os.Getenv("LC_MESSAGES")
-		if loc == "" {
-			loc = os.Getenv("LANG")
-		}
-	}
-	// de_DE.UTF-8, de_DE@euro all need to get simplified
-	loc = strings.Split(loc, "@")[0]
-	loc = strings.Split(loc, ".")[0]
-
-	locale = translations.Locale(loc)
 }
 
 // G is the shorthand for Gettext
 func G(msgid string) string {
-	return locale.Gettext(msgid)
-}
-
-// NG is the shorthand for NGettext
-func NG(msgid string, msgidPlural string, n uint32) string {
-	return locale.NGettext(msgid, msgidPlural, n)
+	return msgid
 }
--- snapd-2.21.orig/vendor/vendor.json
+++ snapd-2.21/vendor/vendor.json
@@ -43,18 +43,6 @@
 			"revisionTime": "2016-02-27T09:34:14Z"
 		},
 		{
-			"checksumSHA1": "MXOfmoFN5PBz/N5pDNrFe9ugYf8=",
-			"path": "github.com/mvo5/gettext.go",
-			"revision": "da4fdf605f1b0e2aa523423db5c0a3f727d62019",
-			"revisionTime": "2016-12-13T07:12:38Z"
-		},
-		{
-			"checksumSHA1": "wClBtrHsGvzusCkIFdF78Iak6y0=",
-			"path": "github.com/mvo5/gettext.go/pluralforms",
-			"revision": "da4fdf605f1b0e2aa523423db5c0a3f727d62019",
-			"revisionTime": "2016-12-13T07:12:38Z"
-		},
-		{
 			"checksumSHA1": "bzUdFxQ29mPK0lwgFVcF0GFN74Q=",
 			"path": "github.com/mvo5/goconfigparser",
 			"revision": "26426272dda20cc76aa1fa44286dc743d2972fe8",
--- snapd-2.21.orig/i18n/i18n_test.go
+++ /dev/null
@@ -1,129 +0,0 @@
-// -*- Mode: Go; indent-tabs-mode: t -*-
-
-/*
- * Copyright (C) 2014-2015 Canonical Ltd
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 3 as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-package i18n
-
-import (
-	"io/ioutil"
-	"os"
-	"os/exec"
-	"path/filepath"
-	"testing"
-
-	. "gopkg.in/check.v1"
-)
-
-// Hook up check.v1 into the "go test" runner
-func Test(t *testing.T) { TestingT(t) }
-
-var mockLocalePo = []byte(`
-msgid ""
-msgstr ""
-"Project-Id-Version: snappy\n"
-"Report-Msgid-Bugs-To: snappy-devel@lists.ubuntu.com\n"
-"POT-Creation-Date: 2015-06-16 09:08+0200\n"
-"Language: en_DK\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;>\n"
-
-msgid "plural_1"
-msgid_plural "plural_2"
-msgstr[0] "translated plural_1"
-msgstr[1] "translated plural_2"
-
-msgid "singular"
-msgstr "translated singular"
-`)
-
-func makeMockTranslations(c *C, localeDir string) {
-	fullLocaleDir := filepath.Join(localeDir, "en_DK", "LC_MESSAGES")
-	err := os.MkdirAll(fullLocaleDir, 0755)
-	c.Assert(err, IsNil)
-
-	po := filepath.Join(fullLocaleDir, "snappy-test.po")
-	mo := filepath.Join(fullLocaleDir, "snappy-test.mo")
-	err = ioutil.WriteFile(po, mockLocalePo, 0644)
-	c.Assert(err, IsNil)
-
-	cmd := exec.Command("msgfmt", po, "--output-file", mo)
-	cmd.Stdout = os.Stdout
-	cmd.Stderr = os.Stderr
-	err = cmd.Run()
-	c.Assert(err, IsNil)
-}
-
-type i18nTestSuite struct {
-	origLang       string
-	origLcMessages string
-}
-
-var _ = Suite(&i18nTestSuite{})
-
-func (s *i18nTestSuite) SetUpTest(c *C) {
-	// this dir contains a special hand-crafted en_DK/snappy-test.mo
-	// file
-	localeDir := c.MkDir()
-	makeMockTranslations(c, localeDir)
-
-	// we use a custom test mo file
-	TEXTDOMAIN = "snappy-test"
-
-	s.origLang = os.Getenv("LANG")
-	s.origLcMessages = os.Getenv("LC_MESSAGES")
-
-	bindTextDomain("snappy-test", localeDir)
-	os.Setenv("LANG", "en_DK.UTF-8")
-	setLocale("")
-}
-
-func (s *i18nTestSuite) TearDownTest(c *C) {
-	os.Setenv("LANG", s.origLang)
-	os.Setenv("LC_MESSAGES", s.origLcMessages)
-}
-
-func (s *i18nTestSuite) TestTranslatedSingular(c *C) {
-	// no G() to avoid adding the test string to snappy-pot
-	var Gtest = G
-	c.Assert(Gtest("singular"), Equals, "translated singular")
-}
-
-func (s *i18nTestSuite) TestTranslatesPlural(c *C) {
-	// no NG() to avoid adding the test string to snappy-pot
-	var NGtest = NG
-	c.Assert(NGtest("plural_1", "plural_2", 1), Equals, "translated plural_1")
-}
-
-func (s *i18nTestSuite) TestTranslatedMissingLangNoCrash(c *C) {
-	setLocale("invalid")
-
-	// no G() to avoid adding the test string to snappy-pot
-	var Gtest = G
-	c.Assert(Gtest("singular"), Equals, "singular")
-}
-
-func (s *i18nTestSuite) TestInvalidTextDomainDir(c *C) {
-	bindTextDomain("snappy-test", "/random/not/existing/dir")
-	setLocale("invalid")
-
-	// no G() to avoid adding the test string to snappy-pot
-	var Gtest = G
-	c.Assert(Gtest("singular"), Equals, "singular")
-}
--- snapd-2.21.orig/tests/main/i18n/task.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-summary: Test that i18n works
-
-execute: |
-    LANG=de_DE.UTF-8 snap changes everything | MATCH "Ja, ja, allerdings."
--- snapd-2.21.orig/cmd/snap-confine/snap-confine.apparmor.in
+++ snapd-2.21/cmd/snap-confine/snap-confine.apparmor.in
@@ -355,4 +355,9 @@
 
     # Allow snap-confine to be killed
     signal (receive) peer=unconfined,
+
+    # Required when using unpatched upstream kernel
+    capability sys_ptrace,
+    # Debian compiles snap-confine without AppArmor, so allow running snaps unconfined
+    /usr/lib/snapd/snap-exec uxr,
 }
