Patchwork [bitbake-devel,02/32] Hob: avoid the image selection dialog to walk through all directories and its sub-directories, when users click "My images".

login
register
mail settings
Submitter Shane Wang
Date Feb. 29, 2012, 2:14 p.m.
Message ID <1f142038e9be9490df21a5cd4c14c579ca63a896.1330523904.git.shane.wang@intel.com>
Download mbox | patch
Permalink /patch/22423/
State New
Headers show

Comments

Shane Wang - Feb. 29, 2012, 2:14 p.m.
The current implementation of the image selection dialog walks through all directories and its sub-directories, when users click "My images" to choose a directory. If the directory is /, the system becomes slow. This patch is to avoid walking through all directories but the child directories only, given a directory.

Signed-off-by: Shane Wang <shane.wang@intel.com>
---
 bitbake/lib/bb/ui/crumbs/hig.py |   12 ++++++++----
 1 files changed, 8 insertions(+), 4 deletions(-)
Joshua Lock - Feb. 29, 2012, 9:30 p.m.
On 29/02/12 06:14, Shane Wang wrote:
> The current implementation of the image selection dialog walks through all directories and its sub-directories, when users click "My images" to choose a directory. If the directory is /, the system becomes slow. This patch is to avoid walking through all directories but the child directories only, given a directory.
>
> Signed-off-by: Shane Wang<shane.wang@intel.com>
Signed-off-by: Joshua Lock <josh@linux.intel.com>

> ---
>   bitbake/lib/bb/ui/crumbs/hig.py |   12 ++++++++----
>   1 files changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/bitbake/lib/bb/ui/crumbs/hig.py b/bitbake/lib/bb/ui/crumbs/hig.py
> index 8f4f7cd..9aa6fdf 100644
> --- a/bitbake/lib/bb/ui/crumbs/hig.py
> +++ b/bitbake/lib/bb/ui/crumbs/hig.py
> @@ -582,6 +582,7 @@ class ImageSelectionDialog (gtk.Dialog):
>
>           self.image_folder = image_folder
>           self.image_types  = image_types
> +        self.image_list = []
>           self.image_names = []
>
>           # create visual elements on the dialog
> @@ -645,13 +646,17 @@ class ImageSelectionDialog (gtk.Dialog):
>           dialog.destroy()
>
>       def fill_image_store(self):
> +        self.image_list = []
>           self.image_store.clear()
>           imageset = set()
>           for root, dirs, files in os.walk(self.image_folder):
> +            # ignore the sub directories
> +            dirs[:] = []
>               for f in files:
>                   for image_type in self.image_types:
>                       if f.endswith('.' + image_type):
>                           imageset.add(f.rsplit('.' + image_type)[0])
> +                        self.image_list.append(f)
>
>           for image in imageset:
>               self.image_store.set(self.image_store.append(), 0, image, 1, False)
> @@ -665,9 +670,8 @@ class ImageSelectionDialog (gtk.Dialog):
>               while iter:
>                   path = self.image_store.get_path(iter)
>                   if self.image_store[path][1]:
> -                    for root, dirs, files in os.walk(self.image_folder):
> -                        for f in files:
> -                            if f.startswith(self.image_store[path][0] + '.'):
> -                                self.image_names.append(f)
> +                    for f in self.image_list:
> +                        if f.startswith(self.image_store[path][0] + '.'):
> +                            self.image_names.append(f)
>                       break
>                   iter = self.image_store.iter_next(iter)

Patch

diff --git a/bitbake/lib/bb/ui/crumbs/hig.py b/bitbake/lib/bb/ui/crumbs/hig.py
index 8f4f7cd..9aa6fdf 100644
--- a/bitbake/lib/bb/ui/crumbs/hig.py
+++ b/bitbake/lib/bb/ui/crumbs/hig.py
@@ -582,6 +582,7 @@  class ImageSelectionDialog (gtk.Dialog):
 
         self.image_folder = image_folder
         self.image_types  = image_types
+        self.image_list = []
         self.image_names = []
 
         # create visual elements on the dialog
@@ -645,13 +646,17 @@  class ImageSelectionDialog (gtk.Dialog):
         dialog.destroy()
 
     def fill_image_store(self):
+        self.image_list = []
         self.image_store.clear()
         imageset = set()
         for root, dirs, files in os.walk(self.image_folder):
+            # ignore the sub directories
+            dirs[:] = []
             for f in files:
                 for image_type in self.image_types:
                     if f.endswith('.' + image_type):
                         imageset.add(f.rsplit('.' + image_type)[0])
+                        self.image_list.append(f)
         
         for image in imageset:
             self.image_store.set(self.image_store.append(), 0, image, 1, False)
@@ -665,9 +670,8 @@  class ImageSelectionDialog (gtk.Dialog):
             while iter:
                 path = self.image_store.get_path(iter)
                 if self.image_store[path][1]:
-                    for root, dirs, files in os.walk(self.image_folder):
-                        for f in files:
-                            if f.startswith(self.image_store[path][0] + '.'):
-                                self.image_names.append(f)
+                    for f in self.image_list:
+                        if f.startswith(self.image_store[path][0] + '.'):
+                            self.image_names.append(f)
                     break            
                 iter = self.image_store.iter_next(iter)