fdbc01df95 2007-10-06 aku: ## -*- tcl -*- fdbc01df95 2007-10-06 aku: # # ## ### ##### ######## ############# ##################### 66235f2430 2008-02-06 aku: ## Copyright (c) 2007-2008 Andreas Kupries. fdbc01df95 2007-10-06 aku: # fdbc01df95 2007-10-06 aku: # This software is licensed as described in the file LICENSE, which fdbc01df95 2007-10-06 aku: # you should have received as part of this distribution. fdbc01df95 2007-10-06 aku: # fdbc01df95 2007-10-06 aku: # This software consists of voluntary contributions made by many fdbc01df95 2007-10-06 aku: # individuals. For exact contribution history, see the revision fdbc01df95 2007-10-06 aku: # history and logs, available at http://fossil-scm.hwaci.com/fossil fdbc01df95 2007-10-06 aku: # # ## ### ##### ######## ############# ##################### fdbc01df95 2007-10-06 aku: c3d5104084 2007-11-02 aku: ## Pass II. This pass parses the collected rcs archives and extracts fdbc01df95 2007-10-06 aku: ## all the information they contain (revisions, and symbols). fdbc01df95 2007-10-06 aku: fdbc01df95 2007-10-06 aku: # # ## ### ##### ######## ############# ##################### fdbc01df95 2007-10-06 aku: ## Requirements fdbc01df95 2007-10-06 aku: f888f06fe3 2007-11-02 aku: package require Tcl 8.4 ; # Required runtime. f888f06fe3 2007-11-02 aku: package require snit ; # OO system. f888f06fe3 2007-11-02 aku: package require vc::tools::trouble ; # Error reporting. f888f06fe3 2007-11-02 aku: package require vc::tools::log ; # User feedback. f888f06fe3 2007-11-02 aku: package require vc::fossil::import::cvs::pass ; # Pass management. f888f06fe3 2007-11-02 aku: package require vc::fossil::import::cvs::repository ; # Repository management. f888f06fe3 2007-11-02 aku: package require vc::fossil::import::cvs::state ; # State storage. 131f051880 2007-11-09 aku: package require vc::fossil::import::cvs::integrity ; # State integrity checks. e45f47ec4a 2007-11-07 aku: package require vc::fossil::import::cvs::project::sym ; # Project level symbols. e45f47ec4a 2007-11-07 aku: package require vc::fossil::import::cvs::file::rev ; # File level revisions. f888f06fe3 2007-11-02 aku: package require vc::rcs::parser ; # Rcs archive data extraction. fdbc01df95 2007-10-06 aku: fdbc01df95 2007-10-06 aku: # # ## ### ##### ######## ############# ##################### fdbc01df95 2007-10-06 aku: ## Register the pass with the management fdbc01df95 2007-10-06 aku: fdbc01df95 2007-10-06 aku: vc::fossil::import::cvs::pass define \ fdbc01df95 2007-10-06 aku: CollectRev \ fdbc01df95 2007-10-06 aku: {Collect revisions and symbols} \ fdbc01df95 2007-10-06 aku: ::vc::fossil::import::cvs::pass::collrev fdbc01df95 2007-10-06 aku: fdbc01df95 2007-10-06 aku: # # ## ### ##### ######## ############# ##################### fdbc01df95 2007-10-06 aku: ## fdbc01df95 2007-10-06 aku: fdbc01df95 2007-10-06 aku: snit::type ::vc::fossil::import::cvs::pass::collrev { fdbc01df95 2007-10-06 aku: # # ## ### ##### ######## ############# fdbc01df95 2007-10-06 aku: ## Public API fdbc01df95 2007-10-06 aku: fdbc01df95 2007-10-06 aku: typemethod setup {} { fdbc01df95 2007-10-06 aku: # Define names and structure of the persistent state of this fdbc01df95 2007-10-06 aku: # pass. fdbc01df95 2007-10-06 aku: e288af3995 2007-12-02 aku: state use project e288af3995 2007-12-02 aku: state use file fdbc01df95 2007-10-06 aku: fdbc01df95 2007-10-06 aku: # We deal with per project and per file data, the first fdbc01df95 2007-10-06 aku: # collated from the second. fdbc01df95 2007-10-06 aku: fdbc01df95 2007-10-06 aku: # Per file we have general information, ..., and then fdbc01df95 2007-10-06 aku: # revisions and symbols. The latter can be further separated fdbc01df95 2007-10-06 aku: # into tags and branches. At project level the per-file fdbc01df95 2007-10-06 aku: # symbols information is merged. fdbc01df95 2007-10-06 aku: fdbc01df95 2007-10-06 aku: # File level ... adf168e23e 2007-10-24 aku: # Revisions, Branches, Tags fdbc01df95 2007-10-06 aku: # adf168e23e 2007-10-24 aku: # Pseudo class hierarchy adf168e23e 2007-10-24 aku: # Tag <- Symbol <- Event adf168e23e 2007-10-24 aku: # Branch <- Symbol <- Event adf168e23e 2007-10-24 aku: # Revision <- Event adf168e23e 2007-10-24 aku: e288af3995 2007-12-02 aku: state extend revision { 2c08006d9d 2007-10-25 aku: -- Revisions. Identified by a global numeric id each 2c08006d9d 2007-10-25 aku: -- belongs to a single file, identified by its id. It 2c08006d9d 2007-10-25 aku: -- further has a dotted revision number (DTN). 2c08006d9d 2007-10-25 aku: -- 2c08006d9d 2007-10-25 aku: -- Constraint: The dotted revision number is unique within 2c08006d9d 2007-10-25 aku: -- the file. See end of definition. 2c08006d9d 2007-10-25 aku: adf168e23e 2007-10-24 aku: rid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 2c08006d9d 2007-10-25 aku: fid INTEGER NOT NULL REFERENCES file, -- File owning revision. 2c08006d9d 2007-10-25 aku: rev TEXT NOT NULL, -- Dotted Rev Number. 2c08006d9d 2007-10-25 aku: 2c08006d9d 2007-10-25 aku: -- All revisions belong to a line-of-development, 2c08006d9d 2007-10-25 aku: -- identified by a symbol (project level). During data 2c08006d9d 2007-10-25 aku: -- collection it was a file-level branch symbol. 2c08006d9d 2007-10-25 aku: -- 2c08006d9d 2007-10-25 aku: -- Constraint: All the LOD symbols are in the same project 2c08006d9d 2007-10-25 aku: -- as the file itself. This cannot be 2c08006d9d 2007-10-25 aku: -- expressed in CREATE TABLE syntax. 2c08006d9d 2007-10-25 aku: 2c08006d9d 2007-10-25 aku: lod INTEGER NOT NULL REFERENCES symbol, -- Line of development 2c08006d9d 2007-10-25 aku: 2c08006d9d 2007-10-25 aku: -- The revisions in a file are organized in a forest of 2c08006d9d 2007-10-25 aku: -- trees, with the main lines defined through the parent / 2c08006d9d 2007-10-25 aku: -- child references. A revision without a parent is the 2c08006d9d 2007-10-25 aku: -- root of a tree, and a revision without a child is a 2c08006d9d 2007-10-25 aku: -- leaf. 2c08006d9d 2007-10-25 aku: 2c08006d9d 2007-10-25 aku: -- Constraints: All revisions coupled through parent/child 2c08006d9d 2007-10-25 aku: -- refer to the same LOD symbol. The parent 2c08006d9d 2007-10-25 aku: -- of a child of X is X. The child of a 2c08006d9d 2007-10-25 aku: -- parent of X is X. 2c08006d9d 2007-10-25 aku: 2c08006d9d 2007-10-25 aku: parent INTEGER REFERENCES revision, 2c08006d9d 2007-10-25 aku: child INTEGER REFERENCES revision, 2c08006d9d 2007-10-25 aku: 2c08006d9d 2007-10-25 aku: -- The representation of a branch in a tree is the 2c08006d9d 2007-10-25 aku: -- exception to the three constraints above. 2c08006d9d 2007-10-25 aku: 2c08006d9d 2007-10-25 aku: -- The beginning of a branch is represented by a non-NULL 2c08006d9d 2007-10-25 aku: -- bparent of a revision. This revision B is the first on 2c08006d9d 2007-10-25 aku: -- the branch. Its parent P is the revision the branch is 2c08006d9d 2007-10-25 aku: -- rooted in, and it is not the child of P. B and P refer 2c08006d9d 2007-10-25 aku: -- to different LOD symbols. The bparent of B is also its 2c08006d9d 2007-10-25 aku: -- LOD, and the LOD of its children. 2c08006d9d 2007-10-25 aku: 2c08006d9d 2007-10-25 aku: bparent INTEGER REFERENCES symbol, 2c08006d9d 2007-10-25 aku: 2c08006d9d 2007-10-25 aku: -- Lastly we keep information is about non-trunk default 2c08006d9d 2007-10-25 aku: -- branches (NTDB) in the revisions. 2c08006d9d 2007-10-25 aku: 2c08006d9d 2007-10-25 aku: -- All revisions on the NTDB have 'isdefault' TRUE, 2c08006d9d 2007-10-25 aku: -- everyone else FALSE. The last revision X on the NTDB 2c08006d9d 2007-10-25 aku: -- which is still considered to be on the trunk as well 2c08006d9d 2007-10-25 aku: -- has a non-NULL 'dbchild' which refers to the root of 2c08006d9d 2007-10-25 aku: -- the trunk. The root also has a non-NULL dbparent 2c08006d9d 2007-10-25 aku: -- refering to X. 2c08006d9d 2007-10-25 aku: 2c08006d9d 2007-10-25 aku: isdefault INTEGER NOT NULL, 2c08006d9d 2007-10-25 aku: dbparent INTEGER REFERENCES revision, 2c08006d9d 2007-10-25 aku: dbchild INTEGER REFERENCES revision, 2c08006d9d 2007-10-25 aku: 2c08006d9d 2007-10-25 aku: -- The main payload of the revision are the date/time it 2c08006d9d 2007-10-25 aku: -- was entered, its state, operation (= type/class), text 2c08006d9d 2007-10-25 aku: -- content, and meta data (author, log message, branch, 2c08006d9d 2007-10-25 aku: -- project). The last is encoded as single id, see table 2c08006d9d 2007-10-25 aku: -- 'meta'. The date/time is given in seconds since the 3e76f2a5f0 2008-02-03 aku: -- epoch, for easy comparison. 7ab490df24 2007-11-07 aku: 7ab490df24 2007-11-07 aku: op INTEGER NOT NULL REFERENCES optype, 2c08006d9d 2007-10-25 aku: date INTEGER NOT NULL, 2c08006d9d 2007-10-25 aku: state TEXT NOT NULL, 7ab490df24 2007-11-07 aku: mid INTEGER NOT NULL REFERENCES meta, 2c08006d9d 2007-10-25 aku: 2c08006d9d 2007-10-25 aku: UNIQUE (fid, rev) -- The DTN is unique within the revision's file. 2c08006d9d 2007-10-25 aku: } 2c08006d9d 2007-10-25 aku: aa04ac9d10 2008-02-03 aku: # Blobs contain the information needed to extract revisions aa04ac9d10 2008-02-03 aku: # from rcs archive files. As such each revision has an aa04ac9d10 2008-02-03 aku: # associated blob. However we can have blobs without aa04ac9d10 2008-02-03 aku: # revisions. This happens if a logically irrelevant revision aa04ac9d10 2008-02-03 aku: # is removed. We may however still need its blob to correctly aa04ac9d10 2008-02-03 aku: # expand other revisions, both its contents and for the aa04ac9d10 2008-02-03 aku: # ordering. aa04ac9d10 2008-02-03 aku: aa04ac9d10 2008-02-03 aku: state extend blob { aa04ac9d10 2008-02-03 aku: bid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, aa04ac9d10 2008-02-03 aku: rid INTEGER REFERENCES revision, aa04ac9d10 2008-02-03 aku: fid INTEGER NOT NULL REFERENCES file, -- File owning blob. aa04ac9d10 2008-02-03 aku: aa04ac9d10 2008-02-03 aku: -- The text content is an (offset,length) pair into the aa04ac9d10 2008-02-03 aku: -- rcs archive. For deltas we additionally refer to the aa04ac9d10 2008-02-03 aku: -- parent blob the delta is made against. aa04ac9d10 2008-02-03 aku: aa04ac9d10 2008-02-03 aku: coff INTEGER NOT NULL, aa04ac9d10 2008-02-03 aku: clen INTEGER NOT NULL, aa04ac9d10 2008-02-03 aku: pid INTEGER REFERENCES blob, aa04ac9d10 2008-02-03 aku: aa04ac9d10 2008-02-03 aku: UNIQUE (rid) aa04ac9d10 2008-02-03 aku: } { fid } aa04ac9d10 2008-02-03 aku: # Index on owning file to collect all blobs of a file when the aa04ac9d10 2008-02-03 aku: # time for its expansion comes. e288af3995 2007-12-02 aku: e288af3995 2007-12-02 aku: state extend optype { 7ab490df24 2007-11-07 aku: oid INTEGER NOT NULL PRIMARY KEY, 7ab490df24 2007-11-07 aku: name TEXT NOT NULL, e45f47ec4a 2007-11-07 aku: UNIQUE(name) e45f47ec4a 2007-11-07 aku: } 7ab490df24 2007-11-07 aku: state run { e45f47ec4a 2007-11-07 aku: INSERT INTO optype VALUES (-1,'delete'); -- The opcode names are the e45f47ec4a 2007-11-07 aku: INSERT INTO optype VALUES ( 0,'nothing'); -- fixed pieces, see myopstate e45f47ec4a 2007-11-07 aku: INSERT INTO optype VALUES ( 1,'add'); -- in file::rev. myopcode is e45f47ec4a 2007-11-07 aku: INSERT INTO optype VALUES ( 2,'change'); -- loaded from this. e45f47ec4a 2007-11-07 aku: } 95af789e1f 2007-11-10 aku: e288af3995 2007-12-02 aku: state extend revisionbranchchildren { 95af789e1f 2007-11-10 aku: -- The non-primary children of a revision, as reachable 95af789e1f 2007-11-10 aku: -- through a branch symbol, are listed here. This is 95af789e1f 2007-11-10 aku: -- needed by pass 5 to break internal dependencies in a 95af789e1f 2007-11-10 aku: -- changeset. 95af789e1f 2007-11-10 aku: 95af789e1f 2007-11-10 aku: rid INTEGER NOT NULL REFERENCES revision, 95af789e1f 2007-11-10 aku: brid INTEGER NOT NULL REFERENCES revision, 95af789e1f 2007-11-10 aku: UNIQUE(rid,brid) 95af789e1f 2007-11-10 aku: } 95af789e1f 2007-11-10 aku: e288af3995 2007-12-02 aku: state extend tag { adf168e23e 2007-10-24 aku: tid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, adf168e23e 2007-10-24 aku: fid INTEGER NOT NULL REFERENCES file, -- File the item belongs to adf168e23e 2007-10-24 aku: lod INTEGER REFERENCES symbol, -- Line of development (NULL => Trunk) adf168e23e 2007-10-24 aku: sid INTEGER NOT NULL REFERENCES symbol, -- Symbol capturing the tag adf168e23e 2007-10-24 aku: adf168e23e 2007-10-24 aku: rev INTEGER NOT NULL REFERENCES revision -- The revision being tagged. 74854a30b8 2007-12-02 aku: } { rev sid } 74854a30b8 2007-12-02 aku: # Indices on: rev (revision successors) 74854a30b8 2007-12-02 aku: # sid (tag predecessors, branch successors/predecessors) 74854a30b8 2007-12-02 aku: e288af3995 2007-12-02 aku: state extend branch { adf168e23e 2007-10-24 aku: bid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, adf168e23e 2007-10-24 aku: fid INTEGER NOT NULL REFERENCES file, -- File the item belongs to adf168e23e 2007-10-24 aku: lod INTEGER REFERENCES symbol, -- Line of development (NULL => Trunk) fdbc01df95 2007-10-06 aku: sid INTEGER NOT NULL REFERENCES symbol, -- Symbol capturing the branch adf168e23e 2007-10-24 aku: 79c227a9c0 2007-12-01 aku: root INTEGER REFERENCES revision, -- Revision the branch sprouts from fdbc01df95 2007-10-06 aku: first INTEGER REFERENCES revision, -- First revision committed to the branch 7ab490df24 2007-11-07 aku: bra TEXT NOT NULL, -- branch number 7ab490df24 2007-11-07 aku: pos INTEGER NOT NULL -- creation order in root. 79c227a9c0 2007-12-01 aku: 79c227a9c0 2007-12-01 aku: -- A branch can exist without root. It happens when the 79c227a9c0 2007-12-01 aku: -- only revision on trunk is the unnecessary dead one the 79c227a9c0 2007-12-01 aku: -- branch was sprouted from and it has commits. The branch 79c227a9c0 2007-12-01 aku: -- will exist to be the LOD of its revisions, nothing to 79c227a9c0 2007-12-01 aku: -- sprout from, the dead revision was removed, hence no 79c227a9c0 2007-12-01 aku: -- root. 74854a30b8 2007-12-02 aku: } { root first sid } 74854a30b8 2007-12-02 aku: # Indices on: root (revision successors) 74854a30b8 2007-12-02 aku: # first (revision predecessors) 74854a30b8 2007-12-02 aku: # sid (tag predecessors, branch successors/predecessors) fdbc01df95 2007-10-06 aku: fdbc01df95 2007-10-06 aku: # Project level ... fdbc01df95 2007-10-06 aku: # pLineOfDevelopment, pSymbol, pBranch, pTag, pTrunk fdbc01df95 2007-10-06 aku: # fdbc01df95 2007-10-06 aku: # pTrunk <- pLineOfDevelopment fdbc01df95 2007-10-06 aku: # pBranch <- pSymbol, pLineOfDevelopment fdbc01df95 2007-10-06 aku: # pTag <- pSymbol, pLineOfDevelopment fdbc01df95 2007-10-06 aku: e288af3995 2007-12-02 aku: state extend symbol { fdbc01df95 2007-10-06 aku: sid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, fdbc01df95 2007-10-06 aku: pid INTEGER NOT NULL REFERENCES project, -- Project the symbol belongs to fdbc01df95 2007-10-06 aku: name TEXT NOT NULL, c3d5104084 2007-11-02 aku: type INTEGER NOT NULL REFERENCES symtype, -- enum { excluded = 0, tag, branch, undefined } fdbc01df95 2007-10-06 aku: fdbc01df95 2007-10-06 aku: tag_count INTEGER NOT NULL, -- How often the symbol is used as tag. fdbc01df95 2007-10-06 aku: branch_count INTEGER NOT NULL, -- How often the symbol is used as branch fdbc01df95 2007-10-06 aku: commit_count INTEGER NOT NULL, -- How often a file was committed on the symbol fdbc01df95 2007-10-06 aku: fdbc01df95 2007-10-06 aku: UNIQUE (pid, name) -- Symbols are unique within the project fdbc01df95 2007-10-06 aku: } fdbc01df95 2007-10-06 aku: e288af3995 2007-12-02 aku: state extend blocker { 6f8667b03e 2007-10-31 aku: -- For each symbol we save which other symbols are 6f8667b03e 2007-10-31 aku: -- blocking its removal (if the user asks for it). 6f8667b03e 2007-10-31 aku: fdbc01df95 2007-10-06 aku: sid INTEGER NOT NULL REFERENCES symbol, -- fdbc01df95 2007-10-06 aku: bid INTEGER NOT NULL REFERENCES symbol, -- Sprouted from sid, blocks it. fdbc01df95 2007-10-06 aku: UNIQUE (sid, bid) fdbc01df95 2007-10-06 aku: } fdbc01df95 2007-10-06 aku: e288af3995 2007-12-02 aku: state extend parent { 6f8667b03e 2007-10-31 aku: -- For each symbol we save which other symbols can act as 6f8667b03e 2007-10-31 aku: -- a possible parent in some file, and how often. 6f8667b03e 2007-10-31 aku: fdbc01df95 2007-10-06 aku: sid INTEGER NOT NULL REFERENCES symbol, -- fdbc01df95 2007-10-06 aku: pid INTEGER NOT NULL REFERENCES symbol, -- Possible parent of sid 6f8667b03e 2007-10-31 aku: n INTEGER NOT NULL, -- How often pid can act as parent. fdbc01df95 2007-10-06 aku: UNIQUE (sid, pid) fdbc01df95 2007-10-06 aku: } fdbc01df95 2007-10-06 aku: e288af3995 2007-12-02 aku: state extend symtype { f888f06fe3 2007-11-02 aku: tid INTEGER NOT NULL PRIMARY KEY, f888f06fe3 2007-11-02 aku: name TEXT NOT NULL, f888f06fe3 2007-11-02 aku: plural TEXT NOT NULL, c3d5104084 2007-11-02 aku: UNIQUE (name) f888f06fe3 2007-11-02 aku: UNIQUE (plural) c3d5104084 2007-11-02 aku: } c3d5104084 2007-11-02 aku: state run { 6809145eb1 2008-01-19 aku: INSERT INTO symtype VALUES (0,'excluded', 'excluded'); -- The ids are the fixed 6809145eb1 2008-01-19 aku: INSERT INTO symtype VALUES (1,'tag', 'tags'); -- pieces, see project::sym, 6809145eb1 2008-01-19 aku: INSERT INTO symtype VALUES (2,'branch', 'branches'); -- getsymtypes and associated 6809145eb1 2008-01-19 aku: INSERT INTO symtype VALUES (3,'undefined','undefined'); -- typevariables. c3d5104084 2007-11-02 aku: } c3d5104084 2007-11-02 aku: e288af3995 2007-12-02 aku: state extend meta { 2c08006d9d 2007-10-25 aku: -- Meta data of revisions. See revision.mid for the 2c08006d9d 2007-10-25 aku: -- reference. Many revisions can share meta data. This is 2c08006d9d 2007-10-25 aku: -- actually one of the criterions used to sort revisions 2c08006d9d 2007-10-25 aku: -- into changesets. 2c08006d9d 2007-10-25 aku: fdbc01df95 2007-10-06 aku: mid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 2c08006d9d 2007-10-25 aku: 2c08006d9d 2007-10-25 aku: -- Meta data belongs to a specific project, stronger, to a 2c08006d9d 2007-10-25 aku: -- branch in that project. It further has a log message, 2c08006d9d 2007-10-25 aku: -- and its author. This is unique with the project and 2c08006d9d 2007-10-25 aku: -- branch. 2c08006d9d 2007-10-25 aku: 2c08006d9d 2007-10-25 aku: pid INTEGER NOT NULL REFERENCES project, -- 2c08006d9d 2007-10-25 aku: bid INTEGER NOT NULL REFERENCES symbol, -- 2c08006d9d 2007-10-25 aku: aid INTEGER NOT NULL REFERENCES author, -- 2c08006d9d 2007-10-25 aku: cid INTEGER NOT NULL REFERENCES cmessage, -- fdbc01df95 2007-10-06 aku: fdbc01df95 2007-10-06 aku: UNIQUE (pid, bid, aid, cid) 2c08006d9d 2007-10-25 aku: 2c08006d9d 2007-10-25 aku: -- Constraints: The project of the meta data of a revision 2c08006d9d 2007-10-25 aku: -- X is the same as the project of X itself. 2c08006d9d 2007-10-25 aku: -- 2c08006d9d 2007-10-25 aku: -- ............ The branch of the meta data of a revision 2c08006d9d 2007-10-25 aku: -- X is the same as the line of development 2c08006d9d 2007-10-25 aku: -- of X itself. fdbc01df95 2007-10-06 aku: } fdbc01df95 2007-10-06 aku: 2c08006d9d 2007-10-25 aku: # Authors and commit messages are fully global, i.e. per 2c08006d9d 2007-10-25 aku: # repository. 2c08006d9d 2007-10-25 aku: e288af3995 2007-12-02 aku: state extend author { 6809145eb1 2008-01-19 aku: aid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, -- Pool of the unique 6809145eb1 2008-01-19 aku: name TEXT NOT NULL UNIQUE -- author names. fdbc01df95 2007-10-06 aku: } fdbc01df95 2007-10-06 aku: e288af3995 2007-12-02 aku: state extend cmessage { 6809145eb1 2008-01-19 aku: cid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, -- Pool of the unique 6809145eb1 2008-01-19 aku: text TEXT NOT NULL UNIQUE -- log messages fdbc01df95 2007-10-06 aku: } fdbc01df95 2007-10-06 aku: f888f06fe3 2007-11-02 aku: project::sym getsymtypes e45f47ec4a 2007-11-07 aku: file::rev getopcodes ae19c0fcb4 2007-10-13 aku: return ae19c0fcb4 2007-10-13 aku: } ae19c0fcb4 2007-10-13 aku: ae19c0fcb4 2007-10-13 aku: typemethod load {} { e288af3995 2007-12-02 aku: state use symbol e288af3995 2007-12-02 aku: state use symtype e288af3995 2007-12-02 aku: state use optype f888f06fe3 2007-11-02 aku: f888f06fe3 2007-11-02 aku: project::sym getsymtypes e45f47ec4a 2007-11-07 aku: file::rev getopcodes f888f06fe3 2007-11-02 aku: repository loadsymbols fdbc01df95 2007-10-06 aku: return fdbc01df95 2007-10-06 aku: } fdbc01df95 2007-10-06 aku: fdbc01df95 2007-10-06 aku: typemethod run {} { ae19c0fcb4 2007-10-13 aku: # Pass manager interface. Executed to perform the ae19c0fcb4 2007-10-13 aku: # functionality of the pass. ae19c0fcb4 2007-10-13 aku: 8a93ffa9c1 2007-10-06 aku: set rbase [repository base?] 8a93ffa9c1 2007-10-06 aku: foreach project [repository projects] { 7208c7ac4d 2008-01-28 mjanssen: set base [::file join $rbase [$project base]] 8a93ffa9c1 2007-10-06 aku: log write 1 collrev "Processing $base" 8a93ffa9c1 2007-10-06 aku: 8a93ffa9c1 2007-10-06 aku: foreach file [$project files] { 8a93ffa9c1 2007-10-06 aku: set path [$file path] 8a93ffa9c1 2007-10-06 aku: log write 2 collrev "Parsing $path" be891232a2 2007-10-12 aku: if {[catch { 7208c7ac4d 2008-01-28 mjanssen: parser process [::file join $base $path] $file be891232a2 2007-10-12 aku: } msg]} { be891232a2 2007-10-12 aku: global errorCode be891232a2 2007-10-12 aku: if {$errorCode eq "vc::rcs::parser"} { be891232a2 2007-10-12 aku: trouble fatal "$path is not a valid RCS archive ($msg)" be891232a2 2007-10-12 aku: } else { be891232a2 2007-10-12 aku: global errorInfo be891232a2 2007-10-12 aku: trouble internal $errorInfo be891232a2 2007-10-12 aku: } adf168e23e 2007-10-24 aku: } else { adf168e23e 2007-10-24 aku: # We persist the core of the data collected about adf168e23e 2007-10-24 aku: # each file immediately after it has been parsed adf168e23e 2007-10-24 aku: # and wrangled into shape, and then drop it from adf168e23e 2007-10-24 aku: # memory. This is done to keep the amount of adf168e23e 2007-10-24 aku: # required memory within sensible limits. Without adf168e23e 2007-10-24 aku: # doing it this way we would easily gobble up 1G adf168e23e 2007-10-24 aku: # of RAM or more with all the objects (revisions adf168e23e 2007-10-24 aku: # and file-level symbols). adf168e23e 2007-10-24 aku: adf168e23e 2007-10-24 aku: $file persist be891232a2 2007-10-12 aku: } 3a00ac5aa2 2007-10-23 aku: 3a00ac5aa2 2007-10-23 aku: $file drop 3a00ac5aa2 2007-10-23 aku: } 6f8667b03e 2007-10-31 aku: 6f8667b03e 2007-10-31 aku: $project purgeghostsymbols 8a93ffa9c1 2007-10-06 aku: } 8a93ffa9c1 2007-10-06 aku: 8a93ffa9c1 2007-10-06 aku: repository persistrev 96b7bfb834 2007-11-16 aku: repository printrevstatistics 131f051880 2007-11-09 aku: integrity strict 8a93ffa9c1 2007-10-06 aku: fdbc01df95 2007-10-06 aku: log write 1 collrev "Scan completed" ae19c0fcb4 2007-10-13 aku: return ae19c0fcb4 2007-10-13 aku: } ae19c0fcb4 2007-10-13 aku: ae19c0fcb4 2007-10-13 aku: typemethod discard {} { ae19c0fcb4 2007-10-13 aku: # Pass manager interface. Executed for all passes after the ae19c0fcb4 2007-10-13 aku: # run passes, to remove all data of this pass from the state, ae19c0fcb4 2007-10-13 aku: # as being out of date. ae19c0fcb4 2007-10-13 aku: ae19c0fcb4 2007-10-13 aku: state discard revision ae19c0fcb4 2007-10-13 aku: state discard tag ae19c0fcb4 2007-10-13 aku: state discard branch ae19c0fcb4 2007-10-13 aku: state discard symbol ae19c0fcb4 2007-10-13 aku: state discard blocker ae19c0fcb4 2007-10-13 aku: state discard parent c3d5104084 2007-11-02 aku: state discard symtype ae19c0fcb4 2007-10-13 aku: state discard meta ae19c0fcb4 2007-10-13 aku: state discard author ae19c0fcb4 2007-10-13 aku: state discard cmessage 2434ad3bfe 2007-10-26 aku: return 2434ad3bfe 2007-10-26 aku: } 2434ad3bfe 2007-10-26 aku: 808fbc4745 2007-12-08 aku: # TODO: Move this code to the integrity module 2434ad3bfe 2007-10-26 aku: proc Paranoia {} { 2434ad3bfe 2007-10-26 aku: # This code performs a number of paranoid checks of the 6f8667b03e 2007-10-31 aku: # database, searching for inconsistent cross-references. 2434ad3bfe 2007-10-26 aku: log write 4 collrev {Check database consistency} 2434ad3bfe 2007-10-26 aku: 831e8f360d 2007-10-27 aku: set n 0 ; # Counter for the checks (we print an id before the 831e8f360d 2007-10-27 aku: # main label). 2434ad3bfe 2007-10-26 aku: 2434ad3bfe 2007-10-26 aku: # Find all revisions which disagree with their line of 2434ad3bfe 2007-10-26 aku: # development about the project they are owned by. 2434ad3bfe 2007-10-26 aku: Check \ 2434ad3bfe 2007-10-26 aku: {Revisions and their LODs have to be in the same project} \ 2434ad3bfe 2007-10-26 aku: {disagrees with its LOD about owning project} { 2434ad3bfe 2007-10-26 aku: SELECT F.name, R.rev 808fbc4745 2007-12-08 aku: FROM revision R, file F, symbol S 808fbc4745 2007-12-08 aku: WHERE R.fid = F.fid -- Get file of revision 808fbc4745 2007-12-08 aku: AND R.lod = S.sid -- Get symbol for revision's LOD 808fbc4745 2007-12-08 aku: AND F.pid != S.pid -- but symbol is for a different project 2434ad3bfe 2007-10-26 aku: ; 2434ad3bfe 2007-10-26 aku: } 2434ad3bfe 2007-10-26 aku: # Find all revisions which disgree with their meta data about 2434ad3bfe 2007-10-26 aku: # the project they are owned by. 2434ad3bfe 2007-10-26 aku: Check \ 2434ad3bfe 2007-10-26 aku: {Revisions and their meta data have to be in the same project} \ 2434ad3bfe 2007-10-26 aku: {disagrees with its meta data about owning project} { 2434ad3bfe 2007-10-26 aku: SELECT F.name, R.rev 808fbc4745 2007-12-08 aku: FROM revision R, file F, meta M 808fbc4745 2007-12-08 aku: WHERE R.fid = F.fid -- Get file of revision 808fbc4745 2007-12-08 aku: AND R.mid = M.mid -- Get meta data of revision 808fbc4745 2007-12-08 aku: AND F.pid != M.pid -- but is for a different project 2434ad3bfe 2007-10-26 aku: ; 2434ad3bfe 2007-10-26 aku: } 2434ad3bfe 2007-10-26 aku: # Find all revisions which disgree with their meta data about 2434ad3bfe 2007-10-26 aku: # the branch/line of development they belong to. 2434ad3bfe 2007-10-26 aku: Check \ 2434ad3bfe 2007-10-26 aku: {Revisions and their meta data have to be in the same LOD} \ 2434ad3bfe 2007-10-26 aku: {disagrees with its meta data about owning LOD} { 2434ad3bfe 2007-10-26 aku: SELECT F.name, R.rev 808fbc4745 2007-12-08 aku: FROM revision R, meta M, file F 808fbc4745 2007-12-08 aku: WHERE R.mid = M.mid -- Get meta data of revision 808fbc4745 2007-12-08 aku: AND R.lod != M.bid -- but is for a different LOD 808fbc4745 2007-12-08 aku: AND R.fid = F.fid -- Get file of revision 70d4a81162 2007-10-26 aku: ; 70d4a81162 2007-10-26 aku: } 70d4a81162 2007-10-26 aku: # Find all revisions with a primary child which disagrees 70d4a81162 2007-10-26 aku: # about the file they belong to. 70d4a81162 2007-10-26 aku: Check \ 70d4a81162 2007-10-26 aku: {Revisions and their primary children have to be in the same file} \ 70d4a81162 2007-10-26 aku: {disagrees with its primary child about the owning file} { 70d4a81162 2007-10-26 aku: SELECT F.name, R.rev 808fbc4745 2007-12-08 aku: FROM revision R, revision C, file F 808fbc4745 2007-12-08 aku: WHERE R.fid = F.fid -- Get file of revision 808fbc4745 2007-12-08 aku: AND R.child IS NOT NULL -- Restrict to non-leaf revisions 808fbc4745 2007-12-08 aku: AND R.child = C.rid -- Get child (has to exist) 808fbc4745 2007-12-08 aku: AND C.fid != R.fid -- Whic wrongly is in a different file 70d4a81162 2007-10-26 aku: ; 70d4a81162 2007-10-26 aku: } 70d4a81162 2007-10-26 aku: 70d4a81162 2007-10-26 aku: # Find all revisions with a branch parent symbol whose parent 70d4a81162 2007-10-26 aku: # disagrees about the file they belong to. 70d4a81162 2007-10-26 aku: Check \ 70d4a81162 2007-10-26 aku: {Revisions and their branch children have to be in the same file} \ 70d4a81162 2007-10-26 aku: {at the beginning of its branch and its parent disagree about the owning file} { 70d4a81162 2007-10-26 aku: SELECT F.name, R.rev 808fbc4745 2007-12-08 aku: FROM revision R, revision P, file F 808fbc4745 2007-12-08 aku: WHERE R.fid = F.fid -- Get file of revision 808fbc4745 2007-12-08 aku: AND R.bparent IS NOT NULL -- Restrict to first on branch 808fbc4745 2007-12-08 aku: AND R.parent = P.rid -- Get out-of-branch parent 808fbc4745 2007-12-08 aku: AND R.fid != P.fid -- Which wrongly is in a different file 2434ad3bfe 2007-10-26 aku: ; 2434ad3bfe 2007-10-26 aku: } 2434ad3bfe 2007-10-26 aku: # Find all revisions with a non-NTDB child which disagrees 2434ad3bfe 2007-10-26 aku: # about the file they belong to. 2434ad3bfe 2007-10-26 aku: Check \ 2434ad3bfe 2007-10-26 aku: {Revisions and their non-NTDB children have to be in the same file} \ 2434ad3bfe 2007-10-26 aku: {disagrees with its non-NTDB child about the owning file} { 2434ad3bfe 2007-10-26 aku: SELECT F.name, R.rev 808fbc4745 2007-12-08 aku: FROM revision R, revision C, file F 808fbc4745 2007-12-08 aku: WHERE R.fid = F.fid -- Get file of revision 808fbc4745 2007-12-08 aku: AND R.dbchild IS NOT NULL -- Restrict to semi-last NTDB revision 808fbc4745 2007-12-08 aku: AND R.dbchild = C.rid -- Got to associated trunk revision 808fbc4745 2007-12-08 aku: AND C.fid != R.fid -- Which wrongly is in a different file 70d4a81162 2007-10-26 aku: ; 70d4a81162 2007-10-26 aku: } 70d4a81162 2007-10-26 aku: # Find all revisions which have a primary child, but the child 70d4a81162 2007-10-26 aku: # does not have them as parent. 70d4a81162 2007-10-26 aku: Check \ 70d4a81162 2007-10-26 aku: {Revisions have to be parents of their primary children} \ 70d4a81162 2007-10-26 aku: {is not the parent of its primary child} { 70d4a81162 2007-10-26 aku: SELECT F.name, R.rev 808fbc4745 2007-12-08 aku: FROM revision R, revision C, file F 808fbc4745 2007-12-08 aku: WHERE R.fid = F.fid -- Get file of revision 808fbc4745 2007-12-08 aku: AND R.child IS NOT NULL -- Restrict to non-leaves 808fbc4745 2007-12-08 aku: AND R.child = C.rid -- Get the child (has to exist) 808fbc4745 2007-12-08 aku: AND C.parent != R.rid -- Which does not have us as its parent. 2434ad3bfe 2007-10-26 aku: ; 2434ad3bfe 2007-10-26 aku: } 70d4a81162 2007-10-26 aku: # Find all revisions which have a primrary child, but the 70d4a81162 2007-10-26 aku: # child has a branch parent symbol making them brach starters. 2434ad3bfe 2007-10-26 aku: Check \ 70d4a81162 2007-10-26 aku: {Primary children of revisions must not start branches} \ 70d4a81162 2007-10-26 aku: {is parent of a primary child which is the beginning of a branch} { 2434ad3bfe 2007-10-26 aku: SELECT F.name, R.rev 808fbc4745 2007-12-08 aku: FROM revision R, revision C, file F 808fbc4745 2007-12-08 aku: WHERE R.fid = F.fid -- Get file of revision 808fbc4745 2007-12-08 aku: AND R.child IS NOT NULL -- Restrict to non-leaves 808fbc4745 2007-12-08 aku: AND R.child = C.rid -- Get the child (has to exist) 808fbc4745 2007-12-08 aku: AND C.bparent IS NOT NULL -- wrongly claiming to be first on branch 2434ad3bfe 2007-10-26 aku: ; 2434ad3bfe 2007-10-26 aku: } 70d4a81162 2007-10-26 aku: # Find all revisions without branch parent symbol which have a 70d4a81162 2007-10-26 aku: # parent, but the parent does not have them as primary child. 2434ad3bfe 2007-10-26 aku: Check \ 70d4a81162 2007-10-26 aku: {Revisions have to be primary children of their parents, if any} \ 2434ad3bfe 2007-10-26 aku: {is not the child of its parent} { 2434ad3bfe 2007-10-26 aku: SELECT F.name, R.rev 808fbc4745 2007-12-08 aku: FROM revision R, revision P, file F 808fbc4745 2007-12-08 aku: WHERE R.fid = F.fid 808fbc4745 2007-12-08 aku: AND R.bparent IS NULL -- Get file of revision 808fbc4745 2007-12-08 aku: AND R.parent IS NOT NULL -- Restrict to everything not first on a branch 808fbc4745 2007-12-08 aku: AND R.parent = P.rid -- Get the parent (has to exist) 808fbc4745 2007-12-08 aku: AND P.child != R.rid -- Which do not have us as their child 2434ad3bfe 2007-10-26 aku: ; 2434ad3bfe 2007-10-26 aku: } 70d4a81162 2007-10-26 aku: # Find all revisions with a branch parent symbol which do not 70d4a81162 2007-10-26 aku: # have a parent. 2434ad3bfe 2007-10-26 aku: Check \ 2434ad3bfe 2007-10-26 aku: {Branch starting revisions have to have a parent} \ 2434ad3bfe 2007-10-26 aku: {at the beginning of its branch has no parent} { 2434ad3bfe 2007-10-26 aku: SELECT F.name, R.rev 808fbc4745 2007-12-08 aku: FROM revision R, file F 808fbc4745 2007-12-08 aku: WHERE R.fid = F.fid -- Get file of revision 808fbc4745 2007-12-08 aku: AND R.bparent IS NOT NULL -- Restrict to first on a branch 808fbc4745 2007-12-08 aku: AND R.parent IS NULL -- But there is no out-of-branch parent 2434ad3bfe 2007-10-26 aku: ; 2434ad3bfe 2007-10-26 aku: } 70d4a81162 2007-10-26 aku: # Find all revisions with a branch parent symbol whose parent 70d4a81162 2007-10-26 aku: # has them as primary child. 2434ad3bfe 2007-10-26 aku: Check \ 70d4a81162 2007-10-26 aku: {Branch starting revisions must not be primary children of their parents} \ 70d4a81162 2007-10-26 aku: {at the beginning of its branch is the primary child of its parent} { 2434ad3bfe 2007-10-26 aku: SELECT F.name, R.rev 808fbc4745 2007-12-08 aku: FROM revision R, revision P, file F 808fbc4745 2007-12-08 aku: WHERE R.fid = F.fid -- Get file of revision 808fbc4745 2007-12-08 aku: AND R.bparent IS NOT NULL -- Restrict to first on a branch 808fbc4745 2007-12-08 aku: AND R.parent IS NOT NULL -- Which are not detached 808fbc4745 2007-12-08 aku: AND R.parent = P.rid -- Get their non-branch parent 808fbc4745 2007-12-08 aku: AND P.child = R.rid -- which improperly has them as primary child 2434ad3bfe 2007-10-26 aku: ; 2434ad3bfe 2007-10-26 aku: } 2434ad3bfe 2007-10-26 aku: # Find all revisions with a non-NTDB child which are not on 2434ad3bfe 2007-10-26 aku: # the NTDB. 2434ad3bfe 2007-10-26 aku: Check \ 2434ad3bfe 2007-10-26 aku: {NTDB to trunk transition has to begin on NTDB} \ 2434ad3bfe 2007-10-26 aku: {has a non-NTDB child, yet is not on the NTDB} { 2434ad3bfe 2007-10-26 aku: SELECT F.name, R.rev 808fbc4745 2007-12-08 aku: FROM revision R, file F 808fbc4745 2007-12-08 aku: WHERE R.fid = F.fid -- Get file of revision 808fbc4745 2007-12-08 aku: AND R.dbchild IS NOT NULL -- Restrict to semi-last NTDB revision 808fbc4745 2007-12-08 aku: AND NOT R.isdefault -- Improperly claiming to not be on NTDB 2434ad3bfe 2007-10-26 aku: ; 2434ad3bfe 2007-10-26 aku: } 2434ad3bfe 2007-10-26 aku: # Find all revisions with a NTDB parent which are on the NTDB. 2434ad3bfe 2007-10-26 aku: Check \ 2434ad3bfe 2007-10-26 aku: {NTDB to trunk transition has to end on non-NTDB} \ 2434ad3bfe 2007-10-26 aku: {has a NTDB parent, yet is on the NTDB} { 2434ad3bfe 2007-10-26 aku: SELECT F.name, R.rev 808fbc4745 2007-12-08 aku: FROM revision R, file F 808fbc4745 2007-12-08 aku: WHERE R.fid = F.fid -- Get file of revision 808fbc4745 2007-12-08 aku: AND R.dbparent IS NOT NULL -- Restrict to trunk roots with NTDB around 808fbc4745 2007-12-08 aku: AND R.isdefault -- But root improperly claims to be on NTDB 2434ad3bfe 2007-10-26 aku: ; 2434ad3bfe 2007-10-26 aku: } 2434ad3bfe 2007-10-26 aku: # Find all revisions with a child which disagrees about the 2434ad3bfe 2007-10-26 aku: # line of development they belong to. 2434ad3bfe 2007-10-26 aku: Check \ 70d4a81162 2007-10-26 aku: {Revisions and their primary children have to be in the same LOD} \ 70d4a81162 2007-10-26 aku: {and its primary child disagree about their LOD} { 2434ad3bfe 2007-10-26 aku: SELECT F.name, R.rev 808fbc4745 2007-12-08 aku: FROM revision R, revision C, file F 808fbc4745 2007-12-08 aku: WHERE R.fid = F.fid -- Get file of revision 808fbc4745 2007-12-08 aku: AND R.child IS NOT NULL -- Restrict to non-leaves 808fbc4745 2007-12-08 aku: AND R.child = C.rid -- Get child (has to exist) 808fbc4745 2007-12-08 aku: AND C.lod != R.lod -- which improperly uses a different LOD 2434ad3bfe 2007-10-26 aku: ; 2434ad3bfe 2007-10-26 aku: } 2434ad3bfe 2007-10-26 aku: # Find all revisions with a non-NTDB child which agrees about 2434ad3bfe 2007-10-26 aku: # the line of development they belong to. 2434ad3bfe 2007-10-26 aku: Check \ 2434ad3bfe 2007-10-26 aku: {NTDB and trunk revisions have to be in different LODs} \ 2434ad3bfe 2007-10-26 aku: {on NTDB and its non-NTDB child wrongly agree about their LOD} { 2434ad3bfe 2007-10-26 aku: SELECT F.name, R.rev 808fbc4745 2007-12-08 aku: FROM revision R, revision C, file F 808fbc4745 2007-12-08 aku: WHERE R.fid = F.fid -- Get file of revision 808fbc4745 2007-12-08 aku: AND R.dbchild IS NOT NULL -- Restrict to semi-last NTDB revision 808fbc4745 2007-12-08 aku: AND R.dbchild = C.rid -- Get associated trunk root revision 808fbc4745 2007-12-08 aku: AND C.lod = R.lod -- Improperly uses the same LOD 2434ad3bfe 2007-10-26 aku: ; 2434ad3bfe 2007-10-26 aku: } 70d4a81162 2007-10-26 aku: # Find all revisions with a branch parent symbol which is not 70d4a81162 2007-10-26 aku: # their LOD. 2434ad3bfe 2007-10-26 aku: Check \ 70d4a81162 2007-10-26 aku: {Branch starting revisions have to have their LOD as branch parent symbol} \ 70d4a81162 2007-10-26 aku: {at the beginning of its branch does not have the branch symbol as its LOD} { 2434ad3bfe 2007-10-26 aku: SELECT F.name, R.rev 808fbc4745 2007-12-08 aku: FROM revision R, file F 808fbc4745 2007-12-08 aku: WHERE R.fid = F.fid -- Get file of revision 808fbc4745 2007-12-08 aku: AND R.bparent IS NOT NULL -- Restrict to revisions first on a branch 808fbc4745 2007-12-08 aku: AND R.lod != R.bparent -- and their branch is not their LOD 2434ad3bfe 2007-10-26 aku: ; 2434ad3bfe 2007-10-26 aku: } 70d4a81162 2007-10-26 aku: # Find all revisions with a branch parent symbol whose parent 70d4a81162 2007-10-26 aku: # is in the same line of development. 2434ad3bfe 2007-10-26 aku: Check \ 2434ad3bfe 2007-10-26 aku: {Revisions and their branch children have to be in different LODs} \ 2434ad3bfe 2007-10-26 aku: {at the beginning of its branch and its parent wrongly agree about their LOD} { 2434ad3bfe 2007-10-26 aku: SELECT F.name, R.rev 808fbc4745 2007-12-08 aku: FROM revision R, revision P, file F 808fbc4745 2007-12-08 aku: WHERE R.fid = F.fid -- Get file of revision 808fbc4745 2007-12-08 aku: AND R.bparent IS NOT NULL -- Restrict to revisions first on a branch 808fbc4745 2007-12-08 aku: AND R.parent = P.rid -- Get their non-branch parent 808fbc4745 2007-12-08 aku: AND R.lod = P.lod -- Which improperly uses the same LOD 2434ad3bfe 2007-10-26 aku: ; 2434ad3bfe 2007-10-26 aku: } 2434ad3bfe 2007-10-26 aku: return 2434ad3bfe 2007-10-26 aku: } 2434ad3bfe 2007-10-26 aku: 2434ad3bfe 2007-10-26 aku: proc Check {header label sql} { 2434ad3bfe 2007-10-26 aku: upvar 1 n n 2434ad3bfe 2007-10-26 aku: set ok 1 2434ad3bfe 2007-10-26 aku: foreach {fname revnr} [state run $sql] { 2434ad3bfe 2007-10-26 aku: set ok 0 2434ad3bfe 2007-10-26 aku: trouble fatal "$fname <$revnr> $label" 2434ad3bfe 2007-10-26 aku: } 2434ad3bfe 2007-10-26 aku: log write 5 collrev "\[[format %02d [incr n]]\] [expr {$ok ? "Ok " : "Failed"}] ... $header" fdbc01df95 2007-10-06 aku: return fdbc01df95 2007-10-06 aku: } fdbc01df95 2007-10-06 aku: fdbc01df95 2007-10-06 aku: # # ## ### ##### ######## ############# fdbc01df95 2007-10-06 aku: ## Internal methods fdbc01df95 2007-10-06 aku: fdbc01df95 2007-10-06 aku: # # ## ### ##### ######## ############# fdbc01df95 2007-10-06 aku: ## Configuration fdbc01df95 2007-10-06 aku: fdbc01df95 2007-10-06 aku: pragma -hasinstances no ; # singleton fdbc01df95 2007-10-06 aku: pragma -hastypeinfo no ; # no introspection fdbc01df95 2007-10-06 aku: pragma -hastypedestroy no ; # immortal fdbc01df95 2007-10-06 aku: fdbc01df95 2007-10-06 aku: # # ## ### ##### ######## ############# fdbc01df95 2007-10-06 aku: } fdbc01df95 2007-10-06 aku: fdbc01df95 2007-10-06 aku: namespace eval ::vc::fossil::import::cvs::pass { fdbc01df95 2007-10-06 aku: namespace export collrev fdbc01df95 2007-10-06 aku: namespace eval collrev { ec053168a8 2007-10-06 aku: namespace import ::vc::rcs::parser fdbc01df95 2007-10-06 aku: namespace import ::vc::fossil::import::cvs::repository fdbc01df95 2007-10-06 aku: namespace import ::vc::fossil::import::cvs::state 131f051880 2007-11-09 aku: namespace import ::vc::fossil::import::cvs::integrity f888f06fe3 2007-11-02 aku: namespace eval project { f888f06fe3 2007-11-02 aku: namespace import ::vc::fossil::import::cvs::project::sym e45f47ec4a 2007-11-07 aku: } e45f47ec4a 2007-11-07 aku: namespace eval file { e45f47ec4a 2007-11-07 aku: namespace import ::vc::fossil::import::cvs::file::rev f888f06fe3 2007-11-02 aku: } fdbc01df95 2007-10-06 aku: namespace import ::vc::tools::trouble fdbc01df95 2007-10-06 aku: namespace import ::vc::tools::log fdbc01df95 2007-10-06 aku: log register collrev fdbc01df95 2007-10-06 aku: } fdbc01df95 2007-10-06 aku: } fdbc01df95 2007-10-06 aku: fdbc01df95 2007-10-06 aku: # # ## ### ##### ######## ############# ##################### fdbc01df95 2007-10-06 aku: ## Ready fdbc01df95 2007-10-06 aku: fdbc01df95 2007-10-06 aku: package provide vc::fossil::import::cvs::pass::collrev 1.0 fdbc01df95 2007-10-06 aku: return