The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/2116

This e-mail was sent by the LXC bot, direct replies will not reach the author
unless they happen to be subscribed to this list.

=== Description (from pull-request) ===
Move default aliases into the alias checking code itself instead of
making them a property of the default config.  Add unix-like aliases
to the map of default aliases, e.g. cp, ls, mv and rm.

Fixes #1615

Signed-off-by: Sean Christopherson <sean.j.christopher...@intel.com>
From 10a826bb9e0694be25771037271038e685907a0a Mon Sep 17 00:00:00 2001
From: Sean Christopherson <sean.j.christopher...@intel.com>
Date: Mon, 13 Jun 2016 10:19:37 -0700
Subject: [PATCH] Build unix-like aliases directly into LXC

Move default aliases into the alias checking code itself instead of
making them a property of the default config.  Add unix-like aliases
to the map of default aliases, e.g. cp, ls, mv and rm.

Fixes #1615

Signed-off-by: Sean Christopherson <sean.j.christopher...@intel.com>
---
 config.go            |  6 +-----
 lxc/main.go          | 39 ++++++++++++++++++++++++++++++++++++---
 test/suites/basic.sh | 30 +++++++++++++++++++++++++++---
 3 files changed, 64 insertions(+), 11 deletions(-)

diff --git a/config.go b/config.go
index d553b06..f4da426 100644
--- a/config.go
+++ b/config.go
@@ -80,11 +80,7 @@ var DefaultRemotes = map[string]RemoteConfig{
 
 var DefaultConfig = Config{
        Remotes:       DefaultRemotes,
-       DefaultRemote: "local",
-       Aliases: map[string]string{
-               "shell": "exec @ARGS@ -- login -f root",
-       },
-}
+       DefaultRemote: "local"}
 
 // LoadConfig reads the configuration from the config path; if the path does
 // not exist, it returns a default configuration.
diff --git a/lxc/main.go b/lxc/main.go
index 40f3d24..ff8b085 100644
--- a/lxc/main.go
+++ b/lxc/main.go
@@ -181,14 +181,39 @@ var commands = map[string]command{
        "version":  &versionCmd{},
 }
 
+// defaultAliases contains LXC's built-in command line aliases.  The built-in
+// aliases are checked only if no user-defined alias was found.
+var defaultAliases = map[string]string{
+       "shell": "exec @ARGS@ -- login -f root",
+
+       "cp": "copy",
+       "ls": "list",
+       "mv": "move",
+       "rm": "delete",
+
+       "image cp": "image copy",
+       "image ls": "image list",
+       "image rm": "image delete",
+
+       "image alias ls": "image alias list",
+       "image alias rm": "image alias delete",
+
+       "remote ls": "remote list",
+       "remote mv": "remote rename",
+       "remote rm": "remote remove",
+
+       "config device ls": "config device list",
+       "config device rm": "config device remove",
+}
+
 var errArgs = fmt.Errorf(i18n.G("wrong number of subcommand arguments"))
 
-func expandAlias(config *lxd.Config, origArgs []string) ([]string, bool) {
+func findAlias(aliases map[string]string, origArgs []string) ([]string, 
[]string, bool) {
        foundAlias := false
        aliasKey := []string{}
        aliasValue := []string{}
 
-       for k, v := range config.Aliases {
+       for k, v := range aliases {
                foundAlias = true
                for i, key := range strings.Split(k, " ") {
                        if len(origArgs) <= i+1 || origArgs[i+1] != key {
@@ -204,8 +229,16 @@ func expandAlias(config *lxd.Config, origArgs []string) 
([]string, bool) {
                }
        }
 
+       return aliasKey, aliasValue, foundAlias
+}
+
+func expandAlias(config *lxd.Config, origArgs []string) ([]string, bool) {
+       aliasKey, aliasValue, foundAlias := findAlias(config.Aliases, origArgs)
        if !foundAlias {
-               return []string{}, false
+               aliasKey, aliasValue, foundAlias = findAlias(defaultAliases, 
origArgs)
+               if !foundAlias {
+                       return []string{}, false
+               }
        }
 
        newArgs := []string{origArgs[0]}
diff --git a/test/suites/basic.sh b/test/suites/basic.sh
index 05dfd86..7e4f915 100644
--- a/test/suites/basic.sh
+++ b/test/suites/basic.sh
@@ -155,9 +155,33 @@ test_basic_usage() {
   lxc delete bar2
   lxc image delete foo
 
-  # test basic alias support
-  printf "aliases:\n  ls: list" >> "${LXD_CONF}/config.yml"
-  lxc ls
+  # Test alias support
+  cp "${LXD_CONF}/config.yml" "${LXD_CONF}/config.yml.bak"
+
+  #   1. Basic built-in alias functionality
+  [ "$(lxc ls)" = "$(lxc list)" ]
+  #   2. Basic user-defined alias functionality
+  printf "aliases:\n  l: list\n" >> "${LXD_CONF}/config.yml"
+  [ "$(lxc l)" = "$(lxc list)" ]
+  #   3. Built-in aliases and user-defined aliases can coexist
+  [ "$(lxc ls)" = "$(lxc l)" ]
+  #   4. Multi-argument alias keys and values
+  printf "  i ls: image list\n" >> "${LXD_CONF}/config.yml"
+  [ "$(lxc i ls)" = "$(lxc image list)" ]
+  #   5. Aliases where len(keys) != len(values) (expansion/contraction of 
number of arguments)
+  printf "  ils: image list\n  container ls: list\n" >> 
"${LXD_CONF}/config.yml"
+  [ "$(lxc ils)" = "$(lxc image list)" ]
+  [ "$(lxc container ls)" = "$(lxc list)" ]
+  #   6. User-defined aliases override built-in aliases
+  printf "  cp: list\n" >> "${LXD_CONF}/config.yml"
+  [ "$(lxc ls)" = "$(lxc cp)" ]
+  #   7. User-defined aliases override commands and don't recurse
+  LXC_LIST_DEBUG=$(lxc list --debug 2>&1 | grep -o "Raw.*")
+  printf "  list: list --debug\n" >> "${LXD_CONF}/config.yml"
+  [ "$(lxc list  2>&1 | grep -o 'Raw.*')" = "$LXC_LIST_DEBUG" ]
+
+  # Restore the config to remove the aliases
+  mv "${LXD_CONF}/config.yml.bak" "${LXD_CONF}/config.yml"
 
   # Delete the bar container we've used for several tests
   lxc delete bar
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to