58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
return rid;
}
/*
** Verify that an object is not a phantom. If the object is
** a phantom, output an error message and quick.
*/
void vfile_verify_not_phantom(int rid, const char *zFilename){
if( db_int(-1, "SELECT size FROM blob WHERE rid=%d", rid)<0 ){
if( zFilename ){
fossil_fatal("content missing for %s", zFilename);
}else{
char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
if( zUuid ){
fossil_fatal("content missing for [%.10s]", zUuid);
}else{
|
|
>
>
>
>
|
>
|
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
return rid;
}
/*
** Verify that an object is not a phantom. If the object is
** a phantom, output an error message and quick.
*/
static void vfile_verify_not_phantom(
int rid, /* The RID to verify */
const char *zFilename, /* Filename. Might be NULL */
const char *zUuid /* UUID. Might be NULL */
){
if( db_int(-1, "SELECT size FROM blob WHERE rid=%d", rid)<0
&& (zUuid==0 || !db_exists("SELECT 1 FROM shun WHERE uuid='%s'", zUuid)) ){
if( zFilename ){
fossil_fatal("content missing for %s", zFilename);
}else{
char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
if( zUuid ){
fossil_fatal("content missing for [%.10s]", zUuid);
}else{
|
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
void vfile_build(int vid, Blob *p){
int rid;
char *zName, *zUuid;
Stmt ins;
Blob line, token, name, uuid;
int seenHeader = 0;
db_begin_transaction();
vfile_verify_not_phantom(vid, 0);
db_multi_exec("DELETE FROM vfile WHERE vid=%d", vid);
db_prepare(&ins,
"INSERT INTO vfile(vid,rid,mrid,pathname) "
" VALUES(:vid,:id,:id,:name)");
db_bind_int(&ins, ":vid", vid);
while( blob_line(p, &line) ){
char *z = blob_buffer(&line);
|
|
|
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
void vfile_build(int vid, Blob *p){
int rid;
char *zName, *zUuid;
Stmt ins;
Blob line, token, name, uuid;
int seenHeader = 0;
db_begin_transaction();
vfile_verify_not_phantom(vid, 0, 0);
db_multi_exec("DELETE FROM vfile WHERE vid=%d", vid);
db_prepare(&ins,
"INSERT INTO vfile(vid,rid,mrid,pathname) "
" VALUES(:vid,:id,:id,:name)");
db_bind_int(&ins, ":vid", vid);
while( blob_line(p, &line) ){
char *z = blob_buffer(&line);
|
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
blob_token(&line, &token); /* Skip the "F" token */
if( blob_token(&line, &name)==0 ) break;
if( blob_token(&line, &uuid)==0 ) break;
zName = blob_str(&name);
defossilize(zName);
zUuid = blob_str(&uuid);
rid = uuid_to_rid(zUuid, 0);
vfile_verify_not_phantom(rid, zName);
if( rid>0 && file_is_simple_pathname(zName) ){
db_bind_int(&ins, ":id", rid);
db_bind_text(&ins, ":name", zName);
db_step(&ins);
db_reset(&ins);
}
blob_reset(&name);
|
|
|
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
blob_token(&line, &token); /* Skip the "F" token */
if( blob_token(&line, &name)==0 ) break;
if( blob_token(&line, &uuid)==0 ) break;
zName = blob_str(&name);
defossilize(zName);
zUuid = blob_str(&uuid);
rid = uuid_to_rid(zUuid, 0);
vfile_verify_not_phantom(rid, zName, zUuid);
if( rid>0 && file_is_simple_pathname(zName) ){
db_bind_int(&ins, ":id", rid);
db_bind_text(&ins, ":name", zName);
db_step(&ins);
db_reset(&ins);
}
blob_reset(&name);
|