Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Added comments explaining the select statement checking revision/file/project/metadata integrity |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
808fbc474536c2f5bc5bf912b5212387 |
User & Date: | aku 2007-12-08 02:59:09.000 |
Context
2007-12-08
| ||
03:39 | More comments on sql statements, slight reordering of some tables and conditions. ... (check-in: f7fe15cd user: aku tags: trunk) | |
02:59 | Added comments explaining the select statement checking revision/file/project/metadata integrity ... (check-in: 808fbc47 user: aku tags: trunk) | |
2007-12-07
| ||
08:55 | Removed two unused classes. ... (check-in: 97e0e9dd user: aku tags: trunk) | |
Changes
Changes to tools/cvs2fossil/lib/c2f_pcollrev.tcl.
︙ | ︙ | |||
375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 | state discard symtype state discard meta state discard author state discard cmessage return } proc Paranoia {} { # This code performs a number of paranoid checks of the # database, searching for inconsistent cross-references. log write 4 collrev {Check database consistency} set n 0 ; # Counter for the checks (we print an id before the # main label). # Find all revisions which disagree with their line of # development about the project they are owned by. Check \ {Revisions and their LODs have to be in the same project} \ {disagrees with its LOD about owning project} { SELECT F.name, R.rev | > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 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 600 601 602 603 604 605 606 607 608 609 610 611 | state discard symtype state discard meta state discard author state discard cmessage return } # TODO: Move this code to the integrity module proc Paranoia {} { # This code performs a number of paranoid checks of the # database, searching for inconsistent cross-references. log write 4 collrev {Check database consistency} set n 0 ; # Counter for the checks (we print an id before the # main label). # Find all revisions which disagree with their line of # development about the project they are owned by. Check \ {Revisions and their LODs have to be in the same project} \ {disagrees with its LOD about owning project} { SELECT F.name, R.rev FROM revision R, file F, symbol S WHERE R.fid = F.fid -- Get file of revision AND R.lod = S.sid -- Get symbol for revision's LOD AND F.pid != S.pid -- but symbol is for a different project ; } # Find all revisions which disgree with their meta data about # the project they are owned by. Check \ {Revisions and their meta data have to be in the same project} \ {disagrees with its meta data about owning project} { SELECT F.name, R.rev FROM revision R, file F, meta M WHERE R.fid = F.fid -- Get file of revision AND R.mid = M.mid -- Get meta data of revision AND F.pid != M.pid -- but is for a different project ; } # Find all revisions which disgree with their meta data about # the branch/line of development they belong to. Check \ {Revisions and their meta data have to be in the same LOD} \ {disagrees with its meta data about owning LOD} { SELECT F.name, R.rev FROM revision R, meta M, file F WHERE R.mid = M.mid -- Get meta data of revision AND R.lod != M.bid -- but is for a different LOD AND R.fid = F.fid -- Get file of revision ; } # Find all revisions with a primary child which disagrees # about the file they belong to. Check \ {Revisions and their primary children have to be in the same file} \ {disagrees with its primary child about the owning file} { SELECT F.name, R.rev FROM revision R, revision C, file F WHERE R.fid = F.fid -- Get file of revision AND R.child IS NOT NULL -- Restrict to non-leaf revisions AND R.child = C.rid -- Get child (has to exist) AND C.fid != R.fid -- Whic wrongly is in a different file ; } # Find all revisions with a branch parent symbol whose parent # disagrees about the file they belong to. Check \ {Revisions and their branch children have to be in the same file} \ {at the beginning of its branch and its parent disagree about the owning file} { SELECT F.name, R.rev FROM revision R, revision P, file F WHERE R.fid = F.fid -- Get file of revision AND R.bparent IS NOT NULL -- Restrict to first on branch AND R.parent = P.rid -- Get out-of-branch parent AND R.fid != P.fid -- Which wrongly is in a different file ; } # Find all revisions with a non-NTDB child which disagrees # about the file they belong to. Check \ {Revisions and their non-NTDB children have to be in the same file} \ {disagrees with its non-NTDB child about the owning file} { SELECT F.name, R.rev FROM revision R, revision C, file F WHERE R.fid = F.fid -- Get file of revision AND R.dbchild IS NOT NULL -- Restrict to semi-last NTDB revision AND R.dbchild = C.rid -- Got to associated trunk revision AND C.fid != R.fid -- Which wrongly is in a different file ; } # Find all revisions which have a primary child, but the child # does not have them as parent. Check \ {Revisions have to be parents of their primary children} \ {is not the parent of its primary child} { SELECT F.name, R.rev FROM revision R, revision C, file F WHERE R.fid = F.fid -- Get file of revision AND R.child IS NOT NULL -- Restrict to non-leaves AND R.child = C.rid -- Get the child (has to exist) AND C.parent != R.rid -- Which does not have us as its parent. ; } # Find all revisions which have a primrary child, but the # child has a branch parent symbol making them brach starters. Check \ {Primary children of revisions must not start branches} \ {is parent of a primary child which is the beginning of a branch} { SELECT F.name, R.rev FROM revision R, revision C, file F WHERE R.fid = F.fid -- Get file of revision AND R.child IS NOT NULL -- Restrict to non-leaves AND R.child = C.rid -- Get the child (has to exist) AND C.bparent IS NOT NULL -- wrongly claiming to be first on branch ; } # Find all revisions without branch parent symbol which have a # parent, but the parent does not have them as primary child. Check \ {Revisions have to be primary children of their parents, if any} \ {is not the child of its parent} { SELECT F.name, R.rev FROM revision R, revision P, file F WHERE R.fid = F.fid AND R.bparent IS NULL -- Get file of revision AND R.parent IS NOT NULL -- Restrict to everything not first on a branch AND R.parent = P.rid -- Get the parent (has to exist) AND P.child != R.rid -- Which do not have us as their child ; } # Find all revisions with a branch parent symbol which do not # have a parent. Check \ {Branch starting revisions have to have a parent} \ {at the beginning of its branch has no parent} { SELECT F.name, R.rev FROM revision R, file F WHERE R.fid = F.fid -- Get file of revision AND R.bparent IS NOT NULL -- Restrict to first on a branch AND R.parent IS NULL -- But there is no out-of-branch parent ; } # Find all revisions with a branch parent symbol whose parent # has them as primary child. Check \ {Branch starting revisions must not be primary children of their parents} \ {at the beginning of its branch is the primary child of its parent} { SELECT F.name, R.rev FROM revision R, revision P, file F WHERE R.fid = F.fid -- Get file of revision AND R.bparent IS NOT NULL -- Restrict to first on a branch AND R.parent IS NOT NULL -- Which are not detached AND R.parent = P.rid -- Get their non-branch parent AND P.child = R.rid -- which improperly has them as primary child ; } # Find all revisions with a non-NTDB child which are not on # the NTDB. Check \ {NTDB to trunk transition has to begin on NTDB} \ {has a non-NTDB child, yet is not on the NTDB} { SELECT F.name, R.rev FROM revision R, file F WHERE R.fid = F.fid -- Get file of revision AND R.dbchild IS NOT NULL -- Restrict to semi-last NTDB revision AND NOT R.isdefault -- Improperly claiming to not be on NTDB ; } # Find all revisions with a NTDB parent which are on the NTDB. Check \ {NTDB to trunk transition has to end on non-NTDB} \ {has a NTDB parent, yet is on the NTDB} { SELECT F.name, R.rev FROM revision R, file F WHERE R.fid = F.fid -- Get file of revision AND R.dbparent IS NOT NULL -- Restrict to trunk roots with NTDB around AND R.isdefault -- But root improperly claims to be on NTDB ; } # Find all revisions with a child which disagrees about the # line of development they belong to. Check \ {Revisions and their primary children have to be in the same LOD} \ {and its primary child disagree about their LOD} { SELECT F.name, R.rev FROM revision R, revision C, file F WHERE R.fid = F.fid -- Get file of revision AND R.child IS NOT NULL -- Restrict to non-leaves AND R.child = C.rid -- Get child (has to exist) AND C.lod != R.lod -- which improperly uses a different LOD ; } # Find all revisions with a non-NTDB child which agrees about # the line of development they belong to. Check \ {NTDB and trunk revisions have to be in different LODs} \ {on NTDB and its non-NTDB child wrongly agree about their LOD} { SELECT F.name, R.rev FROM revision R, revision C, file F WHERE R.fid = F.fid -- Get file of revision AND R.dbchild IS NOT NULL -- Restrict to semi-last NTDB revision AND R.dbchild = C.rid -- Get associated trunk root revision AND C.lod = R.lod -- Improperly uses the same LOD ; } # Find all revisions with a branch parent symbol which is not # their LOD. Check \ {Branch starting revisions have to have their LOD as branch parent symbol} \ {at the beginning of its branch does not have the branch symbol as its LOD} { SELECT F.name, R.rev FROM revision R, file F WHERE R.fid = F.fid -- Get file of revision AND R.bparent IS NOT NULL -- Restrict to revisions first on a branch AND R.lod != R.bparent -- and their branch is not their LOD ; } # Find all revisions with a branch parent symbol whose parent # is in the same line of development. Check \ {Revisions and their branch children have to be in different LODs} \ {at the beginning of its branch and its parent wrongly agree about their LOD} { SELECT F.name, R.rev FROM revision R, revision P, file F WHERE R.fid = F.fid -- Get file of revision AND R.bparent IS NOT NULL -- Restrict to revisions first on a branch AND R.parent = P.rid -- Get their non-branch parent AND R.lod = P.lod -- Which improperly uses the same LOD ; } return } proc Check {header label sql} { upvar 1 n n |
︙ | ︙ |