Patchwork [2,of,7,V3] hgweb: add a "patch" query parameter to filelog command

login
register
mail settings
Submitter Denis Laxalde
Date March 22, 2017, 10:37 a.m.
Message ID <613e7e42d14311059bda.1490179047@sh77.tls.logilab.fr>
Download mbox | patch
Permalink /patch/19572/
State Changes Requested
Headers show

Comments

Denis Laxalde - March 22, 2017, 10:37 a.m.
# HG changeset patch
# User Denis Laxalde <denis.laxalde@logilab.fr>
# Date 1489398073 -3600
#      Mon Mar 13 10:41:13 2017 +0100
# Node ID 613e7e42d14311059bdaf4c500147f9e35fb31fa
# Parent  2620dc84c013ab9d60d9327aa33435936bd25a01
# Available At http://hg.logilab.org/users/dlaxalde/hg
#              hg pull http://hg.logilab.org/users/dlaxalde/hg -r 613e7e42d143
# EXP-Topic linerange-log/hgweb-filelog
hgweb: add a "patch" query parameter to filelog command

Add support for a "patch" query parameter in filelog web command similar to
--patch option of `hg log` to display the diff of each changeset in the table
of revisions. The diff text is displayed in a dedicated row of the table that
follows the existing one for each entry and spans over all columns. Only
update "paper" template in this patch.
Augie Fackler - March 23, 2017, 3:51 p.m.
On Wed, Mar 22, 2017 at 11:37:27AM +0100, Denis Laxalde wrote:
> # HG changeset patch
> # User Denis Laxalde <denis.laxalde@logilab.fr>
> # Date 1489398073 -3600
> #      Mon Mar 13 10:41:13 2017 +0100
> # Node ID 613e7e42d14311059bdaf4c500147f9e35fb31fa
> # Parent  2620dc84c013ab9d60d9327aa33435936bd25a01
> # Available At http://hg.logilab.org/users/dlaxalde/hg
> #              hg pull http://hg.logilab.org/users/dlaxalde/hg -r 613e7e42d143
> # EXP-Topic linerange-log/hgweb-filelog
> hgweb: add a "patch" query parameter to filelog command

I've taken this one, thanks.

