Fossil SCM

Merge changes from trunk

baruch 2014-10-26 14:17 svn-import merge
Commit 980acc8f1fb89bbd40b5bcf2bca96a7aa0efd9c1
+21 -3
--- src/manifest.c
+++ src/manifest.c
@@ -47,10 +47,11 @@
4747
/*
4848
** Flags for use with manifest_crosslink().
4949
*/
5050
#define MC_NONE 0 /* default handling */
5151
#define MC_PERMIT_HOOKS 1 /* permit hooks to execute */
52
+#define MC_NO_ERRORS 2 /* do not issue errors for a bad parse */
5253
5354
/*
5455
** A single F-card within a manifest
5556
*/
5657
struct ManifestFile {
@@ -360,10 +361,11 @@
360361
char *z;
361362
int n;
362363
char *zUuid;
363364
int sz = 0;
364365
int isRepeat, hasSelfRefTag = 0;
366
+ Blob bUuid = BLOB_INITIALIZER;
365367
static Bag seen;
366368
const char *zErr = 0;
367369
368370
if( rid==0 ){
369371
isRepeat = 1;
@@ -403,10 +405,15 @@
403405
if( verify_z_card(z, n)==2 ){
404406
blob_reset(pContent);
405407
blob_appendf(pErr, "incorrect Z-card cksum");
406408
return 0;
407409
}
410
+
411
+ /* Store the UUID (before modifying the blob) only for error
412
+ ** reporting purposes.
413
+ */
414
+ sha1sum_blob(pContent, &bUuid);
408415
409416
/* Allocate a Manifest object to hold the parsed control artifact.
410417
*/
411418
p = fossil_malloc( sizeof(*p) );
412419
memset(p, 0, sizeof(*p));
@@ -942,13 +949,18 @@
942949
if( !seenZ ) SYNTAX("missing Z-card on control");
943950
p->type = CFTYPE_CONTROL;
944951
}
945952
md5sum_init();
946953
if( !isRepeat ) g.parseCnt[p->type]++;
954
+ blob_reset(&bUuid);
947955
return p;
948956
949957
manifest_syntax_error:
958
+ if(bUuid.nUsed){
959
+ blob_appendf(pErr, "manifest [%.40s] ", blob_str(&bUuid));
960
+ blob_reset(&bUuid);
961
+ }
950962
if( zErr ){
951963
blob_appendf(pErr, "line %d: %s", lineNo, zErr);
952964
}else{
953965
blob_appendf(pErr, "unknown error on line %d", lineNo);
954966
}
@@ -1731,23 +1743,29 @@
17311743
17321744
if( (p = manifest_cache_find(rid))!=0 ){
17331745
blob_reset(pContent);
17341746
}else if( (p = manifest_parse(pContent, rid, 0))==0 ){
17351747
assert( blob_is_reset(pContent) || pContent==0 );
1736
- fossil_error(1, "syntax error in manifest");
1748
+ if( (flags & MC_NO_ERRORS)==0 ){
1749
+ fossil_error(1, "syntax error in manifest [%s]",
1750
+ db_text(0, "SELECT uuid FROM blob WHERE rid=%d",rid));
1751
+ }
17371752
return 0;
17381753
}
17391754
if( g.xlinkClusterOnly && p->type!=CFTYPE_CLUSTER ){
17401755
manifest_destroy(p);
17411756
assert( blob_is_reset(pContent) );
1742
- fossil_error(1, "no manifest");
1757
+ if( (flags & MC_NO_ERRORS)==0 ) fossil_error(1, "no manifest");
17431758
return 0;
17441759
}
17451760
if( p->type==CFTYPE_MANIFEST && fetch_baseline(p, 0) ){
17461761
manifest_destroy(p);
17471762
assert( blob_is_reset(pContent) );
1748
- fossil_error(1, "cannot fetch baseline manifest");
1763
+ if( (flags & MC_NO_ERRORS)==0 ){
1764
+ fossil_error(1, "cannot fetch baseline for manifest [%s]",
1765
+ db_text(0, "SELECT uuid FROM blob WHERE rid=%d",rid));
1766
+ }
17491767
return 0;
17501768
}
17511769
db_begin_transaction();
17521770
if( p->type==CFTYPE_MANIFEST ){
17531771
if( permitHooks ){
17541772
--- src/manifest.c
+++ src/manifest.c
@@ -47,10 +47,11 @@
47 /*
48 ** Flags for use with manifest_crosslink().
49 */
50 #define MC_NONE 0 /* default handling */
51 #define MC_PERMIT_HOOKS 1 /* permit hooks to execute */
 
52
53 /*
54 ** A single F-card within a manifest
55 */
56 struct ManifestFile {
@@ -360,10 +361,11 @@
360 char *z;
361 int n;
362 char *zUuid;
363 int sz = 0;
364 int isRepeat, hasSelfRefTag = 0;
 
365 static Bag seen;
366 const char *zErr = 0;
367
368 if( rid==0 ){
369 isRepeat = 1;
@@ -403,10 +405,15 @@
403 if( verify_z_card(z, n)==2 ){
404 blob_reset(pContent);
405 blob_appendf(pErr, "incorrect Z-card cksum");
406 return 0;
407 }
 
 
 
 
 
408
409 /* Allocate a Manifest object to hold the parsed control artifact.
410 */
411 p = fossil_malloc( sizeof(*p) );
412 memset(p, 0, sizeof(*p));
@@ -942,13 +949,18 @@
942 if( !seenZ ) SYNTAX("missing Z-card on control");
943 p->type = CFTYPE_CONTROL;
944 }
945 md5sum_init();
946 if( !isRepeat ) g.parseCnt[p->type]++;
 
947 return p;
948
949 manifest_syntax_error:
 
 
 
 
950 if( zErr ){
951 blob_appendf(pErr, "line %d: %s", lineNo, zErr);
952 }else{
953 blob_appendf(pErr, "unknown error on line %d", lineNo);
954 }
@@ -1731,23 +1743,29 @@
1731
1732 if( (p = manifest_cache_find(rid))!=0 ){
1733 blob_reset(pContent);
1734 }else if( (p = manifest_parse(pContent, rid, 0))==0 ){
1735 assert( blob_is_reset(pContent) || pContent==0 );
1736 fossil_error(1, "syntax error in manifest");
 
 
 
1737 return 0;
1738 }
1739 if( g.xlinkClusterOnly && p->type!=CFTYPE_CLUSTER ){
1740 manifest_destroy(p);
1741 assert( blob_is_reset(pContent) );
1742 fossil_error(1, "no manifest");
1743 return 0;
1744 }
1745 if( p->type==CFTYPE_MANIFEST && fetch_baseline(p, 0) ){
1746 manifest_destroy(p);
1747 assert( blob_is_reset(pContent) );
1748 fossil_error(1, "cannot fetch baseline manifest");
 
 
 
1749 return 0;
1750 }
1751 db_begin_transaction();
1752 if( p->type==CFTYPE_MANIFEST ){
1753 if( permitHooks ){
1754
--- src/manifest.c
+++ src/manifest.c
@@ -47,10 +47,11 @@
47 /*
48 ** Flags for use with manifest_crosslink().
49 */
50 #define MC_NONE 0 /* default handling */
51 #define MC_PERMIT_HOOKS 1 /* permit hooks to execute */
52 #define MC_NO_ERRORS 2 /* do not issue errors for a bad parse */
53
54 /*
55 ** A single F-card within a manifest
56 */
57 struct ManifestFile {
@@ -360,10 +361,11 @@
361 char *z;
362 int n;
363 char *zUuid;
364 int sz = 0;
365 int isRepeat, hasSelfRefTag = 0;
366 Blob bUuid = BLOB_INITIALIZER;
367 static Bag seen;
368 const char *zErr = 0;
369
370 if( rid==0 ){
371 isRepeat = 1;
@@ -403,10 +405,15 @@
405 if( verify_z_card(z, n)==2 ){
406 blob_reset(pContent);
407 blob_appendf(pErr, "incorrect Z-card cksum");
408 return 0;
409 }
410
411 /* Store the UUID (before modifying the blob) only for error
412 ** reporting purposes.
413 */
414 sha1sum_blob(pContent, &bUuid);
415
416 /* Allocate a Manifest object to hold the parsed control artifact.
417 */
418 p = fossil_malloc( sizeof(*p) );
419 memset(p, 0, sizeof(*p));
@@ -942,13 +949,18 @@
949 if( !seenZ ) SYNTAX("missing Z-card on control");
950 p->type = CFTYPE_CONTROL;
951 }
952 md5sum_init();
953 if( !isRepeat ) g.parseCnt[p->type]++;
954 blob_reset(&bUuid);
955 return p;
956
957 manifest_syntax_error:
958 if(bUuid.nUsed){
959 blob_appendf(pErr, "manifest [%.40s] ", blob_str(&bUuid));
960 blob_reset(&bUuid);
961 }
962 if( zErr ){
963 blob_appendf(pErr, "line %d: %s", lineNo, zErr);
964 }else{
965 blob_appendf(pErr, "unknown error on line %d", lineNo);
966 }
@@ -1731,23 +1743,29 @@
1743
1744 if( (p = manifest_cache_find(rid))!=0 ){
1745 blob_reset(pContent);
1746 }else if( (p = manifest_parse(pContent, rid, 0))==0 ){
1747 assert( blob_is_reset(pContent) || pContent==0 );
1748 if( (flags & MC_NO_ERRORS)==0 ){
1749 fossil_error(1, "syntax error in manifest [%s]",
1750 db_text(0, "SELECT uuid FROM blob WHERE rid=%d",rid));
1751 }
1752 return 0;
1753 }
1754 if( g.xlinkClusterOnly && p->type!=CFTYPE_CLUSTER ){
1755 manifest_destroy(p);
1756 assert( blob_is_reset(pContent) );
1757 if( (flags & MC_NO_ERRORS)==0 ) fossil_error(1, "no manifest");
1758 return 0;
1759 }
1760 if( p->type==CFTYPE_MANIFEST && fetch_baseline(p, 0) ){
1761 manifest_destroy(p);
1762 assert( blob_is_reset(pContent) );
1763 if( (flags & MC_NO_ERRORS)==0 ){
1764 fossil_error(1, "cannot fetch baseline for manifest [%s]",
1765 db_text(0, "SELECT uuid FROM blob WHERE rid=%d",rid));
1766 }
1767 return 0;
1768 }
1769 db_begin_transaction();
1770 if( p->type==CFTYPE_MANIFEST ){
1771 if( permitHooks ){
1772
+21 -3
--- src/manifest.c
+++ src/manifest.c
@@ -47,10 +47,11 @@
4747
/*
4848
** Flags for use with manifest_crosslink().
4949
*/
5050
#define MC_NONE 0 /* default handling */
5151
#define MC_PERMIT_HOOKS 1 /* permit hooks to execute */
52
+#define MC_NO_ERRORS 2 /* do not issue errors for a bad parse */
5253
5354
/*
5455
** A single F-card within a manifest
5556
*/
5657
struct ManifestFile {
@@ -360,10 +361,11 @@
360361
char *z;
361362
int n;
362363
char *zUuid;
363364
int sz = 0;
364365
int isRepeat, hasSelfRefTag = 0;
366
+ Blob bUuid = BLOB_INITIALIZER;
365367
static Bag seen;
366368
const char *zErr = 0;
367369
368370
if( rid==0 ){
369371
isRepeat = 1;
@@ -403,10 +405,15 @@
403405
if( verify_z_card(z, n)==2 ){
404406
blob_reset(pContent);
405407
blob_appendf(pErr, "incorrect Z-card cksum");
406408
return 0;
407409
}
410
+
411
+ /* Store the UUID (before modifying the blob) only for error
412
+ ** reporting purposes.
413
+ */
414
+ sha1sum_blob(pContent, &bUuid);
408415
409416
/* Allocate a Manifest object to hold the parsed control artifact.
410417
*/
411418
p = fossil_malloc( sizeof(*p) );
412419
memset(p, 0, sizeof(*p));
@@ -942,13 +949,18 @@
942949
if( !seenZ ) SYNTAX("missing Z-card on control");
943950
p->type = CFTYPE_CONTROL;
944951
}
945952
md5sum_init();
946953
if( !isRepeat ) g.parseCnt[p->type]++;
954
+ blob_reset(&bUuid);
947955
return p;
948956
949957
manifest_syntax_error:
958
+ if(bUuid.nUsed){
959
+ blob_appendf(pErr, "manifest [%.40s] ", blob_str(&bUuid));
960
+ blob_reset(&bUuid);
961
+ }
950962
if( zErr ){
951963
blob_appendf(pErr, "line %d: %s", lineNo, zErr);
952964
}else{
953965
blob_appendf(pErr, "unknown error on line %d", lineNo);
954966
}
@@ -1731,23 +1743,29 @@
17311743
17321744
if( (p = manifest_cache_find(rid))!=0 ){
17331745
blob_reset(pContent);
17341746
}else if( (p = manifest_parse(pContent, rid, 0))==0 ){
17351747
assert( blob_is_reset(pContent) || pContent==0 );
1736
- fossil_error(1, "syntax error in manifest");
1748
+ if( (flags & MC_NO_ERRORS)==0 ){
1749
+ fossil_error(1, "syntax error in manifest [%s]",
1750
+ db_text(0, "SELECT uuid FROM blob WHERE rid=%d",rid));
1751
+ }
17371752
return 0;
17381753
}
17391754
if( g.xlinkClusterOnly && p->type!=CFTYPE_CLUSTER ){
17401755
manifest_destroy(p);
17411756
assert( blob_is_reset(pContent) );
1742
- fossil_error(1, "no manifest");
1757
+ if( (flags & MC_NO_ERRORS)==0 ) fossil_error(1, "no manifest");
17431758
return 0;
17441759
}
17451760
if( p->type==CFTYPE_MANIFEST && fetch_baseline(p, 0) ){
17461761
manifest_destroy(p);
17471762
assert( blob_is_reset(pContent) );
1748
- fossil_error(1, "cannot fetch baseline manifest");
1763
+ if( (flags & MC_NO_ERRORS)==0 ){
1764
+ fossil_error(1, "cannot fetch baseline for manifest [%s]",
1765
+ db_text(0, "SELECT uuid FROM blob WHERE rid=%d",rid));
1766
+ }
17491767
return 0;
17501768
}
17511769
db_begin_transaction();
17521770
if( p->type==CFTYPE_MANIFEST ){
17531771
if( permitHooks ){
17541772
--- src/manifest.c
+++ src/manifest.c
@@ -47,10 +47,11 @@
47 /*
48 ** Flags for use with manifest_crosslink().
49 */
50 #define MC_NONE 0 /* default handling */
51 #define MC_PERMIT_HOOKS 1 /* permit hooks to execute */
 
52
53 /*
54 ** A single F-card within a manifest
55 */
56 struct ManifestFile {
@@ -360,10 +361,11 @@
360 char *z;
361 int n;
362 char *zUuid;
363 int sz = 0;
364 int isRepeat, hasSelfRefTag = 0;
 
365 static Bag seen;
366 const char *zErr = 0;
367
368 if( rid==0 ){
369 isRepeat = 1;
@@ -403,10 +405,15 @@
403 if( verify_z_card(z, n)==2 ){
404 blob_reset(pContent);
405 blob_appendf(pErr, "incorrect Z-card cksum");
406 return 0;
407 }
 
 
 
 
 
408
409 /* Allocate a Manifest object to hold the parsed control artifact.
410 */
411 p = fossil_malloc( sizeof(*p) );
412 memset(p, 0, sizeof(*p));
@@ -942,13 +949,18 @@
942 if( !seenZ ) SYNTAX("missing Z-card on control");
943 p->type = CFTYPE_CONTROL;
944 }
945 md5sum_init();
946 if( !isRepeat ) g.parseCnt[p->type]++;
 
947 return p;
948
949 manifest_syntax_error:
 
 
 
 
950 if( zErr ){
951 blob_appendf(pErr, "line %d: %s", lineNo, zErr);
952 }else{
953 blob_appendf(pErr, "unknown error on line %d", lineNo);
954 }
@@ -1731,23 +1743,29 @@
1731
1732 if( (p = manifest_cache_find(rid))!=0 ){
1733 blob_reset(pContent);
1734 }else if( (p = manifest_parse(pContent, rid, 0))==0 ){
1735 assert( blob_is_reset(pContent) || pContent==0 );
1736 fossil_error(1, "syntax error in manifest");
 
 
 
1737 return 0;
1738 }
1739 if( g.xlinkClusterOnly && p->type!=CFTYPE_CLUSTER ){
1740 manifest_destroy(p);
1741 assert( blob_is_reset(pContent) );
1742 fossil_error(1, "no manifest");
1743 return 0;
1744 }
1745 if( p->type==CFTYPE_MANIFEST && fetch_baseline(p, 0) ){
1746 manifest_destroy(p);
1747 assert( blob_is_reset(pContent) );
1748 fossil_error(1, "cannot fetch baseline manifest");
 
 
 
1749 return 0;
1750 }
1751 db_begin_transaction();
1752 if( p->type==CFTYPE_MANIFEST ){
1753 if( permitHooks ){
1754
--- src/manifest.c
+++ src/manifest.c
@@ -47,10 +47,11 @@
47 /*
48 ** Flags for use with manifest_crosslink().
49 */
50 #define MC_NONE 0 /* default handling */
51 #define MC_PERMIT_HOOKS 1 /* permit hooks to execute */
52 #define MC_NO_ERRORS 2 /* do not issue errors for a bad parse */
53
54 /*
55 ** A single F-card within a manifest
56 */
57 struct ManifestFile {
@@ -360,10 +361,11 @@
361 char *z;
362 int n;
363 char *zUuid;
364 int sz = 0;
365 int isRepeat, hasSelfRefTag = 0;
366 Blob bUuid = BLOB_INITIALIZER;
367 static Bag seen;
368 const char *zErr = 0;
369
370 if( rid==0 ){
371 isRepeat = 1;
@@ -403,10 +405,15 @@
405 if( verify_z_card(z, n)==2 ){
406 blob_reset(pContent);
407 blob_appendf(pErr, "incorrect Z-card cksum");
408 return 0;
409 }
410
411 /* Store the UUID (before modifying the blob) only for error
412 ** reporting purposes.
413 */
414 sha1sum_blob(pContent, &bUuid);
415
416 /* Allocate a Manifest object to hold the parsed control artifact.
417 */
418 p = fossil_malloc( sizeof(*p) );
419 memset(p, 0, sizeof(*p));
@@ -942,13 +949,18 @@
949 if( !seenZ ) SYNTAX("missing Z-card on control");
950 p->type = CFTYPE_CONTROL;
951 }
952 md5sum_init();
953 if( !isRepeat ) g.parseCnt[p->type]++;
954 blob_reset(&bUuid);
955 return p;
956
957 manifest_syntax_error:
958 if(bUuid.nUsed){
959 blob_appendf(pErr, "manifest [%.40s] ", blob_str(&bUuid));
960 blob_reset(&bUuid);
961 }
962 if( zErr ){
963 blob_appendf(pErr, "line %d: %s", lineNo, zErr);
964 }else{
965 blob_appendf(pErr, "unknown error on line %d", lineNo);
966 }
@@ -1731,23 +1743,29 @@
1743
1744 if( (p = manifest_cache_find(rid))!=0 ){
1745 blob_reset(pContent);
1746 }else if( (p = manifest_parse(pContent, rid, 0))==0 ){
1747 assert( blob_is_reset(pContent) || pContent==0 );
1748 if( (flags & MC_NO_ERRORS)==0 ){
1749 fossil_error(1, "syntax error in manifest [%s]",
1750 db_text(0, "SELECT uuid FROM blob WHERE rid=%d",rid));
1751 }
1752 return 0;
1753 }
1754 if( g.xlinkClusterOnly && p->type!=CFTYPE_CLUSTER ){
1755 manifest_destroy(p);
1756 assert( blob_is_reset(pContent) );
1757 if( (flags & MC_NO_ERRORS)==0 ) fossil_error(1, "no manifest");
1758 return 0;
1759 }
1760 if( p->type==CFTYPE_MANIFEST && fetch_baseline(p, 0) ){
1761 manifest_destroy(p);
1762 assert( blob_is_reset(pContent) );
1763 if( (flags & MC_NO_ERRORS)==0 ){
1764 fossil_error(1, "cannot fetch baseline for manifest [%s]",
1765 db_text(0, "SELECT uuid FROM blob WHERE rid=%d",rid));
1766 }
1767 return 0;
1768 }
1769 db_begin_transaction();
1770 if( p->type==CFTYPE_MANIFEST ){
1771 if( permitHooks ){
1772
--- src/setup.c
+++ src/setup.c
@@ -1075,10 +1075,14 @@
10751075
@ every historical check-in, which can use a lot of CPU and bandwidth
10761076
@ even for relatively small projects.</p>
10771077
@
10781078
@ <p>Additional parameters that control this behavior:</p>
10791079
@ <blockquote>
1080
+ onoff_attribute("Enable hyperlinks for humans (as deduced from the UserAgent "
1081
+ " HTTP header string)",
1082
+ "auto-hyperlink-ishuman", "ahis", 0, 0);
1083
+ @ <br>
10801084
onoff_attribute("Require mouse movement before enabling hyperlinks",
10811085
"auto-hyperlink-mouseover", "ahmo", 0, 0);
10821086
@ <br>
10831087
entry_attribute("Delay before enabling hyperlinks (milliseconds)", 5,
10841088
"auto-hyperlink-delay", "ah-delay", "10", 0);
10851089
--- src/setup.c
+++ src/setup.c
@@ -1075,10 +1075,14 @@
1075 @ every historical check-in, which can use a lot of CPU and bandwidth
1076 @ even for relatively small projects.</p>
1077 @
1078 @ <p>Additional parameters that control this behavior:</p>
1079 @ <blockquote>
 
 
 
 
1080 onoff_attribute("Require mouse movement before enabling hyperlinks",
1081 "auto-hyperlink-mouseover", "ahmo", 0, 0);
1082 @ <br>
1083 entry_attribute("Delay before enabling hyperlinks (milliseconds)", 5,
1084 "auto-hyperlink-delay", "ah-delay", "10", 0);
1085
--- src/setup.c
+++ src/setup.c
@@ -1075,10 +1075,14 @@
1075 @ every historical check-in, which can use a lot of CPU and bandwidth
1076 @ even for relatively small projects.</p>
1077 @
1078 @ <p>Additional parameters that control this behavior:</p>
1079 @ <blockquote>
1080 onoff_attribute("Enable hyperlinks for humans (as deduced from the UserAgent "
1081 " HTTP header string)",
1082 "auto-hyperlink-ishuman", "ahis", 0, 0);
1083 @ <br>
1084 onoff_attribute("Require mouse movement before enabling hyperlinks",
1085 "auto-hyperlink-mouseover", "ahmo", 0, 0);
1086 @ <br>
1087 entry_attribute("Delay before enabling hyperlinks (milliseconds)", 5,
1088 "auto-hyperlink-delay", "ah-delay", "10", 0);
1089
+6 -2
--- src/style.c
+++ src/style.c
@@ -182,18 +182,22 @@
182182
@ var isOperaMini = Object.prototype.toString.call(window.operamini)
183183
@ === "[object OperaMini]";
184184
@ if( isOperaMini ){
185185
@ setTimeout("setAllHrefs();",%d(nDelay));
186186
@ }
187
+ }else if( db_get_boolean("auto-hyperlink-ishuman",0) && g.isHuman ){
188
+ /* Active hyperlinks after a delay */
189
+ @ setTimeout("setAllHrefs();",%d(nDelay));
187190
}else if( db_get_boolean("auto-hyperlink-mouseover",0) ){
188
- /* Require mouse movement prior to activating hyperlinks */
191
+ /* Require mouse movement before starting the teim that will
192
+ ** activating hyperlinks */
189193
@ document.getElementsByTagName("body")[0].onmousemove=function(){
190194
@ setTimeout("setAllHrefs();",%d(nDelay));
191195
@ this.onmousemove = null;
192196
@ }
193197
}else{
194
- /* Active hyperlinks right away */
198
+ /* Active hyperlinks after a delay */
195199
@ setTimeout("setAllHrefs();",%d(nDelay));
196200
}
197201
@ </script>
198202
}
199203
200204
--- src/style.c
+++ src/style.c
@@ -182,18 +182,22 @@
182 @ var isOperaMini = Object.prototype.toString.call(window.operamini)
183 @ === "[object OperaMini]";
184 @ if( isOperaMini ){
185 @ setTimeout("setAllHrefs();",%d(nDelay));
186 @ }
 
 
 
187 }else if( db_get_boolean("auto-hyperlink-mouseover",0) ){
188 /* Require mouse movement prior to activating hyperlinks */
 
189 @ document.getElementsByTagName("body")[0].onmousemove=function(){
190 @ setTimeout("setAllHrefs();",%d(nDelay));
191 @ this.onmousemove = null;
192 @ }
193 }else{
194 /* Active hyperlinks right away */
195 @ setTimeout("setAllHrefs();",%d(nDelay));
196 }
197 @ </script>
198 }
199
200
--- src/style.c
+++ src/style.c
@@ -182,18 +182,22 @@
182 @ var isOperaMini = Object.prototype.toString.call(window.operamini)
183 @ === "[object OperaMini]";
184 @ if( isOperaMini ){
185 @ setTimeout("setAllHrefs();",%d(nDelay));
186 @ }
187 }else if( db_get_boolean("auto-hyperlink-ishuman",0) && g.isHuman ){
188 /* Active hyperlinks after a delay */
189 @ setTimeout("setAllHrefs();",%d(nDelay));
190 }else if( db_get_boolean("auto-hyperlink-mouseover",0) ){
191 /* Require mouse movement before starting the teim that will
192 ** activating hyperlinks */
193 @ document.getElementsByTagName("body")[0].onmousemove=function(){
194 @ setTimeout("setAllHrefs();",%d(nDelay));
195 @ this.onmousemove = null;
196 @ }
197 }else{
198 /* Active hyperlinks after a delay */
199 @ setTimeout("setAllHrefs();",%d(nDelay));
200 }
201 @ </script>
202 }
203
204
+31 -29
--- src/timeline.c
+++ src/timeline.c
@@ -1702,11 +1702,11 @@
17021702
}
17031703
17041704
/*
17051705
** COMMAND: timeline
17061706
**
1707
-** Usage: %fossil timeline ?WHEN? ?BASELINE|DATETIME? ?OPTIONS?
1707
+** Usage: %fossil timeline ?WHEN? ?CHECKIN|DATETIME? ?OPTIONS?
17081708
**
17091709
** Print a summary of activity going backwards in date and time
17101710
** specified or from the current date and time if no arguments
17111711
** are given. The WHEN argument can be any unique abbreviation
17121712
** of one of these keywords:
@@ -1722,10 +1722,12 @@
17221722
** for the current version or "now" for the current time.
17231723
**
17241724
** Options:
17251725
** -n|--limit N Output the first N entries (default 20 lines).
17261726
** N=0 means no limit.
1727
+** -p|--path PATH Output items affecting PATH only.
1728
+** PATH can be a file or a sub directory.
17271729
** --offset P skip P changes
17281730
** -t|--type TYPE Output items from the given types only, such as:
17291731
** ci = file commits only
17301732
** e = events only
17311733
** t = tickets only
@@ -1739,11 +1741,11 @@
17391741
** -R REPO_FILE Specifies the repository db to use. Default is
17401742
** the current checkout's repository.
17411743
*/
17421744
void timeline_cmd(void){
17431745
Stmt q;
1744
- int n, k, width, i;
1746
+ int n, k, width;
17451747
const char *zLimit;
17461748
const char *zWidth;
17471749
const char *zOffset;
17481750
const char *zType;
17491751
char *zOrigin;
@@ -1763,10 +1765,12 @@
17631765
}
17641766
db_find_and_open_repository(0, 0);
17651767
zLimit = find_option("limit","n",1);
17661768
zWidth = find_option("width","W",1);
17671769
zType = find_option("type","t",1);
1770
+ zFilePattern = find_option("path","p",1);
1771
+
17681772
if( !zLimit ){
17691773
zLimit = find_option("count",0,1);
17701774
}
17711775
if( zLimit ){
17721776
n = atoi(zLimit);
@@ -1785,39 +1789,37 @@
17851789
iOffset = zOffset ? atoi(zOffset) : 0;
17861790
17871791
/* We should be done with options.. */
17881792
verify_all_options();
17891793
1790
- zOrigin = "now";
1791
- zFilePattern = 0;
1792
- for(i=2; i<g.argc; i++){
1793
- char *zArg = g.argv[i];
1794
- k = strlen(zArg);
1795
- if( mode==0 ){
1796
- if( strncmp(zArg,"before",k)==0 ){
1797
- mode = 1;
1798
- }else if( strncmp(zArg,"after",k)==0 && k>1 ){
1799
- mode = 2;
1800
- }else if( strncmp(zArg,"descendants",k)==0 ){
1801
- mode = 3;
1802
- }else if( strncmp(zArg,"children",k)==0 ){
1803
- mode = 3;
1804
- }else if( strncmp(zArg,"ancestors",k)==0 && k>1 ){
1805
- mode = 4;
1806
- }else if( strncmp(zArg,"parents",k)==0 ){
1807
- mode = 4;
1808
- }
1809
- if( mode ){
1810
- if( i<g.argc-1 ) zOrigin = g.argv[++i];
1811
- continue;
1812
- }
1813
- }
1814
- if( zFilePattern==0 ){
1815
- zFilePattern = zArg;
1794
+ if( g.argc>=4 ){
1795
+ k = strlen(g.argv[2]);
1796
+ if( strncmp(g.argv[2],"before",k)==0 ){
1797
+ mode = 1;
1798
+ }else if( strncmp(g.argv[2],"after",k)==0 && k>1 ){
1799
+ mode = 2;
1800
+ }else if( strncmp(g.argv[2],"descendants",k)==0 ){
1801
+ mode = 3;
1802
+ }else if( strncmp(g.argv[2],"children",k)==0 ){
1803
+ mode = 3;
1804
+ }else if( strncmp(g.argv[2],"ancestors",k)==0 && k>1 ){
1805
+ mode = 4;
1806
+ }else if( strncmp(g.argv[2],"parents",k)==0 ){
1807
+ mode = 4;
1808
+ }else if(!zType && !zLimit){
1809
+ usage("?WHEN? ?CHECKIN|DATETIME? ?-n|--limit #? ?-t|--type TYPE? "
1810
+ "?-W|--width WIDTH? ?-p|--path PATH");
1811
+ }
1812
+ if( '-' != *g.argv[3] ){
1813
+ zOrigin = g.argv[3];
18161814
}else{
1817
- usage("?WHEN? ?CHECKIN|DATETIME? ?FILE? ?OPTIONS?");
1815
+ zOrigin = "now";
18181816
}
1817
+ }else if( g.argc==3 ){
1818
+ zOrigin = g.argv[2];
1819
+ }else{
1820
+ zOrigin = "now";
18191821
}
18201822
k = strlen(zOrigin);
18211823
blob_zero(&uuid);
18221824
blob_append(&uuid, zOrigin, -1);
18231825
if( fossil_strcmp(zOrigin, "now")==0 ){
18241826
--- src/timeline.c
+++ src/timeline.c
@@ -1702,11 +1702,11 @@
1702 }
1703
1704 /*
1705 ** COMMAND: timeline
1706 **
1707 ** Usage: %fossil timeline ?WHEN? ?BASELINE|DATETIME? ?OPTIONS?
1708 **
1709 ** Print a summary of activity going backwards in date and time
1710 ** specified or from the current date and time if no arguments
1711 ** are given. The WHEN argument can be any unique abbreviation
1712 ** of one of these keywords:
@@ -1722,10 +1722,12 @@
1722 ** for the current version or "now" for the current time.
1723 **
1724 ** Options:
1725 ** -n|--limit N Output the first N entries (default 20 lines).
1726 ** N=0 means no limit.
 
 
1727 ** --offset P skip P changes
1728 ** -t|--type TYPE Output items from the given types only, such as:
1729 ** ci = file commits only
1730 ** e = events only
1731 ** t = tickets only
@@ -1739,11 +1741,11 @@
1739 ** -R REPO_FILE Specifies the repository db to use. Default is
1740 ** the current checkout's repository.
1741 */
1742 void timeline_cmd(void){
1743 Stmt q;
1744 int n, k, width, i;
1745 const char *zLimit;
1746 const char *zWidth;
1747 const char *zOffset;
1748 const char *zType;
1749 char *zOrigin;
@@ -1763,10 +1765,12 @@
1763 }
1764 db_find_and_open_repository(0, 0);
1765 zLimit = find_option("limit","n",1);
1766 zWidth = find_option("width","W",1);
1767 zType = find_option("type","t",1);
 
 
1768 if( !zLimit ){
1769 zLimit = find_option("count",0,1);
1770 }
1771 if( zLimit ){
1772 n = atoi(zLimit);
@@ -1785,39 +1789,37 @@
1785 iOffset = zOffset ? atoi(zOffset) : 0;
1786
1787 /* We should be done with options.. */
1788 verify_all_options();
1789
1790 zOrigin = "now";
1791 zFilePattern = 0;
1792 for(i=2; i<g.argc; i++){
1793 char *zArg = g.argv[i];
1794 k = strlen(zArg);
1795 if( mode==0 ){
1796 if( strncmp(zArg,"before",k)==0 ){
1797 mode = 1;
1798 }else if( strncmp(zArg,"after",k)==0 && k>1 ){
1799 mode = 2;
1800 }else if( strncmp(zArg,"descendants",k)==0 ){
1801 mode = 3;
1802 }else if( strncmp(zArg,"children",k)==0 ){
1803 mode = 3;
1804 }else if( strncmp(zArg,"ancestors",k)==0 && k>1 ){
1805 mode = 4;
1806 }else if( strncmp(zArg,"parents",k)==0 ){
1807 mode = 4;
1808 }
1809 if( mode ){
1810 if( i<g.argc-1 ) zOrigin = g.argv[++i];
1811 continue;
1812 }
1813 }
1814 if( zFilePattern==0 ){
1815 zFilePattern = zArg;
1816 }else{
1817 usage("?WHEN? ?CHECKIN|DATETIME? ?FILE? ?OPTIONS?");
1818 }
 
 
 
 
1819 }
1820 k = strlen(zOrigin);
1821 blob_zero(&uuid);
1822 blob_append(&uuid, zOrigin, -1);
1823 if( fossil_strcmp(zOrigin, "now")==0 ){
1824
--- src/timeline.c
+++ src/timeline.c
@@ -1702,11 +1702,11 @@
1702 }
1703
1704 /*
1705 ** COMMAND: timeline
1706 **
1707 ** Usage: %fossil timeline ?WHEN? ?CHECKIN|DATETIME? ?OPTIONS?
1708 **
1709 ** Print a summary of activity going backwards in date and time
1710 ** specified or from the current date and time if no arguments
1711 ** are given. The WHEN argument can be any unique abbreviation
1712 ** of one of these keywords:
@@ -1722,10 +1722,12 @@
1722 ** for the current version or "now" for the current time.
1723 **
1724 ** Options:
1725 ** -n|--limit N Output the first N entries (default 20 lines).
1726 ** N=0 means no limit.
1727 ** -p|--path PATH Output items affecting PATH only.
1728 ** PATH can be a file or a sub directory.
1729 ** --offset P skip P changes
1730 ** -t|--type TYPE Output items from the given types only, such as:
1731 ** ci = file commits only
1732 ** e = events only
1733 ** t = tickets only
@@ -1739,11 +1741,11 @@
1741 ** -R REPO_FILE Specifies the repository db to use. Default is
1742 ** the current checkout's repository.
1743 */
1744 void timeline_cmd(void){
1745 Stmt q;
1746 int n, k, width;
1747 const char *zLimit;
1748 const char *zWidth;
1749 const char *zOffset;
1750 const char *zType;
1751 char *zOrigin;
@@ -1763,10 +1765,12 @@
1765 }
1766 db_find_and_open_repository(0, 0);
1767 zLimit = find_option("limit","n",1);
1768 zWidth = find_option("width","W",1);
1769 zType = find_option("type","t",1);
1770 zFilePattern = find_option("path","p",1);
1771
1772 if( !zLimit ){
1773 zLimit = find_option("count",0,1);
1774 }
1775 if( zLimit ){
1776 n = atoi(zLimit);
@@ -1785,39 +1789,37 @@
1789 iOffset = zOffset ? atoi(zOffset) : 0;
1790
1791 /* We should be done with options.. */
1792 verify_all_options();
1793
1794 if( g.argc>=4 ){
1795 k = strlen(g.argv[2]);
1796 if( strncmp(g.argv[2],"before",k)==0 ){
1797 mode = 1;
1798 }else if( strncmp(g.argv[2],"after",k)==0 && k>1 ){
1799 mode = 2;
1800 }else if( strncmp(g.argv[2],"descendants",k)==0 ){
1801 mode = 3;
1802 }else if( strncmp(g.argv[2],"children",k)==0 ){
1803 mode = 3;
1804 }else if( strncmp(g.argv[2],"ancestors",k)==0 && k>1 ){
1805 mode = 4;
1806 }else if( strncmp(g.argv[2],"parents",k)==0 ){
1807 mode = 4;
1808 }else if(!zType && !zLimit){
1809 usage("?WHEN? ?CHECKIN|DATETIME? ?-n|--limit #? ?-t|--type TYPE? "
1810 "?-W|--width WIDTH? ?-p|--path PATH");
1811 }
1812 if( '-' != *g.argv[3] ){
1813 zOrigin = g.argv[3];
 
 
 
 
 
 
1814 }else{
1815 zOrigin = "now";
1816 }
1817 }else if( g.argc==3 ){
1818 zOrigin = g.argv[2];
1819 }else{
1820 zOrigin = "now";
1821 }
1822 k = strlen(zOrigin);
1823 blob_zero(&uuid);
1824 blob_append(&uuid, zOrigin, -1);
1825 if( fossil_strcmp(zOrigin, "now")==0 ){
1826
+1 -1
--- src/xfer.c
+++ src/xfer.c
@@ -201,11 +201,11 @@
201201
if( rid==0 ){
202202
blob_appendf(&pXfer->err, "%s", g.zErrMsg);
203203
blob_reset(&content);
204204
}else{
205205
if( !isPriv ) content_make_public(rid);
206
- manifest_crosslink(rid, &content, MC_NONE);
206
+ manifest_crosslink(rid, &content, MC_NO_ERRORS);
207207
}
208208
assert( blob_is_reset(&content) );
209209
remote_has(rid);
210210
}
211211
212212
--- src/xfer.c
+++ src/xfer.c
@@ -201,11 +201,11 @@
201 if( rid==0 ){
202 blob_appendf(&pXfer->err, "%s", g.zErrMsg);
203 blob_reset(&content);
204 }else{
205 if( !isPriv ) content_make_public(rid);
206 manifest_crosslink(rid, &content, MC_NONE);
207 }
208 assert( blob_is_reset(&content) );
209 remote_has(rid);
210 }
211
212
--- src/xfer.c
+++ src/xfer.c
@@ -201,11 +201,11 @@
201 if( rid==0 ){
202 blob_appendf(&pXfer->err, "%s", g.zErrMsg);
203 blob_reset(&content);
204 }else{
205 if( !isPriv ) content_make_public(rid);
206 manifest_crosslink(rid, &content, MC_NO_ERRORS);
207 }
208 assert( blob_is_reset(&content) );
209 remote_has(rid);
210 }
211
212
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -159,11 +159,12 @@
159159
# will run on the target platform. This is usually the same
160160
# as BCC, unless you are cross-compiling. This C compiler builds
161161
# the finished binary for fossil. The BCC compiler above is used
162162
# for building intermediate code-generator tools.
163163
#
164
-TCC = $(PREFIX)gcc -Os -Wall
164
+#BB: TCC = $(PREFIX)gcc -Os -Wall
165
+TCC = $(PREFIX)gcc -g -Wall
165166
166167
#### When not using the miniz compression library, zlib is required.
167168
#
168169
ifndef FOSSIL_ENABLE_MINIZ
169170
TCC += -L$(ZLIBDIR) -I$(ZINCDIR)
170171
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -159,11 +159,12 @@
159 # will run on the target platform. This is usually the same
160 # as BCC, unless you are cross-compiling. This C compiler builds
161 # the finished binary for fossil. The BCC compiler above is used
162 # for building intermediate code-generator tools.
163 #
164 TCC = $(PREFIX)gcc -Os -Wall
 
165
166 #### When not using the miniz compression library, zlib is required.
167 #
168 ifndef FOSSIL_ENABLE_MINIZ
169 TCC += -L$(ZLIBDIR) -I$(ZINCDIR)
170
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -159,11 +159,12 @@
159 # will run on the target platform. This is usually the same
160 # as BCC, unless you are cross-compiling. This C compiler builds
161 # the finished binary for fossil. The BCC compiler above is used
162 # for building intermediate code-generator tools.
163 #
164 #BB: TCC = $(PREFIX)gcc -Os -Wall
165 TCC = $(PREFIX)gcc -g -Wall
166
167 #### When not using the miniz compression library, zlib is required.
168 #
169 ifndef FOSSIL_ENABLE_MINIZ
170 TCC += -L$(ZLIBDIR) -I$(ZINCDIR)
171
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -159,11 +159,12 @@
159159
# will run on the target platform. This is usually the same
160160
# as BCC, unless you are cross-compiling. This C compiler builds
161161
# the finished binary for fossil. The BCC compiler above is used
162162
# for building intermediate code-generator tools.
163163
#
164
-TCC = $(PREFIX)gcc -Os -Wall
164
+#BB: TCC = $(PREFIX)gcc -Os -Wall
165
+TCC = $(PREFIX)gcc -g -Wall
165166
166167
#### When not using the miniz compression library, zlib is required.
167168
#
168169
ifndef FOSSIL_ENABLE_MINIZ
169170
TCC += -L$(ZLIBDIR) -I$(ZINCDIR)
170171
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -159,11 +159,12 @@
159 # will run on the target platform. This is usually the same
160 # as BCC, unless you are cross-compiling. This C compiler builds
161 # the finished binary for fossil. The BCC compiler above is used
162 # for building intermediate code-generator tools.
163 #
164 TCC = $(PREFIX)gcc -Os -Wall
 
165
166 #### When not using the miniz compression library, zlib is required.
167 #
168 ifndef FOSSIL_ENABLE_MINIZ
169 TCC += -L$(ZLIBDIR) -I$(ZINCDIR)
170
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -159,11 +159,12 @@
159 # will run on the target platform. This is usually the same
160 # as BCC, unless you are cross-compiling. This C compiler builds
161 # the finished binary for fossil. The BCC compiler above is used
162 # for building intermediate code-generator tools.
163 #
164 #BB: TCC = $(PREFIX)gcc -Os -Wall
165 TCC = $(PREFIX)gcc -g -Wall
166
167 #### When not using the miniz compression library, zlib is required.
168 #
169 ifndef FOSSIL_ENABLE_MINIZ
170 TCC += -L$(ZLIBDIR) -I$(ZINCDIR)
171
--- win/fossil.exe.manifest
+++ win/fossil.exe.manifest
@@ -13,10 +13,12 @@
1313
</requestedPrivileges>
1414
</security>
1515
</trustInfo>
1616
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
1717
<application>
18
+ <!-- Windows 10 -->
19
+ <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
1820
<!-- Windows 8.1 -->
1921
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
2022
<!-- Windows 8 -->
2123
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
2224
<!-- Windows 7 -->
2325
--- win/fossil.exe.manifest
+++ win/fossil.exe.manifest
@@ -13,10 +13,12 @@
13 </requestedPrivileges>
14 </security>
15 </trustInfo>
16 <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
17 <application>
 
 
18 <!-- Windows 8.1 -->
19 <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
20 <!-- Windows 8 -->
21 <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
22 <!-- Windows 7 -->
23
--- win/fossil.exe.manifest
+++ win/fossil.exe.manifest
@@ -13,10 +13,12 @@
13 </requestedPrivileges>
14 </security>
15 </trustInfo>
16 <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
17 <application>
18 <!-- Windows 10 -->
19 <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
20 <!-- Windows 8.1 -->
21 <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
22 <!-- Windows 8 -->
23 <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
24 <!-- Windows 7 -->
25

Keyboard Shortcuts

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