diff options
| -rw-r--r-- | bitbake/lib/toaster/toastergui/typeaheads.py | 29 | ||||
| -rw-r--r-- | bitbake/lib/toaster/toastergui/urls.py | 5 |
2 files changed, 32 insertions, 2 deletions
diff --git a/bitbake/lib/toaster/toastergui/typeaheads.py b/bitbake/lib/toaster/toastergui/typeaheads.py index 2c6c1454a1..5316000209 100644 --- a/bitbake/lib/toaster/toastergui/typeaheads.py +++ b/bitbake/lib/toaster/toastergui/typeaheads.py | |||
| @@ -16,9 +16,12 @@ | |||
| 16 | # with this program; if not, write to the Free Software Foundation, Inc., | 16 | # with this program; if not, write to the Free Software Foundation, Inc., |
| 17 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | 17 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
| 18 | 18 | ||
| 19 | import subprocess | ||
| 20 | |||
| 19 | from toastergui.widgets import ToasterTypeAhead | 21 | from toastergui.widgets import ToasterTypeAhead |
| 20 | from orm.models import Project | 22 | from orm.models import Project |
| 21 | from django.core.urlresolvers import reverse | 23 | from django.core.urlresolvers import reverse |
| 24 | from django.core.cache import cache | ||
| 22 | 25 | ||
| 23 | class LayersTypeAhead(ToasterTypeAhead): | 26 | class LayersTypeAhead(ToasterTypeAhead): |
| 24 | """ Typeahead for layers available and not added in the current project's | 27 | """ Typeahead for layers available and not added in the current project's |
| @@ -147,3 +150,29 @@ class ProjectsTypeAhead(ToasterTypeAhead): | |||
| 147 | results.append(needed_fields) | 150 | results.append(needed_fields) |
| 148 | 151 | ||
| 149 | return results | 152 | return results |
| 153 | |||
| 154 | |||
| 155 | class GitRevisionTypeAhead(ToasterTypeAhead): | ||
| 156 | def apply_search(self, search_term, prj, request): | ||
| 157 | results = [] | ||
| 158 | git_url = request.GET.get('git_url') | ||
| 159 | ls_remote = cache.get(git_url) | ||
| 160 | |||
| 161 | if ls_remote is None: | ||
| 162 | ls_remote = subprocess.check_output(['git', 'ls-remote', git_url], | ||
| 163 | universal_newlines=True) | ||
| 164 | ls_remote = ls_remote.splitlines() | ||
| 165 | # Avoid fetching the list of git refs on each new input | ||
| 166 | cache.set(git_url, ls_remote, 120) | ||
| 167 | |||
| 168 | for rev in ls_remote: | ||
| 169 | git_rev = str(rev).split("/")[-1:][0] | ||
| 170 | # "HEAD" has a special meaning in Toaster... YOCTO #9924 | ||
| 171 | if "HEAD" in git_rev: | ||
| 172 | continue | ||
| 173 | |||
| 174 | if git_rev.startswith(search_term): | ||
| 175 | results.append({'name': git_rev, | ||
| 176 | 'detail': '[ %s ]' % str(rev)}) | ||
| 177 | |||
| 178 | return results | ||
diff --git a/bitbake/lib/toaster/toastergui/urls.py b/bitbake/lib/toaster/toastergui/urls.py index 29f0d96ba7..d92f190aed 100644 --- a/bitbake/lib/toaster/toastergui/urls.py +++ b/bitbake/lib/toaster/toastergui/urls.py | |||
| @@ -182,8 +182,9 @@ urlpatterns = patterns('toastergui.views', | |||
| 182 | typeaheads.RecipesTypeAhead.as_view(), name='xhr_recipestypeahead'), | 182 | typeaheads.RecipesTypeAhead.as_view(), name='xhr_recipestypeahead'), |
| 183 | url(r'^xhr_typeahead/projects$', | 183 | url(r'^xhr_typeahead/projects$', |
| 184 | typeaheads.ProjectsTypeAhead.as_view(), name='xhr_projectstypeahead'), | 184 | typeaheads.ProjectsTypeAhead.as_view(), name='xhr_projectstypeahead'), |
| 185 | 185 | url(r'^xhr_typeahead/gitrev$', | |
| 186 | 186 | typeaheads.GitRevisionTypeAhead.as_view(), | |
| 187 | name='xhr_gitrevtypeahead'), | ||
| 187 | 188 | ||
| 188 | url(r'^xhr_testreleasechange/(?P<pid>\d+)$', 'xhr_testreleasechange', | 189 | url(r'^xhr_testreleasechange/(?P<pid>\d+)$', 'xhr_testreleasechange', |
| 189 | name='xhr_testreleasechange'), | 190 | name='xhr_testreleasechange'), |
