Fossil SCM

Render any phantom or shunned artifacts as an empty file.

drh 2019-03-15 11:48 UTC mirror-cmd
Commit 2487f505cd3bf30fc3dcf9ce63c4560b72428cd3b959a27fa94d6c2067822a01
1 file changed +14 -4
+14 -4
--- src/export.c
+++ src/export.c
@@ -949,22 +949,32 @@
949949
db_step(&sIns);
950950
db_reset(&sIns);
951951
return db_last_insert_rowid();
952952
}
953953
954
+/* This is the SHA3-256 hash of an empty file */
955
+static const char zEmptySha3[] =
956
+ "a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a";
957
+
954958
/*
955959
** Export a single file named by zUuid.
956960
*/
957961
static void mirror_send_file(FILE *xCmd, const char *zUuid){
958962
int iMark;
959963
int rid;
960964
int rc;
961965
Blob data;
962966
rid = fast_uuid_to_rid(zUuid);
963
- if( rid<0 ) fossil_fatal("no rid for %s", zUuid);
964
- rc = content_get(rid, &data);
965
- if( rc==0 ) fossil_fatal("%s is a phantom", zUuid);
967
+ if( rid<0 ){
968
+ zUuid = zEmptySha3;
969
+ }else{
970
+ rc = content_get(rid, &data);
971
+ if( rc==0 ){
972
+ blob_init(&data, 0, 0);
973
+ zUuid = zEmptySha3;
974
+ }
975
+ }
966976
iMark = mirror_find_mark(zUuid, 1);
967977
fprintf(xCmd, "blob\nmark :%d\ndata %d\n", iMark, blob_size(&data));
968978
fwrite(blob_buffer(&data), 1, blob_size(&data), xCmd);
969979
fprintf(xCmd, "\n");
970980
blob_reset(&data);
@@ -1269,11 +1279,11 @@
12691279
" WHERE type IN ('ci','t')"
12701280
" AND mtime>coalesce((SELECT value FROM mconfig WHERE key='start'),0.0)"
12711281
" AND blob.rid=event.objid"
12721282
" AND blob.uuid NOT IN (SELECT uuid FROM mirror.mmark);"
12731283
);
1274
- nTotal = db_int(0, "SELECT count(*) FROM tomirror");
1284
+ nTotal = db_int(0, "SELECT count(*) FROM tomirror WHERE type='ci'");
12751285
if( nLimit<nTotal ){
12761286
nTotal = nLimit;
12771287
}else if( nLimit>nTotal ){
12781288
nLimit = nTotal;
12791289
}
12801290
--- src/export.c
+++ src/export.c
@@ -949,22 +949,32 @@
949 db_step(&sIns);
950 db_reset(&sIns);
951 return db_last_insert_rowid();
952 }
953
 
 
 
 
954 /*
955 ** Export a single file named by zUuid.
956 */
957 static void mirror_send_file(FILE *xCmd, const char *zUuid){
958 int iMark;
959 int rid;
960 int rc;
961 Blob data;
962 rid = fast_uuid_to_rid(zUuid);
963 if( rid<0 ) fossil_fatal("no rid for %s", zUuid);
964 rc = content_get(rid, &data);
965 if( rc==0 ) fossil_fatal("%s is a phantom", zUuid);
 
 
 
 
 
 
966 iMark = mirror_find_mark(zUuid, 1);
967 fprintf(xCmd, "blob\nmark :%d\ndata %d\n", iMark, blob_size(&data));
968 fwrite(blob_buffer(&data), 1, blob_size(&data), xCmd);
969 fprintf(xCmd, "\n");
970 blob_reset(&data);
@@ -1269,11 +1279,11 @@
1269 " WHERE type IN ('ci','t')"
1270 " AND mtime>coalesce((SELECT value FROM mconfig WHERE key='start'),0.0)"
1271 " AND blob.rid=event.objid"
1272 " AND blob.uuid NOT IN (SELECT uuid FROM mirror.mmark);"
1273 );
1274 nTotal = db_int(0, "SELECT count(*) FROM tomirror");
1275 if( nLimit<nTotal ){
1276 nTotal = nLimit;
1277 }else if( nLimit>nTotal ){
1278 nLimit = nTotal;
1279 }
1280
--- src/export.c
+++ src/export.c
@@ -949,22 +949,32 @@
949 db_step(&sIns);
950 db_reset(&sIns);
951 return db_last_insert_rowid();
952 }
953
954 /* This is the SHA3-256 hash of an empty file */
955 static const char zEmptySha3[] =
956 "a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a";
957
958 /*
959 ** Export a single file named by zUuid.
960 */
961 static void mirror_send_file(FILE *xCmd, const char *zUuid){
962 int iMark;
963 int rid;
964 int rc;
965 Blob data;
966 rid = fast_uuid_to_rid(zUuid);
967 if( rid<0 ){
968 zUuid = zEmptySha3;
969 }else{
970 rc = content_get(rid, &data);
971 if( rc==0 ){
972 blob_init(&data, 0, 0);
973 zUuid = zEmptySha3;
974 }
975 }
976 iMark = mirror_find_mark(zUuid, 1);
977 fprintf(xCmd, "blob\nmark :%d\ndata %d\n", iMark, blob_size(&data));
978 fwrite(blob_buffer(&data), 1, blob_size(&data), xCmd);
979 fprintf(xCmd, "\n");
980 blob_reset(&data);
@@ -1269,11 +1279,11 @@
1279 " WHERE type IN ('ci','t')"
1280 " AND mtime>coalesce((SELECT value FROM mconfig WHERE key='start'),0.0)"
1281 " AND blob.rid=event.objid"
1282 " AND blob.uuid NOT IN (SELECT uuid FROM mirror.mmark);"
1283 );
1284 nTotal = db_int(0, "SELECT count(*) FROM tomirror WHERE type='ci'");
1285 if( nLimit<nTotal ){
1286 nTotal = nLimit;
1287 }else if( nLimit>nTotal ){
1288 nLimit = nTotal;
1289 }
1290

Keyboard Shortcuts

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