changeset 4322:96bd919192b0

pull requests: simple editing
author Mads Kiilerich <madski@unity3d.com>
date Tue, 10 Dec 2013 19:30:37 +0100
parents f4c9b0f76d79
children 65a964fc9053
files kallithea/config/routing.py kallithea/controllers/pullrequests.py kallithea/model/forms.py kallithea/templates/pullrequests/pullrequest_show.html
diffstat 4 files changed, 101 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/kallithea/config/routing.py	Fri Jul 18 18:44:54 2014 +0200
+++ b/kallithea/config/routing.py	Tue Dec 10 19:30:37 2013 +0100
@@ -698,6 +698,11 @@
                  controller='pullrequests',
                  action='show', conditions=dict(function=check_repo,
                                                 method=["GET"]))
+    rmap.connect('pullrequest_post',
+                 '/{repo_name:.*?}/pull-request/{pull_request_id}',
+                 controller='pullrequests',
+                 action='post', conditions=dict(function=check_repo,
+                                                method=["POST"]))
     rmap.connect('pullrequest_update',
                  '/{repo_name:.*?}/pull-request/{pull_request_id}',
                  controller='pullrequests',
--- a/kallithea/controllers/pullrequests.py	Fri Jul 18 18:44:54 2014 +0200
+++ b/kallithea/controllers/pullrequests.py	Tue Dec 10 19:30:37 2013 +0100
@@ -55,7 +55,7 @@
 from kallithea.model.repo import RepoModel
 from kallithea.model.comment import ChangesetCommentsModel
 from kallithea.model.changeset_status import ChangesetStatusModel
-from kallithea.model.forms import PullRequestForm
+from kallithea.model.forms import PullRequestForm, PullRequestPostForm
 from kallithea.lib.utils2 import safe_int
 from kallithea.controllers.changeset import anchor_url, _ignorews_url,\
     _context_url, get_line_ctx, get_ignore_ws
@@ -382,7 +382,7 @@
         title = _form['pullrequest_title']
         if not title:
             title = '%s#%s to %s' % (org_repo, org_ref.split(':', 2)[1], other_repo)
-        description = _form['pullrequest_desc']
+        description = _form['pullrequest_desc'].strip() or _('No description')
         try:
             pull_request = PullRequestModel().create(
                 self.authuser.user_id, org_repo, org_ref, other_repo,
@@ -404,6 +404,25 @@
     @NotAnonymous()
     @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
                                    'repository.admin')
+    def post(self, repo_name, pull_request_id):
+        repo = RepoModel()._get_repo(repo_name)
+        pull_request = PullRequest.get_or_404(pull_request_id)
+
+        _form = PullRequestPostForm()().to_python(request.POST)
+
+        pull_request.title = _form['pullrequest_title']
+        pull_request.description = _form['pullrequest_desc'].strip() or _('No description')
+
+        Session().commit()
+        h.flash(_('Pull request updated'), category='success')
+
+        return redirect(url('pullrequest_show', repo_name=repo.repo_name,
+                            pull_request_id=pull_request_id))
+
+    @LoginRequired()
+    @NotAnonymous()
+    @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
+                                   'repository.admin')
     @jsonify
     def update(self, repo_name, pull_request_id):
         pull_request = PullRequest.get_or_404(pull_request_id)
--- a/kallithea/model/forms.py	Fri Jul 18 18:44:54 2014 +0200
+++ b/kallithea/model/forms.py	Tue Dec 10 19:30:37 2013 +0100
@@ -502,6 +502,17 @@
     return _PullRequestForm
 
 
+def PullRequestPostForm():
+    class _PullRequestPostForm(formencode.Schema):
+        allow_extra_fields = True
+        filter_extra_fields = True
+
+        pullrequest_title = v.UnicodeString(strip=True, required=True)
+        pullrequest_desc = v.UnicodeString(strip=True, required=False)
+
+    return _PullRequestPostForm
+
+
 def GistForm(lifetime_options):
     class _GistForm(formencode.Schema):
 
--- a/kallithea/templates/pullrequests/pullrequest_show.html	Fri Jul 18 18:44:54 2014 +0200
+++ b/kallithea/templates/pullrequests/pullrequest_show.html	Tue Dec 10 19:30:37 2013 +0100
@@ -24,14 +24,59 @@
     </div>
 
     <div class="form pr-box" style="float: left">
-        <div class="pr-details-title ${'closed' if c.pull_request.is_closed() else ''}">
-            ${_('Title')}: ${c.pull_request.title}
-            %if c.pull_request.is_closed():
-                (${_('Closed')})
+      <div class="pr-details-title ${'closed' if c.pull_request.is_closed() else ''}">
+          ${_('Title')}: ${c.pull_request.title}
+          %if c.pull_request.is_closed():
+              (${_('Closed')})
+          %endif
+      </div>
+      <div id="pr-summary" class="fields">
+
+        <div class="field pr-not-edit" style="min-height:37px">
+          <div class="label-summary">
+            <label>${_('Description')}:</label>
+            %if not c.pull_request.is_closed() and (h.HasPermissionAny('hg.admin', 'repository.admin')() or c.pull_request.author.user_id == c.authuser.user_id):
+            <div style="margin: 5px">
+              <a class="btn btn-mini" onclick="YUD.setStyle('pr-edit-form','display','');YUD.setStyle(YUD.getElementsByClassName('pr-not-edit'),'display','none')">${_("Edit")}</a>
+            </div>
             %endif
