Fossil SCM

Merge trunk

baruch 2015-01-18 21:12 svn-import merge
Commit 0746fbe416408deca624764a03185ba0ef6a274a
+7 -16
--- Dockerfile
+++ Dockerfile
@@ -2,35 +2,26 @@
22
# Dockerfile for Fossil
33
###
44
FROM fedora:21
55
66
### Now install some additional parts we will need for the build
7
-# RUN yum update -y && yum clean all
8
-RUN yum install -y gcc make zlib-devel openssl-devel tcl-devel && yum clean all
9
-RUN groupadd -r fossil -g 433 && useradd -u 431 -r -g fossil -d /opt/fossil -s /sbin/nologin -c "Fossil user" fossil
7
+RUN yum update -y && yum install -y gcc make zlib-devel openssl-devel tcl-devel tar && yum clean all && groupadd -r fossil -g 433 && useradd -u 431 -r -g fossil -d /opt/fossil -s /sbin/nologin -c "Fossil user" fossil
108
11
-### If you want to build "release", change the next line accordingly.
12
-ENV FOSSIL_INSTALL_VERSION trunk
9
+### If you want to build "trunk", change the next line accordingly.
10
+ENV FOSSIL_INSTALL_VERSION release
1311
1412
RUN curl "http://www.fossil-scm.org/index.html/tarball/fossil-src.tar.gz?name=fossil-src&uuid=${FOSSIL_INSTALL_VERSION}" | tar zx
15
-RUN cd fossil-src && ./configure --lineedit=0 --json --with-tcl --with-tcl-stubs --with-tcl-private-stubs && make;
16
-RUN cp fossil-src/fossil /usr/bin
17
-RUN rm -rf fossil-src
18
-RUN chmod a+rx /usr/bin/fossil
19
-RUN mkdir -p /opt/fossil
20
-RUN chown fossil:fossil /opt/fossil
13
+RUN cd fossil-src && ./configure --disable-lineedit --disable-fusefs --json --with-th1-docs --with-th1-hooks --with-tcl --with-tcl-stubs --with-tcl-private-stubs && make;
14
+RUN cp fossil-src/fossil /usr/bin && rm -rf fossil-src && chmod a+rx /usr/bin/fossil && mkdir -p /opt/fossil && chown fossil:fossil /opt/fossil
2115
2216
### Build is done, remove modules no longer needed
23
-RUN yum remove -y gcc make zlib-devel openssl-devel tcl-devel && yum clean all
17
+RUN yum remove -y gcc make zlib-devel openssl-devel tcl-devel tar && yum clean all
2418
2519
USER fossil
2620
2721
ENV HOME /opt/fossil
2822
29
-RUN fossil new --docker -A admin /opt/fossil/repository.fossil
30
-RUN fossil user password -R /opt/fossil/repository.fossil admin admin
31
-RUN fossil cache init -R /opt/fossil/repository.fossil
23
+RUN fossil new --docker -A admin /opt/fossil/repository.fossil && fossil user password -R /opt/fossil/repository.fossil admin admin && fossil cache init -R /opt/fossil/repository.fossil
3224
3325
EXPOSE 8080
3426
3527
CMD ["/usr/bin/fossil", "server", "/opt/fossil/repository.fossil"]
36
-
3728
--- Dockerfile
+++ Dockerfile
@@ -2,35 +2,26 @@
2 # Dockerfile for Fossil
3 ###
4 FROM fedora:21
5
6 ### Now install some additional parts we will need for the build
7 # RUN yum update -y && yum clean all
8 RUN yum install -y gcc make zlib-devel openssl-devel tcl-devel && yum clean all
9 RUN groupadd -r fossil -g 433 && useradd -u 431 -r -g fossil -d /opt/fossil -s /sbin/nologin -c "Fossil user" fossil
10
11 ### If you want to build "release", change the next line accordingly.
12 ENV FOSSIL_INSTALL_VERSION trunk
13
14 RUN curl "http://www.fossil-scm.org/index.html/tarball/fossil-src.tar.gz?name=fossil-src&uuid=${FOSSIL_INSTALL_VERSION}" | tar zx
15 RUN cd fossil-src && ./configure --lineedit=0 --json --with-tcl --with-tcl-stubs --with-tcl-private-stubs && make;
16 RUN cp fossil-src/fossil /usr/bin
17 RUN rm -rf fossil-src
18 RUN chmod a+rx /usr/bin/fossil
19 RUN mkdir -p /opt/fossil
20 RUN chown fossil:fossil /opt/fossil
21
22 ### Build is done, remove modules no longer needed
23 RUN yum remove -y gcc make zlib-devel openssl-devel tcl-devel && yum clean all
24
25 USER fossil
26
27 ENV HOME /opt/fossil
28
29 RUN fossil new --docker -A admin /opt/fossil/repository.fossil
30 RUN fossil user password -R /opt/fossil/repository.fossil admin admin
31 RUN fossil cache init -R /opt/fossil/repository.fossil
32
33 EXPOSE 8080
34
35 CMD ["/usr/bin/fossil", "server", "/opt/fossil/repository.fossil"]
36
37
--- Dockerfile
+++ Dockerfile
@@ -2,35 +2,26 @@
2 # Dockerfile for Fossil
3 ###
4 FROM fedora:21
5
6 ### Now install some additional parts we will need for the build
7 RUN yum update -y && yum install -y gcc make zlib-devel openssl-devel tcl-devel tar && yum clean all && groupadd -r fossil -g 433 && useradd -u 431 -r -g fossil -d /opt/fossil -s /sbin/nologin -c "Fossil user" fossil
 
 
8
9 ### If you want to build "trunk", change the next line accordingly.
10 ENV FOSSIL_INSTALL_VERSION release
11
12 RUN curl "http://www.fossil-scm.org/index.html/tarball/fossil-src.tar.gz?name=fossil-src&uuid=${FOSSIL_INSTALL_VERSION}" | tar zx
13 RUN cd fossil-src && ./configure --disable-lineedit --disable-fusefs --json --with-th1-docs --with-th1-hooks --with-tcl --with-tcl-stubs --with-tcl-private-stubs && make;
14 RUN cp fossil-src/fossil /usr/bin && rm -rf fossil-src && chmod a+rx /usr/bin/fossil && mkdir -p /opt/fossil && chown fossil:fossil /opt/fossil
 
 
 
 
15
16 ### Build is done, remove modules no longer needed
17 RUN yum remove -y gcc make zlib-devel openssl-devel tcl-devel tar && yum clean all
18
19 USER fossil
20
21 ENV HOME /opt/fossil
22
23 RUN fossil new --docker -A admin /opt/fossil/repository.fossil && fossil user password -R /opt/fossil/repository.fossil admin admin && fossil cache init -R /opt/fossil/repository.fossil
 
 
24
25 EXPOSE 8080
26
27 CMD ["/usr/bin/fossil", "server", "/opt/fossil/repository.fossil"]
 
