[lxc-devel] [lxd/master] Implement symlink transfer
stgraber on Github
lxc-bot at linuxcontainers.org
Sun Jul 2 05:08:02 UTC 2017
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 301 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20170702/7bc874ff/attachment.bin>
-------------- next part --------------
From 3b0886f3af0d69f89c417d372475db0c7709b09e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Sun, 2 Jul 2017 01:06:58 -0400
Subject: [PATCH 1/2] Implement support for symlinks in file API
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Closes #3335
Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
client/lxd_containers.go | 6 ++++++
doc/api-extensions.md | 4 ++++
doc/rest-api.md | 2 +-
lxc/file.go | 55 ++++++++++++++++++++++++++----------------------
lxd/api_1.0.go | 1 +
lxd/container.go | 2 +-
lxd/container_file.go | 15 +++++++++++--
lxd/container_lxc.go | 5 +++--
lxd/main_nsexec.go | 40 ++++++++++++++++++++++++++++++-----
test/suites/filemanip.sh | 2 ++
10 files changed, 96 insertions(+), 36 deletions(-)
diff --git a/client/lxd_containers.go b/client/lxd_containers.go
index e8d03a144..24a7f2d11 100644
--- a/client/lxd_containers.go
+++ b/client/lxd_containers.go
@@ -538,6 +538,12 @@ func (r *ProtocolLXD) CreateContainerFile(containerName string, path string, arg
}
}
+ if args.Type == "symlink" {
+ if !r.HasExtension("file_symlinks") {
+ return fmt.Errorf("The server is missing the required \"file_symlinks\" API extension")
+ }
+ }
+
if args.WriteMode == "append" {
if !r.HasExtension("file_append") {
return fmt.Errorf("The server is missing the required \"file_append\" API extension")
diff --git a/doc/api-extensions.md b/doc/api-extensions.md
index a54b4d101..4590b3eab 100644
--- a/doc/api-extensions.md
+++ b/doc/api-extensions.md
@@ -284,3 +284,7 @@ property in the containers root disk device.
This introduces a new security.idmap.base allowing the user to skip the
map auto-selection process for isolated containers and specify what host
uid/gid to use as the base.
+
+## file\_symlinks
+This adds support for transfering symlinks through the file API.
+X-LXD-type can now be "symlink" with the request content being the target path.
diff --git a/doc/rest-api.md b/doc/rest-api.md
index f35873419..3728dfa50 100644
--- a/doc/rest-api.md
+++ b/doc/rest-api.md
@@ -839,7 +839,7 @@ The following headers may be set by the client:
* X-LXD-uid: 0
* X-LXD-gid: 0
* X-LXD-mode: 0700
- * X-LXD-type: one of "directory" or "file"
+ * X-LXD-type: one of "directory", "file" or "symlink"
* X-LXD-write: overwrite (or append, introduced with API extension "file\_append")
This is designed to be easily usable from the command line or even a web
diff --git a/lxc/file.go b/lxc/file.go
index 52cc12ce4..8373ca7e6 100644
--- a/lxc/file.go
+++ b/lxc/file.go
@@ -1,6 +1,7 @@
package main
import (
+ "bytes"
"fmt"
"io"
"io/ioutil"
@@ -124,38 +125,42 @@ func (c *fileCmd) recursivePushFile(d lxd.ContainerServer, container string, sou
return fmt.Errorf(i18n.G("Failed to walk path for %s: %s"), p, err)
}
- // Detect symlinks
- if !fInfo.Mode().IsRegular() && !fInfo.Mode().IsDir() {
- return fmt.Errorf(i18n.G("'%s' isn't a regular file or directory."), p)
+ // Detect unsupported files
+ if !fInfo.Mode().IsRegular() && !fInfo.Mode().IsDir() && fInfo.Mode()&os.ModeSymlink != os.ModeSymlink {
+ return fmt.Errorf(i18n.G("'%s' isn't a supported file type."), p)
}
+ // Prepare for file transfer
targetPath := path.Join(target, filepath.ToSlash(p[sourceLen:]))
- if fInfo.IsDir() {
- mode, uid, gid := shared.GetOwnerMode(fInfo)
- args := lxd.ContainerFileArgs{
- UID: int64(uid),
- GID: int64(gid),
- Mode: int(mode.Perm()),
- Type: "directory",
- }
-
- return d.CreateContainerFile(container, targetPath, args)
+ mode, uid, gid := shared.GetOwnerMode(fInfo)
+ args := lxd.ContainerFileArgs{
+ UID: int64(uid),
+ GID: int64(gid),
+ Mode: int(mode.Perm()),
}
- f, err := os.Open(p)
- if err != nil {
- return err
- }
- defer f.Close()
+ if fInfo.IsDir() {
+ // Directory handling
+ args.Type = "directory"
+ } else if fInfo.Mode()&os.ModeSymlink == os.ModeSymlink {
+ // Symlink handling
+ symlinkTarget, err := os.Readlink(p)
+ if err != nil {
+ return err
+ }
- mode, uid, gid := shared.GetOwnerMode(fInfo)
+ args.Type = "symlink"
+ args.Content = bytes.NewReader([]byte(symlinkTarget))
+ } else {
+ // File handling
+ f, err := os.Open(p)
+ if err != nil {
+ return err
+ }
+ defer f.Close()
- args := lxd.ContainerFileArgs{
- Content: f,
- UID: int64(uid),
- GID: int64(gid),
- Mode: int(mode.Perm()),
- Type: "file",
+ args.Type = "file"
+ args.Content = f
}
return d.CreateContainerFile(container, targetPath, args)
diff --git a/lxd/api_1.0.go b/lxd/api_1.0.go
index 743cb2ce2..0c0ad691b 100644
--- a/lxd/api_1.0.go
+++ b/lxd/api_1.0.go
@@ -110,6 +110,7 @@ func api10Get(d *Daemon, r *http.Request) Response {
"image_force_refresh",
"storage_lvm_lv_resizing",
"id_map_base",
+ "file_symlinks",
},
APIStatus: "stable",
APIVersion: version.APIVersion,
diff --git a/lxd/container.go b/lxd/container.go
index 0ad88b3f6..3baea4595 100644
--- a/lxd/container.go
+++ b/lxd/container.go
@@ -447,7 +447,7 @@ type container interface {
// File handling
FileExists(path string) error
FilePull(srcpath string, dstpath string) (int64, int64, os.FileMode, string, []string, error)
- FilePush(srcpath string, dstpath string, uid int64, gid int64, mode int, write string) error
+ FilePush(type_ string, srcpath string, dstpath string, uid int64, gid int64, mode int, write string) error
FileRemove(path string) error
/* Command execution:
diff --git a/lxd/container_file.go b/lxd/container_file.go
index eb443a354..ea97ac8e6 100644
--- a/lxd/container_file.go
+++ b/lxd/container_file.go
@@ -107,14 +107,25 @@ func containerFilePut(c container, path string, r *http.Request) Response {
}
// Transfer the file into the container
- err = c.FilePush(temp.Name(), path, uid, gid, mode, write)
+ err = c.FilePush("file", temp.Name(), path, uid, gid, mode, write)
if err != nil {
return InternalError(err)
}
return EmptySyncResponse
+ } else if type_ == "symlink" {
+ target, err := ioutil.ReadAll(r.Body)
+ if err != nil {
+ return InternalError(err)
+ }
+
+ err = c.FilePush("symlink", string(target), path, uid, gid, mode, write)
+ if err != nil {
+ return InternalError(err)
+ }
+ return EmptySyncResponse
} else if type_ == "directory" {
- err := c.FilePush("", path, uid, gid, mode, write)
+ err := c.FilePush("directory", "", path, uid, gid, mode, write)
if err != nil {
return InternalError(err)
}
diff --git a/lxd/container_lxc.go b/lxd/container_lxc.go
index 46ce11030..7484a3319 100644
--- a/lxd/container_lxc.go
+++ b/lxd/container_lxc.go
@@ -4722,7 +4722,7 @@ func (c *containerLXC) FilePull(srcpath string, dstpath string) (int64, int64, o
return uid, gid, os.FileMode(mode), type_, dirEnts, nil
}
-func (c *containerLXC) FilePush(srcpath string, dstpath string, uid int64, gid int64, mode int, write string) error {
+func (c *containerLXC) FilePush(type_ string, srcpath string, dstpath string, uid int64, gid int64, mode int, write string) error {
var rootUid int64
var rootGid int64
var errStr string
@@ -4751,7 +4751,7 @@ func (c *containerLXC) FilePush(srcpath string, dstpath string, uid int64, gid i
}
defaultMode := 0640
- if srcpath == "" {
+ if type_ == "directory" {
defaultMode = 0750
}
@@ -4763,6 +4763,7 @@ func (c *containerLXC) FilePush(srcpath string, dstpath string, uid int64, gid i
fmt.Sprintf("%d", c.InitPID()),
srcpath,
dstpath,
+ type_,
fmt.Sprintf("%d", uid),
fmt.Sprintf("%d", gid),
fmt.Sprintf("%d", mode),
diff --git a/lxd/main_nsexec.go b/lxd/main_nsexec.go
index 67c3c146e..dde8b3d23 100644
--- a/lxd/main_nsexec.go
+++ b/lxd/main_nsexec.go
@@ -180,15 +180,16 @@ void attach_userns(int pid) {
}
}
-int manip_file_in_ns(char *rootfs, int pid, char *host, char *container, bool is_put, uid_t uid, gid_t gid, mode_t mode, uid_t defaultUid, gid_t defaultGid, mode_t defaultMode, bool append) {
+int manip_file_in_ns(char *rootfs, int pid, char *host, char *container, bool is_put, char *type, uid_t uid, gid_t gid, mode_t mode, uid_t defaultUid, gid_t defaultGid, mode_t defaultMode, bool append) {
int host_fd = -1, container_fd = -1;
int ret = -1;
int container_open_flags;
struct stat st;
int exists = 1;
- bool is_dir_manip = !strcmp(host, "");
+ bool is_dir_manip = type != NULL && !strcmp(type, "directory");
+ bool is_symlink_manip = type != NULL && !strcmp(type, "symlink");
- if (!is_dir_manip) {
+ if (!is_dir_manip && !is_symlink_manip) {
host_fd = open(host, O_RDWR);
if (host_fd < 0) {
error("error: open");
@@ -241,6 +242,32 @@ int manip_file_in_ns(char *rootfs, int pid, char *host, char *container, bool is
return 0;
}
+ if (is_put && is_symlink_manip) {
+ if (mode == -1) {
+ mode = defaultMode;
+ }
+
+ if (uid == -1) {
+ uid = defaultUid;
+ }
+
+ if (gid == -1) {
+ gid = defaultGid;
+ }
+
+ if (symlink(host, container) < 0 && errno != EEXIST) {
+ error("error: symlink");
+ return -1;
+ }
+
+ if (fchownat(0, container, uid, gid, AT_SYMLINK_NOFOLLOW) < 0) {
+ error("error: chown");
+ return -1;
+ }
+
+ return 0;
+ }
+
if (stat(container, &st) < 0)
exists = 0;
@@ -502,7 +529,7 @@ void forkdofile(char *buf, char *cur, bool is_put, ssize_t size) {
uid_t defaultUid = 0;
gid_t defaultGid = 0;
mode_t defaultMode = 0;
- char *command = cur, *rootfs = NULL, *source = NULL, *target = NULL, *writeMode = NULL;
+ char *command = cur, *rootfs = NULL, *source = NULL, *target = NULL, *writeMode = NULL, *type = NULL;
pid_t pid;
bool append = false;
@@ -520,6 +547,9 @@ void forkdofile(char *buf, char *cur, bool is_put, ssize_t size) {
if (is_put) {
ADVANCE_ARG_REQUIRED();
+ type = cur;
+
+ ADVANCE_ARG_REQUIRED();
uid = atoi(cur);
ADVANCE_ARG_REQUIRED();
@@ -543,7 +573,7 @@ void forkdofile(char *buf, char *cur, bool is_put, ssize_t size) {
}
}
- _exit(manip_file_in_ns(rootfs, pid, source, target, is_put, uid, gid, mode, defaultUid, defaultGid, defaultMode, append));
+ _exit(manip_file_in_ns(rootfs, pid, source, target, is_put, type, uid, gid, mode, defaultUid, defaultGid, defaultMode, append));
}
void forkcheckfile(char *buf, char *cur, bool is_put, ssize_t size) {
diff --git a/test/suites/filemanip.sh b/test/suites/filemanip.sh
index 1eb6f2847..d1e8e58c2 100644
--- a/test/suites/filemanip.sh
+++ b/test/suites/filemanip.sh
@@ -23,6 +23,7 @@ test_filemanip() {
chown 1000:1000 "${TEST_DIR}"/source/another_level
echo "foo" > "${TEST_DIR}"/source/foo
echo "bar" > "${TEST_DIR}"/source/bar
+ ln -s bar "${TEST_DIR}"/source/baz
lxc file push -p -r "${TEST_DIR}"/source filemanip/tmp/ptest
@@ -31,6 +32,7 @@ test_filemanip() {
[ "$(lxc exec filemanip -- stat -c "%u" /tmp/ptest/source/another_level)" = "1000" ]
[ "$(lxc exec filemanip -- stat -c "%g" /tmp/ptest/source/another_level)" = "1000" ]
[ "$(lxc exec filemanip -- stat -c "%a" /tmp/ptest/source)" = "755" ]
+ [ "$(lxc exec filemanip -- readlink /tmp/ptest/source/baz)" = "bar" ]
lxc exec filemanip -- rm -rf /tmp/ptest/source
From 964aa972dbea6e041ad9ec8f95b29a20a4a5c29b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Sun, 2 Jul 2017 01:07:28 -0400
Subject: [PATCH 2/2] i18n: Update templates
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
po/de.po | 38 +++++++++++++++++++-------------------
po/el.po | 38 +++++++++++++++++++-------------------
po/fr.po | 38 +++++++++++++++++++-------------------
po/it.po | 38 +++++++++++++++++++-------------------
po/ja.po | 38 +++++++++++++++++++-------------------
po/lxd.pot | 38 +++++++++++++++++++-------------------
po/nl.po | 38 +++++++++++++++++++-------------------
po/ru.po | 38 +++++++++++++++++++-------------------
po/sr.po | 38 +++++++++++++++++++-------------------
po/sv.po | 38 +++++++++++++++++++-------------------
po/tr.po | 38 +++++++++++++++++++-------------------
11 files changed, 209 insertions(+), 209 deletions(-)
diff --git a/po/de.po b/po/de.po
index 5e3bd2a00..62c8e425b 100644
--- a/po/de.po
+++ b/po/de.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: LXD\n"
"Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-07-01 16:31-0400\n"
+"POT-Creation-Date: 2017-07-02 01:07-0400\n"
"PO-Revision-Date: 2017-02-14 17:11+0000\n"
"Last-Translator: Tim Rose <tim at netlope.de>\n"
"Language-Team: German <https://hosted.weblate.org/projects/linux-containers/"
@@ -213,7 +213,7 @@ msgstr ""
msgid "%s (%d more)"
msgstr ""
-#: lxc/file.go:187
+#: lxc/file.go:192
#, c-format
msgid "%s is not a directory"
msgstr ""
@@ -223,9 +223,9 @@ msgstr ""
msgid "%v (interrupt two more times to force)"
msgstr ""
-#: lxc/file.go:129
+#: lxc/file.go:130
#, c-format
-msgid "'%s' isn't a regular file or directory."
+msgid "'%s' isn't a supported file type."
msgstr ""
#: lxc/snapshot.go:53
@@ -307,7 +307,7 @@ msgstr " Prozessorauslastung:"
msgid "CREATED AT"
msgstr "ERSTELLT AM"
-#: lxc/file.go:480
+#: lxc/file.go:485
msgid "Can't pull a directory without --recursive"
msgstr ""
@@ -394,7 +394,7 @@ msgstr ""
msgid "Could not create server cert dir"
msgstr "Kann Verzeichnis für Zertifikate auf dem Server nicht erstellen"
-#: lxc/file.go:69 lxc/file.go:70
+#: lxc/file.go:70 lxc/file.go:71
msgid "Create any directories necessary"
msgstr ""
@@ -521,7 +521,7 @@ msgstr ""
msgid "Failed to get the new container name"
msgstr "kann nicht zum selben Container Namen kopieren"
-#: lxc/file.go:124
+#: lxc/file.go:125
#, c-format
msgid "Failed to walk path for %s: %s"
msgstr ""
@@ -621,17 +621,17 @@ msgstr "Akzeptiere Zertifikat"
msgid "Invalid configuration key"
msgstr ""
-#: lxc/file.go:523
+#: lxc/file.go:528
#, fuzzy, c-format
msgid "Invalid path %s"
msgstr "Ungültiges Ziel %s"
-#: lxc/file.go:452
+#: lxc/file.go:457
#, c-format
msgid "Invalid source %s"
msgstr "Ungültige Quelle %s"
-#: lxc/file.go:229
+#: lxc/file.go:234
#, c-format
msgid "Invalid target %s"
msgstr "Ungültiges Ziel %s"
@@ -698,7 +698,7 @@ msgstr "Fehlende Zusammenfassung."
msgid "More than one device matches, specify the device name."
msgstr ""
-#: lxc/file.go:439
+#: lxc/file.go:444
msgid "More than one file to download, but target is not a directory"
msgstr ""
"Mehr als eine Datei herunterzuladen, aber das Ziel ist kein Verzeichnis"
@@ -919,7 +919,7 @@ msgstr ""
msgid "Public: %s"
msgstr "Öffentlich: %s\n"
-#: lxc/file.go:67 lxc/file.go:68
+#: lxc/file.go:68 lxc/file.go:69
msgid "Recursively push or pull files"
msgstr ""
@@ -1002,15 +1002,15 @@ msgstr ""
msgid "Server protocol (lxd or simplestreams)"
msgstr ""
-#: lxc/file.go:65
+#: lxc/file.go:66
msgid "Set the file's gid on push"
msgstr "Setzt die gid der Datei beim Übertragen"
-#: lxc/file.go:66
+#: lxc/file.go:67
msgid "Set the file's perms on push"
msgstr "Setzt die Dateiberechtigungen beim Übertragen"
-#: lxc/file.go:64
+#: lxc/file.go:65
msgid "Set the file's uid on push"
msgstr "Setzt die uid der Datei beim Übertragen"
@@ -1239,7 +1239,7 @@ msgstr ""
msgid "Unable to read remote TLS certificate"
msgstr ""
-#: lxc/file.go:111
+#: lxc/file.go:112
#, fuzzy, c-format
msgid "Unknown file type '%s'"
msgstr "Unbekannter Befehl %s für Abbild"
@@ -1418,7 +1418,7 @@ msgstr ""
"\n"
"lxc exec <Container> [--env EDITOR=/usr/bin/vim]... <Befehl>\n"
-#: lxc/file.go:38
+#: lxc/file.go:39
#, fuzzy
msgid ""
"Usage: lxc file <subcommand> [options]\n"
@@ -2200,7 +2200,7 @@ msgstr ""
msgid "can't remove the default remote"
msgstr ""
-#: lxc/file.go:277
+#: lxc/file.go:282
msgid "can't supply uid/gid/mode in recursive mode"
msgstr ""
@@ -2244,7 +2244,7 @@ msgstr "OK (y/n)? "
msgid "processing aliases failed %s\n"
msgstr ""
-#: lxc/file.go:551
+#: lxc/file.go:556
msgid "recursive edit doesn't make sense :("
msgstr ""
diff --git a/po/el.po b/po/el.po
index 30af00369..164d6eaf9 100644
--- a/po/el.po
+++ b/po/el.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: lxd\n"
"Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-07-01 16:31-0400\n"
+"POT-Creation-Date: 2017-07-02 01:07-0400\n"
"PO-Revision-Date: 2017-02-14 08:00+0000\n"
"Last-Translator: Simos Xenitellis <simos.65 at gmail.com>\n"
"Language-Team: Greek <https://hosted.weblate.org/projects/linux-containers/"
@@ -127,7 +127,7 @@ msgstr ""
msgid "%s (%d more)"
msgstr ""
-#: lxc/file.go:187
+#: lxc/file.go:192
#, c-format
msgid "%s is not a directory"
msgstr ""
@@ -137,9 +137,9 @@ msgstr ""
msgid "%v (interrupt two more times to force)"
msgstr ""
-#: lxc/file.go:129
+#: lxc/file.go:130
#, c-format
-msgid "'%s' isn't a regular file or directory."
+msgid "'%s' isn't a supported file type."
msgstr ""
#: lxc/snapshot.go:53
@@ -219,7 +219,7 @@ msgstr " Χρήση CPU:"
msgid "CREATED AT"
msgstr ""
-#: lxc/file.go:480
+#: lxc/file.go:485
msgid "Can't pull a directory without --recursive"
msgstr ""
@@ -304,7 +304,7 @@ msgstr ""
msgid "Could not create server cert dir"
msgstr ""
-#: lxc/file.go:69 lxc/file.go:70
+#: lxc/file.go:70 lxc/file.go:71
msgid "Create any directories necessary"
msgstr ""
@@ -427,7 +427,7 @@ msgstr ""
msgid "Failed to get the new container name"
msgstr ""
-#: lxc/file.go:124
+#: lxc/file.go:125
#, c-format
msgid "Failed to walk path for %s: %s"
msgstr ""
@@ -523,17 +523,17 @@ msgstr ""
msgid "Invalid configuration key"
msgstr ""
-#: lxc/file.go:523
+#: lxc/file.go:528
#, c-format
msgid "Invalid path %s"
msgstr ""
-#: lxc/file.go:452
+#: lxc/file.go:457
#, c-format
msgid "Invalid source %s"
msgstr ""
-#: lxc/file.go:229
+#: lxc/file.go:234
#, c-format
msgid "Invalid target %s"
msgstr ""
@@ -600,7 +600,7 @@ msgstr ""
msgid "More than one device matches, specify the device name."
msgstr ""
-#: lxc/file.go:439
+#: lxc/file.go:444
msgid "More than one file to download, but target is not a directory"
msgstr ""
@@ -810,7 +810,7 @@ msgstr ""
msgid "Public: %s"
msgstr ""
-#: lxc/file.go:67 lxc/file.go:68
+#: lxc/file.go:68 lxc/file.go:69
msgid "Recursively push or pull files"
msgstr ""
@@ -890,15 +890,15 @@ msgstr ""
msgid "Server protocol (lxd or simplestreams)"
msgstr ""
-#: lxc/file.go:65
+#: lxc/file.go:66
msgid "Set the file's gid on push"
msgstr ""
-#: lxc/file.go:66
+#: lxc/file.go:67
msgid "Set the file's perms on push"
msgstr ""
-#: lxc/file.go:64
+#: lxc/file.go:65
msgid "Set the file's uid on push"
msgstr ""
@@ -1117,7 +1117,7 @@ msgstr ""
msgid "Unable to read remote TLS certificate"
msgstr ""
-#: lxc/file.go:111
+#: lxc/file.go:112
#, c-format
msgid "Unknown file type '%s'"
msgstr ""
@@ -1244,7 +1244,7 @@ msgid ""
"AND stdout are terminals (stderr is ignored)."
msgstr ""
-#: lxc/file.go:38
+#: lxc/file.go:39
msgid ""
"Usage: lxc file <subcommand> [options]\n"
"\n"
@@ -1915,7 +1915,7 @@ msgstr ""
msgid "can't remove the default remote"
msgstr ""
-#: lxc/file.go:277
+#: lxc/file.go:282
msgid "can't supply uid/gid/mode in recursive mode"
msgstr ""
@@ -1958,7 +1958,7 @@ msgstr ""
msgid "processing aliases failed %s\n"
msgstr ""
-#: lxc/file.go:551
+#: lxc/file.go:556
msgid "recursive edit doesn't make sense :("
msgstr ""
diff --git a/po/fr.po b/po/fr.po
index ff103db94..7e6a0d43d 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: LXD\n"
"Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-07-01 16:31-0400\n"
+"POT-Creation-Date: 2017-07-02 01:07-0400\n"
"PO-Revision-Date: 2017-06-07 15:24+0000\n"
"Last-Translator: Stéphane Graber <stgraber at stgraber.org>\n"
"Language-Team: French <https://hosted.weblate.org/projects/linux-containers/"
@@ -204,7 +204,7 @@ msgstr ""
msgid "%s (%d more)"
msgstr "%s (%d de plus)"
-#: lxc/file.go:187
+#: lxc/file.go:192
#, c-format
msgid "%s is not a directory"
msgstr ""
@@ -214,9 +214,9 @@ msgstr ""
msgid "%v (interrupt two more times to force)"
msgstr ""
-#: lxc/file.go:129
+#: lxc/file.go:130
#, c-format
-msgid "'%s' isn't a regular file or directory."
+msgid "'%s' isn't a supported file type."
msgstr ""
#: lxc/snapshot.go:53
@@ -296,7 +296,7 @@ msgstr "CPU utilisé :"
msgid "CREATED AT"
msgstr "CRÉÉ À"
-#: lxc/file.go:480
+#: lxc/file.go:485
#, fuzzy
msgid "Can't pull a directory without --recursive"
msgstr "impossible de récupérer un répertoire sans --recursive"
@@ -385,7 +385,7 @@ msgstr "Copie de l'image : %s"
msgid "Could not create server cert dir"
msgstr "Impossible de créer le dossier de stockage des certificats serveurs"
-#: lxc/file.go:69 lxc/file.go:70
+#: lxc/file.go:70 lxc/file.go:71
msgid "Create any directories necessary"
msgstr "Créer tous répertoires nécessaires"
@@ -509,7 +509,7 @@ msgstr "Échec lors de la génération de 'lxc.1': %v"
msgid "Failed to get the new container name"
msgstr "Profil à appliquer au nouveau conteneur"
-#: lxc/file.go:124
+#: lxc/file.go:125
#, c-format
msgid "Failed to walk path for %s: %s"
msgstr ""
@@ -611,17 +611,17 @@ msgstr "Certificat invalide"
msgid "Invalid configuration key"
msgstr "Clé de configuration invalide"
-#: lxc/file.go:523
+#: lxc/file.go:528
#, fuzzy, c-format
msgid "Invalid path %s"
msgstr "Cible invalide %s"
-#: lxc/file.go:452
+#: lxc/file.go:457
#, c-format
msgid "Invalid source %s"
msgstr "Source invalide %s"
-#: lxc/file.go:229
+#: lxc/file.go:234
#, c-format
msgid "Invalid target %s"
msgstr "Cible invalide %s"
@@ -688,7 +688,7 @@ msgstr "Résumé manquant."
msgid "More than one device matches, specify the device name."
msgstr "Plus d'un périphérique correspond, spécifier le nom du périphérique."
-#: lxc/file.go:439
+#: lxc/file.go:444
msgid "More than one file to download, but target is not a directory"
msgstr ""
"Plusieurs fichiers à télécharger, mais la destination n'est pas un dossier"
@@ -902,7 +902,7 @@ msgstr "Serveur d'images public"
msgid "Public: %s"
msgstr "Public : %s"
-#: lxc/file.go:67 lxc/file.go:68
+#: lxc/file.go:68 lxc/file.go:69
msgid "Recursively push or pull files"
msgstr "Pousser ou récupérer des fichiers récursivement"
@@ -985,15 +985,15 @@ msgstr ""
msgid "Server protocol (lxd or simplestreams)"
msgstr "Protocole du serveur (lxd ou simplestreams)"
-#: lxc/file.go:65
+#: lxc/file.go:66
msgid "Set the file's gid on push"
msgstr "Définir le gid du fichier lors de l'envoi"
-#: lxc/file.go:66
+#: lxc/file.go:67
msgid "Set the file's perms on push"
msgstr "Définir les permissions du fichier lors de l'envoi"
-#: lxc/file.go:64
+#: lxc/file.go:65
msgid "Set the file's uid on push"
msgstr "Définir l'uid du fichier lors de l'envoi"
@@ -1226,7 +1226,7 @@ msgstr "Impossible de trouver help2man"
msgid "Unable to read remote TLS certificate"
msgstr "Impossible de lire le certificat TLS distant"
-#: lxc/file.go:111
+#: lxc/file.go:112
#, c-format
msgid "Unknown file type '%s'"
msgstr ""
@@ -1435,7 +1435,7 @@ msgstr ""
"sélectionné si à la fois stdin et stdout sont des terminaux (stderr\n"
"est ignoré)."
-#: lxc/file.go:38
+#: lxc/file.go:39
#, fuzzy
msgid ""
"Usage: lxc file <subcommand> [options]\n"
@@ -2482,7 +2482,7 @@ msgstr ""
msgid "can't remove the default remote"
msgstr "impossible de supprimer le serveur distant par défaut"
-#: lxc/file.go:277
+#: lxc/file.go:282
msgid "can't supply uid/gid/mode in recursive mode"
msgstr "impossible de spécifier uid/gid/mode en mode récursif"
@@ -2525,7 +2525,7 @@ msgstr "ok (y/n) ?"
msgid "processing aliases failed %s\n"
msgstr "l'analyse des alias a échoué %s\n"
-#: lxc/file.go:551
+#: lxc/file.go:556
msgid "recursive edit doesn't make sense :("
msgstr "l'édition récursive ne fait aucun sens :("
diff --git a/po/it.po b/po/it.po
index d29d4132c..d930f1707 100644
--- a/po/it.po
+++ b/po/it.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: lxd\n"
"Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-07-01 16:31-0400\n"
+"POT-Creation-Date: 2017-07-02 01:07-0400\n"
"PO-Revision-Date: 2017-06-15 22:46+0000\n"
"Last-Translator: Alberto Donato <alberto.donato at gmail.com>\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/linux-containers/"
@@ -148,7 +148,7 @@ msgstr ""
msgid "%s (%d more)"
msgstr "%s (altri %d)"
-#: lxc/file.go:187
+#: lxc/file.go:192
#, c-format
msgid "%s is not a directory"
msgstr ""
@@ -158,9 +158,9 @@ msgstr ""
msgid "%v (interrupt two more times to force)"
msgstr ""
-#: lxc/file.go:129
+#: lxc/file.go:130
#, c-format
-msgid "'%s' isn't a regular file or directory."
+msgid "'%s' isn't a supported file type."
msgstr ""
#: lxc/snapshot.go:53
@@ -239,7 +239,7 @@ msgstr "Utilizzo CPU:"
msgid "CREATED AT"
msgstr "CREATO IL"
-#: lxc/file.go:480
+#: lxc/file.go:485
msgid "Can't pull a directory without --recursive"
msgstr ""
@@ -324,7 +324,7 @@ msgstr ""
msgid "Could not create server cert dir"
msgstr ""
-#: lxc/file.go:69 lxc/file.go:70
+#: lxc/file.go:70 lxc/file.go:71
msgid "Create any directories necessary"
msgstr ""
@@ -446,7 +446,7 @@ msgstr ""
msgid "Failed to get the new container name"
msgstr ""
-#: lxc/file.go:124
+#: lxc/file.go:125
#, c-format
msgid "Failed to walk path for %s: %s"
msgstr ""
@@ -542,17 +542,17 @@ msgstr ""
msgid "Invalid configuration key"
msgstr ""
-#: lxc/file.go:523
+#: lxc/file.go:528
#, c-format
msgid "Invalid path %s"
msgstr ""
-#: lxc/file.go:452
+#: lxc/file.go:457
#, c-format
msgid "Invalid source %s"
msgstr ""
-#: lxc/file.go:229
+#: lxc/file.go:234
#, c-format
msgid "Invalid target %s"
msgstr ""
@@ -618,7 +618,7 @@ msgstr ""
msgid "More than one device matches, specify the device name."
msgstr ""
-#: lxc/file.go:439
+#: lxc/file.go:444
msgid "More than one file to download, but target is not a directory"
msgstr ""
@@ -827,7 +827,7 @@ msgstr ""
msgid "Public: %s"
msgstr ""
-#: lxc/file.go:67 lxc/file.go:68
+#: lxc/file.go:68 lxc/file.go:69
msgid "Recursively push or pull files"
msgstr ""
@@ -907,15 +907,15 @@ msgstr ""
msgid "Server protocol (lxd or simplestreams)"
msgstr ""
-#: lxc/file.go:65
+#: lxc/file.go:66
msgid "Set the file's gid on push"
msgstr ""
-#: lxc/file.go:66
+#: lxc/file.go:67
msgid "Set the file's perms on push"
msgstr ""
-#: lxc/file.go:64
+#: lxc/file.go:65
msgid "Set the file's uid on push"
msgstr ""
@@ -1135,7 +1135,7 @@ msgstr ""
msgid "Unable to read remote TLS certificate"
msgstr ""
-#: lxc/file.go:111
+#: lxc/file.go:112
#, c-format
msgid "Unknown file type '%s'"
msgstr ""
@@ -1262,7 +1262,7 @@ msgid ""
"AND stdout are terminals (stderr is ignored)."
msgstr ""
-#: lxc/file.go:38
+#: lxc/file.go:39
msgid ""
"Usage: lxc file <subcommand> [options]\n"
"\n"
@@ -1934,7 +1934,7 @@ msgstr ""
msgid "can't remove the default remote"
msgstr ""
-#: lxc/file.go:277
+#: lxc/file.go:282
msgid "can't supply uid/gid/mode in recursive mode"
msgstr ""
@@ -1977,7 +1977,7 @@ msgstr "ok (y/n)?"
msgid "processing aliases failed %s\n"
msgstr "errore di processamento degli alias %s\n"
-#: lxc/file.go:551
+#: lxc/file.go:556
msgid "recursive edit doesn't make sense :("
msgstr ""
diff --git a/po/ja.po b/po/ja.po
index 7f1470496..2ecec99bb 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: LXD\n"
"Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-07-01 16:31-0400\n"
+"POT-Creation-Date: 2017-07-02 01:07-0400\n"
"PO-Revision-Date: 2017-03-23 12:03+0000\n"
"Last-Translator: KATOH Yasufumi <karma at jazz.email.ne.jp>\n"
"Language-Team: Japanese <https://hosted.weblate.org/projects/linux-"
@@ -127,7 +127,7 @@ msgstr ""
msgid "%s (%d more)"
msgstr ""
-#: lxc/file.go:187
+#: lxc/file.go:192
#, c-format
msgid "%s is not a directory"
msgstr ""
@@ -137,9 +137,9 @@ msgstr ""
msgid "%v (interrupt two more times to force)"
msgstr ""
-#: lxc/file.go:129
+#: lxc/file.go:130
#, c-format
-msgid "'%s' isn't a regular file or directory."
+msgid "'%s' isn't a supported file type."
msgstr ""
#: lxc/snapshot.go:53
@@ -218,7 +218,7 @@ msgstr "CPU使用量:"
msgid "CREATED AT"
msgstr ""
-#: lxc/file.go:480
+#: lxc/file.go:485
#, fuzzy
msgid "Can't pull a directory without --recursive"
msgstr ""
@@ -306,7 +306,7 @@ msgstr "イメージのコピー中: %s"
msgid "Could not create server cert dir"
msgstr "サーバ証明書格納用のディレクトリを作成できません"
-#: lxc/file.go:69 lxc/file.go:70
+#: lxc/file.go:70 lxc/file.go:71
msgid "Create any directories necessary"
msgstr "必要なディレクトリをすべて作成します"
@@ -429,7 +429,7 @@ msgstr "'lxc.1' の生成が失敗しました: %v"
msgid "Failed to get the new container name"
msgstr "新しいコンテナに適用するプロファイル"
-#: lxc/file.go:124
+#: lxc/file.go:125
#, c-format
msgid "Failed to walk path for %s: %s"
msgstr ""
@@ -528,17 +528,17 @@ msgstr "不正な証明書です"
msgid "Invalid configuration key"
msgstr "正しくない設定項目 (key) です"
-#: lxc/file.go:523
+#: lxc/file.go:528
#, c-format
msgid "Invalid path %s"
msgstr "不正なパス %s"
-#: lxc/file.go:452
+#: lxc/file.go:457
#, c-format
msgid "Invalid source %s"
msgstr "不正なソース %s"
-#: lxc/file.go:229
+#: lxc/file.go:234
#, c-format
msgid "Invalid target %s"
msgstr "不正な送り先 %s"
@@ -604,7 +604,7 @@ msgstr "サマリーはありません。"
msgid "More than one device matches, specify the device name."
msgstr "複数のデバイスとマッチします。デバイス名を指定してください。"
-#: lxc/file.go:439
+#: lxc/file.go:444
msgid "More than one file to download, but target is not a directory"
msgstr ""
"ダウンロード対象のファイルが複数ありますが、コピー先がディレクトリではありま"
@@ -816,7 +816,7 @@ msgstr "Public なイメージサーバとして設定します"
msgid "Public: %s"
msgstr "パブリック: %s"
-#: lxc/file.go:67 lxc/file.go:68
+#: lxc/file.go:68 lxc/file.go:69
msgid "Recursively push or pull files"
msgstr "再帰的にファイルをpush/pullします"
@@ -897,15 +897,15 @@ msgstr "サーバが我々の証明書を追加した後我々を信頼してい
msgid "Server protocol (lxd or simplestreams)"
msgstr "サーバのプロトコル (lxd or simplestreams)"
-#: lxc/file.go:65
+#: lxc/file.go:66
msgid "Set the file's gid on push"
msgstr "プッシュ時にファイルのgidを設定します"
-#: lxc/file.go:66
+#: lxc/file.go:67
msgid "Set the file's perms on push"
msgstr "プッシュ時にファイルのパーミションを設定します"
-#: lxc/file.go:64
+#: lxc/file.go:65
msgid "Set the file's uid on push"
msgstr "プッシュ時にファイルのuidを設定します"
@@ -1138,7 +1138,7 @@ msgstr "help2man が見つかりません。"
msgid "Unable to read remote TLS certificate"
msgstr "リモートの TLS 証明書を読めません"
-#: lxc/file.go:111
+#: lxc/file.go:112
#, fuzzy, c-format
msgid "Unknown file type '%s'"
msgstr "未知の設定コマンド %s"
@@ -1345,7 +1345,7 @@ msgstr ""
"デフォルトのモードは non-interactive です。もし標準入出力が両方ともターミナル"
"の場合は interactive モードが選択されます (標準エラー出力は無視されます)。"
-#: lxc/file.go:38
+#: lxc/file.go:39
msgid ""
"Usage: lxc file <subcommand> [options]\n"
"\n"
@@ -2543,7 +2543,7 @@ msgstr "`lxc config profile` は廃止されました。`lxc profile` を使っ
msgid "can't remove the default remote"
msgstr "デフォルトのリモートは削除できません"
-#: lxc/file.go:277
+#: lxc/file.go:282
msgid "can't supply uid/gid/mode in recursive mode"
msgstr "再帰 (recursive) モードでは uid/gid/mode を指定できません"
@@ -2588,7 +2588,7 @@ msgstr "ok (y/n)?"
msgid "processing aliases failed %s\n"
msgstr "エイリアスの処理が失敗しました %s\n"
-#: lxc/file.go:551
+#: lxc/file.go:556
msgid "recursive edit doesn't make sense :("
msgstr "再帰的な edit は意味がありません :("
diff --git a/po/lxd.pot b/po/lxd.pot
index b68743b4b..6fad005cf 100644
--- a/po/lxd.pot
+++ b/po/lxd.pot
@@ -7,7 +7,7 @@
msgid ""
msgstr "Project-Id-Version: lxd\n"
"Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
- "POT-Creation-Date: 2017-07-01 16:31-0400\n"
+ "POT-Creation-Date: 2017-07-02 01:07-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -118,7 +118,7 @@ msgstr ""
msgid "%s (%d more)"
msgstr ""
-#: lxc/file.go:187
+#: lxc/file.go:192
#, c-format
msgid "%s is not a directory"
msgstr ""
@@ -128,9 +128,9 @@ msgstr ""
msgid "%v (interrupt two more times to force)"
msgstr ""
-#: lxc/file.go:129
+#: lxc/file.go:130
#, c-format
-msgid "'%s' isn't a regular file or directory."
+msgid "'%s' isn't a supported file type."
msgstr ""
#: lxc/snapshot.go:53
@@ -209,7 +209,7 @@ msgstr ""
msgid "CREATED AT"
msgstr ""
-#: lxc/file.go:480
+#: lxc/file.go:485
msgid "Can't pull a directory without --recursive"
msgstr ""
@@ -293,7 +293,7 @@ msgstr ""
msgid "Could not create server cert dir"
msgstr ""
-#: lxc/file.go:69 lxc/file.go:70
+#: lxc/file.go:70 lxc/file.go:71
msgid "Create any directories necessary"
msgstr ""
@@ -414,7 +414,7 @@ msgstr ""
msgid "Failed to get the new container name"
msgstr ""
-#: lxc/file.go:124
+#: lxc/file.go:125
#, c-format
msgid "Failed to walk path for %s: %s"
msgstr ""
@@ -510,17 +510,17 @@ msgstr ""
msgid "Invalid configuration key"
msgstr ""
-#: lxc/file.go:523
+#: lxc/file.go:528
#, c-format
msgid "Invalid path %s"
msgstr ""
-#: lxc/file.go:452
+#: lxc/file.go:457
#, c-format
msgid "Invalid source %s"
msgstr ""
-#: lxc/file.go:229
+#: lxc/file.go:234
#, c-format
msgid "Invalid target %s"
msgstr ""
@@ -586,7 +586,7 @@ msgstr ""
msgid "More than one device matches, specify the device name."
msgstr ""
-#: lxc/file.go:439
+#: lxc/file.go:444
msgid "More than one file to download, but target is not a directory"
msgstr ""
@@ -794,7 +794,7 @@ msgstr ""
msgid "Public: %s"
msgstr ""
-#: lxc/file.go:67 lxc/file.go:68
+#: lxc/file.go:68 lxc/file.go:69
msgid "Recursively push or pull files"
msgstr ""
@@ -874,15 +874,15 @@ msgstr ""
msgid "Server protocol (lxd or simplestreams)"
msgstr ""
-#: lxc/file.go:65
+#: lxc/file.go:66
msgid "Set the file's gid on push"
msgstr ""
-#: lxc/file.go:66
+#: lxc/file.go:67
msgid "Set the file's perms on push"
msgstr ""
-#: lxc/file.go:64
+#: lxc/file.go:65
msgid "Set the file's uid on push"
msgstr ""
@@ -1097,7 +1097,7 @@ msgstr ""
msgid "Unable to read remote TLS certificate"
msgstr ""
-#: lxc/file.go:111
+#: lxc/file.go:112
#, c-format
msgid "Unknown file type '%s'"
msgstr ""
@@ -1212,7 +1212,7 @@ msgid "Usage: lxc exec [<remote>:]<container> [-t] [-T] [-n] [--mode=auto|inte
"Mode defaults to non-interactive, interactive mode is selected if both stdin AND stdout are terminals (stderr is ignored)."
msgstr ""
-#: lxc/file.go:38
+#: lxc/file.go:39
msgid "Usage: lxc file <subcommand> [options]\n"
"\n"
"Manage files in containers.\n"
@@ -1815,7 +1815,7 @@ msgstr ""
msgid "can't remove the default remote"
msgstr ""
-#: lxc/file.go:277
+#: lxc/file.go:282
msgid "can't supply uid/gid/mode in recursive mode"
msgstr ""
@@ -1858,7 +1858,7 @@ msgstr ""
msgid "processing aliases failed %s\n"
msgstr ""
-#: lxc/file.go:551
+#: lxc/file.go:556
msgid "recursive edit doesn't make sense :("
msgstr ""
diff --git a/po/nl.po b/po/nl.po
index 35477cc5e..bb3e48383 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: lxd\n"
"Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-07-01 16:31-0400\n"
+"POT-Creation-Date: 2017-07-02 01:07-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -124,7 +124,7 @@ msgstr ""
msgid "%s (%d more)"
msgstr ""
-#: lxc/file.go:187
+#: lxc/file.go:192
#, c-format
msgid "%s is not a directory"
msgstr ""
@@ -134,9 +134,9 @@ msgstr ""
msgid "%v (interrupt two more times to force)"
msgstr ""
-#: lxc/file.go:129
+#: lxc/file.go:130
#, c-format
-msgid "'%s' isn't a regular file or directory."
+msgid "'%s' isn't a supported file type."
msgstr ""
#: lxc/snapshot.go:53
@@ -215,7 +215,7 @@ msgstr ""
msgid "CREATED AT"
msgstr ""
-#: lxc/file.go:480
+#: lxc/file.go:485
msgid "Can't pull a directory without --recursive"
msgstr ""
@@ -300,7 +300,7 @@ msgstr ""
msgid "Could not create server cert dir"
msgstr ""
-#: lxc/file.go:69 lxc/file.go:70
+#: lxc/file.go:70 lxc/file.go:71
msgid "Create any directories necessary"
msgstr ""
@@ -422,7 +422,7 @@ msgstr ""
msgid "Failed to get the new container name"
msgstr ""
-#: lxc/file.go:124
+#: lxc/file.go:125
#, c-format
msgid "Failed to walk path for %s: %s"
msgstr ""
@@ -518,17 +518,17 @@ msgstr ""
msgid "Invalid configuration key"
msgstr ""
-#: lxc/file.go:523
+#: lxc/file.go:528
#, c-format
msgid "Invalid path %s"
msgstr ""
-#: lxc/file.go:452
+#: lxc/file.go:457
#, c-format
msgid "Invalid source %s"
msgstr ""
-#: lxc/file.go:229
+#: lxc/file.go:234
#, c-format
msgid "Invalid target %s"
msgstr ""
@@ -594,7 +594,7 @@ msgstr ""
msgid "More than one device matches, specify the device name."
msgstr ""
-#: lxc/file.go:439
+#: lxc/file.go:444
msgid "More than one file to download, but target is not a directory"
msgstr ""
@@ -803,7 +803,7 @@ msgstr ""
msgid "Public: %s"
msgstr ""
-#: lxc/file.go:67 lxc/file.go:68
+#: lxc/file.go:68 lxc/file.go:69
msgid "Recursively push or pull files"
msgstr ""
@@ -883,15 +883,15 @@ msgstr ""
msgid "Server protocol (lxd or simplestreams)"
msgstr ""
-#: lxc/file.go:65
+#: lxc/file.go:66
msgid "Set the file's gid on push"
msgstr ""
-#: lxc/file.go:66
+#: lxc/file.go:67
msgid "Set the file's perms on push"
msgstr ""
-#: lxc/file.go:64
+#: lxc/file.go:65
msgid "Set the file's uid on push"
msgstr ""
@@ -1110,7 +1110,7 @@ msgstr ""
msgid "Unable to read remote TLS certificate"
msgstr ""
-#: lxc/file.go:111
+#: lxc/file.go:112
#, c-format
msgid "Unknown file type '%s'"
msgstr ""
@@ -1237,7 +1237,7 @@ msgid ""
"AND stdout are terminals (stderr is ignored)."
msgstr ""
-#: lxc/file.go:38
+#: lxc/file.go:39
msgid ""
"Usage: lxc file <subcommand> [options]\n"
"\n"
@@ -1908,7 +1908,7 @@ msgstr ""
msgid "can't remove the default remote"
msgstr ""
-#: lxc/file.go:277
+#: lxc/file.go:282
msgid "can't supply uid/gid/mode in recursive mode"
msgstr ""
@@ -1951,7 +1951,7 @@ msgstr ""
msgid "processing aliases failed %s\n"
msgstr ""
-#: lxc/file.go:551
+#: lxc/file.go:556
msgid "recursive edit doesn't make sense :("
msgstr ""
diff --git a/po/ru.po b/po/ru.po
index 3cea0d8a4..92efd04c0 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: lxd\n"
"Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-07-01 16:31-0400\n"
+"POT-Creation-Date: 2017-07-02 01:07-0400\n"
"PO-Revision-Date: 2017-06-06 13:55+0000\n"
"Last-Translator: Александр Киль <shorrey at gmail.com>\n"
"Language-Team: Russian <https://hosted.weblate.org/projects/linux-containers/"
@@ -195,7 +195,7 @@ msgstr ""
msgid "%s (%d more)"
msgstr ""
-#: lxc/file.go:187
+#: lxc/file.go:192
#, c-format
msgid "%s is not a directory"
msgstr ""
@@ -205,9 +205,9 @@ msgstr ""
msgid "%v (interrupt two more times to force)"
msgstr ""
-#: lxc/file.go:129
+#: lxc/file.go:130
#, c-format
-msgid "'%s' isn't a regular file or directory."
+msgid "'%s' isn't a supported file type."
msgstr ""
#: lxc/snapshot.go:53
@@ -288,7 +288,7 @@ msgstr " Использование ЦП:"
msgid "CREATED AT"
msgstr "СОЗДАН"
-#: lxc/file.go:480
+#: lxc/file.go:485
msgid "Can't pull a directory without --recursive"
msgstr ""
@@ -373,7 +373,7 @@ msgstr "Копирование образа: %s"
msgid "Could not create server cert dir"
msgstr "Не удалось создать каталог сертификата сервера"
-#: lxc/file.go:69 lxc/file.go:70
+#: lxc/file.go:70 lxc/file.go:71
msgid "Create any directories necessary"
msgstr ""
@@ -496,7 +496,7 @@ msgstr ""
msgid "Failed to get the new container name"
msgstr ""
-#: lxc/file.go:124
+#: lxc/file.go:125
#, c-format
msgid "Failed to walk path for %s: %s"
msgstr ""
@@ -592,17 +592,17 @@ msgstr ""
msgid "Invalid configuration key"
msgstr ""
-#: lxc/file.go:523
+#: lxc/file.go:528
#, c-format
msgid "Invalid path %s"
msgstr ""
-#: lxc/file.go:452
+#: lxc/file.go:457
#, c-format
msgid "Invalid source %s"
msgstr ""
-#: lxc/file.go:229
+#: lxc/file.go:234
#, c-format
msgid "Invalid target %s"
msgstr ""
@@ -669,7 +669,7 @@ msgstr ""
msgid "More than one device matches, specify the device name."
msgstr ""
-#: lxc/file.go:439
+#: lxc/file.go:444
msgid "More than one file to download, but target is not a directory"
msgstr ""
@@ -879,7 +879,7 @@ msgstr ""
msgid "Public: %s"
msgstr ""
-#: lxc/file.go:67 lxc/file.go:68
+#: lxc/file.go:68 lxc/file.go:69
msgid "Recursively push or pull files"
msgstr ""
@@ -959,15 +959,15 @@ msgstr ""
msgid "Server protocol (lxd or simplestreams)"
msgstr ""
-#: lxc/file.go:65
+#: lxc/file.go:66
msgid "Set the file's gid on push"
msgstr ""
-#: lxc/file.go:66
+#: lxc/file.go:67
msgid "Set the file's perms on push"
msgstr ""
-#: lxc/file.go:64
+#: lxc/file.go:65
msgid "Set the file's uid on push"
msgstr ""
@@ -1186,7 +1186,7 @@ msgstr ""
msgid "Unable to read remote TLS certificate"
msgstr ""
-#: lxc/file.go:111
+#: lxc/file.go:112
#, c-format
msgid "Unknown file type '%s'"
msgstr ""
@@ -1321,7 +1321,7 @@ msgid ""
"AND stdout are terminals (stderr is ignored)."
msgstr ""
-#: lxc/file.go:38
+#: lxc/file.go:39
msgid ""
"Usage: lxc file <subcommand> [options]\n"
"\n"
@@ -1992,7 +1992,7 @@ msgstr ""
msgid "can't remove the default remote"
msgstr ""
-#: lxc/file.go:277
+#: lxc/file.go:282
msgid "can't supply uid/gid/mode in recursive mode"
msgstr ""
@@ -2035,7 +2035,7 @@ msgstr ""
msgid "processing aliases failed %s\n"
msgstr ""
-#: lxc/file.go:551
+#: lxc/file.go:556
msgid "recursive edit doesn't make sense :("
msgstr ""
diff --git a/po/sr.po b/po/sr.po
index 6c552b1c7..85948cab1 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: lxd\n"
"Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-07-01 16:31-0400\n"
+"POT-Creation-Date: 2017-07-02 01:07-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -124,7 +124,7 @@ msgstr ""
msgid "%s (%d more)"
msgstr ""
-#: lxc/file.go:187
+#: lxc/file.go:192
#, c-format
msgid "%s is not a directory"
msgstr ""
@@ -134,9 +134,9 @@ msgstr ""
msgid "%v (interrupt two more times to force)"
msgstr ""
-#: lxc/file.go:129
+#: lxc/file.go:130
#, c-format
-msgid "'%s' isn't a regular file or directory."
+msgid "'%s' isn't a supported file type."
msgstr ""
#: lxc/snapshot.go:53
@@ -215,7 +215,7 @@ msgstr ""
msgid "CREATED AT"
msgstr ""
-#: lxc/file.go:480
+#: lxc/file.go:485
msgid "Can't pull a directory without --recursive"
msgstr ""
@@ -300,7 +300,7 @@ msgstr ""
msgid "Could not create server cert dir"
msgstr ""
-#: lxc/file.go:69 lxc/file.go:70
+#: lxc/file.go:70 lxc/file.go:71
msgid "Create any directories necessary"
msgstr ""
@@ -422,7 +422,7 @@ msgstr ""
msgid "Failed to get the new container name"
msgstr ""
-#: lxc/file.go:124
+#: lxc/file.go:125
#, c-format
msgid "Failed to walk path for %s: %s"
msgstr ""
@@ -518,17 +518,17 @@ msgstr ""
msgid "Invalid configuration key"
msgstr ""
-#: lxc/file.go:523
+#: lxc/file.go:528
#, c-format
msgid "Invalid path %s"
msgstr ""
-#: lxc/file.go:452
+#: lxc/file.go:457
#, c-format
msgid "Invalid source %s"
msgstr ""
-#: lxc/file.go:229
+#: lxc/file.go:234
#, c-format
msgid "Invalid target %s"
msgstr ""
@@ -594,7 +594,7 @@ msgstr ""
msgid "More than one device matches, specify the device name."
msgstr ""
-#: lxc/file.go:439
+#: lxc/file.go:444
msgid "More than one file to download, but target is not a directory"
msgstr ""
@@ -803,7 +803,7 @@ msgstr ""
msgid "Public: %s"
msgstr ""
-#: lxc/file.go:67 lxc/file.go:68
+#: lxc/file.go:68 lxc/file.go:69
msgid "Recursively push or pull files"
msgstr ""
@@ -883,15 +883,15 @@ msgstr ""
msgid "Server protocol (lxd or simplestreams)"
msgstr ""
-#: lxc/file.go:65
+#: lxc/file.go:66
msgid "Set the file's gid on push"
msgstr ""
-#: lxc/file.go:66
+#: lxc/file.go:67
msgid "Set the file's perms on push"
msgstr ""
-#: lxc/file.go:64
+#: lxc/file.go:65
msgid "Set the file's uid on push"
msgstr ""
@@ -1110,7 +1110,7 @@ msgstr ""
msgid "Unable to read remote TLS certificate"
msgstr ""
-#: lxc/file.go:111
+#: lxc/file.go:112
#, c-format
msgid "Unknown file type '%s'"
msgstr ""
@@ -1237,7 +1237,7 @@ msgid ""
"AND stdout are terminals (stderr is ignored)."
msgstr ""
-#: lxc/file.go:38
+#: lxc/file.go:39
msgid ""
"Usage: lxc file <subcommand> [options]\n"
"\n"
@@ -1908,7 +1908,7 @@ msgstr ""
msgid "can't remove the default remote"
msgstr ""
-#: lxc/file.go:277
+#: lxc/file.go:282
msgid "can't supply uid/gid/mode in recursive mode"
msgstr ""
@@ -1951,7 +1951,7 @@ msgstr ""
msgid "processing aliases failed %s\n"
msgstr ""
-#: lxc/file.go:551
+#: lxc/file.go:556
msgid "recursive edit doesn't make sense :("
msgstr ""
diff --git a/po/sv.po b/po/sv.po
index 4d04435cf..ae9b32ceb 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: lxd\n"
"Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-07-01 16:31-0400\n"
+"POT-Creation-Date: 2017-07-02 01:07-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -124,7 +124,7 @@ msgstr ""
msgid "%s (%d more)"
msgstr ""
-#: lxc/file.go:187
+#: lxc/file.go:192
#, c-format
msgid "%s is not a directory"
msgstr ""
@@ -134,9 +134,9 @@ msgstr ""
msgid "%v (interrupt two more times to force)"
msgstr ""
-#: lxc/file.go:129
+#: lxc/file.go:130
#, c-format
-msgid "'%s' isn't a regular file or directory."
+msgid "'%s' isn't a supported file type."
msgstr ""
#: lxc/snapshot.go:53
@@ -215,7 +215,7 @@ msgstr ""
msgid "CREATED AT"
msgstr ""
-#: lxc/file.go:480
+#: lxc/file.go:485
msgid "Can't pull a directory without --recursive"
msgstr ""
@@ -300,7 +300,7 @@ msgstr ""
msgid "Could not create server cert dir"
msgstr ""
-#: lxc/file.go:69 lxc/file.go:70
+#: lxc/file.go:70 lxc/file.go:71
msgid "Create any directories necessary"
msgstr ""
@@ -422,7 +422,7 @@ msgstr ""
msgid "Failed to get the new container name"
msgstr ""
-#: lxc/file.go:124
+#: lxc/file.go:125
#, c-format
msgid "Failed to walk path for %s: %s"
msgstr ""
@@ -518,17 +518,17 @@ msgstr ""
msgid "Invalid configuration key"
msgstr ""
-#: lxc/file.go:523
+#: lxc/file.go:528
#, c-format
msgid "Invalid path %s"
msgstr ""
-#: lxc/file.go:452
+#: lxc/file.go:457
#, c-format
msgid "Invalid source %s"
msgstr ""
-#: lxc/file.go:229
+#: lxc/file.go:234
#, c-format
msgid "Invalid target %s"
msgstr ""
@@ -594,7 +594,7 @@ msgstr ""
msgid "More than one device matches, specify the device name."
msgstr ""
-#: lxc/file.go:439
+#: lxc/file.go:444
msgid "More than one file to download, but target is not a directory"
msgstr ""
@@ -803,7 +803,7 @@ msgstr ""
msgid "Public: %s"
msgstr ""
-#: lxc/file.go:67 lxc/file.go:68
+#: lxc/file.go:68 lxc/file.go:69
msgid "Recursively push or pull files"
msgstr ""
@@ -883,15 +883,15 @@ msgstr ""
msgid "Server protocol (lxd or simplestreams)"
msgstr ""
-#: lxc/file.go:65
+#: lxc/file.go:66
msgid "Set the file's gid on push"
msgstr ""
-#: lxc/file.go:66
+#: lxc/file.go:67
msgid "Set the file's perms on push"
msgstr ""
-#: lxc/file.go:64
+#: lxc/file.go:65
msgid "Set the file's uid on push"
msgstr ""
@@ -1110,7 +1110,7 @@ msgstr ""
msgid "Unable to read remote TLS certificate"
msgstr ""
-#: lxc/file.go:111
+#: lxc/file.go:112
#, c-format
msgid "Unknown file type '%s'"
msgstr ""
@@ -1237,7 +1237,7 @@ msgid ""
"AND stdout are terminals (stderr is ignored)."
msgstr ""
-#: lxc/file.go:38
+#: lxc/file.go:39
msgid ""
"Usage: lxc file <subcommand> [options]\n"
"\n"
@@ -1908,7 +1908,7 @@ msgstr ""
msgid "can't remove the default remote"
msgstr ""
-#: lxc/file.go:277
+#: lxc/file.go:282
msgid "can't supply uid/gid/mode in recursive mode"
msgstr ""
@@ -1951,7 +1951,7 @@ msgstr ""
msgid "processing aliases failed %s\n"
msgstr ""
-#: lxc/file.go:551
+#: lxc/file.go:556
msgid "recursive edit doesn't make sense :("
msgstr ""
diff --git a/po/tr.po b/po/tr.po
index d87b5907f..b41cc8a37 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: lxd\n"
"Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-07-01 16:31-0400\n"
+"POT-Creation-Date: 2017-07-02 01:07-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -124,7 +124,7 @@ msgstr ""
msgid "%s (%d more)"
msgstr ""
-#: lxc/file.go:187
+#: lxc/file.go:192
#, c-format
msgid "%s is not a directory"
msgstr ""
@@ -134,9 +134,9 @@ msgstr ""
msgid "%v (interrupt two more times to force)"
msgstr ""
-#: lxc/file.go:129
+#: lxc/file.go:130
#, c-format
-msgid "'%s' isn't a regular file or directory."
+msgid "'%s' isn't a supported file type."
msgstr ""
#: lxc/snapshot.go:53
@@ -215,7 +215,7 @@ msgstr ""
msgid "CREATED AT"
msgstr ""
-#: lxc/file.go:480
+#: lxc/file.go:485
msgid "Can't pull a directory without --recursive"
msgstr ""
@@ -300,7 +300,7 @@ msgstr ""
msgid "Could not create server cert dir"
msgstr ""
-#: lxc/file.go:69 lxc/file.go:70
+#: lxc/file.go:70 lxc/file.go:71
msgid "Create any directories necessary"
msgstr ""
@@ -422,7 +422,7 @@ msgstr ""
msgid "Failed to get the new container name"
msgstr ""
-#: lxc/file.go:124
+#: lxc/file.go:125
#, c-format
msgid "Failed to walk path for %s: %s"
msgstr ""
@@ -518,17 +518,17 @@ msgstr ""
msgid "Invalid configuration key"
msgstr ""
-#: lxc/file.go:523
+#: lxc/file.go:528
#, c-format
msgid "Invalid path %s"
msgstr ""
-#: lxc/file.go:452
+#: lxc/file.go:457
#, c-format
msgid "Invalid source %s"
msgstr ""
-#: lxc/file.go:229
+#: lxc/file.go:234
#, c-format
msgid "Invalid target %s"
msgstr ""
@@ -594,7 +594,7 @@ msgstr ""
msgid "More than one device matches, specify the device name."
msgstr ""
-#: lxc/file.go:439
+#: lxc/file.go:444
msgid "More than one file to download, but target is not a directory"
msgstr ""
@@ -803,7 +803,7 @@ msgstr ""
msgid "Public: %s"
msgstr ""
-#: lxc/file.go:67 lxc/file.go:68
+#: lxc/file.go:68 lxc/file.go:69
msgid "Recursively push or pull files"
msgstr ""
@@ -883,15 +883,15 @@ msgstr ""
msgid "Server protocol (lxd or simplestreams)"
msgstr ""
-#: lxc/file.go:65
+#: lxc/file.go:66
msgid "Set the file's gid on push"
msgstr ""
-#: lxc/file.go:66
+#: lxc/file.go:67
msgid "Set the file's perms on push"
msgstr ""
-#: lxc/file.go:64
+#: lxc/file.go:65
msgid "Set the file's uid on push"
msgstr ""
@@ -1110,7 +1110,7 @@ msgstr ""
msgid "Unable to read remote TLS certificate"
msgstr ""
-#: lxc/file.go:111
+#: lxc/file.go:112
#, c-format
msgid "Unknown file type '%s'"
msgstr ""
@@ -1237,7 +1237,7 @@ msgid ""
"AND stdout are terminals (stderr is ignored)."
msgstr ""
-#: lxc/file.go:38
+#: lxc/file.go:39
msgid ""
"Usage: lxc file <subcommand> [options]\n"
"\n"
@@ -1908,7 +1908,7 @@ msgstr ""
msgid "can't remove the default remote"
msgstr ""
-#: lxc/file.go:277
+#: lxc/file.go:282
msgid "can't supply uid/gid/mode in recursive mode"
msgstr ""
@@ -1951,7 +1951,7 @@ msgstr ""
msgid "processing aliases failed %s\n"
msgstr ""
-#: lxc/file.go:551
+#: lxc/file.go:556
msgid "recursive edit doesn't make sense :("
msgstr ""
More information about the lxc-devel
mailing list