changeset 525:87d80c84df09

added search in specific repository added delete to my page view handled by separate controller for deleting users own repos, added fork draft
author Marcin Kuzminski <marcin@python-works.com>
date Wed, 29 Sep 2010 22:38:54 +0200
parents 63212fea2471
children 804a14e086dc
files pylons_app/config/routing.py pylons_app/controllers/search.py pylons_app/controllers/settings.py pylons_app/templates/admin/users/user_edit_my_account.html pylons_app/templates/search/search.html pylons_app/templates/settings/repo_fork.html
diffstat 6 files changed, 163 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/pylons_app/config/routing.py	Wed Sep 29 22:36:53 2010 +0200
+++ b/pylons_app/config/routing.py	Wed Sep 29 22:38:54 2010 +0200
@@ -108,7 +108,8 @@
         m.connect('admin_add_repo', '/add_repo/{new_repo:[a-z0-9\. _-]*}',
                   action='add_repo')
     #SEARCH
-    map.connect('search', '/_admin/search', controller='search')
+    map.connect('search', '/_admin/search', controller='search',)
+    map.connect('search_repo', '/_admin/search/{search_repo:.*}', controller='search')
     
     #LOGIN/LOGOUT/REGISTER/SIGN IN
     map.connect('login_home', '/_admin/login', controller='login')
@@ -159,7 +160,10 @@
                 conditions=dict(function=check_repo))    
     map.connect('files_archive_home', '/{repo_name:.*}/archive/{revision}/{fileformat}',
                 controller='files', action='archivefile', revision='tip',
-                conditions=dict(function=check_repo))
+                conditions=dict(function=check_repo))   
+    map.connect('repo_settings_delete', '/{repo_name:.*}/settings',
+                controller='settings', action="delete",
+                conditions=dict(method=["DELETE"], function=check_repo))
     map.connect('repo_settings_update', '/{repo_name:.*}/settings',
                 controller='settings', action="update",
                 conditions=dict(method=["PUT"], function=check_repo))
@@ -167,5 +171,7 @@
                 controller='settings', action='index',
                 conditions=dict(function=check_repo))
 
-    
+    map.connect('repo_fork_home', '/{repo_name:.*}/fork',
+                controller='settings', action='fork',
+                conditions=dict(function=check_repo))    
     return map
--- a/pylons_app/controllers/search.py	Wed Sep 29 22:36:53 2010 +0200
+++ b/pylons_app/controllers/search.py	Wed Sep 29 22:38:54 2010 +0200
@@ -44,7 +44,8 @@
     def __before__(self):
         super(SearchController, self).__before__()    
 
-    def index(self):
+    def index(self, search_repo=None):
+        c.repo_name = search_repo
         c.formated_results = []
         c.runtime = ''
         c.cur_query = request.GET.get('q', None)
@@ -59,6 +60,8 @@
                 searcher = idx.searcher()
 
                 qp = QueryParser("content", schema=SCHEMA)
+                if c.repo_name:
+                    cur_query = u'repository:%s %s' % (c.repo_name, cur_query)
                 try:
                     query = qp.parse(unicode(cur_query))
                     
--- a/pylons_app/controllers/settings.py	Wed Sep 29 22:36:53 2010 +0200
+++ b/pylons_app/controllers/settings.py	Wed Sep 29 22:38:54 2010 +0200
@@ -55,7 +55,7 @@
                       ' in order to rescan repositories') % repo_name,
                       category='error')
         
-            return redirect(url('repos'))        
+            return redirect(url('hg_home'))        
         defaults = c.repo_info.__dict__
         defaults.update({'user':c.repo_info.user.username})
         c.users_array = repo_model.get_users_js()
@@ -98,3 +98,47 @@
                     % repo_name, category='error')
                     
         return redirect(url('repo_settings_home', repo_name=changed_name))
