Fossil SCM
Prevent delta loops on sync operations that might otherwise occur if a sequence of file changes ends with a file back to its original state after a sequence of two or more intermediate states. The is a backport/cherrypick of check-in [141b990722ea81e10e5]
Commit
285eeba64fde9b7cfe9c4cb1e6a0c570f0c48448
Parent
99053ab14108599…
1 file changed
+3
-7
+3
-7
| --- src/xfer.c | ||
| +++ src/xfer.c | ||
| @@ -268,19 +268,15 @@ | ||
| 268 | 268 | Blob *pUuid /* The UUID of the file to send */ |
| 269 | 269 | ){ |
| 270 | 270 | static const char *azQuery[] = { |
| 271 | 271 | "SELECT pid FROM plink x" |
| 272 | 272 | " WHERE cid=%d" |
| 273 | - " AND NOT EXISTS(SELECT 1 FROM phantom WHERE rid=pid)" | |
| 274 | - " AND NOT EXISTS(SELECT 1 FROM plink y" | |
| 275 | - " WHERE y.pid=x.cid AND y.cid=x.pid)", | |
| 276 | - | |
| 277 | - "SELECT pid FROM mlink x" | |
| 273 | + " AND NOT EXISTS(SELECT 1 FROM phantom WHERE rid=pid)", | |
| 274 | + | |
| 275 | + "SELECT pid, min(mtime) FROM mlink, event ON mlink.mid=event.objid" | |
| 278 | 276 | " WHERE fid=%d" |
| 279 | 277 | " AND NOT EXISTS(SELECT 1 FROM phantom WHERE rid=pid)" |
| 280 | - " AND NOT EXISTS(SELECT 1 FROM mlink y" | |
| 281 | - " WHERE y.pid=x.fid AND y.fid=x.pid)" | |
| 282 | 278 | }; |
| 283 | 279 | int i; |
| 284 | 280 | Blob src, delta; |
| 285 | 281 | int size = 0; |
| 286 | 282 | int srcId = 0; |
| 287 | 283 |
| --- src/xfer.c | |
| +++ src/xfer.c | |
| @@ -268,19 +268,15 @@ | |
| 268 | Blob *pUuid /* The UUID of the file to send */ |
| 269 | ){ |
| 270 | static const char *azQuery[] = { |
| 271 | "SELECT pid FROM plink x" |
| 272 | " WHERE cid=%d" |
| 273 | " AND NOT EXISTS(SELECT 1 FROM phantom WHERE rid=pid)" |
| 274 | " AND NOT EXISTS(SELECT 1 FROM plink y" |
| 275 | " WHERE y.pid=x.cid AND y.cid=x.pid)", |
| 276 | |
| 277 | "SELECT pid FROM mlink x" |
| 278 | " WHERE fid=%d" |
| 279 | " AND NOT EXISTS(SELECT 1 FROM phantom WHERE rid=pid)" |
| 280 | " AND NOT EXISTS(SELECT 1 FROM mlink y" |
| 281 | " WHERE y.pid=x.fid AND y.fid=x.pid)" |
| 282 | }; |
| 283 | int i; |
| 284 | Blob src, delta; |
| 285 | int size = 0; |
| 286 | int srcId = 0; |
| 287 |
| --- src/xfer.c | |
| +++ src/xfer.c | |
| @@ -268,19 +268,15 @@ | |
| 268 | Blob *pUuid /* The UUID of the file to send */ |
| 269 | ){ |
| 270 | static const char *azQuery[] = { |
| 271 | "SELECT pid FROM plink x" |
| 272 | " WHERE cid=%d" |
| 273 | " AND NOT EXISTS(SELECT 1 FROM phantom WHERE rid=pid)", |
| 274 | |
| 275 | "SELECT pid, min(mtime) FROM mlink, event ON mlink.mid=event.objid" |
| 276 | " WHERE fid=%d" |
| 277 | " AND NOT EXISTS(SELECT 1 FROM phantom WHERE rid=pid)" |
| 278 | }; |
| 279 | int i; |
| 280 | Blob src, delta; |
| 281 | int size = 0; |
| 282 | int srcId = 0; |
| 283 |