Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Try to get the "stash" command using execute permission bits correctly. Continuing work on the "revert" command - but it is still not working quite right. Ticket [baf9b6b11e08c1d0b]. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | exe-permission-fix |
| Files: | files | file ages | folders |
| SHA1: |
ae3409bf49b792daf7bd91c59747c5d0 |
| User & Date: | drh 2011-02-28 03:26:50.760 |
Context
|
2011-02-28
| ||
| 13:26 | Fix the "revert" command so that it distinguishes between files that were added versus files imported by merge. Added files are not unlinked. Ticket [baf9b6b11e08c1]. ... (Closed-Leaf check-in: 157eed29f4 user: drh tags: exe-permission-fix) | |
| 03:26 | Try to get the "stash" command using execute permission bits correctly. Continuing work on the "revert" command - but it is still not working quite right. Ticket [baf9b6b11e08c1d0b]. ... (check-in: ae3409bf49 user: drh tags: exe-permission-fix) | |
| 02:54 | Changes to get the "merge" command to process execute permission correctly. Ticket [baf9b6b11e08c1d0]. ... (check-in: 7a4d75fc8c user: drh tags: exe-permission-fix) | |
Changes
Changes to src/add.c.
| ︙ | ︙ | |||
146 147 148 149 150 151 152 |
#else
if( db_exists("SELECT 1 FROM vfile WHERE pathname=%Q", zPath) ){
db_multi_exec("UPDATE vfile SET deleted=0 WHERE pathname=%Q", zPath);
}
#endif
else{
db_multi_exec(
| | | > | 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
#else
if( db_exists("SELECT 1 FROM vfile WHERE pathname=%Q", zPath) ){
db_multi_exec("UPDATE vfile SET deleted=0 WHERE pathname=%Q", zPath);
}
#endif
else{
db_multi_exec(
"INSERT INTO vfile(vid,deleted,rid,mrid,pathname,isexe)"
"VALUES(%d,0,0,0,%Q,%d)",
vid, zPath,file_isexe(zName));
}
printf("ADDED %s\n", zPath);
}
blob_reset(&pathname);
}
/*
|
| ︙ | ︙ |
Changes to src/stash.c.
| ︙ | ︙ | |||
90 91 92 93 94 95 96 |
const char *zOrig = db_column_text(&q, 4);
char *zPath = mprintf("%s%s", g.zLocalRoot, zName);
Blob content;
db_bind_int(&ins, ":rid", rid);
db_bind_int(&ins, ":isadd", rid==0);
db_bind_int(&ins, ":isrm", deleted);
| < < | 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
const char *zOrig = db_column_text(&q, 4);
char *zPath = mprintf("%s%s", g.zLocalRoot, zName);
Blob content;
db_bind_int(&ins, ":rid", rid);
db_bind_int(&ins, ":isadd", rid==0);
db_bind_int(&ins, ":isrm", deleted);
db_bind_int(&ins, ":isexe", db_column_int(&q, 1));
db_bind_text(&ins, ":orig", zOrig);
db_bind_text(&ins, ":new", zName);
if( rid==0 ){
/* A new file */
blob_read_from_file(&content, zPath);
db_bind_blob(&ins, ":content", &content);
}else if( deleted ){
|
| ︙ | ︙ | |||
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 |
"SELECT rid, isRemoved, isExec, origname, newname, delta"
" FROM stashfile WHERE stashid=%d",
stashid
);
while( db_step(&q)==SQLITE_ROW ){
int rid = db_column_int(&q, 0);
int isRemoved = db_column_int(&q, 1);
const char *zOrig = db_column_text(&q, 3);
const char *zNew = db_column_text(&q, 4);
char *zOPath = mprintf("%s%s", g.zLocalRoot, zOrig);
char *zNPath = mprintf("%s%s", g.zLocalRoot, zNew);
Blob delta;
undo_save(zNew);
blob_zero(&delta);
if( rid==0 ){
db_ephemeral_blob(&q, 5, &delta);
blob_write_to_file(&delta, zNPath);
printf("ADD %s\n", zNew);
}else if( isRemoved ){
printf("DELETE %s\n", zOrig);
unlink(zOPath);
}else{
Blob a, b, out, disk;
db_ephemeral_blob(&q, 5, &delta);
blob_read_from_file(&disk, zOPath);
content_get(rid, &a);
blob_delta_apply(&a, &delta, &b);
if( blob_compare(&disk, &a)==0 ){
blob_write_to_file(&b, zNPath);
printf("UPDATE %s\n", zNew);
}else{
int rc = merge_3way(&a, zOPath, &b, &out);
blob_write_to_file(&out, zNPath);
if( rc ){
printf("CONFLICT %s\n", zNew);
nConflict++;
}else{
printf("MERGE %s\n", zNew);
}
blob_reset(&out);
| > > > > | 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 |
"SELECT rid, isRemoved, isExec, origname, newname, delta"
" FROM stashfile WHERE stashid=%d",
stashid
);
while( db_step(&q)==SQLITE_ROW ){
int rid = db_column_int(&q, 0);
int isRemoved = db_column_int(&q, 1);
int isExec = db_column_int(&q, 2);
const char *zOrig = db_column_text(&q, 3);
const char *zNew = db_column_text(&q, 4);
char *zOPath = mprintf("%s%s", g.zLocalRoot, zOrig);
char *zNPath = mprintf("%s%s", g.zLocalRoot, zNew);
Blob delta;
undo_save(zNew);
blob_zero(&delta);
if( rid==0 ){
db_ephemeral_blob(&q, 5, &delta);
blob_write_to_file(&delta, zNPath);
file_setexe(zNPath, isExec);
printf("ADD %s\n", zNew);
}else if( isRemoved ){
printf("DELETE %s\n", zOrig);
unlink(zOPath);
}else{
Blob a, b, out, disk;
db_ephemeral_blob(&q, 5, &delta);
blob_read_from_file(&disk, zOPath);
content_get(rid, &a);
blob_delta_apply(&a, &delta, &b);
if( blob_compare(&disk, &a)==0 ){
blob_write_to_file(&b, zNPath);
file_setexe(zNPath, isExec);
printf("UPDATE %s\n", zNew);
}else{
int rc = merge_3way(&a, zOPath, &b, &out);
blob_write_to_file(&out, zNPath);
file_setexe(zNPath, isExec);
if( rc ){
printf("CONFLICT %s\n", zNew);
nConflict++;
}else{
printf("MERGE %s\n", zNew);
}
blob_reset(&out);
|
| ︙ | ︙ |
Changes to src/update.c.
| ︙ | ︙ | |||
562 563 564 565 566 567 568 569 570 571 |
db_prepare(&q, "SELECT name FROM torevert");
if( zRevision==0 ){
int vid = db_lget_int("checkout", 0);
zRevision = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", vid);
}
while( db_step(&q)==SQLITE_ROW ){
int isExe = 0;
zFile = db_column_text(&q, 0);
errCode = historical_version_of_file(zRevision, zFile, &record, &isExe,2);
if( errCode==2 ){
| > > > > | > < < > | 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 |
db_prepare(&q, "SELECT name FROM torevert");
if( zRevision==0 ){
int vid = db_lget_int("checkout", 0);
zRevision = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", vid);
}
while( db_step(&q)==SQLITE_ROW ){
int isExe = 0;
char *zFull;
zFile = db_column_text(&q, 0);
zFull = mprintf("%/%/", g.zLocalRoot, zFile);
errCode = historical_version_of_file(zRevision, zFile, &record, &isExe,2);
if( errCode==2 ){
undo_save(zFile);
unlink(zFull);
printf("DELETE: %s\n", zFile);
db_multi_exec("DELETE FROM vfile WHERE pathname=%Q", zFile);
}else{
sqlite3_int64 mtime;
undo_save(zFile);
blob_write_to_file(&record, zFull);
file_setexe(zFull, isExe);
printf("REVERTED: %s\n", zFile);
mtime = file_mtime(zFull);
db_multi_exec(
"UPDATE vfile"
" SET mtime=%lld, chnged=0, deleted=0, isexe=%d,"
" pathname=coalesce(origname,pathname), origname=NULL"
" WHERE pathname=%Q",
mtime, isExe, zFile
);
}
blob_reset(&record);
free(zFull);
}
db_finalize(&q);
undo_finish();
db_end_transaction(0);
}
|