>
> Add support for a "patch" query parameter in filelog web command similar to
> --patch option of `hg log` to display the diff of each changeset in the table
> of revisions. The diff text is displayed in a dedicated row of the table that
> follows the existing one for each entry and spans over all columns. Only
> update "paper" template in this patch.
>
> diff --git a/mercurial/hgweb/webcommands.py b/mercurial/hgweb/webcommands.py
> --- a/mercurial/hgweb/webcommands.py
> +++ b/mercurial/hgweb/webcommands.py
> @@ -973,6 +973,10 @@ def filelog(web, req, tmpl):
>      morevars = copy.copy(tmpl.defaults['sessionvars'])
>      morevars['revcount'] = revcount * 2
>
> +    patch = 'patch' in req.form
> +    if patch:
> +        lessvars['patch'] = morevars['patch'] = req.form['patch'][0]
> +
>      count = fctx.filerev() + 1
>      start = max(0, count - revcount) # first rev on this page
>      end = min(count, start + revcount) # last rev on this page
> @@ -981,12 +985,27 @@ def filelog(web, req, tmpl):
>      repo = web.repo
>      revs = fctx.filelog().revs(start, end - 1)
>      entries = []
> +
> +    diffstyle = web.config('web', 'style', 'paper')
> +    if 'style' in req.form:
> +        diffstyle = req.form['style'][0]
> +
> +    def diff(fctx):
> +        ctx = fctx.changectx()
> +        basectx = ctx.p1()
> +        path = fctx.path()
> +        return webutil.diffs(web.repo, tmpl, ctx, basectx, [path], diffstyle)
> +
>      for i in revs:
>          iterfctx = fctx.filectx(i)
> +        diffs = None
> +        if patch:
> +            diffs = diff(iterfctx)
>          entries.append(dict(
>              parity=next(parity),
>              filerev=i,
>              file=f,
> +            diff=diffs,
>              rename=webutil.renamelink(iterfctx),
>              **webutil.commonentry(repo, iterfctx)))
>      entries.reverse()
> @@ -1000,6 +1019,7 @@ def filelog(web, req, tmpl):
>                  nav=nav,
>                  symrev=webutil.symrevorshortnode(req, fctx),
>                  entries=entries,
> +                patch=patch,
>                  latestentry=latestentry,
>                  revcount=revcount,
>                  morevars=morevars,
> diff --git a/mercurial/templates/paper/filelogentry.tmpl b/mercurial/templates/paper/filelogentry.tmpl
> --- a/mercurial/templates/paper/filelogentry.tmpl
> +++ b/mercurial/templates/paper/filelogentry.tmpl
> @@ -6,3 +6,4 @@
>     {inbranch%changelogbranchname}{branches%changelogbranchhead}{tags%changelogtag}{bookmarks%changelogtag}{rename%filelogrename}
>    </td>
>   </tr>
> + {if(patch, '<tr><td colspan="3">{diff}</td></tr>')}
> diff --git a/tests/test-hgweb-filelog.t b/tests/test-hgweb-filelog.t
> --- a/tests/test-hgweb-filelog.t
> +++ b/tests/test-hgweb-filelog.t
> @@ -221,6 +221,7 @@ tip - two revisions
>       <span class="branchname">a-branch</span>
>      </td>
>     </tr>
> +
>     <tr>
>      <td class="age">Thu, 01 Jan 1970 00:00:00 +0000</td>
>      <td class="author">test</td>
> @@ -229,6 +230,7 @@ tip - two revisions
>       <span class="tag">a-tag</span> <span class="tag">a-bookmark</span>
>      </td>
>     </tr>
> +
>
>    </tbody>
>    </table>
> @@ -340,6 +342,7 @@ second version - two revisions
>       <span class="branchname">a-branch</span>
>      </td>
>     </tr>
> +
>     <tr>
>      <td class="age">Thu, 01 Jan 1970 00:00:00 +0000</td>
>      <td class="author">test</td>
> @@ -348,6 +351,7 @@ second version - two revisions
>       <span class="tag">a-tag</span> <span class="tag">a-bookmark</span>
>      </td>
>     </tr>
> +
>
>    </tbody>
>    </table>
> @@ -459,6 +463,7 @@ first deleted - one revision
>       <span class="tag">a-tag</span> <span class="tag">a-bookmark</span>
>      </td>
>     </tr>
> +
>
>    </tbody>
>    </table>
> @@ -570,6 +575,7 @@ first version - one revision
>       <span class="tag">a-tag</span> <span class="tag">a-bookmark</span>
>      </td>
>     </tr>
> +
>
>    </tbody>
>    </table>
> @@ -762,6 +768,135 @@ should show base link, use spartan becau
>    </html>
>
>
> +filelog with patch
> +
> +  $ (get-with-headers.py localhost:$HGPORT 'log/4/a?patch=1')
> +  200 Script output follows
> +
> +  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
> +  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
> +  <head>
> +  <link rel="icon" href="/static/hgicon.png" type="image/png" />
> +  <meta name="robots" content="index, nofollow" />
> +  <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
> +  <script type="text/javascript" src="/static/mercurial.js"></script>
> +
> +  <title>test: a history</title>
> +  <link rel="alternate" type="application/atom+xml"
> +     href="/atom-log/tip/a" title="Atom feed for test:a" />
> +  <link rel="alternate" type="application/rss+xml"
> +     href="/rss-log/tip/a" title="RSS feed for test:a" />
> +  </head>
> +  <body>
> +
> +  <div class="container">
> +  <div class="menu">
> +  <div class="logo">
> +  <a href="https://mercurial-scm.org/">
> +  <img src="/static/hglogo.png" alt="mercurial" /></a>
> +  </div>
> +  <ul>
> +  <li><a href="/shortlog/4">log</a></li>
> +  <li><a href="/graph/4">graph</a></li>
> +  <li><a href="/tags">tags</a></li>
> +  <li><a href="/bookmarks">bookmarks</a></li>
> +  <li><a href="/branches">branches</a></li>
> +  </ul>
> +  <ul>
> +  <li><a href="/rev/4">changeset</a></li>
> +  <li><a href="/file/4">browse</a></li>
> +  </ul>
> +  <ul>
> +  <li><a href="/file/4/a">file</a></li>
> +  <li><a href="/diff/4/a">diff</a></li>
> +  <li><a href="/comparison/4/a">comparison</a></li>
> +  <li><a href="/annotate/4/a">annotate</a></li>
> +  <li class="active">file log</li>
> +  <li><a href="/raw-file/4/a">raw</a></li>
> +  </ul>
> +  <ul>
> +  <li><a href="/help">help</a></li>
> +  </ul>
> +  <div class="atom-logo">
> +  <a href="/atom-log/tip/a" title="subscribe to atom feed">
> +  <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="atom feed" />
> +  </a>
> +  </div>
> +  </div>
> +
> +  <div class="main">
> +  <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
> +  <h3>
> +   log a @ 4:<a href="/rev/3f41bc784e7e">3f41bc784e7e</a>
> +   <span class="branchname">a-branch</span>
> +  </h3>
> +
> +  <form class="search" action="/log">
> +
> +  <p><input name="rev" id="search1" type="text" size="30" /></p>
> +  <div id="hint">Find changesets by keywords (author, files, the commit message), revision
> +  number or hash, or <a href="/help/revsets">revset expression</a>.</div>
> +  </form>
> +
> +  <div class="navigate">
> +  <a href="/log/4/a?patch=1&revcount=30">less</a>
> +  <a href="/log/4/a?patch=1&revcount=120">more</a>
> +  | <a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> </div>
> +
> +  <table class="bigtable">
> +  <thead>
> +   <tr>
> +    <th class="age">age</th>
> +    <th class="author">author</th>
> +    <th class="description">description</th>
> +   </tr>
> +  </thead>
> +  <tbody class="stripes2">
> +   <tr>
> +    <td class="age">Thu, 01 Jan 1970 00:00:00 +0000</td>
> +    <td class="author">test</td>
> +    <td class="description">
> +     <a href="/rev/3f41bc784e7e">second a</a>
> +     <span class="branchname">a-branch</span>
> +    </td>
> +   </tr>
> +   <tr><td colspan="3"><div class="bottomline inc-lineno"><pre class="sourcelines wrap">
> +  <span id="l1.1" class="minusline">--- /dev/null	Thu Jan 01 00:00:00 1970 +0000</span><a href="#l1.1"></a>
> +  <span id="l1.2" class="plusline">+++ b/a	Thu Jan 01 00:00:00 1970 +0000</span><a href="#l1.2"></a>
> +  <span id="l1.3" class="atline">@@ -0,0 +1,1 @@</span><a href="#l1.3"></a>
> +  <span id="l1.4" class="plusline">+b</span><a href="#l1.4"></a></pre></div></td></tr>
> +   <tr>
> +    <td class="age">Thu, 01 Jan 1970 00:00:00 +0000</td>
> +    <td class="author">test</td>
> +    <td class="description">
> +     <a href="/rev/5ed941583260">first a</a>
> +     <span class="tag">a-tag</span> <span class="tag">a-bookmark</span>
> +    </td>
> +   </tr>
> +   <tr><td colspan="3"><div class="bottomline inc-lineno"><pre class="sourcelines wrap">
> +  <span id="l1.1" class="minusline">--- /dev/null	Thu Jan 01 00:00:00 1970 +0000</span><a href="#l1.1"></a>
> +  <span id="l1.2" class="plusline">+++ b/a	Thu Jan 01 00:00:00 1970 +0000</span><a href="#l1.2"></a>
> +  <span id="l1.3" class="atline">@@ -0,0 +1,1 @@</span><a href="#l1.3"></a>
> +  <span id="l1.4" class="plusline">+a</span><a href="#l1.4"></a></pre></div></td></tr>
> +
> +  </tbody>
> +  </table>
> +
> +  <div class="navigate">
> +  <a href="/log/4/a?patch=1&revcount=30">less</a>
> +  <a href="/log/4/a?patch=1&revcount=120">more</a>
> +  | <a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a>
> +  </div>
> +
> +  </div>
> +  </div>
> +
> +
> +
> +  </body>
> +  </html>
> +
> +
>  rss log
>
>    $ (get-with-headers.py localhost:$HGPORT 'rss-log/tip/a')
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
Augie Fackler - March 23, 2017, 3:59 p.m.
On Thu, Mar 23, 2017 at 11:51 AM, Augie Fackler <raf@durin42.com> wrote:
>> # EXP-Topic linerange-log/hgweb-filelog
>> hgweb: add a "patch" query parameter to filelog command
>
> I've taken this one, thanks.


