Fossil SCM
Add the "df=CHECKIN" query parameter to /timeline. "df" is shorthand for "Derived From". "df=CHECKIN" is equivalent to "d=CHECKIN&n1=all&nd". Update hyperlinks in documentation to use df= and/or n1=.
Commit
78819fdb0dc0c7eb0776254e84dfd99c3adc5d1da3a6acee3615e3913fb70af5
Parent
cd892ac335ebd48…
7 files changed
+27
-6
+1
-1
+7
-7
+2
-2
+1
-1
+1
-1
+12
-8
+27
-6
| --- src/timeline.c | ||
| +++ src/timeline.c | ||
| @@ -1641,11 +1641,16 @@ | ||
| 1641 | 1641 | ** n1=COUNT Same as "n" but doesn't set the display-preference cookie |
| 1642 | 1642 | ** Use "n1=COUNT" for a one-time display change |
| 1643 | 1643 | ** p=CHECKIN Parents and ancestors of CHECKIN |
| 1644 | 1644 | ** bt=PRIOR ... going back to PRIOR |
| 1645 | 1645 | ** d=CHECKIN Children and descendants of CHECKIN |
| 1646 | -** dp=CHECKIN The same as 'd=CHECKIN&p=CHECKIN' | |
| 1646 | +** dp=CHECKIN Same as 'd=CHECKIN&p=CHECKIN' | |
| 1647 | +** df=CHECKIN Same as 'd=CHECKIN&n1=all&nd'. Mnemonic: "Derived From" | |
| 1648 | +** bt=CHECKIN In conjuction with p=CX, this means show all | |
| 1649 | +** ancestors of CX going back to the time of CHECKIN. | |
| 1650 | +** All qualifying check-ins are shown unless there | |
| 1651 | +** is also an n= or n1= query pararameter. | |
| 1647 | 1652 | ** t=TAG Show only check-ins with the given TAG |
| 1648 | 1653 | ** r=TAG Show check-ins related to TAG, equivalent to t=TAG&rel |
| 1649 | 1654 | ** rel Show related check-ins as well as those matching t=TAG |
| 1650 | 1655 | ** mionly Limit rel to show ancestors but not descendants |
| 1651 | 1656 | ** nowiki Do not show wiki associated with branch or tag |
| @@ -1665,10 +1670,12 @@ | ||
| 1665 | 1670 | ** from=CHECKIN Path from... |
| 1666 | 1671 | ** to=CHECKIN ... to this |
| 1667 | 1672 | ** shortest ... show only the shortest path |
| 1668 | 1673 | ** rel ... also show related checkins |
| 1669 | 1674 | ** uf=FILE_HASH Show only check-ins that contain the given file version |
| 1675 | +** All qualifying check-ins are shown unless there is | |
| 1676 | +** also an n= or n1= query parameter. | |
| 1670 | 1677 | ** chng=GLOBLIST Show only check-ins that involve changes to a file whose |
| 1671 | 1678 | ** name matches one of the comma-separate GLOBLIST |
| 1672 | 1679 | ** brbg Background color determined by branch name |
| 1673 | 1680 | ** ubg Background color determined by user |
| 1674 | 1681 | ** deltabg Background color red for delta manifests or green |
| @@ -1699,13 +1706,13 @@ | ||
| 1699 | 1706 | void page_timeline(void){ |
| 1700 | 1707 | Stmt q; /* Query used to generate the timeline */ |
| 1701 | 1708 | Blob sql; /* text of SQL used to generate timeline */ |
| 1702 | 1709 | Blob desc; /* Description of the timeline */ |
| 1703 | 1710 | int nEntry; /* Max number of entries on timeline */ |
| 1704 | - int p_rid = name_to_typed_rid(P("p"),"ci"); /* artifact p and its parents */ | |
| 1705 | - int d_rid = name_to_typed_rid(P("d"),"ci"); /* artifact d and descendants */ | |
| 1706 | - int f_rid = name_to_typed_rid(P("f"),"ci"); /* artifact f and close family */ | |
| 1711 | + int p_rid; /* artifact p and its parents */ | |
| 1712 | + int d_rid; /* artifact d and descendants */ | |
| 1713 | + int f_rid; /* artifact f and close family */ | |
| 1707 | 1714 | const char *zUser = P("u"); /* All entries by this user if not NULL */ |
| 1708 | 1715 | const char *zType; /* Type of events to display */ |
| 1709 | 1716 | const char *zAfter = P("a"); /* Events after this time */ |
| 1710 | 1717 | const char *zBefore = P("b"); /* Events before this time */ |
| 1711 | 1718 | const char *zCirca = P("c"); /* Events near this time */ |
| @@ -1757,10 +1764,11 @@ | ||
| 1757 | 1764 | int showCherrypicks = 1; /* True to show cherrypick merges */ |
| 1758 | 1765 | int haveParameterN; /* True if n= query parameter present */ |
| 1759 | 1766 | |
| 1760 | 1767 | url_initialize(&url, "timeline"); |
| 1761 | 1768 | cgi_query_parameters_to_url(&url); |
| 1769 | + | |
| 1762 | 1770 | |
| 1763 | 1771 | /* Set number of rows to display */ |
| 1764 | 1772 | z = P("n"); |
| 1765 | 1773 | if( z!=0 ){ |
| 1766 | 1774 | haveParameterN = 1; |
| @@ -1771,11 +1779,11 @@ | ||
| 1771 | 1779 | cookie_read_parameter("n","n"); |
| 1772 | 1780 | z = P("n"); |
| 1773 | 1781 | if( z==0 ){ |
| 1774 | 1782 | z = db_get("timeline-default-length",0); |
| 1775 | 1783 | } |
| 1776 | - cgi_replace_query_parameter("n",z); | |
| 1784 | + cgi_replace_query_parameter("n",fossil_strdup(z)); | |
| 1777 | 1785 | cookie_write_parameter("n","n",0); |
| 1778 | 1786 | z2 = P("n1"); |
| 1779 | 1787 | if( z2 ){ |
| 1780 | 1788 | haveParameterN = 2; |
| 1781 | 1789 | z = z2; |
| @@ -1790,13 +1798,26 @@ | ||
| 1790 | 1798 | z = "10"; |
| 1791 | 1799 | nEntry = 10; |
| 1792 | 1800 | } |
| 1793 | 1801 | } |
| 1794 | 1802 | }else{ |
| 1795 | - z = "50"; | |
| 1796 | 1803 | nEntry = 50; |
| 1797 | 1804 | } |
| 1805 | + | |
| 1806 | + /* Query parameters d=, p=, and f= and variants */ | |
| 1807 | + z = P("p"); | |
| 1808 | + p_rid = z ? name_to_typed_rid(z,"ci") : 0; | |
| 1809 | + z = P("d"); | |
| 1810 | + d_rid = z ? name_to_typed_rid(z,"ci") : 0; | |
| 1811 | + z = P("f"); | |
| 1812 | + f_rid = z ? name_to_typed_rid(z,"ci") : 0; | |
| 1813 | + z = P("df"); | |
| 1814 | + if( z && (d_rid = name_to_typed_rid(z,"ci"))!=0 ){ | |
| 1815 | + nEntry = 0; | |
| 1816 | + useDividers = 0; | |
| 1817 | + cgi_replace_query_parameter("d",fossil_strdup(z)); | |
| 1818 | + } | |
| 1798 | 1819 | |
| 1799 | 1820 | /* Undocumented query parameter to set JS mode */ |
| 1800 | 1821 | builtin_set_js_delivery_mode(P("jsmode"),1); |
| 1801 | 1822 | |
| 1802 | 1823 | secondaryRid = name_to_typed_rid(P("sel2"),"ci"); |
| 1803 | 1824 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -1641,11 +1641,16 @@ | |
| 1641 | ** n1=COUNT Same as "n" but doesn't set the display-preference cookie |
| 1642 | ** Use "n1=COUNT" for a one-time display change |
| 1643 | ** p=CHECKIN Parents and ancestors of CHECKIN |
| 1644 | ** bt=PRIOR ... going back to PRIOR |
| 1645 | ** d=CHECKIN Children and descendants of CHECKIN |
| 1646 | ** dp=CHECKIN The same as 'd=CHECKIN&p=CHECKIN' |
| 1647 | ** t=TAG Show only check-ins with the given TAG |
| 1648 | ** r=TAG Show check-ins related to TAG, equivalent to t=TAG&rel |
| 1649 | ** rel Show related check-ins as well as those matching t=TAG |
| 1650 | ** mionly Limit rel to show ancestors but not descendants |
| 1651 | ** nowiki Do not show wiki associated with branch or tag |
| @@ -1665,10 +1670,12 @@ | |
| 1665 | ** from=CHECKIN Path from... |
| 1666 | ** to=CHECKIN ... to this |
| 1667 | ** shortest ... show only the shortest path |
| 1668 | ** rel ... also show related checkins |
| 1669 | ** uf=FILE_HASH Show only check-ins that contain the given file version |
| 1670 | ** chng=GLOBLIST Show only check-ins that involve changes to a file whose |
| 1671 | ** name matches one of the comma-separate GLOBLIST |
| 1672 | ** brbg Background color determined by branch name |
| 1673 | ** ubg Background color determined by user |
| 1674 | ** deltabg Background color red for delta manifests or green |
| @@ -1699,13 +1706,13 @@ | |
| 1699 | void page_timeline(void){ |
| 1700 | Stmt q; /* Query used to generate the timeline */ |
| 1701 | Blob sql; /* text of SQL used to generate timeline */ |
| 1702 | Blob desc; /* Description of the timeline */ |
| 1703 | int nEntry; /* Max number of entries on timeline */ |
| 1704 | int p_rid = name_to_typed_rid(P("p"),"ci"); /* artifact p and its parents */ |
| 1705 | int d_rid = name_to_typed_rid(P("d"),"ci"); /* artifact d and descendants */ |
| 1706 | int f_rid = name_to_typed_rid(P("f"),"ci"); /* artifact f and close family */ |
| 1707 | const char *zUser = P("u"); /* All entries by this user if not NULL */ |
| 1708 | const char *zType; /* Type of events to display */ |
| 1709 | const char *zAfter = P("a"); /* Events after this time */ |
| 1710 | const char *zBefore = P("b"); /* Events before this time */ |
| 1711 | const char *zCirca = P("c"); /* Events near this time */ |
| @@ -1757,10 +1764,11 @@ | |
| 1757 | int showCherrypicks = 1; /* True to show cherrypick merges */ |
| 1758 | int haveParameterN; /* True if n= query parameter present */ |
| 1759 | |
| 1760 | url_initialize(&url, "timeline"); |
| 1761 | cgi_query_parameters_to_url(&url); |
| 1762 | |
| 1763 | /* Set number of rows to display */ |
| 1764 | z = P("n"); |
| 1765 | if( z!=0 ){ |
| 1766 | haveParameterN = 1; |
| @@ -1771,11 +1779,11 @@ | |
| 1771 | cookie_read_parameter("n","n"); |
| 1772 | z = P("n"); |
| 1773 | if( z==0 ){ |
| 1774 | z = db_get("timeline-default-length",0); |
| 1775 | } |
| 1776 | cgi_replace_query_parameter("n",z); |
| 1777 | cookie_write_parameter("n","n",0); |
| 1778 | z2 = P("n1"); |
| 1779 | if( z2 ){ |
| 1780 | haveParameterN = 2; |
| 1781 | z = z2; |
| @@ -1790,13 +1798,26 @@ | |
| 1790 | z = "10"; |
| 1791 | nEntry = 10; |
| 1792 | } |
| 1793 | } |
| 1794 | }else{ |
| 1795 | z = "50"; |
| 1796 | nEntry = 50; |
| 1797 | } |
| 1798 | |
| 1799 | /* Undocumented query parameter to set JS mode */ |
| 1800 | builtin_set_js_delivery_mode(P("jsmode"),1); |
| 1801 | |
| 1802 | secondaryRid = name_to_typed_rid(P("sel2"),"ci"); |
| 1803 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -1641,11 +1641,16 @@ | |
| 1641 | ** n1=COUNT Same as "n" but doesn't set the display-preference cookie |
| 1642 | ** Use "n1=COUNT" for a one-time display change |
| 1643 | ** p=CHECKIN Parents and ancestors of CHECKIN |
| 1644 | ** bt=PRIOR ... going back to PRIOR |
| 1645 | ** d=CHECKIN Children and descendants of CHECKIN |
| 1646 | ** dp=CHECKIN Same as 'd=CHECKIN&p=CHECKIN' |
| 1647 | ** df=CHECKIN Same as 'd=CHECKIN&n1=all&nd'. Mnemonic: "Derived From" |
| 1648 | ** bt=CHECKIN In conjuction with p=CX, this means show all |
| 1649 | ** ancestors of CX going back to the time of CHECKIN. |
| 1650 | ** All qualifying check-ins are shown unless there |
| 1651 | ** is also an n= or n1= query pararameter. |
| 1652 | ** t=TAG Show only check-ins with the given TAG |
| 1653 | ** r=TAG Show check-ins related to TAG, equivalent to t=TAG&rel |
| 1654 | ** rel Show related check-ins as well as those matching t=TAG |
| 1655 | ** mionly Limit rel to show ancestors but not descendants |
| 1656 | ** nowiki Do not show wiki associated with branch or tag |
| @@ -1665,10 +1670,12 @@ | |
| 1670 | ** from=CHECKIN Path from... |
| 1671 | ** to=CHECKIN ... to this |
| 1672 | ** shortest ... show only the shortest path |
| 1673 | ** rel ... also show related checkins |
| 1674 | ** uf=FILE_HASH Show only check-ins that contain the given file version |
| 1675 | ** All qualifying check-ins are shown unless there is |
| 1676 | ** also an n= or n1= query parameter. |
| 1677 | ** chng=GLOBLIST Show only check-ins that involve changes to a file whose |
| 1678 | ** name matches one of the comma-separate GLOBLIST |
| 1679 | ** brbg Background color determined by branch name |
| 1680 | ** ubg Background color determined by user |
| 1681 | ** deltabg Background color red for delta manifests or green |
| @@ -1699,13 +1706,13 @@ | |
| 1706 | void page_timeline(void){ |
| 1707 | Stmt q; /* Query used to generate the timeline */ |
| 1708 | Blob sql; /* text of SQL used to generate timeline */ |
| 1709 | Blob desc; /* Description of the timeline */ |
| 1710 | int nEntry; /* Max number of entries on timeline */ |
| 1711 | int p_rid; /* artifact p and its parents */ |
| 1712 | int d_rid; /* artifact d and descendants */ |
| 1713 | int f_rid; /* artifact f and close family */ |
| 1714 | const char *zUser = P("u"); /* All entries by this user if not NULL */ |
| 1715 | const char *zType; /* Type of events to display */ |
| 1716 | const char *zAfter = P("a"); /* Events after this time */ |
| 1717 | const char *zBefore = P("b"); /* Events before this time */ |
| 1718 | const char *zCirca = P("c"); /* Events near this time */ |
| @@ -1757,10 +1764,11 @@ | |
| 1764 | int showCherrypicks = 1; /* True to show cherrypick merges */ |
| 1765 | int haveParameterN; /* True if n= query parameter present */ |
| 1766 | |
| 1767 | url_initialize(&url, "timeline"); |
| 1768 | cgi_query_parameters_to_url(&url); |
| 1769 | |
| 1770 | |
| 1771 | /* Set number of rows to display */ |
| 1772 | z = P("n"); |
| 1773 | if( z!=0 ){ |
| 1774 | haveParameterN = 1; |
| @@ -1771,11 +1779,11 @@ | |
| 1779 | cookie_read_parameter("n","n"); |
| 1780 | z = P("n"); |
| 1781 | if( z==0 ){ |
| 1782 | z = db_get("timeline-default-length",0); |
| 1783 | } |
| 1784 | cgi_replace_query_parameter("n",fossil_strdup(z)); |
| 1785 | cookie_write_parameter("n","n",0); |
| 1786 | z2 = P("n1"); |
| 1787 | if( z2 ){ |
| 1788 | haveParameterN = 2; |
| 1789 | z = z2; |
| @@ -1790,13 +1798,26 @@ | |
| 1798 | z = "10"; |
| 1799 | nEntry = 10; |
| 1800 | } |
| 1801 | } |
| 1802 | }else{ |
| 1803 | nEntry = 50; |
| 1804 | } |
| 1805 | |
| 1806 | /* Query parameters d=, p=, and f= and variants */ |
| 1807 | z = P("p"); |
| 1808 | p_rid = z ? name_to_typed_rid(z,"ci") : 0; |
| 1809 | z = P("d"); |
| 1810 | d_rid = z ? name_to_typed_rid(z,"ci") : 0; |
| 1811 | z = P("f"); |
| 1812 | f_rid = z ? name_to_typed_rid(z,"ci") : 0; |
| 1813 | z = P("df"); |
| 1814 | if( z && (d_rid = name_to_typed_rid(z,"ci"))!=0 ){ |
| 1815 | nEntry = 0; |
| 1816 | useDividers = 0; |
| 1817 | cgi_replace_query_parameter("d",fossil_strdup(z)); |
| 1818 | } |
| 1819 | |
| 1820 | /* Undocumented query parameter to set JS mode */ |
| 1821 | builtin_set_js_delivery_mode(P("jsmode"),1); |
| 1822 | |
| 1823 | secondaryRid = name_to_typed_rid(P("sel2"),"ci"); |
| 1824 |
+1
-1
| --- www/fossil-v-git.wiki | ||
| +++ www/fossil-v-git.wiki | ||
| @@ -258,11 +258,11 @@ | ||
| 258 | 258 | check-in. It is so difficult, in fact, that neither native Git nor |
| 259 | 259 | GitHub provide this capability short of crawling the |
| 260 | 260 | [https://www.git-scm.com/docs/git-log|commit log]. With Fossil, |
| 261 | 261 | on the other hand, finding descendents is a simple SQL query. |
| 262 | 262 | It is common in Fossil to ask to see |
| 263 | -[/timeline?d=release&n=all&y=ci&nd|all check-ins since the last release]. | |
| 263 | +[/timeline?df=release&y=ci|all check-ins since the last release]. | |
| 264 | 264 | Git lets you see "what came before". Fossil makes it just as |
| 265 | 265 | easy to also see "what came after". |
| 266 | 266 | |
| 267 | 267 | Leaf check-ins in Git that lack a "ref" become "detached," making them |
| 268 | 268 | difficult to locate and subject to garbage collection. This |
| 269 | 269 |
| --- www/fossil-v-git.wiki | |
| +++ www/fossil-v-git.wiki | |
| @@ -258,11 +258,11 @@ | |
| 258 | check-in. It is so difficult, in fact, that neither native Git nor |
| 259 | GitHub provide this capability short of crawling the |
| 260 | [https://www.git-scm.com/docs/git-log|commit log]. With Fossil, |
| 261 | on the other hand, finding descendents is a simple SQL query. |
| 262 | It is common in Fossil to ask to see |
| 263 | [/timeline?d=release&n=all&y=ci&nd|all check-ins since the last release]. |
| 264 | Git lets you see "what came before". Fossil makes it just as |
| 265 | easy to also see "what came after". |
| 266 | |
| 267 | Leaf check-ins in Git that lack a "ref" become "detached," making them |
| 268 | difficult to locate and subject to garbage collection. This |
| 269 |
| --- www/fossil-v-git.wiki | |
| +++ www/fossil-v-git.wiki | |
| @@ -258,11 +258,11 @@ | |
| 258 | check-in. It is so difficult, in fact, that neither native Git nor |
| 259 | GitHub provide this capability short of crawling the |
| 260 | [https://www.git-scm.com/docs/git-log|commit log]. With Fossil, |
| 261 | on the other hand, finding descendents is a simple SQL query. |
| 262 | It is common in Fossil to ask to see |
| 263 | [/timeline?df=release&y=ci|all check-ins since the last release]. |
| 264 | Git lets you see "what came before". Fossil makes it just as |
| 265 | easy to also see "what came after". |
| 266 | |
| 267 | Leaf check-ins in Git that lack a "ref" become "detached," making them |
| 268 | difficult to locate and subject to garbage collection. This |
| 269 |
+7
-7
| --- www/history.md | ||
| +++ www/history.md | ||
| @@ -3,11 +3,11 @@ | ||
| 3 | 3 | Fossil is a [distributed version control system (DVCS)][100] written |
| 4 | 4 | beginning in [2007][105] by the [architect of SQLite][110] for the |
| 5 | 5 | purpose of managing the [SQLite project][115]. |
| 6 | 6 | |
| 7 | 7 | [100]: https://en.wikipedia.org/wiki/Distributed_version_control |
| 8 | -[105]: /timeline?a=1970-01-01&n=10 | |
| 8 | +[105]: /timeline?a=1970-01-01&n1=10 | |
| 9 | 9 | [110]: https://sqlite.org/crew.html |
| 10 | 10 | [115]: https://sqlite.org/ |
| 11 | 11 | |
| 12 | 12 | Though Fossil was originally written specifically to support SQLite, |
| 13 | 13 | it is now also used by countless other projects. The SQLite architect (drh) |
| @@ -30,11 +30,11 @@ | ||
| 30 | 30 | lack of integrated bug tracking. To try to address these deficiencies, |
| 31 | 31 | the SQLite author developed the [CVSTrac][305] wrapper for CVS beginning |
| 32 | 32 | in [2002][310]. |
| 33 | 33 | |
| 34 | 34 | [305]: http://cvstrac.org/ |
| 35 | -[310]: http://cvstrac.org/fossil/timeline?a=19700101&n=10 | |
| 35 | +[310]: http://cvstrac.org/fossil/timeline?a=19700101&n1=10 | |
| 36 | 36 | |
| 37 | 37 | CVSTrac greatly improved the usability of CVS and was adopted by |
| 38 | 38 | other projects. CVSTrac also [inspired the design][315] of [Trac][320], |
| 39 | 39 | which was a similar system that was (and is) far more widely used. |
| 40 | 40 | |
| @@ -47,12 +47,12 @@ | ||
| 47 | 47 | That was not an unreasonable check-in comment, as check-in comments |
| 48 | 48 | were scarcely seen and of questionable utility in raw CVS. CVSTrac |
| 49 | 49 | changed that, making check-in comments more visible and more useful. |
| 50 | 50 | The SQLite developers reacted by creating [better check-in comments][330]. |
| 51 | 51 | |
| 52 | -[325]: https://sqlite.org/src/timeline?a=19700101&n=10 | |
| 53 | -[330]: https://sqlite.org/src/timeline?c=20030101&n=10&nd | |
| 52 | +[325]: https://sqlite.org/src/timeline?a=19700101&n1=10 | |
| 53 | +[330]: https://sqlite.org/src/timeline?c=20030101&n1=10&nd | |
| 54 | 54 | |
| 55 | 55 | At about this same time, the [Monotone][335] system appeared. |
| 56 | 56 | Monotone was one of the first distributed version control systems. As far as |
| 57 | 57 | this author is aware, Monotone was the first VCS to make use of |
| 58 | 58 | SHA1 to identify artifacts. Monotone stored its content in an SQLite |
| @@ -78,11 +78,11 @@ | ||
| 78 | 78 | were better implemented in plain old C. |
| 79 | 79 | Experiments continued. Finally, a prototype capable of self-hosting |
| 80 | 80 | was devised on [2007-07-16][345]. |
| 81 | 81 | |
| 82 | 82 | [340]: https://www.tcl.tk/ |
| 83 | -[345]: https://fossil-scm.org/fossil/timeline?c=200707211410&n=10 | |
| 83 | +[345]: https://fossil-scm.org/fossil/timeline?c=200707211410&n1=10 | |
| 84 | 84 | |
| 85 | 85 | The first project hosted by Fossil was Fossil itself. After a |
| 86 | 86 | few months of development work, the code was considered stable enough |
| 87 | 87 | to begin hosting the [SQLite documentation repository][350] which was |
| 88 | 88 | split off from the main SQLite CVS repository on [2007-11-12][355]. |
| @@ -89,7 +89,7 @@ | ||
| 89 | 89 | After two years of development work on Fossil, the |
| 90 | 90 | SQLite source code itself was transfered to Fossil on |
| 91 | 91 | [2009-08-11][360]. |
| 92 | 92 | |
| 93 | 93 | [350]: https://www.sqlite.org/docsrc/doc/trunk/README.md |
| 94 | -[355]: https://www.sqlite.org/docsrc/timeline?c=200711120345&n=10 | |
| 95 | -[360]: https://sqlite.org/src/timeline?c=b0848925babde524&n=12&y=ci | |
| 94 | +[355]: https://www.sqlite.org/docsrc/timeline?c=200711120345&n1=10 | |
| 95 | +[360]: https://sqlite.org/src/timeline?c=b0848925babde524&n1=12&y=ci | |
| 96 | 96 |
| --- www/history.md | |
| +++ www/history.md | |
| @@ -3,11 +3,11 @@ | |
| 3 | Fossil is a [distributed version control system (DVCS)][100] written |
| 4 | beginning in [2007][105] by the [architect of SQLite][110] for the |
| 5 | purpose of managing the [SQLite project][115]. |
| 6 | |
| 7 | [100]: https://en.wikipedia.org/wiki/Distributed_version_control |
| 8 | [105]: /timeline?a=1970-01-01&n=10 |
| 9 | [110]: https://sqlite.org/crew.html |
| 10 | [115]: https://sqlite.org/ |
| 11 | |
| 12 | Though Fossil was originally written specifically to support SQLite, |
| 13 | it is now also used by countless other projects. The SQLite architect (drh) |
| @@ -30,11 +30,11 @@ | |
| 30 | lack of integrated bug tracking. To try to address these deficiencies, |
| 31 | the SQLite author developed the [CVSTrac][305] wrapper for CVS beginning |
| 32 | in [2002][310]. |
| 33 | |
| 34 | [305]: http://cvstrac.org/ |
| 35 | [310]: http://cvstrac.org/fossil/timeline?a=19700101&n=10 |
| 36 | |
| 37 | CVSTrac greatly improved the usability of CVS and was adopted by |
| 38 | other projects. CVSTrac also [inspired the design][315] of [Trac][320], |
| 39 | which was a similar system that was (and is) far more widely used. |
| 40 | |
| @@ -47,12 +47,12 @@ | |
| 47 | That was not an unreasonable check-in comment, as check-in comments |
| 48 | were scarcely seen and of questionable utility in raw CVS. CVSTrac |
| 49 | changed that, making check-in comments more visible and more useful. |
| 50 | The SQLite developers reacted by creating [better check-in comments][330]. |
| 51 | |
| 52 | [325]: https://sqlite.org/src/timeline?a=19700101&n=10 |
| 53 | [330]: https://sqlite.org/src/timeline?c=20030101&n=10&nd |
| 54 | |
| 55 | At about this same time, the [Monotone][335] system appeared. |
| 56 | Monotone was one of the first distributed version control systems. As far as |
| 57 | this author is aware, Monotone was the first VCS to make use of |
| 58 | SHA1 to identify artifacts. Monotone stored its content in an SQLite |
| @@ -78,11 +78,11 @@ | |
| 78 | were better implemented in plain old C. |
| 79 | Experiments continued. Finally, a prototype capable of self-hosting |
| 80 | was devised on [2007-07-16][345]. |
| 81 | |
| 82 | [340]: https://www.tcl.tk/ |
| 83 | [345]: https://fossil-scm.org/fossil/timeline?c=200707211410&n=10 |
| 84 | |
| 85 | The first project hosted by Fossil was Fossil itself. After a |
| 86 | few months of development work, the code was considered stable enough |
| 87 | to begin hosting the [SQLite documentation repository][350] which was |
| 88 | split off from the main SQLite CVS repository on [2007-11-12][355]. |
| @@ -89,7 +89,7 @@ | |
| 89 | After two years of development work on Fossil, the |
| 90 | SQLite source code itself was transfered to Fossil on |
| 91 | [2009-08-11][360]. |
| 92 | |
| 93 | [350]: https://www.sqlite.org/docsrc/doc/trunk/README.md |
| 94 | [355]: https://www.sqlite.org/docsrc/timeline?c=200711120345&n=10 |
| 95 | [360]: https://sqlite.org/src/timeline?c=b0848925babde524&n=12&y=ci |
| 96 |
| --- www/history.md | |
| +++ www/history.md | |
| @@ -3,11 +3,11 @@ | |
| 3 | Fossil is a [distributed version control system (DVCS)][100] written |
| 4 | beginning in [2007][105] by the [architect of SQLite][110] for the |
| 5 | purpose of managing the [SQLite project][115]. |
| 6 | |
| 7 | [100]: https://en.wikipedia.org/wiki/Distributed_version_control |
| 8 | [105]: /timeline?a=1970-01-01&n1=10 |
| 9 | [110]: https://sqlite.org/crew.html |
| 10 | [115]: https://sqlite.org/ |
| 11 | |
| 12 | Though Fossil was originally written specifically to support SQLite, |
| 13 | it is now also used by countless other projects. The SQLite architect (drh) |
| @@ -30,11 +30,11 @@ | |
| 30 | lack of integrated bug tracking. To try to address these deficiencies, |
| 31 | the SQLite author developed the [CVSTrac][305] wrapper for CVS beginning |
| 32 | in [2002][310]. |
| 33 | |
| 34 | [305]: http://cvstrac.org/ |
| 35 | [310]: http://cvstrac.org/fossil/timeline?a=19700101&n1=10 |
| 36 | |
| 37 | CVSTrac greatly improved the usability of CVS and was adopted by |
| 38 | other projects. CVSTrac also [inspired the design][315] of [Trac][320], |
| 39 | which was a similar system that was (and is) far more widely used. |
| 40 | |
| @@ -47,12 +47,12 @@ | |
| 47 | That was not an unreasonable check-in comment, as check-in comments |
| 48 | were scarcely seen and of questionable utility in raw CVS. CVSTrac |
| 49 | changed that, making check-in comments more visible and more useful. |
| 50 | The SQLite developers reacted by creating [better check-in comments][330]. |
| 51 | |
| 52 | [325]: https://sqlite.org/src/timeline?a=19700101&n1=10 |
| 53 | [330]: https://sqlite.org/src/timeline?c=20030101&n1=10&nd |
| 54 | |
| 55 | At about this same time, the [Monotone][335] system appeared. |
| 56 | Monotone was one of the first distributed version control systems. As far as |
| 57 | this author is aware, Monotone was the first VCS to make use of |
| 58 | SHA1 to identify artifacts. Monotone stored its content in an SQLite |
| @@ -78,11 +78,11 @@ | |
| 78 | were better implemented in plain old C. |
| 79 | Experiments continued. Finally, a prototype capable of self-hosting |
| 80 | was devised on [2007-07-16][345]. |
| 81 | |
| 82 | [340]: https://www.tcl.tk/ |
| 83 | [345]: https://fossil-scm.org/fossil/timeline?c=200707211410&n1=10 |
| 84 | |
| 85 | The first project hosted by Fossil was Fossil itself. After a |
| 86 | few months of development work, the code was considered stable enough |
| 87 | to begin hosting the [SQLite documentation repository][350] which was |
| 88 | split off from the main SQLite CVS repository on [2007-11-12][355]. |
| @@ -89,7 +89,7 @@ | |
| 89 | After two years of development work on Fossil, the |
| 90 | SQLite source code itself was transfered to Fossil on |
| 91 | [2009-08-11][360]. |
| 92 | |
| 93 | [350]: https://www.sqlite.org/docsrc/doc/trunk/README.md |
| 94 | [355]: https://www.sqlite.org/docsrc/timeline?c=200711120345&n1=10 |
| 95 | [360]: https://sqlite.org/src/timeline?c=b0848925babde524&n1=12&y=ci |
| 96 |
+2
-2
| --- www/index.wiki | ||
| +++ www/index.wiki | ||
| @@ -90,12 +90,12 @@ | ||
| 90 | 90 | <hr> |
| 91 | 91 | <h3>Latest Release: 2.13 ([/timeline?c=version-2.13|2020-11-01])</h3> |
| 92 | 92 | |
| 93 | 93 | * [/uv/download.html|Download] |
| 94 | 94 | * [./changes.wiki#v2_13|Change Summary] |
| 95 | - * [/timeline?p=version-2.13&bt=version-2.12&n=all|Check-ins in version 2.13] | |
| 96 | - * [/timeline?d=version-2.13&n=all&nd|Check-ins derived from the 2.13 release] | |
| 95 | + * [/timeline?p=version-2.13&bt=version-2.12&y=ci|Check-ins in version 2.13] | |
| 96 | + * [/timeline?df=version-2.13&y=ci|Check-ins derived from the 2.13 release] | |
| 97 | 97 | * [/timeline?t=release|Timeline of all past releases] |
| 98 | 98 | |
| 99 | 99 | <hr> |
| 100 | 100 | <h3>Quick Start</h3> |
| 101 | 101 | |
| 102 | 102 |
| --- www/index.wiki | |
| +++ www/index.wiki | |
| @@ -90,12 +90,12 @@ | |
| 90 | <hr> |
| 91 | <h3>Latest Release: 2.13 ([/timeline?c=version-2.13|2020-11-01])</h3> |
| 92 | |
| 93 | * [/uv/download.html|Download] |
| 94 | * [./changes.wiki#v2_13|Change Summary] |
| 95 | * [/timeline?p=version-2.13&bt=version-2.12&n=all|Check-ins in version 2.13] |
| 96 | * [/timeline?d=version-2.13&n=all&nd|Check-ins derived from the 2.13 release] |
| 97 | * [/timeline?t=release|Timeline of all past releases] |
| 98 | |
| 99 | <hr> |
| 100 | <h3>Quick Start</h3> |
| 101 | |
| 102 |
| --- www/index.wiki | |
| +++ www/index.wiki | |
| @@ -90,12 +90,12 @@ | |
| 90 | <hr> |
| 91 | <h3>Latest Release: 2.13 ([/timeline?c=version-2.13|2020-11-01])</h3> |
| 92 | |
| 93 | * [/uv/download.html|Download] |
| 94 | * [./changes.wiki#v2_13|Change Summary] |
| 95 | * [/timeline?p=version-2.13&bt=version-2.12&y=ci|Check-ins in version 2.13] |
| 96 | * [/timeline?df=version-2.13&y=ci|Check-ins derived from the 2.13 release] |
| 97 | * [/timeline?t=release|Timeline of all past releases] |
| 98 | |
| 99 | <hr> |
| 100 | <h3>Quick Start</h3> |
| 101 | |
| 102 |
+1
-1
| --- www/serverext.wiki | ||
| +++ www/serverext.wiki | ||
| @@ -86,11 +86,11 @@ | ||
| 86 | 86 | [https://wapp.tcl.tk|Wapp program]. The current source code to the |
| 87 | 87 | this program can be seen at |
| 88 | 88 | [https://www.sqlite.org/src/ext/checklist/3070700/self] and |
| 89 | 89 | recent historical versions are available at |
| 90 | 90 | [https://sqlite.org/docsrc/finfo/misc/checklist.tcl] with |
| 91 | -older legacy at [https://sqlite.org/checklistapp/timeline?n=all] | |
| 91 | +older legacy at [https://sqlite.org/checklistapp/timeline?n1=all] | |
| 92 | 92 | |
| 93 | 93 | There is a cascade of CGIs happening here. The web server that receives |
| 94 | 94 | the initial HTTP request runs Fossil as a CGI based on the |
| 95 | 95 | "https://sqlite.org/src" portion of the URL. The Fossil instance then |
| 96 | 96 | runs the checklist sub-CGI based on the "/ext/checklists" suffix. The |
| 97 | 97 |
| --- www/serverext.wiki | |
| +++ www/serverext.wiki | |
| @@ -86,11 +86,11 @@ | |
| 86 | [https://wapp.tcl.tk|Wapp program]. The current source code to the |
| 87 | this program can be seen at |
| 88 | [https://www.sqlite.org/src/ext/checklist/3070700/self] and |
| 89 | recent historical versions are available at |
| 90 | [https://sqlite.org/docsrc/finfo/misc/checklist.tcl] with |
| 91 | older legacy at [https://sqlite.org/checklistapp/timeline?n=all] |
| 92 | |
| 93 | There is a cascade of CGIs happening here. The web server that receives |
| 94 | the initial HTTP request runs Fossil as a CGI based on the |
| 95 | "https://sqlite.org/src" portion of the URL. The Fossil instance then |
| 96 | runs the checklist sub-CGI based on the "/ext/checklists" suffix. The |
| 97 |
| --- www/serverext.wiki | |
| +++ www/serverext.wiki | |
| @@ -86,11 +86,11 @@ | |
| 86 | [https://wapp.tcl.tk|Wapp program]. The current source code to the |
| 87 | this program can be seen at |
| 88 | [https://www.sqlite.org/src/ext/checklist/3070700/self] and |
| 89 | recent historical versions are available at |
| 90 | [https://sqlite.org/docsrc/finfo/misc/checklist.tcl] with |
| 91 | older legacy at [https://sqlite.org/checklistapp/timeline?n1=all] |
| 92 | |
| 93 | There is a cascade of CGIs happening here. The web server that receives |
| 94 | the initial HTTP request runs Fossil as a CGI based on the |
| 95 | "https://sqlite.org/src" portion of the URL. The Fossil instance then |
| 96 | runs the checklist sub-CGI based on the "/ext/checklists" suffix. The |
| 97 |
+1
-1
| --- www/uitest.html | ||
| +++ www/uitest.html | ||
| @@ -12,11 +12,11 @@ | ||
| 12 | 12 | url: "timeline", |
| 13 | 13 | desc: |
| 14 | 14 | "Simple timeline of most recent check-ins. Verify that all submenus work." |
| 15 | 15 | }, |
| 16 | 16 | { |
| 17 | - url: "timeline?n=125", | |
| 17 | + url: "timeline?n1=125", | |
| 18 | 18 | desc: |
| 19 | 19 | "Timeline with 125 entries. Verify that submenus preserve the entry count." |
| 20 | 20 | }, |
| 21 | 21 | { |
| 22 | 22 | url: "wiki", |
| 23 | 23 |
| --- www/uitest.html | |
| +++ www/uitest.html | |
| @@ -12,11 +12,11 @@ | |
| 12 | url: "timeline", |
| 13 | desc: |
| 14 | "Simple timeline of most recent check-ins. Verify that all submenus work." |
| 15 | }, |
| 16 | { |
| 17 | url: "timeline?n=125", |
| 18 | desc: |
| 19 | "Timeline with 125 entries. Verify that submenus preserve the entry count." |
| 20 | }, |
| 21 | { |
| 22 | url: "wiki", |
| 23 |
| --- www/uitest.html | |
| +++ www/uitest.html | |
| @@ -12,11 +12,11 @@ | |
| 12 | url: "timeline", |
| 13 | desc: |
| 14 | "Simple timeline of most recent check-ins. Verify that all submenus work." |
| 15 | }, |
| 16 | { |
| 17 | url: "timeline?n1=125", |
| 18 | desc: |
| 19 | "Timeline with 125 entries. Verify that submenus preserve the entry count." |
| 20 | }, |
| 21 | { |
| 22 | url: "wiki", |
| 23 |
+12
-8
| --- www/webpage-ex.md | ||
| +++ www/webpage-ex.md | ||
| @@ -4,46 +4,50 @@ | ||
| 4 | 4 | Here are just a few examples of the many web pages supported |
| 5 | 5 | by Fossil. Follow hyperlinks on the examples below to see many |
| 6 | 6 | other examples. |
| 7 | 7 | |
| 8 | 8 | * <a target='_blank' class='exbtn' |
| 9 | - href='$ROOT/timeline?y=ci&n=100'>(Example)</a> → | |
| 9 | + href='$ROOT/timeline?y=ci&n1=100'>(Example)</a> → | |
| 10 | 10 | 100 most recent check-ins. |
| 11 | 11 | |
| 12 | 12 | * <a target='_blank' class='exbtn' |
| 13 | 13 | href='$ROOT/finfo?name=src/file.c'>(Example)</a> → |
| 14 | 14 | All changes to the <b>src/file.c</b> source file. |
| 15 | 15 | |
| 16 | 16 | * <a target='_blank' class='exbtn' |
| 17 | - href='$ROOT/timeline?n=200&uf=0c3c2d086a'>(Example)</a> → | |
| 17 | + href='$ROOT/timeline?n1=200&uf=0c3c2d086a'>(Example)</a> → | |
| 18 | 18 | All check-ins using a particular version of the <b>src/file.c</b> |
| 19 | 19 | source file. |
| 20 | 20 | |
| 21 | 21 | * <a target='_blank' class='exbtn' |
| 22 | - href='$ROOT/timeline?n=11&y=ci&c=2014-01-01'>(Example)</a> → | |
| 22 | + href='$ROOT/timeline?n1=11&y=ci&c=2014-01-01'>(Example)</a> → | |
| 23 | 23 | Check-ins proximate to an historical point in time (2014-01-01). |
| 24 | 24 | |
| 25 | 25 | * <a target='_blank' class='exbtn' |
| 26 | - href='$ROOT/timeline?n=11&y=ci&c=2014-01-01&v=1'>(Example)</a> → | |
| 26 | + href='$ROOT/timeline?df=release&y=ci'>(Example)</a> → | |
| 27 | + All check-ins derived from the most recent release. | |
| 28 | + | |
| 29 | + * <a target='_blank' class='exbtn' | |
| 30 | + href='$ROOT/timeline?n1=11&y=ci&c=2014-01-01&v=1'>(Example)</a> → | |
| 27 | 31 | The previous example augmented with file changes. |
| 28 | 32 | |
| 29 | 33 | * <a target='_blank' class='exbtn' |
| 30 | - href='$ROOT/timeline?n=25&y=ci&a=1970-01-01'>(Example)</a> → | |
| 34 | + href='$ROOT/timeline?n1=25&y=ci&a=1970-01-01'>(Example)</a> → | |
| 31 | 35 | First 25 check-ins after 1970-01-01. (The first 25 check-ins of |
| 32 | 36 | the project.) |
| 33 | 37 | |
| 34 | 38 | * <a target='_blank' class='exbtn' |
| 35 | - href='$ROOT/timeline?n=200&r=svn-import'>(Example)</a> → | |
| 39 | + href='$ROOT/timeline?n1=200&r=svn-import'>(Example)</a> → | |
| 36 | 40 | All check-ins of the "svn-import" branch together with check-ins |
| 37 | 41 | that merge with that branch. |
| 38 | 42 | |
| 39 | 43 | * <a target='_blank' class='exbtn' |
| 40 | - href='$ROOT/timeline?n=200&t=svn-import'>(Example)</a> → | |
| 44 | + href='$ROOT/timeline?n1=200&t=svn-import'>(Example)</a> → | |
| 41 | 45 | All check-ins of the "svn-import" branch only. |
| 42 | 46 | |
| 43 | 47 | * <a target='_blank' class='exbtn' |
| 44 | - href='$ROOT/timeline?n=100&y=ci&ubg'>(Example)</a> → | |
| 48 | + href='$ROOT/timeline?n1=100&y=ci&ubg'>(Example)</a> → | |
| 45 | 49 | 100 most recent check-ins color coded by committer rather than by branch. |
| 46 | 50 | |
| 47 | 51 | * <a target='_blank' class='exbtn' |
| 48 | 52 | href='$ROOT/timeline?from=version-1.27&to=version-1.28'>(Example)</a> → |
| 49 | 53 | All check-ins on the most direct path from |
| 50 | 54 |
| --- www/webpage-ex.md | |
| +++ www/webpage-ex.md | |
| @@ -4,46 +4,50 @@ | |
| 4 | Here are just a few examples of the many web pages supported |
| 5 | by Fossil. Follow hyperlinks on the examples below to see many |
| 6 | other examples. |
| 7 | |
| 8 | * <a target='_blank' class='exbtn' |
| 9 | href='$ROOT/timeline?y=ci&n=100'>(Example)</a> → |
| 10 | 100 most recent check-ins. |
| 11 | |
| 12 | * <a target='_blank' class='exbtn' |
| 13 | href='$ROOT/finfo?name=src/file.c'>(Example)</a> → |
| 14 | All changes to the <b>src/file.c</b> source file. |
| 15 | |
| 16 | * <a target='_blank' class='exbtn' |
| 17 | href='$ROOT/timeline?n=200&uf=0c3c2d086a'>(Example)</a> → |
| 18 | All check-ins using a particular version of the <b>src/file.c</b> |
| 19 | source file. |
| 20 | |
| 21 | * <a target='_blank' class='exbtn' |
| 22 | href='$ROOT/timeline?n=11&y=ci&c=2014-01-01'>(Example)</a> → |
| 23 | Check-ins proximate to an historical point in time (2014-01-01). |
| 24 | |
| 25 | * <a target='_blank' class='exbtn' |
| 26 | href='$ROOT/timeline?n=11&y=ci&c=2014-01-01&v=1'>(Example)</a> → |
| 27 | The previous example augmented with file changes. |
| 28 | |
| 29 | * <a target='_blank' class='exbtn' |
| 30 | href='$ROOT/timeline?n=25&y=ci&a=1970-01-01'>(Example)</a> → |
| 31 | First 25 check-ins after 1970-01-01. (The first 25 check-ins of |
| 32 | the project.) |
| 33 | |
| 34 | * <a target='_blank' class='exbtn' |
| 35 | href='$ROOT/timeline?n=200&r=svn-import'>(Example)</a> → |
| 36 | All check-ins of the "svn-import" branch together with check-ins |
| 37 | that merge with that branch. |
| 38 | |
| 39 | * <a target='_blank' class='exbtn' |
| 40 | href='$ROOT/timeline?n=200&t=svn-import'>(Example)</a> → |
| 41 | All check-ins of the "svn-import" branch only. |
| 42 | |
| 43 | * <a target='_blank' class='exbtn' |
| 44 | href='$ROOT/timeline?n=100&y=ci&ubg'>(Example)</a> → |
| 45 | 100 most recent check-ins color coded by committer rather than by branch. |
| 46 | |
| 47 | * <a target='_blank' class='exbtn' |
| 48 | href='$ROOT/timeline?from=version-1.27&to=version-1.28'>(Example)</a> → |
| 49 | All check-ins on the most direct path from |
| 50 |
| --- www/webpage-ex.md | |
| +++ www/webpage-ex.md | |
| @@ -4,46 +4,50 @@ | |
| 4 | Here are just a few examples of the many web pages supported |
| 5 | by Fossil. Follow hyperlinks on the examples below to see many |
| 6 | other examples. |
| 7 | |
| 8 | * <a target='_blank' class='exbtn' |
| 9 | href='$ROOT/timeline?y=ci&n1=100'>(Example)</a> → |
| 10 | 100 most recent check-ins. |
| 11 | |
| 12 | * <a target='_blank' class='exbtn' |
| 13 | href='$ROOT/finfo?name=src/file.c'>(Example)</a> → |
| 14 | All changes to the <b>src/file.c</b> source file. |
| 15 | |
| 16 | * <a target='_blank' class='exbtn' |
| 17 | href='$ROOT/timeline?n1=200&uf=0c3c2d086a'>(Example)</a> → |
| 18 | All check-ins using a particular version of the <b>src/file.c</b> |
| 19 | source file. |
| 20 | |
| 21 | * <a target='_blank' class='exbtn' |
| 22 | href='$ROOT/timeline?n1=11&y=ci&c=2014-01-01'>(Example)</a> → |
| 23 | Check-ins proximate to an historical point in time (2014-01-01). |
| 24 | |
| 25 | * <a target='_blank' class='exbtn' |
| 26 | href='$ROOT/timeline?df=release&y=ci'>(Example)</a> → |
| 27 | All check-ins derived from the most recent release. |
| 28 | |
| 29 | * <a target='_blank' class='exbtn' |
| 30 | href='$ROOT/timeline?n1=11&y=ci&c=2014-01-01&v=1'>(Example)</a> → |
| 31 | The previous example augmented with file changes. |
| 32 | |
| 33 | * <a target='_blank' class='exbtn' |
| 34 | href='$ROOT/timeline?n1=25&y=ci&a=1970-01-01'>(Example)</a> → |
| 35 | First 25 check-ins after 1970-01-01. (The first 25 check-ins of |
| 36 | the project.) |
| 37 | |
| 38 | * <a target='_blank' class='exbtn' |
| 39 | href='$ROOT/timeline?n1=200&r=svn-import'>(Example)</a> → |
| 40 | All check-ins of the "svn-import" branch together with check-ins |
| 41 | that merge with that branch. |
| 42 | |
| 43 | * <a target='_blank' class='exbtn' |
| 44 | href='$ROOT/timeline?n1=200&t=svn-import'>(Example)</a> → |
| 45 | All check-ins of the "svn-import" branch only. |
| 46 | |
| 47 | * <a target='_blank' class='exbtn' |
| 48 | href='$ROOT/timeline?n1=100&y=ci&ubg'>(Example)</a> → |
| 49 | 100 most recent check-ins color coded by committer rather than by branch. |
| 50 | |
| 51 | * <a target='_blank' class='exbtn' |
| 52 | href='$ROOT/timeline?from=version-1.27&to=version-1.28'>(Example)</a> → |
| 53 | All check-ins on the most direct path from |
| 54 |