Show More
@@ -28,6 +28,7 b' from .common import (' | |||
|
28 | 28 | |
|
29 | 29 | from .. import ( |
|
30 | 30 | archival, |
|
31 | context, | |
|
31 | 32 | encoding, |
|
32 | 33 | error, |
|
33 | 34 | graphmod, |
@@ -968,6 +969,8 b' def filelog(web, req, tmpl):' | |||
|
968 | 969 | except ValueError: |
|
969 | 970 | pass |
|
970 | 971 | |
|
972 | lrange = webutil.linerange(req) | |
|
973 | ||
|
971 | 974 | lessvars = copy.copy(tmpl.defaults['sessionvars']) |
|
972 | 975 | lessvars['revcount'] = max(revcount / 2, 1) |
|
973 | 976 | morevars = copy.copy(tmpl.defaults['sessionvars']) |
@@ -996,24 +999,49 b' def filelog(web, req, tmpl):' | |||
|
996 | 999 | path = fctx.path() |
|
997 | 1000 | return webutil.diffs(web, tmpl, ctx, basectx, [path], diffstyle) |
|
998 | 1001 | |
|
999 | for i in revs: | |
|
1000 | iterfctx = fctx.filectx(i) | |
|
1001 | diffs = None | |
|
1002 | if patch: | |
|
1003 | diffs = diff(iterfctx) | |
|
1004 | entries.append(dict( | |
|
1005 | parity=next(parity), | |
|
1006 | filerev=i, | |
|
1007 |
|
|
|
1008 |
|
|
|
1009 | rename=webutil.renamelink(iterfctx), | |
|
1010 | **webutil.commonentry(repo, iterfctx))) | |
|
1011 | entries.reverse() | |
|
1002 | linerange = None | |
|
1003 | if lrange is not None: | |
|
1004 | linerange = webutil.formatlinerange(*lrange) | |
|
1005 | # deactivate numeric nav links when linerange is specified as this | |
|
1006 | # would required a dedicated "revnav" class | |
|
1007 | nav = None | |
|
1008 | ancestors = context.blockancestors(fctx, *lrange) | |
|
1009 | for i, (c, lr) in enumerate(ancestors, 1): | |
|
1010 | diffs = None | |
|
1011 | if patch: | |
|
1012 | diffs = diff(c) | |
|
1013 | # follow renames accross filtered (not in range) revisions | |
|
1014 | path = c.path() | |
|
1015 | entries.append(dict( | |
|
1016 | parity=next(parity), | |
|
1017 | filerev=c.rev(), | |
|
1018 | file=path, | |
|
1019 | diff=diffs, | |
|
1020 | linerange=webutil.formatlinerange(*lr), | |
|
1021 | **webutil.commonentry(repo, c))) | |
|
1022 | if i == revcount: | |
|
1023 | break | |
|
1024 | lessvars['linerange'] = webutil.formatlinerange(*lrange) | |
|
1025 | morevars['linerange'] = lessvars['linerange'] | |
|
1026 | else: | |
|
1027 | for i in revs: | |
|
1028 | iterfctx = fctx.filectx(i) | |
|
1029 | diffs = None | |
|
1030 | if patch: | |
|
1031 | diffs = diff(iterfctx) | |
|
1032 | entries.append(dict( | |
|
1033 | parity=next(parity), | |
|
1034 | filerev=i, | |
|
1035 | file=f, | |
|
1036 | diff=diffs, | |
|
1037 | rename=webutil.renamelink(iterfctx), | |
|
1038 | **webutil.commonentry(repo, iterfctx))) | |
|
1039 | entries.reverse() | |
|
1040 | revnav = webutil.filerevnav(web.repo, fctx.path()) | |
|
1041 | nav = revnav.gen(end - 1, revcount, count) | |
|
1012 | 1042 | |
|
1013 | 1043 | latestentry = entries[:1] |
|
1014 | 1044 | |
|
1015 | revnav = webutil.filerevnav(web.repo, fctx.path()) | |
|
1016 | nav = revnav.gen(end - 1, revcount, count) | |
|
1017 | 1045 | return tmpl("filelog", |
|
1018 | 1046 | file=f, |
|
1019 | 1047 | nav=nav, |
@@ -1021,6 +1049,7 b' def filelog(web, req, tmpl):' | |||
|
1021 | 1049 | entries=entries, |
|
1022 | 1050 | patch=patch, |
|
1023 | 1051 | latestentry=latestentry, |
|
1052 | linerange=linerange, | |
|
1024 | 1053 | revcount=revcount, |
|
1025 | 1054 | morevars=morevars, |
|
1026 | 1055 | lessvars=lessvars, |
@@ -18,6 +18,7 b' from ..node import hex, nullid, short' | |||
|
18 | 18 | |
|
19 | 19 | from .common import ( |
|
20 | 20 | ErrorResponse, |
|
21 | HTTP_BAD_REQUEST, | |
|
21 | 22 | HTTP_NOT_FOUND, |
|
22 | 23 | paritygen, |
|
23 | 24 | ) |
@@ -317,6 +318,26 b' def filectx(repo, req):' | |||
|
317 | 318 | |
|
318 | 319 | return fctx |
|
319 | 320 | |
|
321 | def linerange(req): | |
|
322 | linerange = req.form.get('linerange') | |
|
323 | if linerange is None: | |
|
324 | return None | |
|
325 | if len(linerange) > 1: | |
|
326 | raise ErrorResponse(HTTP_BAD_REQUEST, | |
|
327 | 'redundant linerange parameter') | |
|
328 | try: | |
|
329 | fromline, toline = map(int, linerange[0].split(':', 1)) | |
|
330 | except ValueError: | |
|
331 | raise ErrorResponse(HTTP_BAD_REQUEST, | |
|
332 | 'invalid linerange parameter') | |
|
333 | try: | |
|
334 | return util.processlinerange(fromline, toline) | |
|
335 | except error.ParseError as exc: | |
|
336 | raise ErrorResponse(HTTP_BAD_REQUEST, str(exc)) | |
|
337 | ||
|
338 | def formatlinerange(fromline, toline): | |
|
339 | return '%d:%d' % (fromline + 1, toline) | |
|
340 | ||
|
320 | 341 | def commonentry(repo, ctx): |
|
321 | 342 | node = ctx.node() |
|
322 | 343 | return { |
@@ -47,6 +47,8 b'' | |||
|
47 | 47 | <h3> |
|
48 | 48 | log {file|escape} @ {rev}:<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a> |
|
49 | 49 | {branch%changelogbranchname}{tags%changelogtag}{bookmarks%changelogtag} |
|
50 | {if(linerange, | |
|
51 | ' (following lines {linerange} <a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">back to filelog</a>)')} | |
|
50 | 52 | </h3> |
|
51 | 53 | |
|
52 | 54 | <form class="search" action="{url|urlescape}log"> |
@@ -190,6 +190,7 b' tip - two revisions' | |||
|
190 | 190 | <h3> |
|
191 | 191 | log a @ 4:<a href="/rev/3f41bc784e7e">3f41bc784e7e</a> |
|
192 | 192 | <span class="branchname">a-branch</span> |
|
193 | ||
|
193 | 194 | </h3> |
|
194 | 195 | |
|
195 | 196 | <form class="search" action="/log"> |
@@ -311,6 +312,7 b' second version - two revisions' | |||
|
311 | 312 | <h3> |
|
312 | 313 | log a @ 4:<a href="/rev/3f41bc784e7e">3f41bc784e7e</a> |
|
313 | 314 | <span class="branchname">a-branch</span> |
|
315 | ||
|
314 | 316 | </h3> |
|
315 | 317 | |
|
316 | 318 | <form class="search" action="/log"> |
@@ -432,6 +434,7 b' first deleted - one revision' | |||
|
432 | 434 | <h3> |
|
433 | 435 | log a @ 1:<a href="/rev/5ed941583260">5ed941583260</a> |
|
434 | 436 | <span class="tag">a-tag</span> <span class="tag">a-bookmark</span> |
|
437 | ||
|
435 | 438 | </h3> |
|
436 | 439 | |
|
437 | 440 | <form class="search" action="/log"> |
@@ -544,6 +547,7 b' first version - one revision' | |||
|
544 | 547 | <h3> |
|
545 | 548 | log a @ 1:<a href="/rev/5ed941583260">5ed941583260</a> |
|
546 | 549 | <span class="tag">a-tag</span> <span class="tag">a-bookmark</span> |
|
550 | ||
|
547 | 551 | </h3> |
|
548 | 552 | |
|
549 | 553 | <form class="search" action="/log"> |
@@ -660,6 +664,264 b' before addition - error' | |||
|
660 | 664 | |
|
661 | 665 | [1] |
|
662 | 666 | |
|
667 | $ hg log -r 'followlines(c, 1:2, startrev=tip) and follow(c)' | |
|
668 | changeset: 0:6563da9dcf87 | |
|
669 | user: test | |
|
670 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
671 | summary: b | |
|
672 | ||
|
673 | changeset: 7:46c1a66bd8fc | |
|
674 | branch: a-branch | |
|
675 | tag: tip | |
|
676 | user: test | |
|
677 | date: Thu Jan 01 00:00:00 1970 +0000 | |
|
678 | summary: change c | |
|
679 | ||
|
680 | $ (get-with-headers.py localhost:$HGPORT 'log/tip/c?linerange=1:2') | |
|
681 | 200 Script output follows | |
|
682 | ||
|
683 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> | |
|
684 | <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US"> | |
|
685 | <head> | |
|
686 | <link rel="icon" href="/static/hgicon.png" type="image/png" /> | |
|
687 | <meta name="robots" content="index, nofollow" /> | |
|
688 | <link rel="stylesheet" href="/static/style-paper.css" type="text/css" /> | |
|
689 | <script type="text/javascript" src="/static/mercurial.js"></script> | |
|
690 | ||
|
691 | <title>test: c history</title> | |
|
692 | <link rel="alternate" type="application/atom+xml" | |
|
693 | href="/atom-log/tip/c" title="Atom feed for test:c" /> | |
|
694 | <link rel="alternate" type="application/rss+xml" | |
|
695 | href="/rss-log/tip/c" title="RSS feed for test:c" /> | |
|
696 | </head> | |
|
697 | <body> | |
|
698 | ||
|
699 | <div class="container"> | |
|
700 | <div class="menu"> | |
|
701 | <div class="logo"> | |
|
702 | <a href="https://mercurial-scm.org/"> | |
|
703 | <img src="/static/hglogo.png" alt="mercurial" /></a> | |
|
704 | </div> | |
|
705 | <ul> | |
|
706 | <li><a href="/shortlog/tip">log</a></li> | |
|
707 | <li><a href="/graph/tip">graph</a></li> | |
|
708 | <li><a href="/tags">tags</a></li> | |
|
709 | <li><a href="/bookmarks">bookmarks</a></li> | |
|
710 | <li><a href="/branches">branches</a></li> | |
|
711 | </ul> | |
|
712 | <ul> | |
|
713 | <li><a href="/rev/tip">changeset</a></li> | |
|
714 | <li><a href="/file/tip">browse</a></li> | |
|
715 | </ul> | |
|
716 | <ul> | |
|
717 | <li><a href="/file/tip/c">file</a></li> | |
|
718 | <li><a href="/diff/tip/c">diff</a></li> | |
|
719 | <li><a href="/comparison/tip/c">comparison</a></li> | |
|
720 | <li><a href="/annotate/tip/c">annotate</a></li> | |
|
721 | <li class="active">file log</li> | |
|
722 | <li><a href="/raw-file/tip/c">raw</a></li> | |
|
723 | </ul> | |
|
724 | <ul> | |
|
725 | <li><a href="/help">help</a></li> | |
|
726 | </ul> | |
|
727 | <div class="atom-logo"> | |
|
728 | <a href="/atom-log/tip/c" title="subscribe to atom feed"> | |
|
729 | <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="atom feed" /> | |
|
730 | </a> | |
|
731 | </div> | |
|
732 | </div> | |
|
733 | ||
|
734 | <div class="main"> | |
|
735 | <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2> | |
|
736 | <h3> | |
|
737 | log c @ 7:<a href="/rev/46c1a66bd8fc">46c1a66bd8fc</a> | |
|
738 | <span class="branchname">a-branch</span> <span class="tag">tip</span> | |
|
739 | (following lines 1:2 <a href="/log/tip/c">back to filelog</a>) | |
|
740 | </h3> | |
|
741 | ||
|
742 | <form class="search" action="/log"> | |
|
743 | ||
|
744 | <p><input name="rev" id="search1" type="text" size="30" /></p> | |
|
745 | <div id="hint">Find changesets by keywords (author, files, the commit message), revision | |
|
746 | number or hash, or <a href="/help/revsets">revset expression</a>.</div> | |
|
747 | </form> | |
|
748 | ||
|
749 | <div class="navigate"> | |
|
750 | <a href="/log/tip/c?linerange=1%3A2&revcount=30">less</a> | |
|
751 | <a href="/log/tip/c?linerange=1%3A2&revcount=120">more</a> | |
|
752 | | </div> | |
|
753 | ||
|
754 | <table class="bigtable"> | |
|
755 | <thead> | |
|
756 | <tr> | |
|
757 | <th class="age">age</th> | |
|
758 | <th class="author">author</th> | |
|
759 | <th class="description">description</th> | |
|
760 | </tr> | |
|
761 | </thead> | |
|
762 | <tbody class="stripes2"> | |
|
763 | <tr> | |
|
764 | <td class="age">Thu, 01 Jan 1970 00:00:00 +0000</td> | |
|
765 | <td class="author">test</td> | |
|
766 | <td class="description"> | |
|
767 | <a href="/rev/46c1a66bd8fc">change c</a> | |
|
768 | <span class="branchhead">a-branch</span> <span class="tag">tip</span> | |
|
769 | </td> | |
|
770 | </tr> | |
|
771 | ||
|
772 | <tr> | |
|
773 | <td class="age">Thu, 01 Jan 1970 00:00:00 +0000</td> | |
|
774 | <td class="author">test</td> | |
|
775 | <td class="description"> | |
|
776 | <a href="/rev/6563da9dcf87">b</a> | |
|
777 | ||
|
778 | </td> | |
|
779 | </tr> | |
|
780 | ||
|
781 | ||
|
782 | </tbody> | |
|
783 | </table> | |
|
784 | ||
|
785 | <div class="navigate"> | |
|
786 | <a href="/log/tip/c?linerange=1%3A2&revcount=30">less</a> | |
|
787 | <a href="/log/tip/c?linerange=1%3A2&revcount=120">more</a> | |
|
788 | | | |
|
789 | </div> | |
|
790 | ||
|
791 | </div> | |
|
792 | </div> | |
|
793 | ||
|
794 | ||
|
795 | ||
|
796 | </body> | |
|
797 | </html> | |
|
798 | ||
|
799 | $ (get-with-headers.py localhost:$HGPORT 'log/tip/c?linerange=1%3A2&revcount=1') | |
|
800 | 200 Script output follows | |
|
801 | ||
|
802 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> | |
|
803 | <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US"> | |
|
804 | <head> | |
|
805 | <link rel="icon" href="/static/hgicon.png" type="image/png" /> | |
|
806 | <meta name="robots" content="index, nofollow" /> | |
|
807 | <link rel="stylesheet" href="/static/style-paper.css" type="text/css" /> | |
|
808 | <script type="text/javascript" src="/static/mercurial.js"></script> | |
|
809 | ||
|
810 | <title>test: c history</title> | |
|
811 | <link rel="alternate" type="application/atom+xml" | |
|
812 | href="/atom-log/tip/c" title="Atom feed for test:c" /> | |
|
813 | <link rel="alternate" type="application/rss+xml" | |
|
814 | href="/rss-log/tip/c" title="RSS feed for test:c" /> | |
|
815 | </head> | |
|
816 | <body> | |
|
817 | ||
|
818 | <div class="container"> | |
|
819 | <div class="menu"> | |
|
820 | <div class="logo"> | |
|
821 | <a href="https://mercurial-scm.org/"> | |
|
822 | <img src="/static/hglogo.png" alt="mercurial" /></a> | |
|
823 | </div> | |
|
824 | <ul> | |
|
825 | <li><a href="/shortlog/tip?revcount=1">log</a></li> | |
|
826 | <li><a href="/graph/tip?revcount=1">graph</a></li> | |
|
827 | <li><a href="/tags?revcount=1">tags</a></li> | |
|
828 | <li><a href="/bookmarks?revcount=1">bookmarks</a></li> | |
|
829 | <li><a href="/branches?revcount=1">branches</a></li> | |
|
830 | </ul> | |
|
831 | <ul> | |
|
832 | <li><a href="/rev/tip?revcount=1">changeset</a></li> | |
|
833 | <li><a href="/file/tip?revcount=1">browse</a></li> | |
|
834 | </ul> | |
|
835 | <ul> | |
|
836 | <li><a href="/file/tip/c?revcount=1">file</a></li> | |
|
837 | <li><a href="/diff/tip/c?revcount=1">diff</a></li> | |
|
838 | <li><a href="/comparison/tip/c?revcount=1">comparison</a></li> | |
|
839 | <li><a href="/annotate/tip/c?revcount=1">annotate</a></li> | |
|
840 | <li class="active">file log</li> | |
|
841 | <li><a href="/raw-file/tip/c">raw</a></li> | |
|
842 | </ul> | |
|
843 | <ul> | |
|
844 | <li><a href="/help?revcount=1">help</a></li> | |
|
845 | </ul> | |
|
846 | <div class="atom-logo"> | |
|
847 | <a href="/atom-log/tip/c" title="subscribe to atom feed"> | |
|
848 | <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="atom feed" /> | |
|
849 | </a> | |
|
850 | </div> | |
|
851 | </div> | |
|
852 | ||
|
853 | <div class="main"> | |
|
854 | <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2> | |
|
855 | <h3> | |
|
856 | log c @ 7:<a href="/rev/46c1a66bd8fc?revcount=1">46c1a66bd8fc</a> | |
|
857 | <span class="branchname">a-branch</span> <span class="tag">tip</span> | |
|
858 | (following lines 1:2 <a href="/log/tip/c?revcount=1">back to filelog</a>) | |
|
859 | </h3> | |
|
860 | ||
|
861 | <form class="search" action="/log"> | |
|
862 | <input type="hidden" name="revcount" value="1" /> | |
|
863 | <p><input name="rev" id="search1" type="text" size="30" /></p> | |
|
864 | <div id="hint">Find changesets by keywords (author, files, the commit message), revision | |
|
865 | number or hash, or <a href="/help/revsets">revset expression</a>.</div> | |
|
866 | </form> | |
|
867 | ||
|
868 | <div class="navigate"> | |
|
869 | <a href="/log/tip/c?linerange=1%3A2&revcount=1">less</a> | |
|
870 | <a href="/log/tip/c?linerange=1%3A2&revcount=2">more</a> | |
|
871 | | </div> | |
|
872 | ||
|
873 | <table class="bigtable"> | |
|
874 | <thead> | |
|
875 | <tr> | |
|
876 | <th class="age">age</th> | |
|
877 | <th class="author">author</th> | |
|
878 | <th class="description">description</th> | |
|
879 | </tr> | |
|
880 | </thead> | |
|
881 | <tbody class="stripes2"> | |
|
882 | <tr> | |
|
883 | <td class="age">Thu, 01 Jan 1970 00:00:00 +0000</td> | |
|
884 | <td class="author">test</td> | |
|
885 | <td class="description"> | |
|
886 | <a href="/rev/46c1a66bd8fc?revcount=1">change c</a> | |
|
887 | <span class="branchhead">a-branch</span> <span class="tag">tip</span> | |
|
888 | </td> | |
|
889 | </tr> | |
|
890 | ||
|
891 | ||
|
892 | </tbody> | |
|
893 | </table> | |
|
894 | ||
|
895 | <div class="navigate"> | |
|
896 | <a href="/log/tip/c?linerange=1%3A2&revcount=1">less</a> | |
|
897 | <a href="/log/tip/c?linerange=1%3A2&revcount=2">more</a> | |
|
898 | | | |
|
899 | </div> | |
|
900 | ||
|
901 | </div> | |
|
902 | </div> | |
|
903 | ||
|
904 | ||
|
905 | ||
|
906 | </body> | |
|
907 | </html> | |
|
908 | ||
|
909 | $ (get-with-headers.py localhost:$HGPORT 'log/3/a?linerange=1' --headeronly) | |
|
910 | 400 invalid linerange parameter | |
|
911 | [1] | |
|
912 | $ (get-with-headers.py localhost:$HGPORT 'log/3/a?linerange=1:a' --headeronly) | |
|
913 | 400 invalid linerange parameter | |
|
914 | [1] | |
|
915 | $ (get-with-headers.py localhost:$HGPORT 'log/3/a?linerange=1:2&linerange=3:4' --headeronly) | |
|
916 | 400 redundant linerange parameter | |
|
917 | [1] | |
|
918 | $ (get-with-headers.py localhost:$HGPORT 'log/3/a?linerange=3:2' --headeronly) | |
|
919 | 400 line range must be positive | |
|
920 | [1] | |
|
921 | $ (get-with-headers.py localhost:$HGPORT 'log/3/a?linerange=0:1' --headeronly) | |
|
922 | 400 fromline must be strictly positive | |
|
923 | [1] | |
|
924 | ||
|
663 | 925 | should show base link, use spartan because it shows it |
|
664 | 926 | |
|
665 | 927 | $ (get-with-headers.py localhost:$HGPORT 'log/tip/c?style=spartan') |
@@ -829,6 +1091,7 b' filelog with patch' | |||
|
829 | 1091 | <h3> |
|
830 | 1092 | log a @ 4:<a href="/rev/3f41bc784e7e">3f41bc784e7e</a> |
|
831 | 1093 | <span class="branchname">a-branch</span> |
|
1094 | ||
|
832 | 1095 | </h3> |
|
833 | 1096 | |
|
834 | 1097 | <form class="search" action="/log"> |
General Comments 0
You need to be logged in to leave comments.
Login now