+
+
+
+    def delete(self, repo_name):    
+        """DELETE /repos/repo_name: Delete an existing item"""
+        # Forms posted to this method should contain a hidden field:
+        #    <input type="hidden" name="_method" value="DELETE" />
+        # Or using helpers:
+        #    h.form(url('repo_settings_delete', repo_name=ID),
+        #           method='delete')
+        # url('repo_settings_delete', repo_name=ID)
+        
+        repo_model = RepoModel()
+        repo = repo_model.get(repo_name)
+        if not repo:
+            h.flash(_('%s repository is not mapped to db perhaps' 
+                      ' it was moved or renamed  from the filesystem'
+                      ' please run the application again'
+                      ' in order to rescan repositories') % repo_name,
+                      category='error')
+        
+            return redirect(url('hg_home'))
+        try:
+            repo_model.delete(repo)            
+            invalidate_cache('cached_repo_list')
+            h.flash(_('deleted repository %s') % repo_name, category='success')
+        except Exception:
+            h.flash(_('An error occured during deletion of %s') % repo_name,
+                    category='error')
+        
+        return redirect(url('hg_home'))
+    
+    def fork(self, repo_name):
+        repo_model = RepoModel()
+        c.repo_info = repo = repo_model.get(repo_name)
+        if not repo:
+            h.flash(_('%s repository is not mapped to db perhaps' 
+                      ' it was created or renamed from the filesystem'
+                      ' please run the application again'
+                      ' in order to rescan repositories') % repo_name,
+                      category='error')
+        
+            return redirect(url('hg_home'))         
+        return render('settings/repo_fork.html')
--- a/pylons_app/templates/admin/users/user_edit_my_account.html	Wed Sep 29 22:36:53 2010 +0200
+++ b/pylons_app/templates/admin/users/user_edit_my_account.html	Wed Sep 29 22:38:54 2010 +0200
@@ -88,21 +88,33 @@
     <div class="table">
 	    <table>
 	     <tbody>
-	     %for repo in c.user_repos:
-	        <tr>
-	            <td>
-	             %if repo.dbrepo.private:
-	                <img class="icon" alt="${_('private')}" src="/images/icons/lock.png"/>
-	             %else:
-	                <img class="icon" alt="${_('public')}" src="/images/icons/lock_open.png"/>
-	             %endif
-	                                             
-	            ${h.link_to(repo.name, h.url('summary_home',repo_name=repo.name))}</td> 
-	            <td>${_('revision')}: ${h.get_changeset_safe(repo,'tip').revision}</td>
-	            <td>${_('last changed')}: ${h.age(repo.last_change)}</td>
-	            <td><img class="icon" alt="${_('private')}" src="/images/icons/application_form_edit.png"/> ${h.link_to(_('edit'),h.url('edit_repo',repo_name=repo.name))}</td>
-	        </tr>
-	     %endfor
+	     %if c.user_repos:
+		     %for repo in c.user_repos:
+		        <tr>
+		            <td>
+		             %if repo.dbrepo.private:
+		                <img class="icon" alt="${_('private')}" src="/images/icons/lock.png"/>
+		             %else:
+		                <img class="icon" alt="${_('public')}" src="/images/icons/lock_open.png"/>
+		             %endif
+		                                             
+		            ${h.link_to(repo.name, h.url('summary_home',repo_name=repo.name))}</td> 
+		            <td>${_('revision')}: ${h.get_changeset_safe(repo,'tip').revision}</td>
+		            <td>${_('last changed')}: ${h.age(repo.last_change)}</td>
+		            <td><img class="icon" alt="${_('private')}" src="/images/icons/application_form_edit.png"/> ${h.link_to(_('edit'),h.url('repo_settings_home',repo_name=repo.name))}</td>
+		            <td>
+	                  ${h.form(url('repo_settings_delete', repo_name=repo.name),method='delete')}
+	                    ${h.submit('remove_%s' % repo.name,'delete',class_="delete_icon action_button",onclick="return confirm('Confirm to delete this repository');")}
+	                  ${h.end_form()}	            
+		            </td>
+		        </tr>
+		     %endfor
+	     %else:
+	     	${_('No repositories yet')} 
+	     	%if h.HasPermissionAny('hg.admin','hg.create.repository')():
+	     		${h.link_to(_('create one now'),h.url('admin_settings_create_repository'))}
+	     	%endif
+	     %endif
 	     </tbody>
 	     </table>
     </div>