28
+26 -13
--- src/db.c
+++ src/db.c
@@ -757,10 +757,18 @@
757757
if( rc==0 ){
758758
sqlite3_result_int64(context, mtime);
759759
}
760760
}
761761
762
+/*
763
+** SQL wrapper around the symbolic_name_to_rid() C-language API.
764
+** Examples:
765
+**
766
+** symbolic_name_to_rid('trunk');
767
+** symbolic_name_to_rid('trunk','w');
768
+**
769
+*/
762770
void db_sym2rid_function(
763771
sqlite3_context *context,
764772
int argc,
765773
sqlite3_value **argv
766774
){
@@ -786,10 +794,23 @@
786794
sqlite3_result_int64(context, rid);
787795
}
788796
}
789797
}
790798
799
+/*
800
+** Register the SQL functions that are useful both to the internal
801
+** representation and to the "fossil sql" command.
802
+*/
803
+void db_add_aux_functions(sqlite3 *db){
804
+ sqlite3_create_function(db, "checkin_mtime", 2, SQLITE_UTF8, 0,
805
+ db_checkin_mtime_function, 0, 0);
806
+ sqlite3_create_function(db, "symbolic_name_to_rid", 1, SQLITE_UTF8, 0,
807
+ db_sym2rid_function, 0, 0);
808
+ sqlite3_create_function(db, "symbolic_name_to_rid", 2, SQLITE_UTF8, 0,
809
+ db_sym2rid_function, 0, 0);
810
+}
811
+
791812
792813
/*
793814
** Open a database file. Return a pointer to the new database
794815
** connection. An error results in process abort.
795816
*/
@@ -806,13 +827,12 @@
806827
if( rc!=SQLITE_OK ){
807828
db_err("[%s]: %s", zDbName, sqlite3_errmsg(db));
808829
}
809830
sqlite3_busy_timeout(db, 5000);
810831
sqlite3_wal_autocheckpoint(db, 1); /* Set to checkpoint frequently */
811
- sqlite3_create_function(db, "now", 0, SQLITE_UTF8, 0, db_now_function, 0, 0);
812
- sqlite3_create_function(db, "checkin_mtime", 2, SQLITE_UTF8, 0,
813
- db_checkin_mtime_function, 0, 0);
832
+ sqlite3_create_function(db, "now", 0, SQLITE_UTF8, 0,
833
+ db_now_function, 0, 0);
814834
sqlite3_create_function(db, "user", 0, SQLITE_UTF8, 0, db_sql_user, 0, 0);
815835
sqlite3_create_function(db, "cgi", 1, SQLITE_UTF8, 0, db_sql_cgi, 0, 0);
816836
sqlite3_create_function(db, "cgi", 2, SQLITE_UTF8, 0, db_sql_cgi, 0, 0);
817837
sqlite3_create_function(db, "print", -1, SQLITE_UTF8, 0,db_sql_print,0,0);
818838
sqlite3_create_function(
@@ -819,21 +839,14 @@
819839
db, "is_selected", 1, SQLITE_UTF8, 0, file_is_selected,0,0
820840
);
821841
sqlite3_create_function(
822842
db, "if_selected", 3, SQLITE_UTF8, 0, file_is_selected,0,0
823843
);
824
- sqlite3_create_function(
825
- db, "symbolic_name_to_rid", 1, SQLITE_UTF8, 0, db_sym2rid_function,
826
- 0, 0
827
- );
828
- sqlite3_create_function(
829
- db, "symbolic_name_to_rid", 2, SQLITE_UTF8, 0, db_sym2rid_function,
830
- 0, 0
831
- );
832844
if( g.fSqlTrace ) sqlite3_trace(db, db_sql_trace, 0);
833
- re_add_sql_func(db);
834
- foci_register(db);
845
+ db_add_aux_functions(db);
846
+ re_add_sql_func(db); /* The REGEXP operator */
847
+ foci_register(db); /* The "files_of_checkin" virtual table */
835848
sqlite3_exec(db, "PRAGMA foreign_keys=OFF;", 0, 0, 0);
836849
return db;
837850
}
838851
839852
840853
--- src/db.c
+++ src/db.c
@@ -757,10 +757,18 @@
757 if( rc==0 ){
758 sqlite3_result_int64(context, mtime);
759 }
760 }
761
 
 
 
 
 
 
 
 
762 void db_sym2rid_function(
763 sqlite3_context *context,
764 int argc,
765 sqlite3_value **argv
766 ){
@@ -786,10 +794,23 @@
786 sqlite3_result_int64(context, rid);
787 }
788 }
789 }
790
 
 
 
 
 
 
 
 
 
 
 
 
 
791
792 /*
793 ** Open a database file. Return a pointer to the new database
794 ** connection. An error results in process abort.
795 */
@@ -806,13 +827,12 @@
806 if( rc!=SQLITE_OK ){
807 db_err("[%s]: %s", zDbName, sqlite3_errmsg(db));
808 }
809 sqlite3_busy_timeout(db, 5000);
810 sqlite3_wal_autocheckpoint(db, 1); /* Set to checkpoint frequently */
811 sqlite3_create_function(db, "now", 0, SQLITE_UTF8, 0, db_now_function, 0, 0);
812 sqlite3_create_function(db, "checkin_mtime", 2, SQLITE_UTF8, 0,
813 db_checkin_mtime_function, 0, 0);
814 sqlite3_create_function(db, "user", 0, SQLITE_UTF8, 0, db_sql_user, 0, 0);
815 sqlite3_create_function(db, "cgi", 1, SQLITE_UTF8, 0, db_sql_cgi, 0, 0);
816 sqlite3_create_function(db, "cgi", 2, SQLITE_UTF8, 0, db_sql_cgi, 0, 0);
817 sqlite3_create_function(db, "print", -1, SQLITE_UTF8, 0,db_sql_print,0,0);
818 sqlite3_create_function(
@@ -819,21 +839,14 @@
819 db, "is_selected", 1, SQLITE_UTF8, 0, file_is_selected,0,0
820 );
821 sqlite3_create_function(
822 db, "if_selected", 3, SQLITE_UTF8, 0, file_is_selected,0,0
823 );
824 sqlite3_create_function(
825 db, "symbolic_name_to_rid", 1, SQLITE_UTF8, 0, db_sym2rid_function,
826 0, 0
827 );
828 sqlite3_create_function(
829 db, "symbolic_name_to_rid", 2, SQLITE_UTF8, 0, db_sym2rid_function,
830 0, 0
831 );
832 if( g.fSqlTrace ) sqlite3_trace(db, db_sql_trace, 0);
833 re_add_sql_func(db);
834 foci_register(db);
 
835 sqlite3_exec(db, "PRAGMA foreign_keys=OFF;", 0, 0, 0);
836 return db;
837 }
838
839
840
--- src/db.c
+++ src/db.c
@@ -757,10 +757,18 @@
757 if( rc==0 ){
758 sqlite3_result_int64(context, mtime);
759 }
760 }
761
762 /*
763 ** SQL wrapper around the symbolic_name_to_rid() C-language API.
764 ** Examples:
765 **
766 ** symbolic_name_to_rid('trunk');
767 ** symbolic_name_to_rid('trunk','w');
768 **
769 */
770 void db_sym2rid_function(
771 sqlite3_context *context,
772 int argc,
773 sqlite3_value **argv
774 ){
@@ -786,10 +794,23 @@
794 sqlite3_result_int64(context, rid);
795 }
796 }
797 }
798
799 /*
800 ** Register the SQL functions that are useful both to the internal
801 ** representation and to the "fossil sql" command.
802 */
803 void db_add_aux_functions(sqlite3 *db){
804 sqlite3_create_function(db, "checkin_mtime", 2, SQLITE_UTF8, 0,
805 db_checkin_mtime_function, 0, 0);
806 sqlite3_create_function(db, "symbolic_name_to_rid", 1, SQLITE_UTF8, 0,
807 db_sym2rid_function, 0, 0);
808 sqlite3_create_function(db, "symbolic_name_to_rid", 2, SQLITE_UTF8, 0,
809 db_sym2rid_function, 0, 0);
810 }
811
812
813 /*
814 ** Open a database file. Return a pointer to the new database
815 ** connection. An error results in process abort.
816 */
@@ -806,13 +827,12 @@
827 if( rc!=SQLITE_OK ){
828 db_err("[%s]: %s", zDbName, sqlite3_errmsg(db));
829 }
830 sqlite3_busy_timeout(db, 5000);
831 sqlite3_wal_autocheckpoint(db, 1); /* Set to checkpoint frequently */
832 sqlite3_create_function(db, "now", 0, SQLITE_UTF8, 0,
833 db_now_function, 0, 0);
 