Discarded it since it depends on patch 1 and I didn't notice. Sorry. :/

Patch

diff --git a/mercurial/hgweb/webcommands.py b/mercurial/hgweb/webcommands.py
--- a/mercurial/hgweb/webcommands.py
+++ b/mercurial/hgweb/webcommands.py
@@ -973,6 +973,10 @@  def filelog(web, req, tmpl):
     morevars = copy.copy(tmpl.defaults['sessionvars'])
     morevars['revcount'] = revcount * 2
 
+    patch = 'patch' in req.form
+    if patch:
+        lessvars['patch'] = morevars['patch'] = req.form['patch'][0]
+
     count = fctx.filerev() + 1
     start = max(0, count - revcount) # first rev on this page
     end = min(count, start + revcount) # last rev on this page
@@ -981,12 +985,27 @@  def filelog(web, req, tmpl):
     repo = web.repo
     revs = fctx.filelog().revs(start, end - 1)
     entries = []
+
+    diffstyle = web.config('web', 'style', 'paper')
+    if 'style' in req.form:
+        diffstyle = req.form['style'][0]
+
+    def diff(fctx):
+        ctx = fctx.changectx()
+        basectx = ctx.p1()
+        path = fctx.path()
+        return webutil.diffs(web.repo, tmpl, ctx, basectx, [path], diffstyle)
+
     for i in revs:
         iterfctx = fctx.filectx(i)
