Fossil SCM

Make phantom records are warning, not a fatal error, when trying to checkout or examine a check-in.

drh 2011-01-07 17:17 trunk
Commit f7cff4ad13d06ec008119347f65972b6aa406e59
1 file changed +5 -28
+5 -28
--- src/vfile.c
+++ src/vfile.c
@@ -70,35 +70,10 @@
7070
rid = content_new(zUuid);
7171
}
7272
return rid;
7373
}
7474
75
-/*
76
-** Verify that an object is not a phantom. If the object is
77
-** a phantom, output an error message and quit.
78
-*/
79
-static void vfile_verify_not_phantom(
80
- int rid, /* The RID to verify */
81
- const char *zFilename, /* Filename. Might be NULL */
82
- const char *zUuid /* UUID. Might be NULL */
83
-){
84
- if( db_int(-1, "SELECT size FROM blob WHERE rid=%d", rid)<0
85
- && (zUuid==0 || !db_exists("SELECT 1 FROM shun WHERE uuid='%s'",zUuid))
86
- ){
87
- if( zFilename ){
88
- fossil_fatal("content missing for %s", zFilename);
89
- }else{
90
- char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
91
- if( zUuid ){
92
- fossil_fatal("content missing for [%.10s]", zUuid);
93
- }else{
94
- fossil_panic("bad object id: %d", rid);
95
- }
96
- }
97
- }
98
-}
99
-
10075
/*
10176
** Build a catalog of all files in a checkin.
10277
*/
10378
void vfile_build(int vid){
10479
int rid;
@@ -105,23 +80,25 @@
10580
Stmt ins;
10681
Manifest *p;
10782
ManifestFile *pFile;
10883
10984
db_begin_transaction();
110
- vfile_verify_not_phantom(vid, 0, 0);
11185
p = manifest_get(vid, CFTYPE_MANIFEST);
11286
if( p==0 ) return;
11387
db_multi_exec("DELETE FROM vfile WHERE vid=%d", vid);
11488
db_prepare(&ins,
11589
"INSERT INTO vfile(vid,rid,mrid,pathname) "
11690
" VALUES(:vid,:id,:id,:name)");
11791
db_bind_int(&ins, ":vid", vid);
11892
manifest_file_rewind(p);
11993
while( (pFile = manifest_file_next(p,0))!=0 ){
120
- if( pFile->zUuid==0 ) continue;
94
+ if( pFile->zUuid==0 || uuid_is_shunned(pFile->zUuid) ) continue;
12195
rid = uuid_to_rid(pFile->zUuid, 0);
122
- vfile_verify_not_phantom(rid, pFile->zName, pFile->zUuid);
96
+ if( rid==0 || db_int(-1, "SELECT size FROM blob WHERE rid=%d", rid)<0 ){
97
+ fossil_warning("content missing for %s", pFile->zName);
98
+ continue;
99
+ }
123100
db_bind_int(&ins, ":id", rid);
124101
db_bind_text(&ins, ":name", pFile->zName);
125102
db_step(&ins);
126103
db_reset(&ins);
127104
}
128105
--- src/vfile.c
+++ src/vfile.c
@@ -70,35 +70,10 @@
70 rid = content_new(zUuid);
71 }
72 return rid;
73 }
74
75 /*
76 ** Verify that an object is not a phantom. If the object is
77 ** a phantom, output an error message and quit.
78 */
79 static void vfile_verify_not_phantom(
80 int rid, /* The RID to verify */
81 const char *zFilename, /* Filename. Might be NULL */
82 const char *zUuid /* UUID. Might be NULL */
83 ){
84 if( db_int(-1, "SELECT size FROM blob WHERE rid=%d", rid)<0
85 && (zUuid==0 || !db_exists("SELECT 1 FROM shun WHERE uuid='%s'",zUuid))
86 ){
87 if( zFilename ){
88 fossil_fatal("content missing for %s", zFilename);
89 }else{
90 char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
91 if( zUuid ){
92 fossil_fatal("content missing for [%.10s]", zUuid);
93 }else{
94 fossil_panic("bad object id: %d", rid);
95 }
96 }
97 }
98 }
99
100 /*
101 ** Build a catalog of all files in a checkin.
102 */
103 void vfile_build(int vid){
104 int rid;
@@ -105,23 +80,25 @@
105 Stmt ins;
106 Manifest *p;
107 ManifestFile *pFile;
108
109 db_begin_transaction();
110 vfile_verify_not_phantom(vid, 0, 0);
111 p = manifest_get(vid, CFTYPE_MANIFEST);
112 if( p==0 ) return;
113 db_multi_exec("DELETE FROM vfile WHERE vid=%d", vid);
114 db_prepare(&ins,
115 "INSERT INTO vfile(vid,rid,mrid,pathname) "
116 " VALUES(:vid,:id,:id,:name)");
117 db_bind_int(&ins, ":vid", vid);
118 manifest_file_rewind(p);
119 while( (pFile = manifest_file_next(p,0))!=0 ){
120 if( pFile->zUuid==0 ) continue;
121 rid = uuid_to_rid(pFile->zUuid, 0);
122 vfile_verify_not_phantom(rid, pFile->zName, pFile->zUuid);
 
 
 
123 db_bind_int(&ins, ":id", rid);
124 db_bind_text(&ins, ":name", pFile->zName);
125 db_step(&ins);
126 db_reset(&ins);
127 }
128
--- src/vfile.c
+++ src/vfile.c
@@ -70,35 +70,10 @@
70 rid = content_new(zUuid);
71 }
72 return rid;
73 }
74
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75 /*
76 ** Build a catalog of all files in a checkin.
77 */
78 void vfile_build(int vid){
79 int rid;
@@ -105,23 +80,25 @@
80 Stmt ins;
81 Manifest *p;
82 ManifestFile *pFile;
83
84 db_begin_transaction();
 
85 p = manifest_get(vid, CFTYPE_MANIFEST);
86 if( p==0 ) return;
87 db_multi_exec("DELETE FROM vfile WHERE vid=%d", vid);
88 db_prepare(&ins,
89 "INSERT INTO vfile(vid,rid,mrid,pathname) "
90 " VALUES(:vid,:id,:id,:name)");
91 db_bind_int(&ins, ":vid", vid);
92 manifest_file_rewind(p);
93 while( (pFile = manifest_file_next(p,0))!=0 ){
94 if( pFile->zUuid==0 || uuid_is_shunned(pFile->zUuid) ) continue;
95 rid = uuid_to_rid(pFile->zUuid, 0);
96 if( rid==0 || db_int(-1, "SELECT size FROM blob WHERE rid=%d", rid)<0 ){
97 fossil_warning("content missing for %s", pFile->zName);
98 continue;
99 }
100 db_bind_int(&ins, ":id", rid);
101 db_bind_text(&ins, ":name", pFile->zName);
102 db_step(&ins);
103 db_reset(&ins);
104 }
105

Keyboard Shortcuts

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