--- a/pylons_app/templates/search/search.html	Wed Sep 29 22:36:53 2010 +0200
+++ b/pylons_app/templates/search/search.html	Wed Sep 29 22:38:54 2010 +0200
@@ -1,7 +1,13 @@
 ## -*- coding: utf-8 -*-
 <%inherit file="/base/base.html"/>
 <%def name="title()">
-   ${_('Search')}: ${c.cur_query}
+   ${_('Search')} 
+	%if c.repo_name:
+		${_('in repository: ') + c.repo_name}
+	%else:
+		${_('in all repositories')}		
+	%endif
+	:${c.cur_query}
 </%def>
 <%def name="breadcrumbs()">
 	${c.hg_app_name}
@@ -14,16 +20,26 @@
 <div class="box">
 	<!-- box / title -->
 	<div class="title">
-		<h5>${_('Search')}</h5>
+		<h5>${_('Search')}
+		%if c.repo_name:
+			${_('in repository: ') + c.repo_name}
+		%else:
+			${_('in all repositories')}
+		%endif		
+		</h5>
 	</div>
 	<!-- end box / title -->
-	${h.form('search',method='get')}
+	%if c.repo_name:
+		${h.form(h.url('search_repo',search_repo=c.repo_name),method='get')}	
+	%else:
+		${h.form(h.url('search'),method='get')}
+	%endif
 	<div class="form">
 		<div class="fields">
 		
 			<div class="field ">
 				<div class="label">
-					<label for="q">${_('Search:')}</label>
+					<label for="q">${_('Search')}:</label>
 				</div>
 				<div class="input">
 					${h.text('q',c.cur_query,class_="small")}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pylons_app/templates/settings/repo_fork.html	Wed Sep 29 22:38:54 2010 +0200
@@ -0,0 +1,58 @@
+## -*- coding: utf-8 -*-
+<%inherit file="/base/base.html"/>
+
+<%def name="title()">
+    ${_('Fork repository')} ${c.repo_info.repo_name}
+</%def>
+
+<%def name="breadcrumbs_links()">
+    ${h.link_to(c.repo_info.repo_name,h.url('summary_home',repo_name=c.repo_info.repo_name))} 
+    &raquo;
+    ${_('fork')}
+</%def>
+
+<%def name="page_nav()">
+	${self.menu('')}
+</%def>
+<%def name="main()">
+<div class="box">
+    <!-- box / title -->
+    <div class="title">
+        ${self.breadcrumbs()}      
+    </div>
+    ${h.form(url('repos'))}
+    <div class="form">
+        <!-- fields -->
+        <div class="fields">
+            <div class="field">
+	            <div class="label">
+	                <label for="repo_name">${_('Fork name')}:</label>
+	            </div>
+	            <div class="input">
+	                ${h.text('fork_name')}
+	            </div>
+             </div>
+            <div class="field">
+                <div class="label label-textarea">
+                    <label for="description">${_('Description')}:</label>
+                </div>
+                <div class="textarea text-area editor">
+                    ${h.textarea('description',cols=23,rows=5)}
+                </div>
+             </div>
+            <div class="field">
+                <div class="label label-checkbox">
+                    <label for="private">${_('Private')}:</label>
+                </div>
+                <div class="checkboxes">
+                    ${h.checkbox('private',value="True")}
+                </div>
+             </div>
+	        <div class="buttons">
+	          ${h.submit('fork','fork this repository',class_="ui-button ui-widget ui-state-default ui-corner-all")}
+	        </div>                                                          
+        </div>
+    </div>    
+    ${h.end_form()}    
+</div>
+</%def>