Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix merge when merging UPDATEs a symlink to a regular file and vice versa. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | symlinks |
Files: | files | file ages | folders |
SHA1: |
82a95b4692e96b75864215e88eaa7f0a |
User & Date: | dmitry 2011-09-01 22:55:28.910 |
Context
2011-09-01
| ||
22:56 | Refactor file_perm(), file_islink(), and file_isexe(). Now file_perm() calls stat only once. ... (check-in: eac23495 user: dmitry tags: symlinks) | |
22:55 | Fix merge when merging UPDATEs a symlink to a regular file and vice versa. ... (check-in: 82a95b46 user: dmitry tags: symlinks) | |
22:52 | Fix undo when having a regular file on disk and symlink in undo. ... (check-in: 324763b9 user: dmitry tags: symlinks) | |
Changes
Changes to src/merge.c.
︙ | ︙ | |||
251 252 253 254 255 256 257 258 259 260 | "UPDATE fv SET" " idp=coalesce((SELECT id FROM vfile WHERE vid=%d AND pathname=fnp),0)," " ridp=coalesce((SELECT rid FROM vfile WHERE vid=%d AND pathname=fnp),0)," " idm=coalesce((SELECT id FROM vfile WHERE vid=%d AND pathname=fnm),0)," " ridm=coalesce((SELECT rid FROM vfile WHERE vid=%d AND pathname=fnm),0)", pid, pid, mid, mid ); if( debugFlag ){ db_prepare(&q, | > > > > > > > > > > > | > | > | > > | 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 | "UPDATE fv SET" " idp=coalesce((SELECT id FROM vfile WHERE vid=%d AND pathname=fnp),0)," " ridp=coalesce((SELECT rid FROM vfile WHERE vid=%d AND pathname=fnp),0)," " idm=coalesce((SELECT id FROM vfile WHERE vid=%d AND pathname=fnm),0)," " ridm=coalesce((SELECT rid FROM vfile WHERE vid=%d AND pathname=fnm),0)", pid, pid, mid, mid ); /* ** Add islink information for files in V and M ** */ db_multi_exec( "UPDATE fv SET" " islinkv=coalesce((SELECT islink FROM vfile WHERE vid=%d AND pathname=fnm),0)," " islinkm=coalesce((SELECT islink FROM vfile WHERE vid=%d AND pathname=fnm),0)", vid, mid ); if( debugFlag ){ db_prepare(&q, "SELECT rowid, fn, fnp, fnm, chnged, ridv, ridp, ridm, " " isexe, islinkv, islinkm FROM fv" ); while( db_step(&q)==SQLITE_ROW ){ fossil_print("%3d: ridv=%-4d ridp=%-4d ridm=%-4d chnged=%d isexe=%d " " islinkv=%d islinkm=%d", db_column_int(&q, 0), db_column_int(&q, 5), db_column_int(&q, 6), db_column_int(&q, 7), db_column_int(&q, 4), db_column_int(&q, 8), db_column_int(&q, 9), db_column_int(&q, 10)); fossil_print(" fn = [%s]\n", db_column_text(&q, 1)); fossil_print(" fnp = [%s]\n", db_column_text(&q, 2)); fossil_print(" fnm = [%s]\n", db_column_text(&q, 3)); } db_finalize(&q); } |
︙ | ︙ | |||
301 302 303 304 305 306 307 | ); while( db_step(&q)==SQLITE_ROW ){ int idm = db_column_int(&q, 0); int rowid = db_column_int(&q, 1); int idv; const char *zName; db_multi_exec( | | | < < < < < < < < < < < | > | > | 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 | ); while( db_step(&q)==SQLITE_ROW ){ int idm = db_column_int(&q, 0); int rowid = db_column_int(&q, 1); int idv; const char *zName; db_multi_exec( "INSERT INTO vfile(vid,chnged,deleted,rid,mrid,isexe,islink,pathname)" " SELECT %d,3,0,rid,mrid,isexe,islink,pathname FROM vfile WHERE id=%d", vid, idm ); idv = db_last_insert_rowid(); db_multi_exec("UPDATE fv SET idv=%d WHERE rowid=%d", idv, rowid); zName = db_column_text(&q, 2); fossil_print("ADDED %s\n", zName); if( !nochangeFlag ){ undo_save(zName); vfile_to_disk(0, idm, 0, 0); } } db_finalize(&q); /* ** Find files that have changed from P->M but not P->V. ** Copy the M content over into V. */ db_prepare(&q, "SELECT idv, ridm, fn, islinkm FROM fv" " WHERE idp>0 AND idv>0 AND idm>0" " AND ridm!=ridp AND ridv=ridp AND NOT chnged" ); while( db_step(&q)==SQLITE_ROW ){ int idv = db_column_int(&q, 0); int ridm = db_column_int(&q, 1); const char *zName = db_column_text(&q, 2); int islinkm = db_column_int(&q, 3); /* Copy content from idm over into idv. Overwrite idv. */ fossil_print("UPDATE %s\n", zName); if( !nochangeFlag ){ undo_save(zName); db_multi_exec( "UPDATE vfile SET mtime=0, mrid=%d, chnged=2, islink=%d " " WHERE id=%d", ridm, islinkm, idv ); vfile_to_disk(0, idv, 0, 0); } } db_finalize(&q); /* |
︙ | ︙ |