+        diffs = None
+        if patch:
+            diffs = diff(iterfctx)
         entries.append(dict(
             parity=next(parity),
             filerev=i,
             file=f,
+            diff=diffs,
             rename=webutil.renamelink(iterfctx),
             **webutil.commonentry(repo, iterfctx)))
     entries.reverse()
@@ -1000,6 +1019,7 @@  def filelog(web, req, tmpl):
                 nav=nav,
                 symrev=webutil.symrevorshortnode(req, fctx),
                 entries=entries,
+                patch=patch,
                 latestentry=latestentry,
                 revcount=revcount,
                 morevars=morevars,
diff --git a/mercurial/templates/paper/filelogentry.tmpl b/mercurial/templates/paper/filelogentry.tmpl
--- a/mercurial/templates/paper/filelogentry.tmpl
+++ b/mercurial/templates/paper/filelogentry.tmpl
@@ -6,3 +6,4 @@ 
    {inbranch%changelogbranchname}{branches%changelogbranchhead}{tags%changelogtag}{bookmarks%changelogtag}{rename%filelogrename}
   </td>
  </tr>
+ {if(patch, '<tr><td colspan="3">{diff}</td></tr>')}
diff --git a/tests/test-hgweb-filelog.t b/tests/test-hgweb-filelog.t
--- a/tests/test-hgweb-filelog.t
+++ b/tests/test-hgweb-filelog.t
@@ -221,6 +221,7 @@  tip - two revisions
      <span class="branchname">a-branch</span> 
     </td>
    </tr>
+   
    <tr>
     <td class="age">Thu, 01 Jan 1970 00:00:00 +0000</td>
     <td class="author">test</td>
@@ -229,6 +230,7 @@  tip - two revisions
      <span class="tag">a-tag</span> <span class="tag">a-bookmark</span> 
     </td>
    </tr>
+   
   
   </tbody>
   </table>
@@ -340,6 +342,7 @@  second version - two revisions
      <span class="branchname">a-branch</span> 
     </td>
    </tr>
+   
    <tr>
     <td class="age">Thu, 01 Jan 1970 00:00:00 +0000</td>
     <td class="author">test</td>
@@ -348,6 +351,7 @@  second version - two revisions
      <span class="tag">a-tag</span> <span class="tag">a-bookmark</span> 
     </td>
    </tr>
+   
   
   </tbody>
   </table>
@@ -459,6 +463,7 @@  first deleted - one revision
      <span class="tag">a-tag</span> <span class="tag">a-bookmark</span> 
     </td>
    </tr>
+   
   
   </tbody>
   </table>
@@ -570,6 +575,7 @@  first version - one revision
      <span class="tag">a-tag</span> <span class="tag">a-bookmark</span> 
     </td>
    </tr>
+   
   
   </tbody>
   </table>
@@ -762,6 +768,135 @@  should show base link, use spartan becau
   </html>
   
 