834 sqlite3_create_function(db, "user", 0, SQLITE_UTF8, 0, db_sql_user, 0, 0);
835 sqlite3_create_function(db, "cgi", 1, SQLITE_UTF8, 0, db_sql_cgi, 0, 0);
836 sqlite3_create_function(db, "cgi", 2, SQLITE_UTF8, 0, db_sql_cgi, 0, 0);
837 sqlite3_create_function(db, "print", -1, SQLITE_UTF8, 0,db_sql_print,0,0);
838 sqlite3_create_function(
@@ -819,21 +839,14 @@
839 db, "is_selected", 1, SQLITE_UTF8, 0, file_is_selected,0,0
840 );
841 sqlite3_create_function(
842 db, "if_selected", 3, SQLITE_UTF8, 0, file_is_selected,0,0
843 );
 
 
 
 
 
 
 
 
844 if( g.fSqlTrace ) sqlite3_trace(db, db_sql_trace, 0);
845 db_add_aux_functions(db);
846 re_add_sql_func(db); /* The REGEXP operator */
847 foci_register(db); /* The "files_of_checkin" virtual table */
848 sqlite3_exec(db, "PRAGMA foreign_keys=OFF;", 0, 0, 0);
849 return db;
850 }
851
852
853
+20
--- src/foci.c
+++ src/foci.c
@@ -17,10 +17,30 @@
1717
**
1818
** This routine implements an SQLite virtual table that gives all of the
1919
** files associated with a single checkin.
2020
**
2121
** The filename "foci" is short for "Files Of CheckIn".
22
+**
23
+** Usage example:
24
+**
25
+** CREATE VIRTUAL TABLE temp.foci USING files_of_checkin;
26
+** -- ^^^^--- important!
27
+** SELECT * FROM foci WHERE checkinID=symbolic_name_to_rid('trunk');
28
+**
29
+** The symbolic_name_to_rid('trunk') function finds the BLOB.RID value
30
+** corresponding to the 'trunk' tag. Then the files_of_checkin virtual table
31
+** decodes the manifest defined by that BLOB and returns all files described
32
+** by that manifest. The "schema" for the temp.foci table is:
33
+**
34
+** CREATE TABLE files_of_checkin(
35
+** checkinID INTEGER, -- RID for the checkin manifest
36
+** filename TEXT, -- Name of a file
37
+** uuid TEXT, -- SHA1 hash of the file
38
+** previousName TEXT, -- Name of the file in previous checkin
39
+** perm TEXT -- Permissions on the file
40
+** );
41
+**
2242
*/
2343
#include "config.h"
2444
#include "foci.h"
2545
#include <assert.h>
2646
2747
--- src/foci.c
+++ src/foci.c
@@ -17,10 +17,30 @@
17 **
18 ** This routine implements an SQLite virtual table that gives all of the
19 ** files associated with a single checkin.
20 **
21 ** The filename "foci" is short for "Files Of CheckIn".
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22 */
23 #include "config.h"
24 #include "foci.h"
25 #include <assert.h>
26
27
--- src/foci.c
+++ src/foci.c
@@ -17,10 +17,30 @@
17 **
18 ** This routine implements an SQLite virtual table that gives all of the
19 ** files associated with a single checkin.
20 **
21 ** The filename "foci" is short for "Files Of CheckIn".
22 **
23 ** Usage example:
24 **
25 ** CREATE VIRTUAL TABLE temp.foci USING files_of_checkin;
26 ** -- ^^^^--- important!
27 ** SELECT * FROM foci WHERE checkinID=symbolic_name_to_rid('trunk');
28 **
29 ** The symbolic_name_to_rid('trunk') function finds the BLOB.RID value
30 ** corresponding to the 'trunk' tag. Then the files_of_checkin virtual table
31 ** decodes the manifest defined by that BLOB and returns all files described
32 ** by that manifest. The "schema" for the temp.foci table is:
33 **
34 ** CREATE TABLE files_of_checkin(
35 ** checkinID INTEGER, -- RID for the checkin manifest
36 ** filename TEXT, -- Name of a file
37 ** uuid TEXT, -- SHA1 hash of the file
38 ** previousName TEXT, -- Name of the file in previous checkin
39 ** perm TEXT -- Permissions on the file
40 ** );
41 **
42 */
43 #include "config.h"
44 #include "foci.h"
45 #include <assert.h>
46
47
+1 -1
--- src/publish.c
+++ src/publish.c
@@ -58,11 +58,11 @@
5858
**
5959
** Cause artifacts identified by TAGS... to be published (made non-private).
6060
** This can be used (for example) to convert a private branch into a public
6161
** branch, or to publish a bundle that was imported privately.
6262
**
63
-** If any of TAGS names a branch, then all checkins on that most recent
63
+** If any of TAGS names a branch, then all checkins on the most recent
6464
** instance of that branch are included, not just the most recent checkin.
6565
**
6666
** If any of TAGS name checkins then all files and tags associated with
6767
** those checkins are also published automatically. Except if the --only
6868
** option is used, then only the specific artifacts identified by TAGS
6969
--- src/publish.c
+++ src/publish.c
@@ -58,11 +58,11 @@
58 **
59 ** Cause artifacts identified by TAGS... to be published (made non-private).
60 ** This can be used (for example) to convert a private branch into a public
61 ** branch, or to publish a bundle that was imported privately.
62 **
63 ** If any of TAGS names a branch, then all checkins on that most recent
64 ** instance of that branch are included, not just the most recent checkin.
65 **
66 ** If any of TAGS name checkins then all files and tags associated with
67 ** those checkins are also published automatically. Except if the --only
68 ** option is used, then only the specific artifacts identified by TAGS
69
--- src/publish.c
+++ src/publish.c
@@ -58,11 +58,11 @@
58 **
59 ** Cause artifacts identified by TAGS... to be published (made non-private).
60 ** This can be used (for example) to convert a private branch into a public
61 ** branch, or to publish a bundle that was imported privately.
62 **
63 ** If any of TAGS names a branch, then all checkins on the most recent
64 ** instance of that branch are included, not just the most recent checkin.
65 **
66 ** If any of TAGS name checkins then all files and tags associated with
67 ** those checkins are also published automatically. Except if the --only
68 ** option is used, then only the specific artifacts identified by TAGS
69
+11
--- src/shell.c
+++ src/shell.c
@@ -1470,10 +1470,21 @@
14701470
}
14711471
}
14721472
sqlite3_finalize(pExplain);
14731473
sqlite3_free(zEQP);
14741474
}
1475
+
1476
+#if USE_SYSTEM_SQLITE+0==1
1477
+ /* Output TESTCTRL_EXPLAIN text of requested */
1478
+ if( pArg && pArg->mode==MODE_Explain && sqlite3_libversion_number()<3008007 ){
1479
+ const char *zExplain = 0;
1480
+ sqlite3_test_control(SQLITE_TESTCTRL_EXPLAIN_STMT, pStmt, &zExplain);
1481
+ if( zExplain && zExplain[0] ){
1482
+ fprintf(pArg->out, "%s", zExplain);
1483
+ }
1484
+ }
1485
+#endif
14751486
14761487
/* If the shell is currently in ".explain" mode, gather the extra
14771488
** data required to add indents to the output.*/
14781489
if( pArg && pArg->mode==MODE_Explain ){
14791490
explain_data_prepare(pArg, pStmt);
14801491
--- src/shell.c
+++ src/shell.c
@@ -1470,10 +1470,21 @@
1470 }
1471 }
1472 sqlite3_finalize(pExplain);
1473 sqlite3_free(zEQP);
1474 }
 
 
 
 
 
 
 
 
 
 
 