+          </div>
+          <div class="input">
+            <div style="white-space:pre-wrap; line-height: 14px">${h.urlify_commit(c.pull_request.description, c.pull_request.org_repo.repo_name)}</div>
+          </div>
         </div>
-      <div id="summary" class="fields">
-         <div class="field">
+
+        %if not c.pull_request.is_closed() and (h.HasPermissionAny('hg.admin', 'repository.admin')() or c.pull_request.author.user_id == c.authuser.user_id):
+        <div id="pr-edit-form" style="display:none">
+          ${h.form(url('pullrequest_post', repo_name=c.repo_name, pull_request_id=c.pull_request.pull_request_id), method='post', id='pull_request_form')}
+
+          <div class="field">
+              <div class="label-summary">
+                  <label for="pullrequest_title">${_('Title')}:</label>
+              </div>
+              <div class="input">
+                  ${h.text('pullrequest_title',class_="large",value=c.pull_request.title,placeholder=_('Summarize the changes'))}
+              </div>
+          </div>
+
+          <div class="field">
+              <div class="label-summary label-textarea">
+                  <label for="pullrequest_desc">${_('Description')}:</label>
+              </div>
+              <div class="textarea text-area editor">
+                  ${h.textarea('pullrequest_desc',size=30,content=c.pull_request.description,placeholder=_('Write a short description on this pull request'))}
+              </div>
+              <div class="buttons">
+                  ${h.submit('save',_('Save'),class_="btn btn-mini")}
+                  ${h.reset('reset',_('Cancel'),class_="btn btn-mini",onclick="YUD.setStyle('pr-edit-form','display','none');YUD.setStyle(YUD.getElementsByClassName('pr-not-edit'),'display','')")}
+             </div>
+          </div>
+
+          ${h.end_form()}
+        </div>
+        %endif
+
+        <div class="field">
           <div class="label-summary">
               <label>${_('Review status')}:</label>
           </div>
@@ -50,8 +95,8 @@
             %endif
             </div>
           </div>
-         </div>
-         <div class="field">
+        </div>
+        <div class="field">
           <div class="label-summary">
               <label>${_('Still not reviewed by')}:</label>
           </div>
@@ -62,8 +107,8 @@
                 <div>${_('Pull request was reviewed by all reviewers')}</div>
             %endif
           </div>
-         </div>
-         <div class="field">
+        </div>
+        <div class="field">
           <div class="label-summary">
               <label>${_('Origin repository')}:</label>
           </div>
@@ -75,8 +120,8 @@
               <span class="spantag"><a href="${h.url('summary_home', repo_name=c.pull_request.org_repo.repo_name, anchor=c.org_ref_name)}">${c.org_ref_type}: ${c.org_ref_name}</a></span>
               </div>
           </div>
-         </div>
-         <div class="field">
+        </div>
+        <div class="field">
           <div class="label-summary">
               <label>${_('Target repository')}:</label>
           </div>
@@ -87,8 +132,8 @@
               <span class="spantag"><a href="${h.url('summary_home', repo_name=c.pull_request.other_repo.repo_name, anchor=c.other_ref_name)}">${c.other_ref_type}: ${c.other_ref_name}</a></span>
               </div>
           </div>
-         </div>
-         <div class="field">
+        </div>
+        <div class="field">
           <div class="label-summary">
               <label>${_('Pull changes')}:</label>
           </div>
@@ -102,24 +147,16 @@
                %endif
               </div>
           </div>
-         </div>
-         <div class="field">
-          <div class="label-summary">
-              <label>${_('Description')}:</label>
-          </div>
-          <div class="input">
-              <div style="white-space:pre-wrap">${h.urlify_commit(c.pull_request.description, c.pull_request.org_repo.repo_name)}</div>
-          </div>
-         </div>
-         <div class="field">
+        </div>
+        <div class="field">
           <div class="label-summary">
               <label>${_('Created on')}:</label>
           </div>
           <div class="input">
               <div>${h.fmt_date(c.pull_request.created_on)}</div>
           </div>
-         </div>
-         <div class="field">
+        </div>
+        <div class="field">
           <div class="label-summary">
               <label>${_('Created by')}:</label>
           </div>
@@ -132,7 +169,7 @@
                   <span><a href="mailto:${c.pull_request.author.email}">${c.pull_request.author.email}</a></span><br/>
               </div>
           </div>
-         </div>
+        </div>
       </div>
     </div>
     ## REVIEWERS