+filelog with patch
+
+  $ (get-with-headers.py localhost:$HGPORT 'log/4/a?patch=1')
+  200 Script output follows
+  
+  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
+  <head>
+  <link rel="icon" href="/static/hgicon.png" type="image/png" />
+  <meta name="robots" content="index, nofollow" />
+  <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
+  <script type="text/javascript" src="/static/mercurial.js"></script>
+  
+  <title>test: a history</title>
+  <link rel="alternate" type="application/atom+xml"
+     href="/atom-log/tip/a" title="Atom feed for test:a" />
+  <link rel="alternate" type="application/rss+xml"
+     href="/rss-log/tip/a" title="RSS feed for test:a" />
+  </head>
+  <body>
+  
+  <div class="container">
+  <div class="menu">
+  <div class="logo">
+  <a href="https://mercurial-scm.org/">
+  <img src="/static/hglogo.png" alt="mercurial" /></a>
+  </div>
+  <ul>
+  <li><a href="/shortlog/4">log</a></li>
+  <li><a href="/graph/4">graph</a></li>
+  <li><a href="/tags">tags</a></li>
+  <li><a href="/bookmarks">bookmarks</a></li>
+  <li><a href="/branches">branches</a></li>
+  </ul>
+  <ul>
+  <li><a href="/rev/4">changeset</a></li>
+  <li><a href="/file/4">browse</a></li>
+  </ul>
+  <ul>
+  <li><a href="/file/4/a">file</a></li>
+  <li><a href="/diff/4/a">diff</a></li>
+  <li><a href="/comparison/4/a">comparison</a></li>
+  <li><a href="/annotate/4/a">annotate</a></li>
+  <li class="active">file log</li>
+  <li><a href="/raw-file/4/a">raw</a></li>
+  </ul>
+  <ul>
+  <li><a href="/help">help</a></li>
+  </ul>
+  <div class="atom-logo">
+  <a href="/atom-log/tip/a" title="subscribe to atom feed">
+  <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="atom feed" />
+  </a>
+  </div>
+  </div>
+  
+  <div class="main">
+  <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
+  <h3>
+   log a @ 4:<a href="/rev/3f41bc784e7e">3f41bc784e7e</a>
+   <span class="branchname">a-branch</span> 
+  </h3>
+  
+  <form class="search" action="/log">
+  
+  <p><input name="rev" id="search1" type="text" size="30" /></p>
+  <div id="hint">Find changesets by keywords (author, files, the commit message), revision
+  number or hash, or <a href="/help/revsets">revset expression</a>.</div>
+  </form>
+  
+  <div class="navigate">
+  <a href="/log/4/a?patch=1&revcount=30">less</a>
+  <a href="/log/4/a?patch=1&revcount=120">more</a>
+  | <a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> </div>
+  
+  <table class="bigtable">
+  <thead>
+   <tr>
+    <th class="age">age</th>
+    <th class="author">author</th>
+    <th class="description">description</th>
+   </tr>
+  </thead>
+  <tbody class="stripes2">
+   <tr>
+    <td class="age">Thu, 01 Jan 1970 00:00:00 +0000</td>
+    <td class="author">test</td>
+    <td class="description">
+     <a href="/rev/3f41bc784e7e">second a</a>
+     <span class="branchname">a-branch</span> 
+    </td>
+   </tr>
+   <tr><td colspan="3"><div class="bottomline inc-lineno"><pre class="sourcelines wrap">
+  <span id="l1.1" class="minusline">--- /dev/null	Thu Jan 01 00:00:00 1970 +0000</span><a href="#l1.1"></a>
+  <span id="l1.2" class="plusline">+++ b/a	Thu Jan 01 00:00:00 1970 +0000</span><a href="#l1.2"></a>
+  <span id="l1.3" class="atline">@@ -0,0 +1,1 @@</span><a href="#l1.3"></a>
+  <span id="l1.4" class="plusline">+b</span><a href="#l1.4"></a></pre></div></td></tr>
+   <tr>
+    <td class="age">Thu, 01 Jan 1970 00:00:00 +0000</td>
+    <td class="author">test</td>
+    <td class="description">
+     <a href="/rev/5ed941583260">first a</a>
+     <span class="tag">a-tag</span> <span class="tag">a-bookmark</span> 
+    </td>
+   </tr>
+   <tr><td colspan="3"><div class="bottomline inc-lineno"><pre class="sourcelines wrap">
+  <span id="l1.1" class="minusline">--- /dev/null	Thu Jan 01 00:00:00 1970 +0000</span><a href="#l1.1"></a>
+  <span id="l1.2" class="plusline">+++ b/a	Thu Jan 01 00:00:00 1970 +0000</span><a href="#l1.2"></a>
+  <span id="l1.3" class="atline">@@ -0,0 +1,1 @@</span><a href="#l1.3"></a>
+  <span id="l1.4" class="plusline">+a</span><a href="#l1.4"></a></pre></div></td></tr>
+  
+  </tbody>
+  </table>
+  
+  <div class="navigate">
+  <a href="/log/4/a?patch=1&revcount=30">less</a>
+  <a href="/log/4/a?patch=1&revcount=120">more</a>
+  | <a href="/log/5ed941583260/a">(0)</a> <a href="/log/tip/a">tip</a> 
+  </div>
+  
+  </div>
+  </div>
+  
+  
+  
+  </body>
+  </html>
+  
+
 rss log
 
   $ (get-with-headers.py localhost:$HGPORT 'rss-log/tip/a')