@@ -30,27 +30,33 @@
30 30 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
31 31 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void undo_one(const char *zPathname, int redoFlag){
32 32 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Stmt q;
33 33 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zFullname;
34 34 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_prepare(&q,
35 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "SELECT content, existsflag FROM undo WHERE pathname=%Q AND redoflag=%d",
35 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "SELECT content, existsflag, isExe FROM undo"
36 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " WHERE pathname=%Q AND redoflag=%d",
36 37 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zPathname, redoFlag
37 38 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
38 39 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db_step(&q)==SQLITE_ROW ){
39 40 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int old_exists;
40 41 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int new_exists;
42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int old_exe;
43 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int new_exe;
41 44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob current;
42 45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob new;
43 46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zFullname = mprintf("%s/%s", g.zLocalRoot, zPathname);
44 47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
new_exists = file_size(zFullname)>=0;
45 48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( new_exists ){
46 49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_read_from_file(¤t, zFullname);
50 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ new_exe = file_isexe(zFullname);
47 51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
48 52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_zero(¤t);
53 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ new_exe = 0;
49 54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
50 55 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_zero(&new);
51 56 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
old_exists = db_column_int(&q, 1);
57 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ old_exe = db_column_int(&q, 2);
52 58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( old_exists ){
53 59 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_ephemeral_blob(&q, 0, &new);
54 60 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
55 61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( old_exists ){
56 62 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( new_exists ){
@@ -57,21 +63,23 @@
57 63 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
printf("%s %s\n", redoFlag ? "REDO" : "UNDO", zPathname);
58 64 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
59 65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
printf("NEW %s\n", zPathname);
60 66 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
61 67 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_write_to_file(&new, zFullname);
68 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ file_setexe(zFullname, old_exe);
62 69 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
63 70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
printf("DELETE %s\n", zPathname);
64 71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unlink(zFullname);
65 72 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
66 73 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&new);
67 74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
free(zFullname);
68 75 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_finalize(&q);
69 76 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_prepare(&q,
70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "UPDATE undo SET content=:c, existsflag=%d, redoflag=NOT redoflag"
77 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "UPDATE undo SET content=:c, existsflag=%d, isExe=%d,"
78 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " redoflag=NOT redoflag"
71 79 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE pathname=%Q",
72 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- new_exists, zPathname
80 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ new_exists, new_exe, zPathname
73 81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
74 82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( new_exists ){
75 83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_bind_blob(&q, ":c", ¤t);
76 84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
77 85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_step(&q);
@@ -200,10 +208,11 @@
200 208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const char zSql[] =
201 209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ CREATE TABLE %s.undo(
202 210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ pathname TEXT UNIQUE, -- Name of the file
203 211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ redoflag BOOLEAN, -- 0 for undoable. 1 for redoable
204 212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ existsflag BOOLEAN, -- True if the file exists
213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ isExe BOOLEAN, -- True if the file is executable
205 214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ content BLOB -- Saved content
206 215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ );
207 216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ CREATE TABLE %s.undo_vfile AS SELECT * FROM vfile;
208 217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ CREATE TABLE %s.undo_vmerge AS SELECT * FROM vmerge;
209 218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
;
@@ -246,13 +255,13 @@
246 255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
247 256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !undoActive ) return;
248 257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zFullname = mprintf("%s%s", g.zLocalRoot, zPathname);
249 258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
existsFlag = file_size(zFullname)>=0;
250 259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_prepare(&q,
251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "INSERT OR IGNORE INTO undo(pathname,redoflag,existsflag,content)"
252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " VALUES(%Q,0,%d,:c)",
253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zPathname, existsFlag
260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "INSERT OR IGNORE INTO undo(pathname,redoflag,existsflag,isExe,content)"
261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " VALUES(%Q,0,%d,%d,:c)",
262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zPathname, existsFlag, file_isexe(zFullname)
254 263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
255 264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( existsFlag ){
256 265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_read_from_file(&content, zFullname);
257 266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_bind_blob(&q, ":c", &content);
258 267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
259 268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!