1475
1476 /* If the shell is currently in ".explain" mode, gather the extra
1477 ** data required to add indents to the output.*/
1478 if( pArg && pArg->mode==MODE_Explain ){
1479 explain_data_prepare(pArg, pStmt);
1480
--- src/shell.c
+++ src/shell.c
@@ -1470,10 +1470,21 @@
1470 }
1471 }
1472 sqlite3_finalize(pExplain);
1473 sqlite3_free(zEQP);
1474 }
1475
1476 #if USE_SYSTEM_SQLITE+0==1
1477 /* Output TESTCTRL_EXPLAIN text of requested */
1478 if( pArg && pArg->mode==MODE_Explain && sqlite3_libversion_number()<3008007 ){
1479 const char *zExplain = 0;
1480 sqlite3_test_control(SQLITE_TESTCTRL_EXPLAIN_STMT, pStmt, &zExplain);
1481 if( zExplain && zExplain[0] ){
1482 fprintf(pArg->out, "%s", zExplain);
1483 }
1484 }
1485 #endif
1486
1487 /* If the shell is currently in ".explain" mode, gather the extra
1488 ** data required to add indents to the output.*/
1489 if( pArg && pArg->mode==MODE_Explain ){
1490 explain_data_prepare(pArg, pStmt);
1491
+30 -1
--- src/sqlcmd.c
+++ src/sqlcmd.c
@@ -132,10 +132,11 @@
132132
sqlite3 *db,
133133
const char **pzErrMsg,
134134
const void *notUsed
135135
){
136136
add_content_sql_commands(db);
137
+ db_add_aux_functions(db);
137138
re_add_sql_func(db);
138139
g.zMainDbType = "repository";
139140
foci_register(db);
140141
g.repositoryOpen = 1;
141142
g.db = db;
@@ -147,15 +148,43 @@
147148
**
148149
** Usage: %fossil sqlite3 ?DATABASE? ?OPTIONS?
149150
**
150151
** Run the standalone sqlite3 command-line shell on DATABASE with OPTIONS.
151152
** If DATABASE is omitted, then the repository that serves the working
152
-** directory is opened.
153
+** directory is opened. See https://www.sqlite.org/cli.html for additional
154
+** information.
153155
**
154156
** WARNING: Careless use of this command can corrupt a Fossil repository
155157
** in ways that are unrecoverable. Be sure you know what you are doing before
156158
** running any SQL commands that modifies the repository database.
159
+**
160
+** The following extensions to the usual SQLite commands are provided:
161
+**
162
+** content(X) Return the contenxt of artifact X. X can be a
163
+** SHA1 hash or prefix or a tag.
164
+**
165
+** compress(X) Compress text X.
166
+**
167
+** decompress(X) Decompress text X. Undoes the work of
168
+** compress(X).
169
+**
170
+** checkin_mtime(X,Y) Return the mtime for the file Y (a BLOB.RID)
171
+** found in check-in X (another BLOB.RID value).
172
+**
173
+** symbolic_name_to_rid(X) Return a the BLOB.RID corresponding to symbolic
174
+** name X.
175
+**
176
+** REGEXP The REGEXP operator works, unlike in
177
+** standard SQLite.
178
+**
179
+** files_of_checkin The "files_of_check" virtual table is
180
+** available for decoding manifests.
181
+**
182
+** Usage example for files_of_checkin:
183
+**
184
+** CREATE VIRTUAL TABLE temp.foci USING files_of_checkin;
185
+** SELECT * FROM foci WHERE checkinID=symbolic_name_to_rid('trunk');
157186
*/
158187
void cmd_sqlite3(void){
159188
extern int sqlite3_shell(int, char**);
160189
db_find_and_open_repository(OPEN_ANY_SCHEMA, 0);
161190
db_close(1);
162191
--- src/sqlcmd.c
+++ src/sqlcmd.c
@@ -132,10 +132,11 @@
132 sqlite3 *db,
133 const char **pzErrMsg,
134 const void *notUsed
135 ){
136 add_content_sql_commands(db);
 
137 re_add_sql_func(db);
138 g.zMainDbType = "repository";
139 foci_register(db);
140 g.repositoryOpen = 1;
141 g.db = db;
@@ -147,15 +148,43 @@
147 **
148 ** Usage: %fossil sqlite3 ?DATABASE? ?OPTIONS?
149 **
150 ** Run the standalone sqlite3 command-line shell on DATABASE with OPTIONS.
151 ** If DATABASE is omitted, then the repository that serves the working
152 ** directory is opened.
 
153 **
154 ** WARNING: Careless use of this command can corrupt a Fossil repository
155 ** in ways that are unrecoverable. Be sure you know what you are doing before
156 ** running any SQL commands that modifies the repository database.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
157 */
158 void cmd_sqlite3(void){
159 extern int sqlite3_shell(int, char**);
160 db_find_and_open_repository(OPEN_ANY_SCHEMA, 0);
161 db_close(1);
162
--- src/sqlcmd.c
+++ src/sqlcmd.c
@@ -132,10 +132,11 @@
132 sqlite3 *db,
133 const char **pzErrMsg,
134 const void *notUsed
135 ){
136 add_content_sql_commands(db);
137 db_add_aux_functions(db);
138 re_add_sql_func(db);
139 g.zMainDbType = "repository";
140 foci_register(db);
141 g.repositoryOpen = 1;
142 g.db = db;
@@ -147,15 +148,43 @@
148 **
149 ** Usage: %fossil sqlite3 ?DATABASE? ?OPTIONS?
150 **
151 ** Run the standalone sqlite3 command-line shell on DATABASE with OPTIONS.
152 ** If DATABASE is omitted, then the repository that serves the working
153 ** directory is opened. See https://www.sqlite.org/cli.html for additional
154 ** information.
155 **
156 ** WARNING: Careless use of this command can corrupt a Fossil repository
157 ** in ways that are unrecoverable. Be sure you know what you are doing before
158 ** running any SQL commands that modifies the repository database.
159 **
160 ** The following extensions to the usual SQLite commands are provided:
161 **
162 ** content(X) Return the contenxt of artifact X. X can be a
163 ** SHA1 hash or prefix or a tag.
164 **
165 ** compress(X) Compress text X.
166 **
167 ** decompress(X) Decompress text X. Undoes the work of
168 ** compress(X).
169 **
170 ** checkin_mtime(X,Y) Return the mtime for the file Y (a BLOB.RID)
171 ** found in check-in X (another BLOB.RID value).
172 **
173 ** symbolic_name_to_rid(X) Return a the BLOB.RID corresponding to symbolic
174 ** name X.
175 **
176 ** REGEXP The REGEXP operator works, unlike in
177 ** standard SQLite.
178 **
179 ** files_of_checkin The "files_of_check" virtual table is
180 ** available for decoding manifests.
181 **
182 ** Usage example for files_of_checkin:
183 **
184 ** CREATE VIRTUAL TABLE temp.foci USING files_of_checkin;
185 ** SELECT * FROM foci WHERE checkinID=symbolic_name_to_rid('trunk');
186 */
187 void cmd_sqlite3(void){
188 extern int sqlite3_shell(int, char**);
189 db_find_and_open_repository(OPEN_ANY_SCHEMA, 0);
190 db_close(1);
191
+6 -8
--- src/sqlite3.c
+++ src/sqlite3.c
@@ -278,11 +278,11 @@
278278
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
279279
** [sqlite_version()] and [sqlite_source_id()].
280280
*/
281281
#define SQLITE_VERSION "3.8.8"
282282
#define SQLITE_VERSION_NUMBER 3008008
283
-#define SQLITE_SOURCE_ID "2015-01-12 21:43:00 e693e11d1b9265974c32bddba873ea30a4d0b708"
283
+#define SQLITE_SOURCE_ID "2015-01-16 12:08:06 7d68a42face3ab14ed88407d4331872f5b243fdf"
284284
285285
/*
286286
** CAPI3REF: Run-Time Library Version Numbers
287287
** KEYWORDS: sqlite3_version, sqlite3_sourceid
288288
**
@@ -149454,17 +149454,16 @@
149454149454
*/
149455149455
static int readInt16(u8 *p){
149456149456
return (p[0]<<8) + p[1];
149457149457
}
149458149458
static void readCoord(u8 *p, RtreeCoord *pCoord){
149459
- u32 i = (
149459
+ pCoord->u = (
149460149460
(((u32)p[0]) << 24) +
149461149461
(((u32)p[1]) << 16) +
149462149462
(((u32)p[2]) << 8) +
149463149463
(((u32)p[3]) << 0)
149464149464
);
149465
- *(u32 *)pCoord = i;
149466149465
}
149467149466
static i64 readInt64(u8 *p){
149468149467
return (
149469149468
(((i64)p[0]) << 56) +
149470149469
(((i64)p[1]) << 48) +
@@ -149489,11 +149488,11 @@
149489149488
}
149490149489
static int writeCoord(u8 *p, RtreeCoord *pCoord){
149491149490
u32 i;
149492149491
assert( sizeof(RtreeCoord)==4 );
149493149492
assert( sizeof(u32)==4 );
149494
- i = *(u32 *)pCoord;
149493
+ i = pCoord->u;
149495149494
p[0] = (i>>24)&0xFF;
149496149495
p[1] = (i>>16)&0xFF;
149497149496
p[2] = (i>> 8)&0xFF;
149498149497
p[3] = (i>> 0)&0xFF;
149499149498
return 4;
@@ -149820,18 +149819,17 @@
149820149819
RtreeNode *pNode, /* The node containing the cell to be read */
149821149820
int iCell, /* Index of the cell within the node */
149822149821
RtreeCell *pCell /* OUT: Write the cell contents here */
149823149822
){
149824149823
u8 *pData;
149825
- u8 *pEnd;
149826149824
RtreeCoord *pCoord;
149825
+ int ii;
149827149826
pCell->iRowid = nodeGetRowid(pRtree, pNode, iCell);
149828149827
pData = pNode->zData + (12 + pRtree->nBytesPerCell*iCell);
149829
- pEnd = pData + pRtree->nDim*8;
149830149828
pCoord = pCell->aCoord;
149831
- for(; pData<pEnd; pData+=4, pCoord++){
149832
- readCoord(pData, pCoord);
149829
+ for(ii=0; ii<pRtree->nDim*2; ii++){
149830
+ readCoord(&pData[ii*4], &pCoord[ii]);
149833149831
}
149834149832
}
149835149833
149836149834
149837149835
/* Forward declaration for the function that does the work of
149838149836
--- src/sqlite3.c
+++ src/sqlite3.c
@@ -278,11 +278,11 @@
278 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
279 ** [sqlite_version()] and [sqlite_source_id()].
280 */
281 #define SQLITE_VERSION "3.8.8"
282 #define SQLITE_VERSION_NUMBER 3008008
283 #define SQLITE_SOURCE_ID "2015-01-12 21:43:00 e693e11d1b9265974c32bddba873ea30a4d0b708"
284
285 /*
286 ** CAPI3REF: Run-Time Library Version Numbers
287 ** KEYWORDS: sqlite3_version, sqlite3_sourceid
288 **
@@ -149454,17 +149454,16 @@
149454 */
149455 static int readInt16(u8 *p){
149456 return (p[0]<<8) + p[1];
149457 }
149458 static void readCoord(u8 *p, RtreeCoord *pCoord){
149459 u32 i = (
149460 (((u32)p[0]) << 24) +
149461 (((u32)p[1]) << 16) +
149462 (((u32)p[2]) << 8) +
149463 (((u32)p[3]) << 0)
149464 );
149465 *(u32 *)pCoord = i;
149466 }
149467 static i64 readInt64(u8 *p){
149468 return (
149469 (((i64)p[0]) << 56) +
149470 (((i64)p[1]) << 48) +
@@ -149489,11 +149488,11 @@
149489 }
149490 static int writeCoord(u8 *p, RtreeCoord *pCoord){
149491 u32 i;
149492 assert( sizeof(RtreeCoord)==4 );
149493 assert( sizeof(u32)==4 );
149494 i = *(u32 *)pCoord;
149495 p[0] = (i>>24)&0xFF;
149496 p[1] = (i>>16)&0xFF;
149497 p[2] = (i>> 8)&0xFF;
149498 p[3] = (i>> 0)&0xFF;
149499 return 4;
@@ -149820,18 +149819,17 @@
149820 RtreeNode *pNode, /* The node containing the cell to be read */
149821 int iCell, /* Index of the cell within the node */
149822 RtreeCell *pCell /* OUT: Write the cell contents here */
149823 ){
149824 u8 *pData;
149825 u8 *pEnd;
149826 RtreeCoord *pCoord;
 
149827 pCell->iRowid = nodeGetRowid(pRtree, pNode, iCell);
149828 pData = pNode->zData + (12 + pRtree->nBytesPerCell*iCell);
149829 pEnd = pData + pRtree->nDim*8;
149830 pCoord = pCell->aCoord;
149831 for(; pData<pEnd; pData+=4, pCoord++){
149832 readCoord(pData, pCoord);
149833 }
149834 }
149835
149836
149837 /* Forward declaration for the function that does the work of
149838
--- src/sqlite3.c
+++ src/sqlite3.c
@@ -278,11 +278,11 @@
278 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
279 ** [sqlite_version()] and [sqlite_source_id()].
280 */
281 #define SQLITE_VERSION "3.8.8"
282 #define SQLITE_VERSION_NUMBER 3008008
283 #define SQLITE_SOURCE_ID "2015-01-16 12:08:06 7d68a42face3ab14ed88407d4331872f5b243fdf"
284
285 /*
286 ** CAPI3REF: Run-Time Library Version Numbers
287 ** KEYWORDS: sqlite3_version, sqlite3_sourceid
288 **
@@ -149454,17 +149454,16 @@
149454 */
149455 static int readInt16(u8 *p){
149456 return (p[0]<<8) + p[1];
149457 }
149458 static void readCoord(u8 *p, RtreeCoord *pCoord){
149459 pCoord->u = (
149460 (((u32)p[0]) << 24) +
149461 (((u32)p[1]) << 16) +
149462 (((u32)p[2]) << 8) +
149463 (((u32)p[3]) << 0)
149464 );
 
149465 }
149466 static i64 readInt64(u8 *p){
149467 return (
149468 (((i64)p[0]) << 56) +
149469 (((i64)p[1]) << 48) +
@@ -149489,11 +149488,11 @@
149488 }
149489 static int writeCoord(u8 *p, RtreeCoord *pCoord){
149490 u32 i;
149491 assert( sizeof(RtreeCoord)==4 );
149492 assert( sizeof(u32)==4 );
149493 i = pCoord->u;
149494 p[0] = (i>>24)&0xFF;
149495 p[1] = (i>>16)&0xFF;
149496 p[2] = (i>> 8)&0xFF;
149497 p[3] = (i>> 0)&0xFF;
149498 return 4;
@@ -149820,18 +149819,17 @@
149819 RtreeNode *pNode, /* The node containing the cell to be read */
149820 int iCell, /* Index of the cell within the node */
149821 RtreeCell *pCell /* OUT: Write the cell contents here */
149822 ){
149823 u8 *pData;
 
149824 RtreeCoord *pCoord;
149825 int ii;
149826 pCell->iRowid = nodeGetRowid(pRtree, pNode, iCell);
149827 pData = pNode->zData + (12 + pRtree->nBytesPerCell*iCell);
 
149828 pCoord = pCell->aCoord;
149829 for(ii=0; ii<pRtree->nDim*2; ii++){
149830 readCoord(&pData[ii*4], &pCoord[ii]);
149831 }
149832 }
149833
149834
149835 /* Forward declaration for the function that does the work of
149836
+1 -1
--- src/sqlite3.h
+++ src/sqlite3.h
@@ -107,11 +107,11 @@
107107
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
108108
** [sqlite_version()] and [sqlite_source_id()].
109109
*/
110110
#define SQLITE_VERSION "3.8.8"
111111
#define SQLITE_VERSION_NUMBER 3008008
112
-#define SQLITE_SOURCE_ID "2015-01-12 21:43:00 e693e11d1b9265974c32bddba873ea30a4d0b708"
112
+#define SQLITE_SOURCE_ID "2015-01-16 12:08:06 7d68a42face3ab14ed88407d4331872f5b243fdf"
113113
114114
/*
115115
** CAPI3REF: Run-Time Library Version Numbers
116116
** KEYWORDS: sqlite3_version, sqlite3_sourceid
117117
**
118118
--- src/sqlite3.h
+++ src/sqlite3.h
@@ -107,11 +107,11 @@
107 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
108 ** [sqlite_version()] and [sqlite_source_id()].
109 */
110 #define SQLITE_VERSION "3.8.8"
111 #define SQLITE_VERSION_NUMBER 3008008
112 #define SQLITE_SOURCE_ID "2015-01-12 21:43:00 e693e11d1b9265974c32bddba873ea30a4d0b708"
113
114 /*
115 ** CAPI3REF: Run-Time Library Version Numbers
116 ** KEYWORDS: sqlite3_version, sqlite3_sourceid
117 **
118
--- src/sqlite3.h
+++ src/sqlite3.h
@@ -107,11 +107,11 @@
107 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
108 ** [sqlite_version()] and [sqlite_source_id()].
109 */
110 #define SQLITE_VERSION "3.8.8"
111 #define SQLITE_VERSION_NUMBER 3008008
112 #define SQLITE_SOURCE_ID "2015-01-16 12:08:06 7d68a42face3ab14ed88407d4331872f5b243fdf"
113
114 /*
115 ** CAPI3REF: Run-Time Library Version Numbers
116 ** KEYWORDS: sqlite3_version, sqlite3_sourceid
117 **
118
--- src/timeline.c
+++ src/timeline.c
@@ -1035,11 +1035,10 @@
10351035
** nd Suppress "divider" lines
10361036
** v Show details of files changed
10371037
** f=UUID Show family (immediate parents and children) of UUID
10381038
** from=UUID Path from...
10391039
** to=UUID ... to this
1040
-** nomerge ... avoid merge links on the path
10411040
** shortest ... show only the shortest path
10421041
** uf=FUUID Show only checkins that use given file version
10431042
** brbg Background color from branch name
10441043
** ubg Background color from user
10451044
** namechng Show only checkins that filename changes
10461045
--- src/timeline.c
+++ src/timeline.c
@@ -1035,11 +1035,10 @@
1035 ** nd Suppress "divider" lines
1036 ** v Show details of files changed
1037 ** f=UUID Show family (immediate parents and children) of UUID
1038 ** from=UUID Path from...
1039 ** to=UUID ... to this
1040 ** nomerge ... avoid merge links on the path
1041 ** shortest ... show only the shortest path
1042 ** uf=FUUID Show only checkins that use given file version
1043 ** brbg Background color from branch name
1044 ** ubg Background color from user
1045 ** namechng Show only checkins that filename changes
1046
--- src/timeline.c
+++ src/timeline.c
@@ -1035,11 +1035,10 @@
1035 ** nd Suppress "divider" lines
1036 ** v Show details of files changed
1037 ** f=UUID Show family (immediate parents and children) of UUID
1038 ** from=UUID Path from...
1039 ** to=UUID ... to this
 
1040 ** shortest ... show only the shortest path
1041 ** uf=FUUID Show only checkins that use given file version
1042 ** brbg Background color from branch name
1043 ** ubg Background color from user
1044 ** namechng Show only checkins that filename changes
1045
--- test/diff-test-1.wiki
+++ test/diff-test-1.wiki
@@ -17,11 +17,11 @@
1717
The edit of a line with multibyte characters is the first chunk.
1818
* <a href="../../../fdiff?v1=57b0d8183cab0e3d&v2=37b3ef49d73cdfe6"
1919
target="testwindow">Large diff of sqlite3.c</a>. This diff was very
2020
slow prior to the performance enhancement change [9e15437e97].
2121
* <a href="../../../info/bda00cbada#chunk49" target="testwindow">
22
- A difficult indentation change.
22
+ A difficult indentation change.</a> (show-version-diffs must be enabled)
2323
* <a href="../../../fdiff?v1=955cc67ace8fb622&v2=e2e1c87b86664b45#chunk13"
2424
target="testwindow">Another tricky indentation.</a> Notice especially
2525
lines 59398 and 59407 on the left.
2626
* <a href="../../../fdiff?v2=955cc67ace8fb622&v1=e2e1c87b86664b45#chunk13"
2727
target="testwindow">Inverse of the previous.</a>
2828
--- test/diff-test-1.wiki
+++ test/diff-test-1.wiki
@@ -17,11 +17,11 @@
17 The edit of a line with multibyte characters is the first chunk.
18 * <a href="../../../fdiff?v1=57b0d8183cab0e3d&v2=37b3ef49d73cdfe6"
19 target="testwindow">Large diff of sqlite3.c</a>. This diff was very
20 slow prior to the performance enhancement change [9e15437e97].
21 * <a href="../../../info/bda00cbada#chunk49" target="testwindow">
22 A difficult indentation change.
23 * <a href="../../../fdiff?v1=955cc67ace8fb622&v2=e2e1c87b86664b45#chunk13"
24 target="testwindow">Another tricky indentation.</a> Notice especially
25 lines 59398 and 59407 on the left.
26 * <a href="../../../fdiff?v2=955cc67ace8fb622&v1=e2e1c87b86664b45#chunk13"
27 target="testwindow">Inverse of the previous.</a>
28
--- test/diff-test-1.wiki
+++ test/diff-test-1.wiki
@@ -17,11 +17,11 @@
17 The edit of a line with multibyte characters is the first chunk.
18 * <a href="../../../fdiff?v1=57b0d8183cab0e3d&v2=37b3ef49d73cdfe6"
19 target="testwindow">Large diff of sqlite3.c</a>. This diff was very
20 slow prior to the performance enhancement change [9e15437e97].
21 * <a href="../../../info/bda00cbada#chunk49" target="testwindow">
22 A difficult indentation change.</a> (show-version-diffs must be enabled)
23 * <a href="../../../fdiff?v1=955cc67ace8fb622&v2=e2e1c87b86664b45#chunk13"
24 target="testwindow">Another tricky indentation.</a> Notice especially
25 lines 59398 and 59407 on the left.
26 * <a href="../../../fdiff?v2=955cc67ace8fb622&v1=e2e1c87b86664b45#chunk13"
27 target="testwindow">Inverse of the previous.</a>
28
--- test/graph-test-1.wiki
+++ test/graph-test-1.wiki
@@ -28,23 +28,21 @@
2828
multiple branch risers.</a>
2929
* <a href="../../../timeline?y=ci&a=2010-12-20&n=18" target="testwindow">
3030
multiple branch risers, n=18.</a>
3131
* <a href="../../../timeline?y=ci&a=2010-12-20&n=9" target="testwindow">
3232
multiple branch risers, n=9.</a>
33
- * <a href="../../../timeline?r=experimental" target="testwindow">
33
+ * <a href="../../../timeline?r=experimental&n=0" target="testwindow">
3434
Experimental branch with related check-ins.</a>
35
- * <a href="../../../timeline?r=experimental&mionly" target="testwindow">
35
+ * <a href="../../../timeline?r=experimental&mionly&n=0" target="testwindow">
3636
Experimental branch with merge-ins only.</a>
37
- * <a href="../../../timeline?t=experimental" target="testwindow">
37
+ * <a href="../../../timeline?t=experimental&n=0" target="testwindow">
3838
Experimental branch check-ins only.</a>
39
- * <a href="../../../timeline?r=experimental&n=1000" target="testwindow">
40
- Experimental branch using and related check-ins - 1000 elements.</a>
41
- * <a href="../../../timeline?r=release" target="testwindow">
39
+ * <a href="../../../timeline?r=release&n=0" target="testwindow">
4240
Check-ins tagged "release" and related check-ins</a>
43
- * <a href="../../../timeline?r=release&mionly" target="testwindow">
41
+ * <a href="../../../timeline?r=release&mionly&n=0" target="testwindow">
4442
Check-ins tagged "release" and merge-ins</a>
45
- * <a href="../../../timeline?t=release" target="testwindow">
43
+ * <a href="../../../timeline?t=release&n=0" target="testwindow">
4644
Only check-ins tagged "release"</a>
4745
* <a href="../../../finfo?name=Makefile" target="testwindow">
4846
History of source file "Makefile".</a>
4947
* <a href="../../../timeline?a=1970-01-01" target="testwindow">
5048
20 elements after 1970-01-01.</a>
@@ -51,22 +49,25 @@
5149
* <a href="../../../timeline?n=100000000&y=ci" target="testwindow">
5250
All check-ins - a huge graph.</a>
5351
* <a href="../../../timeline?f=8dfed953f7530442" target="testwindow">
5452
This malformed commit has a
5553
merge parent which is not a valid checkin.</a>
56
- * <a href="../../../timeline?from=e663bac6f7&to=a298a0e2f9"
54
+ * <a href="../../../timeline?from=e663bac6f7&to=a298a0e2f9&shortest"
5755
target="testwindow">
5856
From e663bac6f7 to a298a0e2f9 by shortest path.</a>
59
- * <a href="../../../timeline?from=e663bac6f7&to=a298a0e2f9&nomerge"
57
+ * <a href="../../../timeline?from=e663bac6f7&to=a298a0e2f9"
6058
target="testwindow">
6159
From e663bac6f7 to a298a0e2f9 without merge links.</a>
6260
* <a href="../../../timeline?me=e663bac6f7&you=a298a0e2f9"
6361
target="testwindow">
6462
Common ancestor path of e663bac6f7 to a298a0e2f9.</a>
65
- * <a href="../../../timeline?f=65dd90fb95a2af55">
63
+ * <a href="../../../timeline?f=65dd90fb95a2af55" target="testwindow">
6664
Merge on the same branch does not result in a leaf.
6765
</a>
66
+ * <a href="../../../timeline?c=20015206bc"
67
+ target="testwindow">
68
+ This timeline has a hidden commit.</a> Click Unhide to reveal.
6869
6970
External:
7071
7172
* <a href="http://www.sqlite.org/src/timeline?c=2010-09-29&nd"
7273
target="testwindow">Timewarp due to a mis-configured system clock.</a>
7374
--- test/graph-test-1.wiki
+++ test/graph-test-1.wiki
@@ -28,23 +28,21 @@
28 multiple branch risers.</a>
29 * <a href="../../../timeline?y=ci&a=2010-12-20&n=18" target="testwindow">
30 multiple branch risers, n=18.</a>
31 * <a href="../../../timeline?y=ci&a=2010-12-20&n=9" target="testwindow">
32 multiple branch risers, n=9.</a>
33 * <a href="../../../timeline?r=experimental" target="testwindow">
34 Experimental branch with related check-ins.</a>
35 * <a href="../../../timeline?r=experimental&mionly" target="testwindow">
36 Experimental branch with merge-ins only.</a>
37 * <a href="../../../timeline?t=experimental" target="testwindow">
38 Experimental branch check-ins only.</a>
39 * <a href="../../../timeline?r=experimental&n=1000" target="testwindow">
40 Experimental branch using and related check-ins - 1000 elements.</a>
41 * <a href="../../../timeline?r=release" target="testwindow">
42 Check-ins tagged "release" and related check-ins</a>
43 * <a href="../../../timeline?r=release&mionly" target="testwindow">
44 Check-ins tagged "release" and merge-ins</a>
45 * <a href="../../../timeline?t=release" target="testwindow">
46 Only check-ins tagged "release"</a>
47 * <a href="../../../finfo?name=Makefile" target="testwindow">
48 History of source file "Makefile".</a>
49 * <a href="../../../timeline?a=1970-01-01" target="testwindow">
50 20 elements after 1970-01-01.</a>
@@ -51,22 +49,25 @@
51 * <a href="../../../timeline?n=100000000&y=ci" target="testwindow">
52 All check-ins - a huge graph.</a>
53 * <a href="../../../timeline?f=8dfed953f7530442" target="testwindow">
54 This malformed commit has a
55 merge parent which is not a valid checkin.</a>
56 * <a href="../../../timeline?from=e663bac6f7&to=a298a0e2f9"
57 target="testwindow">
58 From e663bac6f7 to a298a0e2f9 by shortest path.</a>
59 * <a href="../../../timeline?from=e663bac6f7&to=a298a0e2f9&nomerge"
60 target="testwindow">
61 From e663bac6f7 to a298a0e2f9 without merge links.</a>
62 * <a href="../../../timeline?me=e663bac6f7&you=a298a0e2f9"
63 target="testwindow">
64 Common ancestor path of e663bac6f7 to a298a0e2f9.</a>
65 * <a href="../../../timeline?f=65dd90fb95a2af55">
66 Merge on the same branch does not result in a leaf.
67 </a>
 
 
 
68
69 External:
70
71 * <a href="http://www.sqlite.org/src/timeline?c=2010-09-29&nd"
72 target="testwindow">Timewarp due to a mis-configured system clock.</a>
73
--- test/graph-test-1.wiki
+++ test/graph-test-1.wiki
@@ -28,23 +28,21 @@
28 multiple branch risers.</a>
29 * <a href="../../../timeline?y=ci&a=2010-12-20&n=18" target="testwindow">
30 multiple branch risers, n=18.</a>
31 * <a href="../../../timeline?y=ci&a=2010-12-20&n=9" target="testwindow">
32 multiple branch risers, n=9.</a>
33 * <a href="../../../timeline?r=experimental&n=0" target="testwindow">
34 Experimental branch with related check-ins.</a>
35 * <a href="../../../timeline?r=experimental&mionly&n=0" target="testwindow">
36 Experimental branch with merge-ins only.</a>
37 * <a href="../../../timeline?t=experimental&n=0" target="testwindow">
38 Experimental branch check-ins only.</a>
39 * <a href="../../../timeline?r=release&n=0" target="testwindow">
 
 
40 Check-ins tagged "release" and related check-ins</a>
41 * <a href="../../../timeline?r=release&mionly&n=0" target="testwindow">
42 Check-ins tagged "release" and merge-ins</a>
43 * <a href="../../../timeline?t=release&n=0" target="testwindow">
44 Only check-ins tagged "release"</a>
45 * <a href="../../../finfo?name=Makefile" target="testwindow">
46 History of source file "Makefile".</a>
47 * <a href="../../../timeline?a=1970-01-01" target="testwindow">
48 20 elements after 1970-01-01.</a>
@@ -51,22 +49,25 @@
49 * <a href="../../../timeline?n=100000000&y=ci" target="testwindow">
50 All check-ins - a huge graph.</a>
51 * <a href="../../../timeline?f=8dfed953f7530442" target="testwindow">
52 This malformed commit has a
53 merge parent which is not a valid checkin.</a>
54 * <a href="../../../timeline?from=e663bac6f7&to=a298a0e2f9&shortest"
55 target="testwindow">
56 From e663bac6f7 to a298a0e2f9 by shortest path.</a>
57 * <a href="../../../timeline?from=e663bac6f7&to=a298a0e2f9"
58 target="testwindow">
59 From e663bac6f7 to a298a0e2f9 without merge links.</a>
60 * <a href="../../../timeline?me=e663bac6f7&you=a298a0e2f9"
61 target="testwindow">
62 Common ancestor path of e663bac6f7 to a298a0e2f9.</a>
63 * <a href="../../../timeline?f=65dd90fb95a2af55" target="testwindow">
64 Merge on the same branch does not result in a leaf.
65 </a>
66 * <a href="../../../timeline?c=20015206bc"
67 target="testwindow">
68 This timeline has a hidden commit.</a> Click Unhide to reveal.
69
70 External:
71
72 * <a href="http://www.sqlite.org/src/timeline?c=2010-09-29&nd"
73 target="testwindow">Timewarp due to a mis-configured system clock.</a>
74
+55 -13
--- www/changes.wiki
+++ www/changes.wiki
@@ -1,34 +1,76 @@
11
<title>Change Log</title>
22
3
-<h2>Changes For Version 1.30 (as yet unreleased)</h2>
4
- * Add setting to control the number of times autosync will be tried before
5
- returning an error.
3
+<h2>Changes For Version 1.30 (2015-01-19)</h2>
4
+ * Added the [/help?cmd=bundle|fossil bundle] command.
5
+ * Added the [/help?cmd=purge|fossil purge] command.
6
+ * Added the [/help?cmd=publish|fossil publish] command.
7
+ * Added the [/help?cmd=unpublished|fossil unpublished] command.
8
+ * Enhance the [/tree] webpage to show the age of each file with the option
9
+ to sort by age.
10
+ * Enhance the [/brlist] webpage to show additional information about each branch
11
+ and to be sortable by clicking on column headers.
12
+ * Add support for Docker. Just install docker and type
13
+ "sudo docker run -d -p 8080:8080 nijtmans/fossil" to get it running.
614
* Add the [/help/fusefs|fossil fusefs DIRECTORY] command that mounts a
715
Fuse Filesystem at the given DIRECTORY and populates it with read-only
816
copies of all historical check-ins. This only works on systems that
917
support FuseFS.
18
+ * Add the administrative log that records all configuration.
19
+ * Added the [/sitemap] webpage.
20
+ * Added the [/bloblist] web page.
21
+ * Let [/help?cmd=new|fossil new] no longer create an initial empty commit
22
+ by default. The first commit after checking out an empty repository will
23
+ become the initial commit.
24
+ * Added the [/help?cmd=all|fossil all dbstat] and
25
+ [/help?cmd=all|fossil all info] commands.
26
+ * Update SQLite to version 3.8.8.
27
+ * Added the --verily option to the [/help?cmd=clean|fossil clean] command.
28
+ * Add the "autosync-tries" setting to control the number of autosync attempts
29
+ before returning an error.
1030
* Added a compile-time option (--with-miniz) to build using miniz instead
1131
of zlib. Disabled by default.
12
- * Several fixes to the TH1 expression parser.
1332
* Support customization of commands and webpages, including the ability to
1433
add new ones, via the "TH1 hooks" feature. Disabled by default. Enabled
1534
via a compile-time option.
1635
* Add the <nowiki>[checkout], [render], [styleHeader], [styleFooter],
1736
[trace], [getParameter], [setParameter], [artifact], and
1837
[globalState]</nowiki> commands to TH1, primarily for use by TH1 hooks.
19
- * Bring in the latest version of autosetup from upstream.
20
- * When committing a (non-binary) file which contains bytes forming an
21
- invalid UTF-8 stream, fossil now adds the possibility to convert it
22
- to a valid UTF-8 stream ('c') if you like.
23
- * Let [/help?cmd=new|fossil new] no longer create an initial empty commit
24
- by default. The first commit after checking out an empty repository will
25
- become the initial commit. (NOT PLANNED FOR 1.30, BUT DONE TO EXPOSE
26
- [/help?cmd=new|fossil new --empty] TO MORE FIELD TESTING BEFORE
27
- MAKING ANY DECISION ON IT!)
38
+ * Automatically adjust the width of command-line timeline output according to the
39
+ detected width of the terminal.
40
+ * Prompt the user to optionally fix invalid UTF-8 at check-in.
2841
* Added a line-number toggle option to the [/help?cmd=/info|/info]
2942
and [/help?cmd=/artifact|/artifact] pages.
43
+ * Most commands now issue errors rather than silently ignoring unrecognized
44
+ command-line options.
45
+ * Use full 40-character SHA1 hashes (instead of abbreviations) in most
46
+ internal URLs.
47
+ * The "ssh:" sync method on windows now uses "plink.exe" instead of "ssh" as
48
+ the secure-shell client program.
49
+ * Prevent a partial clone when the connection is lost.
50
+ * Make the distinction between 301 and 302 redirects.
51
+ * Allow commits against a closed check-in as long as the commit goes onto
52
+ a different branch.
53
+ * Improved cache control in the web interface reduces unnecessary requests
54
+ for common resources like the page logo and CSS.
55
+ * Fix a rare and long-standing sync protocol bug
56
+ that would silently prevent the sync from running to completion. Before
57
+ this bug-fix it was sometimes necessary to do "fossil sync --verily" to
58
+ get two repositories in sync.
59
+ * Add the [/finfo?name=src/foci.c|files_of_checkin] virtual table - useful
60
+ for ad hoc queries in the [/help?cmd=sqlite3|fossil sql] interface,
61
+ and also used internally.
62
+ * Added the "$secureurl" TH1 variable for use in headers and footers.
63
+ * (Internal:) Add the ability to include resources as separate files in the
64
+ source tree that are converted into constant byte arrays in the compiled
65
+ binary. Use this feature to store the Tk script that implements the --tk
66
+ diff option in a separate file for easier editing.
67
+ * (Internal:) Implement a system of compile-time checks to help ensure
68
+ the correctness of printf-style formatting strings.
69
+ * Fix CVE-2014-3566, also known as the POODLE SSL 3.0 vulnerability.
70
+ * Numerous documentation fixes and improvements.
71
+ * Other obscure and minor bug fixes - see the timeline for details.
3072
3173
<h2>Changes For Version 1.29 (2014-06-12)</h2>
3274
* Add the ability to display content, diffs and annotations for UTF16
3375
text files in the web interface.
3476
* Add the "SaveAs..." and "Invert" buttons
3577
--- www/changes.wiki
+++ www/changes.wiki
@@ -1,34 +1,76 @@
1 <title>Change Log</title>
2
3 <h2>Changes For Version 1.30 (as yet unreleased)</h2>
4 * Add setting to control the number of times autosync will be tried before
5 returning an error.
 
 
 
 
 
 
 
 
6 * Add the [/help/fusefs|fossil fusefs DIRECTORY] command that mounts a
7 Fuse Filesystem at the given DIRECTORY and populates it with read-only
8 copies of all historical check-ins. This only works on systems that
9 support FuseFS.
 
 
 
 
 
 
 
 
 
 
 
 
10 * Added a compile-time option (--with-miniz) to build using miniz instead
11 of zlib. Disabled by default.
12 * Several fixes to the TH1 expression parser.
13 * Support customization of commands and webpages, including the ability to
14 add new ones, via the "TH1 hooks" feature. Disabled by default. Enabled
15 via a compile-time option.
16 * Add the <nowiki>[checkout], [render], [styleHeader], [styleFooter],
17 [trace], [getParameter], [setParameter], [artifact], and
18 [globalState]</nowiki> commands to TH1, primarily for use by TH1 hooks.
19 * Bring in the latest version of autosetup from upstream.
20 * When committing a (non-binary) file which contains bytes forming an
21 invalid UTF-8 stream, fossil now adds the possibility to convert it
22 to a valid UTF-8 stream ('c') if you like.
23 * Let [/help?cmd=new|fossil new] no longer create an initial empty commit
24 by default. The first commit after checking out an empty repository will
25 become the initial commit. (NOT PLANNED FOR 1.30, BUT DONE TO EXPOSE
26 [/help?cmd=new|fossil new --empty] TO MORE FIELD TESTING BEFORE
27 MAKING ANY DECISION ON IT!)
28 * Added a line-number toggle option to the [/help?cmd=/info|/info]
29 and [/help?cmd=/artifact|/artifact] pages.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
31 <h2>Changes For Version 1.29 (2014-06-12)</h2>
32 * Add the ability to display content, diffs and annotations for UTF16
33 text files in the web interface.
34 * Add the "SaveAs..." and "Invert" buttons
35
--- www/changes.wiki
+++ www/changes.wiki
@@ -1,34 +1,76 @@
1 <title>Change Log</title>
2
3 <h2>Changes For Version 1.30 (2015-01-19)</h2>
4 * Added the [/help?cmd=bundle|fossil bundle] command.
5 * Added the [/help?cmd=purge|fossil purge] command.
6 * Added the [/help?cmd=publish|fossil publish] command.
7 * Added the [/help?cmd=unpublished|fossil unpublished] command.
8 * Enhance the [/tree] webpage to show the age of each file with the option
9 to sort by age.
10 * Enhance the [/brlist] webpage to show additional information about each branch
11 and to be sortable by clicking on column headers.
12 * Add support for Docker. Just install docker and type
13 "sudo docker run -d -p 8080:8080 nijtmans/fossil" to get it running.
14 * Add the [/help/fusefs|fossil fusefs DIRECTORY] command that mounts a
15 Fuse Filesystem at the given DIRECTORY and populates it with read-only
16 copies of all historical check-ins. This only works on systems that
17 support FuseFS.
18 * Add the administrative log that records all configuration.
19 * Added the [/sitemap] webpage.
20 * Added the [/bloblist] web page.
21 * Let [/help?cmd=new|fossil new] no longer create an initial empty commit
22 by default. The first commit after checking out an empty repository will
23 become the initial commit.
24 * Added the [/help?cmd=all|fossil all dbstat] and
25 [/help?cmd=all|fossil all info] commands.
26 * Update SQLite to version 3.8.8.
27 * Added the --verily option to the [/help?cmd=clean|fossil clean] command.
28 * Add the "autosync-tries" setting to control the number of autosync attempts
29 before returning an error.
30 * Added a compile-time option (--with-miniz) to build using miniz instead
31 of zlib. Disabled by default.
 
32 * Support customization of commands and webpages, including the ability to
33 add new ones, via the "TH1 hooks" feature. Disabled by default. Enabled
34 via a compile-time option.
35 * Add the <nowiki>[checkout], [render], [styleHeader], [styleFooter],
36 [trace], [getParameter], [setParameter], [artifact], and
37 [globalState]</nowiki> commands to TH1, primarily for use by TH1 hooks.
38 * Automatically adjust the width of command-line timeline output according to the
39 detected width of the terminal.
40 * Prompt the user to optionally fix invalid UTF-8 at check-in.
 
 
 
 
 
 
41 * Added a line-number toggle option to the [/help?cmd=/info|/info]
42 and [/help?cmd=/artifact|/artifact] pages.
43 * Most commands now issue errors rather than silently ignoring unrecognized
44 command-line options.
45 * Use full 40-character SHA1 hashes (instead of abbreviations) in most
46 internal URLs.
47 * The "ssh:" sync method on windows now uses "plink.exe" instead of "ssh" as
48 the secure-shell client program.
49 * Prevent a partial clone when the connection is lost.
50 * Make the distinction between 301 and 302 redirects.
51 * Allow commits against a closed check-in as long as the commit goes onto
52 a different branch.
53 * Improved cache control in the web interface reduces unnecessary requests
54 for common resources like the page logo and CSS.
55 * Fix a rare and long-standing sync protocol bug
56 that would silently prevent the sync from running to completion. Before
57 this bug-fix it was sometimes necessary to do "fossil sync --verily" to
58 get two repositories in sync.
59 * Add the [/finfo?name=src/foci.c|files_of_checkin] virtual table - useful
60 for ad hoc queries in the [/help?cmd=sqlite3|fossil sql] interface,
61 and also used internally.
62 * Added the "$secureurl" TH1 variable for use in headers and footers.
63 * (Internal:) Add the ability to include resources as separate files in the
64 source tree that are converted into constant byte arrays in the compiled
65 binary. Use this feature to store the Tk script that implements the --tk
66 diff option in a separate file for easier editing.
67 * (Internal:) Implement a system of compile-time checks to help ensure
68 the correctness of printf-style formatting strings.
69 * Fix CVE-2014-3566, also known as the POODLE SSL 3.0 vulnerability.
70 * Numerous documentation fixes and improvements.
71 * Other obscure and minor bug fixes - see the timeline for details.
72
73 <h2>Changes For Version 1.29 (2014-06-12)</h2>
74 * Add the ability to display content, diffs and annotations for UTF16
75 text files in the web interface.
76 * Add the "SaveAs..." and "Invert" buttons
77

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button