Fossil SCM

Add warnings to clients which receive content that creates a fork. Defer warnings as much as possible.

andybradford 2015-04-10 00:30 sync-forkwarn
Commit 9d45319345b5fa7615a318d7bd7fb3c97a705876
1 file changed +17 -2
+17 -2
--- src/xfer.c
+++ src/xfer.c
@@ -930,10 +930,11 @@
930930
*/
931931
void page_xfer(void){
932932
int isPull = 0;
933933
int isPush = 0;
934934
int nErr = 0;
935
+ int fForkSeen = 0; /* True if fork was seen while receiving content */
935936
Xfer xfer;
936937
int deltaFlag = 0;
937938
int isClone = 0;
938939
int nGimme = 0;
939940
int size;
@@ -1003,11 +1004,11 @@
10031004
nErr++;
10041005
break;
10051006
}
10061007
xfer_accept_file(&xfer, 0, pzUuidList, pnUuidList);
10071008
if( xfer.fHasFork ){
1008
- @ message ******\sWARNING:\sa\sfork\shas\soccurred\s******
1009
+ fForkSeen = 1;
10091010
}
10101011
if( blob_size(&xfer.err) ){
10111012
cgi_reset_content();
10121013
@ error %T(blob_str(&xfer.err))
10131014
nErr++;
@@ -1027,11 +1028,11 @@
10271028
nErr++;
10281029
break;
10291030
}
10301031
xfer_accept_compressed_file(&xfer, pzUuidList, pnUuidList);
10311032
if( xfer.fHasFork ){
1032
- @ message ******\sWARNING:\sa\sfork\shas\soccurred\s******
1033
+ fForkSeen = 1;
10331034
}
10341035
if( blob_size(&xfer.err) ){
10351036
cgi_reset_content();
10361037
@ error %T(blob_str(&xfer.err))
10371038
nErr++;
@@ -1311,10 +1312,13 @@
13111312
@ error bad\scommand:\s%F(blob_str(&xfer.line))
13121313
}
13131314
blobarray_reset(xfer.aToken, xfer.nToken);
13141315
blob_reset(&xfer.line);
13151316
}
1317
+ if( fForkSeen ){
1318
+ @ message *****\s\sWARNING:\sa\sfork\shas\soccurred\s\s*****
1319
+ }
13161320
if( isPush ){
13171321
if( rc==TH_OK ){
13181322
rc = xfer_run_script(zScript, zUuidList, 1);
13191323
if( rc==TH_ERROR ){
13201324
cgi_reset_content();
@@ -1449,10 +1453,11 @@
14491453
int lastPctDone = -1; /* Last displayed pctDone */
14501454
double rArrivalTime; /* Time at which a message arrived */
14511455
const char *zSCode = db_get("server-code", "x");
14521456
const char *zPCode = db_get("project-code", 0);
14531457
int nErr = 0; /* Number of errors */
1458
+ int fForkSeen = 0; /* True if a fork was seen during pull */
14541459
int nRoundtrip= 0; /* Number of HTTP requests */
14551460
int nArtifactSent = 0; /* Total artifacts sent */
14561461
int nArtifactRcvd = 0; /* Total artifacts received */
14571462
const char *zOpType = 0;/* Push, Pull, Sync, Clone */
14581463
double rSkew = 0.0; /* Maximum time skew */
@@ -1664,10 +1669,11 @@
16641669
}
16651670
nCardRcvd++;
16661671
continue;
16671672
}
16681673
xfer.nToken = blob_tokenize(&xfer.line, xfer.aToken, count(xfer.aToken));
1674
+ xfer.fHasFork = 0;
16691675
nCardRcvd++;
16701676
if( (syncFlags & SYNC_VERBOSE)!=0 && recv.nUsed>0 ){
16711677
pctDone = (recv.iCursor*100)/recv.nUsed;
16721678
if( pctDone!=lastPctDone ){
16731679
fossil_print("\rprocessed: %d%% ", pctDone);
@@ -1681,10 +1687,13 @@
16811687
**
16821688
** Receive a file transmitted from the server.
16831689
*/
16841690
if( blob_eq(&xfer.aToken[0],"file") ){
16851691
xfer_accept_file(&xfer, (syncFlags & SYNC_CLONE)!=0, 0, 0);
1692
+ if( (syncFlags & SYNC_PULL) && xfer.fHasFork ){
1693
+ fForkSeen = 1;
1694
+ }
16861695
nArtifactRcvd++;
16871696
}else
16881697
16891698
/* cfile UUID USIZE CSIZE \n CONTENT
16901699
** cfile UUID DELTASRC USIZE CSIZE \n CONTENT
@@ -1691,10 +1700,13 @@
16911700
**
16921701
** Receive a compressed file transmitted from the server.
16931702
*/
16941703
if( blob_eq(&xfer.aToken[0],"cfile") ){
16951704
xfer_accept_compressed_file(&xfer, 0, 0);
1705
+ if( (syncFlags & SYNC_PULL) && xfer.fHasFork ){
1706
+ fForkSeen = 1;
1707
+ }
16961708
nArtifactRcvd++;
16971709
}else
16981710
16991711
/* gimme UUID
17001712
**
@@ -1963,10 +1975,13 @@
19631975
manifest_crosslink_end(MC_PERMIT_HOOKS);
19641976
content_enable_dephantomize(1);
19651977
}
19661978
db_end_transaction(0);
19671979
};
1980
+ if( fForkSeen ){
1981
+ fossil_warning("***** WARNING: a fork has occurred *****");
1982
+ }
19681983
transport_stats(&nSent, &nRcvd, 1);
19691984
if( (rSkew*24.0*3600.0) > 10.0 ){
19701985
fossil_warning("*** time skew *** server is fast by %s",
19711986
db_timespan_name(rSkew));
19721987
g.clockSkewSeen = 1;
19731988
--- src/xfer.c
+++ src/xfer.c
@@ -930,10 +930,11 @@
930 */
931 void page_xfer(void){
932 int isPull = 0;
933 int isPush = 0;
934 int nErr = 0;
 
935 Xfer xfer;
936 int deltaFlag = 0;
937 int isClone = 0;
938 int nGimme = 0;
939 int size;
@@ -1003,11 +1004,11 @@
1003 nErr++;
1004 break;
1005 }
1006 xfer_accept_file(&xfer, 0, pzUuidList, pnUuidList);
1007 if( xfer.fHasFork ){
1008 @ message ******\sWARNING:\sa\sfork\shas\soccurred\s******
1009 }
1010 if( blob_size(&xfer.err) ){
1011 cgi_reset_content();
1012 @ error %T(blob_str(&xfer.err))
1013 nErr++;
@@ -1027,11 +1028,11 @@
1027 nErr++;
1028 break;
1029 }
1030 xfer_accept_compressed_file(&xfer, pzUuidList, pnUuidList);
1031 if( xfer.fHasFork ){
1032 @ message ******\sWARNING:\sa\sfork\shas\soccurred\s******
1033 }
1034 if( blob_size(&xfer.err) ){
1035 cgi_reset_content();
1036 @ error %T(blob_str(&xfer.err))
1037 nErr++;
@@ -1311,10 +1312,13 @@
1311 @ error bad\scommand:\s%F(blob_str(&xfer.line))
1312 }
1313 blobarray_reset(xfer.aToken, xfer.nToken);
1314 blob_reset(&xfer.line);
1315 }
 
 
 
1316 if( isPush ){
1317 if( rc==TH_OK ){
1318 rc = xfer_run_script(zScript, zUuidList, 1);
1319 if( rc==TH_ERROR ){
1320 cgi_reset_content();
@@ -1449,10 +1453,11 @@
1449 int lastPctDone = -1; /* Last displayed pctDone */
1450 double rArrivalTime; /* Time at which a message arrived */
1451 const char *zSCode = db_get("server-code", "x");
1452 const char *zPCode = db_get("project-code", 0);
1453 int nErr = 0; /* Number of errors */
 
1454 int nRoundtrip= 0; /* Number of HTTP requests */
1455 int nArtifactSent = 0; /* Total artifacts sent */
1456 int nArtifactRcvd = 0; /* Total artifacts received */
1457 const char *zOpType = 0;/* Push, Pull, Sync, Clone */
1458 double rSkew = 0.0; /* Maximum time skew */
@@ -1664,10 +1669,11 @@
1664 }
1665 nCardRcvd++;
1666 continue;
1667 }
1668 xfer.nToken = blob_tokenize(&xfer.line, xfer.aToken, count(xfer.aToken));
 
1669 nCardRcvd++;
1670 if( (syncFlags & SYNC_VERBOSE)!=0 && recv.nUsed>0 ){
1671 pctDone = (recv.iCursor*100)/recv.nUsed;
1672 if( pctDone!=lastPctDone ){
1673 fossil_print("\rprocessed: %d%% ", pctDone);
@@ -1681,10 +1687,13 @@
1681 **
1682 ** Receive a file transmitted from the server.
1683 */
1684 if( blob_eq(&xfer.aToken[0],"file") ){
1685 xfer_accept_file(&xfer, (syncFlags & SYNC_CLONE)!=0, 0, 0);
 
 
 
1686 nArtifactRcvd++;
1687 }else
1688
1689 /* cfile UUID USIZE CSIZE \n CONTENT
1690 ** cfile UUID DELTASRC USIZE CSIZE \n CONTENT
@@ -1691,10 +1700,13 @@
1691 **
1692 ** Receive a compressed file transmitted from the server.
1693 */
1694 if( blob_eq(&xfer.aToken[0],"cfile") ){
1695 xfer_accept_compressed_file(&xfer, 0, 0);
 
 
 
1696 nArtifactRcvd++;
1697 }else
1698
1699 /* gimme UUID
1700 **
@@ -1963,10 +1975,13 @@
1963 manifest_crosslink_end(MC_PERMIT_HOOKS);
1964 content_enable_dephantomize(1);
1965 }
1966 db_end_transaction(0);
1967 };
 
 
 
1968 transport_stats(&nSent, &nRcvd, 1);
1969 if( (rSkew*24.0*3600.0) > 10.0 ){
1970 fossil_warning("*** time skew *** server is fast by %s",
1971 db_timespan_name(rSkew));
1972 g.clockSkewSeen = 1;
1973
--- src/xfer.c
+++ src/xfer.c
@@ -930,10 +930,11 @@
930 */
931 void page_xfer(void){
932 int isPull = 0;
933 int isPush = 0;
934 int nErr = 0;
935 int fForkSeen = 0; /* True if fork was seen while receiving content */
936 Xfer xfer;
937 int deltaFlag = 0;
938 int isClone = 0;
939 int nGimme = 0;
940 int size;
@@ -1003,11 +1004,11 @@
1004 nErr++;
1005 break;
1006 }
1007 xfer_accept_file(&xfer, 0, pzUuidList, pnUuidList);
1008 if( xfer.fHasFork ){
1009 fForkSeen = 1;
1010 }
1011 if( blob_size(&xfer.err) ){
1012 cgi_reset_content();
1013 @ error %T(blob_str(&xfer.err))
1014 nErr++;
@@ -1027,11 +1028,11 @@
1028 nErr++;
1029 break;
1030 }
1031 xfer_accept_compressed_file(&xfer, pzUuidList, pnUuidList);
1032 if( xfer.fHasFork ){
1033 fForkSeen = 1;
1034 }
1035 if( blob_size(&xfer.err) ){
1036 cgi_reset_content();
1037 @ error %T(blob_str(&xfer.err))
1038 nErr++;
@@ -1311,10 +1312,13 @@
1312 @ error bad\scommand:\s%F(blob_str(&xfer.line))
1313 }
1314 blobarray_reset(xfer.aToken, xfer.nToken);
1315 blob_reset(&xfer.line);
1316 }
1317 if( fForkSeen ){
1318 @ message *****\s\sWARNING:\sa\sfork\shas\soccurred\s\s*****
1319 }
1320 if( isPush ){
1321 if( rc==TH_OK ){
1322 rc = xfer_run_script(zScript, zUuidList, 1);
1323 if( rc==TH_ERROR ){
1324 cgi_reset_content();
@@ -1449,10 +1453,11 @@
1453 int lastPctDone = -1; /* Last displayed pctDone */
1454 double rArrivalTime; /* Time at which a message arrived */
1455 const char *zSCode = db_get("server-code", "x");
1456 const char *zPCode = db_get("project-code", 0);
1457 int nErr = 0; /* Number of errors */
1458 int fForkSeen = 0; /* True if a fork was seen during pull */
1459 int nRoundtrip= 0; /* Number of HTTP requests */
1460 int nArtifactSent = 0; /* Total artifacts sent */
1461 int nArtifactRcvd = 0; /* Total artifacts received */
1462 const char *zOpType = 0;/* Push, Pull, Sync, Clone */
1463 double rSkew = 0.0; /* Maximum time skew */
@@ -1664,10 +1669,11 @@
1669 }
1670 nCardRcvd++;
1671 continue;
1672 }
1673 xfer.nToken = blob_tokenize(&xfer.line, xfer.aToken, count(xfer.aToken));
1674 xfer.fHasFork = 0;
1675 nCardRcvd++;
1676 if( (syncFlags & SYNC_VERBOSE)!=0 && recv.nUsed>0 ){
1677 pctDone = (recv.iCursor*100)/recv.nUsed;
1678 if( pctDone!=lastPctDone ){
1679 fossil_print("\rprocessed: %d%% ", pctDone);
@@ -1681,10 +1687,13 @@
1687 **
1688 ** Receive a file transmitted from the server.
1689 */
1690 if( blob_eq(&xfer.aToken[0],"file") ){
1691 xfer_accept_file(&xfer, (syncFlags & SYNC_CLONE)!=0, 0, 0);
1692 if( (syncFlags & SYNC_PULL) && xfer.fHasFork ){
1693 fForkSeen = 1;
1694 }
1695 nArtifactRcvd++;
1696 }else
1697
1698 /* cfile UUID USIZE CSIZE \n CONTENT
1699 ** cfile UUID DELTASRC USIZE CSIZE \n CONTENT
@@ -1691,10 +1700,13 @@
1700 **
1701 ** Receive a compressed file transmitted from the server.
1702 */
1703 if( blob_eq(&xfer.aToken[0],"cfile") ){
1704 xfer_accept_compressed_file(&xfer, 0, 0);
1705 if( (syncFlags & SYNC_PULL) && xfer.fHasFork ){
1706 fForkSeen = 1;
1707 }
1708 nArtifactRcvd++;
1709 }else
1710
1711 /* gimme UUID
1712 **
@@ -1963,10 +1975,13 @@
1975 manifest_crosslink_end(MC_PERMIT_HOOKS);
1976 content_enable_dephantomize(1);
1977 }
1978 db_end_transaction(0);
1979 };
1980 if( fForkSeen ){
1981 fossil_warning("***** WARNING: a fork has occurred *****");
1982 }
1983 transport_stats(&nSent, &nRcvd, 1);
1984 if( (rSkew*24.0*3600.0) > 10.0 ){
1985 fossil_warning("*** time skew *** server is fast by %s",
1986 db_timespan_name(rSkew));
1987 g.clockSkewSeen = 1;
1988

Keyboard Shortcuts

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