| 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
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)
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(-)