43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
# # ## ### ##### ######## #############
## Public API
typemethod setup {} {
# Define names and structure of the persistent state of this
# pass.
state reading project
state reading file
# We deal with per project and per file data, the first
# collated from the second.
# Per file we have general information, ..., and then
# revisions and symbols. The latter can be further separated
# into tags and branches. At project level the per-file
# symbols information is merged.
# File level ...
# Revisions, Branches, Tags
#
# Pseudo class hierarchy
# Tag <- Symbol <- Event
# Branch <- Symbol <- Event
# Revision <- Event
state writing revision {
-- Revisions. Identified by a global numeric id each
-- belongs to a single file, identified by its id. It
-- further has a dotted revision number (DTN).
--
-- Constraint: The dotted revision number is unique within
-- the file. See end of definition.
|
|
|
|
|
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
# # ## ### ##### ######## #############
## Public API
typemethod setup {} {
# Define names and structure of the persistent state of this
# pass.
state use project
state use file
# We deal with per project and per file data, the first
# collated from the second.
# Per file we have general information, ..., and then
# revisions and symbols. The latter can be further separated
# into tags and branches. At project level the per-file
# symbols information is merged.
# File level ...
# Revisions, Branches, Tags
#
# Pseudo class hierarchy
# Tag <- Symbol <- Event
# Branch <- Symbol <- Event
# Revision <- Event
state extend revision {
-- Revisions. Identified by a global numeric id each
-- belongs to a single file, identified by its id. It
-- further has a dotted revision number (DTN).
--
-- Constraint: The dotted revision number is unique within
-- the file. See end of definition.
|
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
|
mid INTEGER NOT NULL REFERENCES meta,
coff INTEGER NOT NULL,
clen INTEGER NOT NULL,
UNIQUE (fid, rev) -- The DTN is unique within the revision's file.
}
state writing optype {
oid INTEGER NOT NULL PRIMARY KEY,
name TEXT NOT NULL,
UNIQUE(name)
}
state run {
INSERT INTO optype VALUES (-1,'delete'); -- The opcode names are the
INSERT INTO optype VALUES ( 0,'nothing'); -- fixed pieces, see myopstate
INSERT INTO optype VALUES ( 1,'add'); -- in file::rev. myopcode is
INSERT INTO optype VALUES ( 2,'change'); -- loaded from this.
}
state writing revisionbranchchildren {
-- The non-primary children of a revision, as reachable
-- through a branch symbol, are listed here. This is
-- needed by pass 5 to break internal dependencies in a
-- changeset.
rid INTEGER NOT NULL REFERENCES revision,
brid INTEGER NOT NULL REFERENCES revision,
UNIQUE(rid,brid)
}
state writing tag {
tid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
fid INTEGER NOT NULL REFERENCES file, -- File the item belongs to
lod INTEGER REFERENCES symbol, -- Line of development (NULL => Trunk)
sid INTEGER NOT NULL REFERENCES symbol, -- Symbol capturing the tag
rev INTEGER NOT NULL REFERENCES revision -- The revision being tagged.
} { rev sid }
# Indices on: rev (revision successors)
# sid (tag predecessors, branch successors/predecessors)
state writing branch {
bid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
fid INTEGER NOT NULL REFERENCES file, -- File the item belongs to
lod INTEGER REFERENCES symbol, -- Line of development (NULL => Trunk)
sid INTEGER NOT NULL REFERENCES symbol, -- Symbol capturing the branch
root INTEGER REFERENCES revision, -- Revision the branch sprouts from
first INTEGER REFERENCES revision, -- First revision committed to the branch
|
|
|
|
|
|
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
|
mid INTEGER NOT NULL REFERENCES meta,
coff INTEGER NOT NULL,
clen INTEGER NOT NULL,
UNIQUE (fid, rev) -- The DTN is unique within the revision's file.
}
state extend optype {
oid INTEGER NOT NULL PRIMARY KEY,
name TEXT NOT NULL,
UNIQUE(name)
}
state run {
INSERT INTO optype VALUES (-1,'delete'); -- The opcode names are the
INSERT INTO optype VALUES ( 0,'nothing'); -- fixed pieces, see myopstate
INSERT INTO optype VALUES ( 1,'add'); -- in file::rev. myopcode is
INSERT INTO optype VALUES ( 2,'change'); -- loaded from this.
}
state extend revisionbranchchildren {
-- The non-primary children of a revision, as reachable
-- through a branch symbol, are listed here. This is
-- needed by pass 5 to break internal dependencies in a
-- changeset.
rid INTEGER NOT NULL REFERENCES revision,
brid INTEGER NOT NULL REFERENCES revision,
UNIQUE(rid,brid)
}
state extend tag {
tid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
fid INTEGER NOT NULL REFERENCES file, -- File the item belongs to
lod INTEGER REFERENCES symbol, -- Line of development (NULL => Trunk)
sid INTEGER NOT NULL REFERENCES symbol, -- Symbol capturing the tag
rev INTEGER NOT NULL REFERENCES revision -- The revision being tagged.
} { rev sid }
# Indices on: rev (revision successors)
# sid (tag predecessors, branch successors/predecessors)
state extend branch {
bid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
fid INTEGER NOT NULL REFERENCES file, -- File the item belongs to
lod INTEGER REFERENCES symbol, -- Line of development (NULL => Trunk)
sid INTEGER NOT NULL REFERENCES symbol, -- Symbol capturing the branch
root INTEGER REFERENCES revision, -- Revision the branch sprouts from
first INTEGER REFERENCES revision, -- First revision committed to the branch
|
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
|
# Project level ...
# pLineOfDevelopment, pSymbol, pBranch, pTag, pTrunk
#
# pTrunk <- pLineOfDevelopment
# pBranch <- pSymbol, pLineOfDevelopment
# pTag <- pSymbol, pLineOfDevelopment
state writing symbol {
sid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
pid INTEGER NOT NULL REFERENCES project, -- Project the symbol belongs to
name TEXT NOT NULL,
type INTEGER NOT NULL REFERENCES symtype, -- enum { excluded = 0, tag, branch, undefined }
tag_count INTEGER NOT NULL, -- How often the symbol is used as tag.
branch_count INTEGER NOT NULL, -- How often the symbol is used as branch
commit_count INTEGER NOT NULL, -- How often a file was committed on the symbol
UNIQUE (pid, name) -- Symbols are unique within the project
}
state writing blocker {
-- For each symbol we save which other symbols are
-- blocking its removal (if the user asks for it).
sid INTEGER NOT NULL REFERENCES symbol, --
bid INTEGER NOT NULL REFERENCES symbol, -- Sprouted from sid, blocks it.
UNIQUE (sid, bid)
}
state writing parent {
-- For each symbol we save which other symbols can act as
-- a possible parent in some file, and how often.
sid INTEGER NOT NULL REFERENCES symbol, --
pid INTEGER NOT NULL REFERENCES symbol, -- Possible parent of sid
n INTEGER NOT NULL, -- How often pid can act as parent.
UNIQUE (sid, pid)
}
state writing symtype {
tid INTEGER NOT NULL PRIMARY KEY,
name TEXT NOT NULL,
plural TEXT NOT NULL,
UNIQUE (name)
UNIQUE (plural)
}
state run {
INSERT INTO symtype VALUES (0,'excluded', 'excluded');
INSERT INTO symtype VALUES (1,'tag', 'tags');
INSERT INTO symtype VALUES (2,'branch', 'branches');
INSERT INTO symtype VALUES (3,'undefined','undefined');
}
state writing meta {
-- Meta data of revisions. See revision.mid for the
-- reference. Many revisions can share meta data. This is
-- actually one of the criterions used to sort revisions
-- into changesets.
mid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
|
|
|
|
|
|
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
|
# Project level ...
# pLineOfDevelopment, pSymbol, pBranch, pTag, pTrunk
#
# pTrunk <- pLineOfDevelopment
# pBranch <- pSymbol, pLineOfDevelopment
# pTag <- pSymbol, pLineOfDevelopment
state extend symbol {
sid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
pid INTEGER NOT NULL REFERENCES project, -- Project the symbol belongs to
name TEXT NOT NULL,
type INTEGER NOT NULL REFERENCES symtype, -- enum { excluded = 0, tag, branch, undefined }
tag_count INTEGER NOT NULL, -- How often the symbol is used as tag.
branch_count INTEGER NOT NULL, -- How often the symbol is used as branch
commit_count INTEGER NOT NULL, -- How often a file was committed on the symbol
UNIQUE (pid, name) -- Symbols are unique within the project
}
state extend blocker {
-- For each symbol we save which other symbols are
-- blocking its removal (if the user asks for it).
sid INTEGER NOT NULL REFERENCES symbol, --
bid INTEGER NOT NULL REFERENCES symbol, -- Sprouted from sid, blocks it.
UNIQUE (sid, bid)
}
state extend parent {
-- For each symbol we save which other symbols can act as
-- a possible parent in some file, and how often.
sid INTEGER NOT NULL REFERENCES symbol, --
pid INTEGER NOT NULL REFERENCES symbol, -- Possible parent of sid
n INTEGER NOT NULL, -- How often pid can act as parent.
UNIQUE (sid, pid)
}
state extend symtype {
tid INTEGER NOT NULL PRIMARY KEY,
name TEXT NOT NULL,
plural TEXT NOT NULL,
UNIQUE (name)
UNIQUE (plural)
}
state run {
INSERT INTO symtype VALUES (0,'excluded', 'excluded');
INSERT INTO symtype VALUES (1,'tag', 'tags');
INSERT INTO symtype VALUES (2,'branch', 'branches');
INSERT INTO symtype VALUES (3,'undefined','undefined');
}
state extend meta {
-- Meta data of revisions. See revision.mid for the
-- reference. Many revisions can share meta data. This is
-- actually one of the criterions used to sort revisions
-- into changesets.
mid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
|
-- X is the same as the line of development
-- of X itself.
}
# Authors and commit messages are fully global, i.e. per
# repository.
state writing author {
aid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL UNIQUE
}
state writing cmessage {
cid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
text TEXT NOT NULL UNIQUE
}
project::sym getsymtypes
file::rev getopcodes
return
}
typemethod load {} {
state reading symbol
state reading symtype
state reading optype
project::sym getsymtypes
file::rev getopcodes
repository loadsymbols
return
}
|
|
|
|
|
|
|
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
|
-- X is the same as the line of development
-- of X itself.
}
# Authors and commit messages are fully global, i.e. per
# repository.
state extend author {
aid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL UNIQUE
}
state extend cmessage {
cid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
text TEXT NOT NULL UNIQUE
}
project::sym getsymtypes
file::rev getopcodes
return
}
typemethod load {} {
state use symbol
state use symtype
state use optype
project::sym getsymtypes
file::rev getopcodes
repository loadsymbols
return
}
|