Soft Patch Panel
 help / color / mirror / Atom feed
From: ogawa.yasufumi@lab.ntt.co.jp
To: ferruh.yigit@intel.com, spp@dpdk.org
Cc: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
Subject: [spp] [PATCH 04/12] spp: add common completion mehtod in Shell class
Date: Tue,  6 Mar 2018 19:39:21 +0900	[thread overview]
Message-ID: <20180306103929.64809-5-ogawa.yasufumi@lab.ntt.co.jp> (raw)
In-Reply-To: <20180306103929.64809-1-ogawa.yasufumi@lab.ntt.co.jp>

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

Completion is required to implementation in methods inspecting parents
or children directories. Therefor, it is better to be an common method
and call from others.

This update for adding common completion and change 'complete_cd' and
'complete_ls' methods to use this common method.

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 src/spp.py | 50 +++++++++++++++++++++++++++++++++-----------------
 1 file changed, 33 insertions(+), 17 deletions(-)

diff --git a/src/spp.py b/src/spp.py
index 06f5032..e230b93 100755
--- a/src/spp.py
+++ b/src/spp.py
@@ -20,6 +20,7 @@ import traceback
 
 # Turn true if activate logger to debug remote command.
 logger = None
+logger = True
 
 # Maximum num of sock queues for secondaries
 MAX_SECONDARY = 16
@@ -685,32 +686,25 @@ class Shell(cmd.Cmd, object):
     def do_pwd(self, args):
         print(os.getcwd())
 
-    def do_cd(self, args):
-        if os.path.isdir(args):
-            os.chdir(args)
-            print(os.getcwd())
-        else:
-            print("No such a directory.")
-
-    def ls_decorate_dir(self, filelist):
+    def decorate_dir(self, curdir, filelist):
         res = []
         for f in filelist:
-            if os.path.isdir(f):
+            if os.path.isdir('%s/%s' % (curdir, f)):
                 res.append('%s/' % f)
             else:
                 res.append(f)
         return res
 
-    def complete_ls(self, text, line, begidx, endidx):
+    def compl_common(self, text, line, ftype=None):
         if text == '':
             tokens = line.split(' ')
-            target = tokens[-1]
-            if target == '':
-                completions = self.ls_decorate_dir(
-                    os.listdir(os.getcwd()))
+            target_dir = tokens[-1]
+            if target_dir == '':
+                res = self.decorate_dir(
+                    '.', os.listdir(os.getcwd()))
             else:
-                completions = self.ls_decorate_dir(
-                    os.listdir(target))
+                res = self.decorate_dir(
+                    target_dir, os.listdir(target_dir))
         else:
             tokens = line.split(' ')
             target = tokens[-1]
@@ -726,9 +720,21 @@ class Shell(cmd.Cmd, object):
             for t in os.listdir(target_dir):
                 if seg in t:
                     matched.append(t)
-            completions = self.ls_decorate_dir(matched)
+            res = self.decorate_dir(target_dir, matched)
+
+        if ftype is not None:
+            if ftype == 'directory':
+                completions = []
+                for fn in res:
+                    if fn[-1] == '/':
+                        completions.append(fn)
+        else:
+            completions = res
         return completions
 
+    def complete_ls(self, text, line, begidx, endidx):
+        return self.compl_common(text, line)
+
     def do_ls(self, args):
         if args == '' or os.path.isdir(args):
             c = 'ls -F %s' % args
@@ -736,6 +742,16 @@ class Shell(cmd.Cmd, object):
         else:
             print("No such a directory.")
 
+    def complete_cd(self, text, line, begidx, endidx):
+        return self.compl_common(text, line, 'directory')
+
+    def do_cd(self, args):
+        if os.path.isdir(args):
+            os.chdir(args)
+            print(os.getcwd())
+        else:
+            print("No such a directory.")
+
     def do_bye(self, arg):
         """Stop recording, close SPP, and exit: BYE"""
 
-- 
2.13.1

  parent reply	other threads:[~2018-03-06 10:39 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-06 10:39 [spp] [PATCH 00/12] Improve spp controller ogawa.yasufumi
2018-03-06 10:39 ` [spp] [PATCH 01/12] spp: add basic commands ogawa.yasufumi
2018-03-06 10:39 ` [spp] [PATCH 02/12] spp: add ls command ogawa.yasufumi
2018-03-06 10:39 ` [spp] [PATCH 03/12] spp: add completion for " ogawa.yasufumi
2018-03-06 10:39 ` ogawa.yasufumi [this message]
2018-03-06 10:39 ` [spp] [PATCH 05/12] spp: fix bug of completion ogawa.yasufumi
2018-03-06 10:39 ` [spp] [PATCH 06/12] spp: add file type support to compl_common ogawa.yasufumi
2018-03-06 10:39 ` [spp] [PATCH 07/12] spp: fix bug for record command ogawa.yasufumi
2018-03-06 10:39 ` [spp] [PATCH 08/12] spp: add completion for playback command ogawa.yasufumi
2018-03-06 10:39 ` [spp] [PATCH 09/12] spp: add completion for record command ogawa.yasufumi
2018-03-06 10:39 ` [spp] [PATCH 10/12] spp: add mkdir command and its completion ogawa.yasufumi
2018-03-06 10:39 ` [spp] [PATCH 11/12] spp: refactor help messages in Shell class ogawa.yasufumi
2018-03-06 10:39 ` [spp] [PATCH 12/12] spp: refactor logger ogawa.yasufumi
2018-03-27 23:36 ` [spp] [PATCH 00/12] Improve spp controller Ferruh Yigit

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180306103929.64809-5-ogawa.yasufumi@lab.ntt.co.jp \
    --to=ogawa.yasufumi@lab.ntt.co.jp \
    --cc=ferruh.yigit@intel.com \
    --cc=spp@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).