Fossil SCM
Merge aku's CVS import changes into the main line. Fix a small bug in diff.c.
Commit
38b967dcf5613a918fcddcde269df452ce378752
Parent
36b96b861614cd4…
60 files changed
+793
+576
+18
+590
+1
-1
+1
-1
+32
+19
+7
+180
+22
+57
+362
+115
+56
+2
+1
+81
+1
+8
+4
+17
+174
+112
+3
+124
+56
+196
+180
+100
+3
+20
+1
+4
+32
+64
+112
+97
+2
+393
+52
-112
-449
-49
-159
-113
-87
-231
-49
-50
-116
-49
-153
-14
-228
-57
~
art/CollRev1.dia
~
art/CollRev2.dia
~
art/CollRev3.dia
~
art/CollRev4.dia
~
src/diff.c
~
src/diff.c
~
tools/cvs2fossil/cvs2fossil
~
tools/cvs2fossil/doc/LICENSE
~
tools/cvs2fossil/doc/README
~
tools/cvs2fossil/lib/c2f_cyclebreaker.tcl
~
tools/cvs2fossil/lib/c2f_file.tcl
~
tools/cvs2fossil/lib/c2f_flodmgr.tcl
~
tools/cvs2fossil/lib/c2f_frev.tcl
~
tools/cvs2fossil/lib/c2f_fsym.tcl
~
tools/cvs2fossil/lib/c2f_ftrunk.tcl
~
tools/cvs2fossil/lib/c2f_integrity.tcl
~
tools/cvs2fossil/lib/c2f_option.tcl
~
tools/cvs2fossil/lib/c2f_pass.tcl
~
tools/cvs2fossil/lib/c2f_pbreakacycle.tcl
~
tools/cvs2fossil/lib/c2f_pbreakrcycle.tcl
~
tools/cvs2fossil/lib/c2f_pbreakscycle.tcl
~
tools/cvs2fossil/lib/c2f_pcollar.tcl
~
tools/cvs2fossil/lib/c2f_pcollrev.tcl
~
tools/cvs2fossil/lib/c2f_pcollsym.tcl
~
tools/cvs2fossil/lib/c2f_pfiltersym.tcl
~
tools/cvs2fossil/lib/c2f_pinitcsets.tcl
~
tools/cvs2fossil/lib/c2f_plodmgr.tcl
~
tools/cvs2fossil/lib/c2f_prev.tcl
~
tools/cvs2fossil/lib/c2f_prevlink.tcl
~
tools/cvs2fossil/lib/c2f_project.tcl
~
tools/cvs2fossil/lib/c2f_psym.tcl
~
tools/cvs2fossil/lib/c2f_ptrunk.tcl
~
tools/cvs2fossil/lib/c2f_repository.tcl
~
tools/cvs2fossil/lib/c2f_state.tcl
~
tools/cvs2fossil/lib/cvs2fossil.tcl
~
tools/cvs2fossil/lib/id.tcl
~
tools/cvs2fossil/lib/log.tcl
~
tools/cvs2fossil/lib/misc.tcl
~
tools/cvs2fossil/lib/pkgIndex.tcl
~
tools/cvs2fossil/lib/rcsparser.tcl
~
tools/cvs2fossil/lib/trouble.tcl
-
tools/import-cvs.tcl
-
tools/lib/cvs.tcl
-
tools/lib/cvs_cmd.tcl
-
tools/lib/cvs_csets.tcl
-
tools/lib/cvs_files.tcl
-
tools/lib/cvs_timeline.tcl
-
tools/lib/fossil.tcl
-
tools/lib/fossil_cmd.tcl
-
tools/lib/import_map.tcl
-
tools/lib/import_statistics.tcl
-
tools/lib/importcvs.tcl
-
tools/lib/log.tcl
-
tools/lib/pkgIndex.tcl
-
tools/lib/rcsparser.tcl
-
tools/lib/trouble.tcl
~
www/CollRev1.gif
~
www/CollRev2.gif
~
www/CollRev3.gif
~
www/CollRev4.gif
+793
| --- a/art/CollRev1.dia | ||
| +++ b/art/CollRev1.dia | ||
| @@ -0,0 +1,793 @@ | ||
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | |
| 2 | +<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/"> | |
| 3 | + <dia:diagramdata> | |
| 4 | + <dia:attribute name="background"> | |
| 5 | + <dia:color val="#ffffff"/> | |
| 6 | + </dia:attribute> | |
| 7 | + <dia:attribute name="pagebreak"> | |
| 8 | + <dia:color val="#000099"/> | |
| 9 | + </dia:attribute> | |
| 10 | + <dia:attribute name="paper"> | |
| 11 | + <dia:composite type="paper"> | |
| 12 | + <dia:attribute name="name"> | |
| 13 | + <dia:string>#Letter#</dia:string> | |
| 14 | + </dia:attribute> | |
| 15 | + <dia:attribute name="tmargin"> | |
| 16 | + <dia:real val="2.5399999618530273"/> | |
| 17 | + </dia:attribute> | |
| 18 | + <dia:attribute name="bmargin"> | |
| 19 | + <dia:real val="2.5399999618530273"/> | |
| 20 | + </dia:attribute> | |
| 21 | + <dia:attribute name="lmargin"> | |
| 22 | + <dia:real val="2.5399999618530273"/> | |
| 23 | + </dia:attribute> | |
| 24 | + <dia:attribute name="rmargin"> | |
| 25 | + <dia:real val="2.5399999618530273"/> | |
| 26 | + </dia:attribute> | |
| 27 | + <dia:attribute name="is_portrait"> | |
| 28 | + <dia:boolean val="true"/> | |
| 29 | + </dia:attribute> | |
| 30 | + <dia:attribute name="scaling"> | |
| 31 | + <dia:real val="1"/> | |
| 32 | + </dia:attribute> | |
| 33 | + <dia:attribute name="fitto"> | |
| 34 | + <dia:boolean val="false"/> | |
| 35 | + </dia:attribute> | |
| 36 | + </dia:composite> | |
| 37 | + </dia:attribute> | |
| 38 | + <dia:attribute name="grid"> | |
| 39 | + <dia:composite type="grid"> | |
| 40 | + <dia:attribute name="width_x"> | |
| 41 | + <dia:real val="1"/> | |
| 42 | + </dia:attribute> | |
| 43 | + <dia:attribute name="width_y"> | |
| 44 | + <dia:real val="1"/> | |
| 45 | + </dia:attribute> | |
| 46 | + <dia:attribute name="visible_x"> | |
| 47 | + <dia:int val="1"/> | |
| 48 | + </dia:attribute> | |
| 49 | + <dia:attribute name="visible_y"> | |
| 50 | + <dia:int val="1"/> | |
| 51 | + </dia:attribute> | |
| 52 | + <dia:composite type="color"/> | |
| 53 | + </dia:composite> | |
| 54 | + </dia:attribute> | |
| 55 | + <dia:attribute name="color"> | |
| 56 | + <dia:color val="#d8e5e5"/> | |
| 57 | + </dia:attribute> | |
| 58 | + <dia:attribute name="guides"> | |
| 59 | + <dia:composite type="guides"> | |
| 60 | + <dia:attribute name="hguides"/> | |
| 61 | + <dia:attribute name="vguides"/> | |
| 62 | + </dia:composite> | |
| 63 | + </dia:attribute> | |
| 64 | + </dia:diagramdata> | |
| 65 | + <dia:layer name="Background" visible="true"> | |
| 66 | + <dia:group> | |
| 67 | + <dia:group> | |
| 68 | + <dia:object type="Standard - Box" version="0" id="O0"> | |
| 69 | + <dia:attribute name="obj_pos"> | |
| 70 | + <dia:point val="15,13"/> | |
| 71 | + </dia:attribute> | |
| 72 | + <dia:attribute name="obj_bb"> | |
| 73 | + <dia:rectangle val="14.95,12.95;20.05,15.05"/> | |
| 74 | + </dia:attribute> | |
| 75 | + <dia:attribute name="elem_corner"> | |
| 76 | + <dia:point val="15,13"/> | |
| 77 | + </dia:attribute> | |
| 78 | + <dia:attribute name="elem_width"> | |
| 79 | + <dia:real val="5"/> | |
| 80 | + </dia:attribute> | |
| 81 | + <dia:attribute name="elem_height"> | |
| 82 | + <dia:real val="2"/> | |
| 83 | + </dia:attribute> | |
| 84 | + <dia:attribute name="show_background"> | |
| 85 | + <dia:boolean val="true"/> | |
| 86 | + </dia:attribute> | |
| 87 | + </dia:object> | |
| 88 | + <dia:object type="Standard - Text" version="1" id="O1"> | |
| 89 | + <dia:attribute name="obj_pos"> | |
| 90 | + <dia:point val="16.2733,14.064"/> | |
| 91 | + </dia:attribute> | |
| 92 | + <dia:attribute name="obj_bb"> | |
| 93 | + <dia:rectangle val="16.2733,13.5215;18.7096,14.4615"/> | |
| 94 | + </dia:attribute> | |
| 95 | + <dia:attribute name="text"> | |
| 96 | + <dia:composite type="text"> | |
| 97 | + <dia:attribute name="string"> | |
| 98 | + <dia:string>#Revision#</dia:string> | |
| 99 | + </dia:attribute> | |
| 100 | + <dia:attribute name="font"> | |
| 101 | + <dia:font family="sans" style="0" name="Helvetica"/> | |
| 102 | + </dia:attribute> | |
| 103 | + <dia:attribute name="height"> | |
| 104 | + <dia:real val="0.80000000000000004"/> | |
| 105 | + </dia:attribute> | |
| 106 | + <dia:attribute name="pos"> | |
| 107 | + <dia:point val="16.2733,14.064"/> | |
| 108 | + </dia:attribute> | |
| 109 | + <dia:attribute name="color"> | |
| 110 | + <dia:color val="#000000"/> | |
| 111 | + </dia:attribute> | |
| 112 | + <dia:attribute name="alignment"> | |
| 113 | + <dia:enum val="0"/> | |
| 114 | + </dia:attribute> | |
| 115 | + </dia:composite> | |
| 116 | + </dia:attribute> | |
| 117 | + <dia:attribute name="valign"> | |
| 118 | + <dia:enum val="3"/> | |
| 119 | + </dia:attribute> | |
| 120 | + </dia:object> | |
| 121 | + </dia:group> | |
| 122 | + <dia:group> | |
| 123 | + <dia:object type="Standard - Box" version="0" id="O2"> | |
| 124 | + <dia:attribute name="obj_pos"> | |
| 125 | + <dia:point val="15,7"/> | |
| 126 | + </dia:attribute> | |
| 127 | + <dia:attribute name="obj_bb"> | |
| 128 | + <dia:rectangle val="14.95,6.95;20.05,9.05"/> | |
| 129 | + </dia:attribute> | |
| 130 | + <dia:attribute name="elem_corner"> | |
| 131 | + <dia:point val="15,7"/> | |
| 132 | + </dia:attribute> | |
| 133 | + <dia:attribute name="elem_width"> | |
| 134 | + <dia:real val="5"/> | |
| 135 | + </dia:attribute> | |
| 136 | + <dia:attribute name="elem_height"> | |
| 137 | + <dia:real val="2"/> | |
| 138 | + </dia:attribute> | |
| 139 | + <dia:attribute name="show_background"> | |
| 140 | + <dia:boolean val="true"/> | |
| 141 | + </dia:attribute> | |
| 142 | + </dia:object> | |
| 143 | + <dia:object type="Standard - Text" version="1" id="O3"> | |
| 144 | + <dia:attribute name="obj_pos"> | |
| 145 | + <dia:point val="17.0039,8.06397"/> | |
| 146 | + </dia:attribute> | |
| 147 | + <dia:attribute name="obj_bb"> | |
| 148 | + <dia:rectangle val="17.0039,7.52147;17.979,8.46147"/> | |
| 149 | + </dia:attribute> | |
| 150 | + <dia:attribute name="text"> | |
| 151 | + <dia:composite type="text"> | |
| 152 | + <dia:attribute name="string"> | |
| 153 | + <dia:string>#File#</dia:string> | |
| 154 | + </dia:attribute> | |
| 155 | + <dia:attribute name="font"> | |
| 156 | + <dia:font family="sans" style="0" name="Helvetica"/> | |
| 157 | + </dia:attribute> | |
| 158 | + <dia:attribute name="height"> | |
| 159 | + <dia:real val="0.80000000000000004"/> | |
| 160 | + </dia:attribute> | |
| 161 | + <dia:attribute name="pos"> | |
| 162 | + <dia:point val="17.0039,8.06397"/> | |
| 163 | + </dia:attribute> | |
| 164 | + <dia:attribute name="color"> | |
| 165 | + <dia:color val="#000000"/> | |
| 166 | + </dia:attribute> | |
| 167 | + <dia:attribute name="alignment"> | |
| 168 | + <dia:enum val="0"/> | |
| 169 | + </dia:attribute> | |
| 170 | + </dia:composite> | |
| 171 | + </dia:attribute> | |
| 172 | + <dia:attribute name="valign"> | |
| 173 | + <dia:enum val="3"/> | |
| 174 | + </dia:attribute> | |
| 175 | + </dia:object> | |
| 176 | + </dia:group> | |
| 177 | + <dia:group> | |
| 178 | + <dia:object type="Standard - Box" version="0" id="O4"> | |
| 179 | + <dia:attribute name="obj_pos"> | |
| 180 | + <dia:point val="15,1"/> | |
| 181 | + </dia:attribute> | |
| 182 | + <dia:attribute name="obj_bb"> | |
| 183 | + <dia:rectangle val="14.95,0.95;20.05,3.05"/> | |
| 184 | + </dia:attribute> | |
| 185 | + <dia:attribute name="elem_corner"> | |
| 186 | + <dia:point val="15,1"/> | |
| 187 | + </dia:attribute> | |
| 188 | + <dia:attribute name="elem_width"> | |
| 189 | + <dia:real val="5"/> | |
| 190 | + </dia:attribute> | |
| 191 | + <dia:attribute name="elem_height"> | |
| 192 | + <dia:real val="2"/> | |
| 193 | + </dia:attribute> | |
| 194 | + <dia:attribute name="show_background"> | |
| 195 | + <dia:boolean val="true"/> | |
| 196 | + </dia:attribute> | |
| 197 | + </dia:object> | |
| 198 | + <dia:object type="Standard - Text" version="1" id="O5"> | |
| 199 | + <dia:attribute name="obj_pos"> | |
| 200 | + <dia:point val="16.4942,2.06397"/> | |
| 201 | + </dia:attribute> | |
| 202 | + <dia:attribute name="obj_bb"> | |
| 203 | + <dia:rectangle val="16.4942,1.52147;18.4887,2.46147"/> | |
| 204 | + </dia:attribute> | |
| 205 | + <dia:attribute name="text"> | |
| 206 | + <dia:composite type="text"> | |
| 207 | + <dia:attribute name="string"> | |
| 208 | + <dia:string>#Project#</dia:string> | |
| 209 | + </dia:attribute> | |
| 210 | + <dia:attribute name="font"> | |
| 211 | + <dia:font family="sans" style="0" name="Helvetica"/> | |
| 212 | + </dia:attribute> | |
| 213 | + <dia:attribute name="height"> | |
| 214 | + <dia:real val="0.80000000000000004"/> | |
| 215 | + </dia:attribute> | |
| 216 | + <dia:attribute name="pos"> | |
| 217 | + <dia:point val="16.4942,2.06397"/> | |
| 218 | + </dia:attribute> | |
| 219 | + <dia:attribute name="color"> | |
| 220 | + <dia:color val="#000000"/> | |
| 221 | + </dia:attribute> | |
| 222 | + <dia:attribute name="alignment"> | |
| 223 | + <dia:enum val="0"/> | |
| 224 | + </dia:attribute> | |
| 225 | + </dia:composite> | |
| 226 | + </dia:attribute> | |
| 227 | + <dia:attribute name="valign"> | |
| 228 | + <dia:enum val="3"/> | |
| 229 | + </dia:attribute> | |
| 230 | + </dia:object> | |
| 231 | + </dia:group> | |
| 232 | + <dia:object type="Standard - ZigZagLine" version="1" id="O6"> | |
| 233 | + <dia:attribute name="obj_pos"> | |
| 234 | + <dia:point val="17.5,13"/> | |
| 235 | + </dia:attribute> | |
| 236 | + <dia:attribute name="obj_bb"> | |
| 237 | + <dia:rectangle val="17.45,8.92929;17.55,13"/> | |
| 238 | + </dia:attribute> | |
| 239 | + <dia:attribute name="orth_points"> | |
| 240 | + <dia:point val="17.5,13"/> | |
| 241 | + <dia:point val="17.5,13"/> | |
| 242 | + <dia:point val="17.5,9"/> | |
| 243 | + <dia:point val="17.5,9"/> | |
| 244 | + </dia:attribute> | |
| 245 | + <dia:attribute name="orth_orient"> | |
| 246 | + <dia:enum val="0"/> | |
| 247 | + <dia:enum val="1"/> | |
| 248 | + <dia:enum val="0"/> | |
| 249 | + </dia:attribute> | |
| 250 | + <dia:attribute name="autorouting"> | |
| 251 | + <dia:boolean val="true"/> | |
| 252 | + </dia:attribute> | |
| 253 | + <dia:attribute name="end_arrow"> | |
| 254 | + <dia:enum val="22"/> | |
| 255 | + </dia:attribute> | |
| 256 | + <dia:attribute name="end_arrow_length"> | |
| 257 | + <dia:real val="0.5"/> | |
| 258 | + </dia:attribute> | |
| 259 | + <dia:attribute name="end_arrow_width"> | |
| 260 | + <dia:real val="0.5"/> | |
| 261 | + </dia:attribute> | |
| 262 | + </dia:object> | |
| 263 | + <dia:object type="Standard - ZigZagLine" version="1" id="O7"> | |
| 264 | + <dia:attribute name="obj_pos"> | |
| 265 | + <dia:point val="17.5,7"/> | |
| 266 | + </dia:attribute> | |
| 267 | + <dia:attribute name="obj_bb"> | |
| 268 | + <dia:rectangle val="17.45,2.92929;17.55,7"/> | |
| 269 | + </dia:attribute> | |
| 270 | + <dia:attribute name="orth_points"> | |
| 271 | + <dia:point val="17.5,7"/> | |
| 272 | + <dia:point val="17.5,7"/> | |
| 273 | + <dia:point val="17.5,3"/> | |
| 274 | + <dia:point val="17.5,3"/> | |
| 275 | + </dia:attribute> | |
| 276 | + <dia:attribute name="orth_orient"> | |
| 277 | + <dia:enum val="0"/> | |
| 278 | + <dia:enum val="1"/> | |
| 279 | + <dia:enum val="0"/> | |
| 280 | + </dia:attribute> | |
| 281 | + <dia:attribute name="autorouting"> | |
| 282 | + <dia:boolean val="true"/> | |
| 283 | + </dia:attribute> | |
| 284 | + <dia:attribute name="end_arrow"> | |
| 285 | + <dia:enum val="22"/> | |
| 286 | + </dia:attribute> | |
| 287 | + <dia:attribute name="end_arrow_length"> | |
| 288 | + <dia:real val="0.5"/> | |
| 289 | + </dia:attribute> | |
| 290 | + <dia:attribute name="end_arrow_width"> | |
| 291 | + <dia:real val="0.5"/> | |
| 292 | + </dia:attribute> | |
| 293 | + </dia:object> | |
| 294 | + <dia:group> | |
| 295 | + <dia:object type="Standard - Box" version="0" id="O8"> | |
| 296 | + <dia:attribute name="obj_pos"> | |
| 297 | + <dia:point val="15,19"/> | |
| 298 | + </dia:attribute> | |
| 299 | + <dia:attribute name="obj_bb"> | |
| 300 | + <dia:rectangle val="14.95,18.95;20.05,21.05"/> | |
| 301 | + </dia:attribute> | |
| 302 | + <dia:attribute name="elem_corner"> | |
| 303 | + <dia:point val="15,19"/> | |
| 304 | + </dia:attribute> | |
| 305 | + <dia:attribute name="elem_width"> | |
| 306 | + <dia:real val="5"/> | |
| 307 | + </dia:attribute> | |
| 308 | + <dia:attribute name="elem_height"> | |
| 309 | + <dia:real val="2"/> | |
| 310 | + </dia:attribute> | |
| 311 | + <dia:attribute name="show_background"> | |
| 312 | + <dia:boolean val="true"/> | |
| 313 | + </dia:attribute> | |
| 314 | + </dia:object> | |
| 315 | + <dia:object type="Standard - Text" version="1" id="O9"> | |
| 316 | + <dia:attribute name="obj_pos"> | |
| 317 | + <dia:point val="16.7775,20.064"/> | |
| 318 | + </dia:attribute> | |
| 319 | + <dia:attribute name="obj_bb"> | |
| 320 | + <dia:rectangle val="16.7775,19.5215;18.2225,20.4615"/> | |
| 321 | + </dia:attribute> | |
| 322 | + <dia:attribute name="text"> | |
| 323 | + <dia:composite type="text"> | |
| 324 | + <dia:attribute name="string"> | |
| 325 | + <dia:string>#Meta#</dia:string> | |
| 326 | + </dia:attribute> | |
| 327 | + <dia:attribute name="font"> | |
| 328 | + <dia:font family="sans" style="0" name="Helvetica"/> | |
| 329 | + </dia:attribute> | |
| 330 | + <dia:attribute name="height"> | |
| 331 | + <dia:real val="0.80000000000000004"/> | |
| 332 | + </dia:attribute> | |
| 333 | + <dia:attribute name="pos"> | |
| 334 | + <dia:point val="16.7775,20.064"/> | |
| 335 | + </dia:attribute> | |
| 336 | + <dia:attribute name="color"> | |
| 337 | + <dia:color val="#000000"/> | |
| 338 | + </dia:attribute> | |
| 339 | + <dia:attribute name="alignment"> | |
| 340 | + <dia:enum val="0"/> | |
| 341 | + </dia:attribute> | |
| 342 | + </dia:composite> | |
| 343 | + </dia:attribute> | |
| 344 | + <dia:attribute name="valign"> | |
| 345 | + <dia:enum val="3"/> | |
| 346 | + </dia:attribute> | |
| 347 | + </dia:object> | |
| 348 | + </dia:group> | |
| 349 | + <dia:object type="Standard - PolyLine" version="0" id="O10"> | |
| 350 | + <dia:attribute name="obj_pos"> | |
| 351 | + <dia:point val="15,20"/> | |
| 352 | + </dia:attribute> | |
| 353 | + <dia:attribute name="obj_bb"> | |
| 354 | + <dia:rectangle val="7.5,14.95;15.05,20.05"/> | |
| 355 | + </dia:attribute> | |
| 356 | + <dia:attribute name="poly_points"> | |
| 357 | + <dia:point val="15,20"/> | |
| 358 | + <dia:point val="8,20"/> | |
| 359 | + <dia:point val="8,15"/> | |
| 360 | + </dia:attribute> | |
| 361 | + <dia:attribute name="end_arrow"> | |
| 362 | + <dia:enum val="22"/> | |
| 363 | + </dia:attribute> | |
| 364 | + <dia:attribute name="end_arrow_length"> | |
| 365 | + <dia:real val="0.5"/> | |
| 366 | + </dia:attribute> | |
| 367 | + <dia:attribute name="end_arrow_width"> | |
| 368 | + <dia:real val="0.5"/> | |
| 369 | + </dia:attribute> | |
| 370 | + </dia:object> | |
| 371 | + <dia:object type="Standard - Line" version="0" id="O11"> | |
| 372 | + <dia:attribute name="obj_pos"> | |
| 373 | + <dia:point val="15,14"/> | |
| 374 | + </dia:attribute> | |
| 375 | + <dia:attribute name="obj_bb"> | |
| 376 | + <dia:rectangle val="10.95,13.5;15.05,14.5"/> | |
| 377 | + </dia:attribute> | |
| 378 | + <dia:attribute name="conn_endpoints"> | |
| 379 | + <dia:point val="15,14"/> | |
| 380 | + <dia:point val="11,14"/> | |
| 381 | + </dia:attribute> | |
| 382 | + <dia:attribute name="numcp"> | |
| 383 | + <dia:int val="1"/> | |
| 384 | + </dia:attribute> | |
| 385 | + <dia:attribute name="end_arrow"> | |
| 386 | + <dia:enum val="22"/> | |
| 387 | + </dia:attribute> | |
| 388 | + <dia:attribute name="end_arrow_length"> | |
| 389 | + <dia:real val="0.5"/> | |
| 390 | + </dia:attribute> | |
| 391 | + <dia:attribute name="end_arrow_width"> | |
| 392 | + <dia:real val="0.5"/> | |
| 393 | + </dia:attribute> | |
| 394 | + </dia:object> | |
| 395 | + <dia:object type="Standard - ZigZagLine" version="1" id="O12"> | |
| 396 | + <dia:attribute name="obj_pos"> | |
| 397 | + <dia:point val="20,20"/> | |
| 398 | + </dia:attribute> | |
| 399 | + <dia:attribute name="obj_bb"> | |
| 400 | + <dia:rectangle val="19.95,1.5;27.05,20.05"/> | |
| 401 | + </dia:attribute> | |
| 402 | + <dia:attribute name="orth_points"> | |
| 403 | + <dia:point val="20,20"/> | |
| 404 | + <dia:point val="27,20"/> | |
| 405 | + <dia:point val="27,2"/> | |
| 406 | + <dia:point val="20,2"/> | |
| 407 | + </dia:attribute> | |
| 408 | + <dia:attribute name="orth_orient"> | |
| 409 | + <dia:enum val="0"/> | |
| 410 | + <dia:enum val="1"/> | |
| 411 | + <dia:enum val="0"/> | |
| 412 | + </dia:attribute> | |
| 413 | + <dia:attribute name="autorouting"> | |
| 414 | + <dia:boolean val="false"/> | |
| 415 | + </dia:attribute> | |
| 416 | + <dia:attribute name="end_arrow"> | |
| 417 | + <dia:enum val="22"/> | |
| 418 | + </dia:attribute> | |
| 419 | + <dia:attribute name="end_arrow_length"> | |
| 420 | + <dia:real val="0.5"/> | |
| 421 | + </dia:attribute> | |
| 422 | + <dia:attribute name="end_arrow_width"> | |
| 423 | + <dia:real val="0.5"/> | |
| 424 | + </dia:attribute> | |
| 425 | + </dia:object> | |
| 426 | + <dia:object type="Standard - Line" version="0" id="O13"> | |
| 427 | + <dia:attribute name="obj_pos"> | |
| 428 | + <dia:point val="17.5,15"/> | |
| 429 | + </dia:attribute> | |
| 430 | + <dia:attribute name="obj_bb"> | |
| 431 | + <dia:rectangle val="17,14.95;18,19.05"/> | |
| 432 | + </dia:attribute> | |
| 433 | + <dia:attribute name="conn_endpoints"> | |
| 434 | + <dia:point val="17.5,15"/> | |
| 435 | + <dia:point val="17.5,19"/> | |
| 436 | + </dia:attribute> | |
| 437 | + <dia:attribute name="numcp"> | |
| 438 | + <dia:int val="1"/> | |
| 439 | + </dia:attribute> | |
| 440 | + <dia:attribute name="end_arrow"> | |
| 441 | + <dia:enum val="22"/> | |
| 442 | + </dia:attribute> | |
| 443 | + <dia:attribute name="end_arrow_length"> | |
| 444 | + <dia:real val="0.5"/> | |
| 445 | + </dia:attribute> | |
| 446 | + <dia:attribute name="end_arrow_width"> | |
| 447 | + <dia:real val="0.5"/> | |
| 448 | + </dia:attribute> | |
| 449 | + </dia:object> | |
| 450 | + <dia:object type="Standard - PolyLine" version="0" id="O14"> | |
| 451 | + <dia:attribute name="obj_pos"> | |
| 452 | + <dia:point val="8,13"/> | |
| 453 | + </dia:attribute> | |
| 454 | + <dia:attribute name="obj_bb"> | |
| 455 | + <dia:rectangle val="7.95,1.5;15.05,13.05"/> | |
| 456 | + </dia:attribute> | |
| 457 | + <dia:attribute name="poly_points"> | |
| 458 | + <dia:point val="8,13"/> | |
| 459 | + <dia:point val="8,2"/> | |
| 460 | + <dia:point val="15,2"/> | |
| 461 | + </dia:attribute> | |
| 462 | + <dia:attribute name="end_arrow"> | |
| 463 | + <dia:enum val="22"/> | |
| 464 | + </dia:attribute> | |
| 465 | + <dia:attribute name="end_arrow_length"> | |
| 466 | + <dia:real val="0.5"/> | |
| 467 | + </dia:attribute> | |
| 468 | + <dia:attribute name="end_arrow_width"> | |
| 469 | + <dia:real val="0.5"/> | |
| 470 | + </dia:attribute> | |
| 471 | + </dia:object> | |
| 472 | + <dia:group> | |
| 473 | + <dia:object type="Standard - Box" version="0" id="O15"> | |
| 474 | + <dia:attribute name="obj_pos"> | |
| 475 | + <dia:point val="5,13"/> | |
| 476 | + </dia:attribute> | |
| 477 | + <dia:attribute name="obj_bb"> | |
| 478 | + <dia:rectangle val="4.95,12.95;11.05,15.05"/> | |
| 479 | + </dia:attribute> | |
| 480 | + <dia:attribute name="elem_corner"> | |
| 481 | + <dia:point val="5,13"/> | |
| 482 | + </dia:attribute> | |
| 483 | + <dia:attribute name="elem_width"> | |
| 484 | + <dia:real val="6"/> | |
| 485 | + </dia:attribute> | |
| 486 | + <dia:attribute name="elem_height"> | |
| 487 | + <dia:real val="2"/> | |
| 488 | + </dia:attribute> | |
| 489 | + <dia:attribute name="show_background"> | |
| 490 | + <dia:boolean val="true"/> | |
| 491 | + </dia:attribute> | |
| 492 | + </dia:object> | |
| 493 | + <dia:object type="Standard - Text" version="1" id="O16"> | |
| 494 | + <dia:attribute name="obj_pos"> | |
| 495 | + <dia:point val="6.91375,14.0725"/> | |
| 496 | + </dia:attribute> | |
| 497 | + <dia:attribute name="obj_bb"> | |
| 498 | + <dia:rectangle val="6.91375,13.53;9.08625,14.47"/> | |
| 499 | + </dia:attribute> | |
| 500 | + <dia:attribute name="text"> | |
| 501 | + <dia:composite type="text"> | |
| 502 | + <dia:attribute name="string"> | |
| 503 | + <dia:string>#Symbol#</dia:string> | |
| 504 | + </dia:attribute> | |
| 505 | + <dia:attribute name="font"> | |
| 506 | + <dia:font family="sans" style="0" name="Helvetica"/> | |
| 507 | + </dia:attribute> | |
| 508 | + <dia:attribute name="height"> | |
| 509 | + <dia:real val="0.80000000000000004"/> | |
| 510 | + </dia:attribute> | |
| 511 | + <dia:attribute name="pos"> | |
| 512 | + <dia:point val="6.91375,14.0725"/> | |
| 513 | + </dia:attribute> | |
| 514 | + <dia:attribute name="color"> | |
| 515 | + <dia:color val="#000000"/> | |
| 516 | + </dia:attribute> | |
| 517 | + <dia:attribute name="alignment"> | |
| 518 | + <dia:enum val="0"/> | |
| 519 | + </dia:attribute> | |
| 520 | + </dia:composite> | |
| 521 | + </dia:attribute> | |
| 522 | + <dia:attribute name="valign"> | |
| 523 | + <dia:enum val="3"/> | |
| 524 | + </dia:attribute> | |
| 525 | + </dia:object> | |
| 526 | + </dia:group> | |
| 527 | + <dia:object type="Standard - Text" version="1" id="O17"> | |
| 528 | + <dia:attribute name="obj_pos"> | |
| 529 | + <dia:point val="18,12"/> | |
| 530 | + </dia:attribute> | |
| 531 | + <dia:attribute name="obj_bb"> | |
| 532 | + <dia:rectangle val="18,11.4575;21.06,12.3975"/> | |
| 533 | + </dia:attribute> | |
| 534 | + <dia:attribute name="text"> | |
| 535 | + <dia:composite type="text"> | |
| 536 | + <dia:attribute name="string"> | |
| 537 | + <dia:string>#belongs to#</dia:string> | |
| 538 | + </dia:attribute> | |
| 539 | + <dia:attribute name="font"> | |
| 540 | + <dia:font family="sans" style="0" name="Helvetica"/> | |
| 541 | + </dia:attribute> | |
| 542 | + <dia:attribute name="height"> | |
| 543 | + <dia:real val="0.80000000000000004"/> | |
| 544 | + </dia:attribute> | |
| 545 | + <dia:attribute name="pos"> | |
| 546 | + <dia:point val="18,12"/> | |
| 547 | + </dia:attribute> | |
| 548 | + <dia:attribute name="color"> | |
| 549 | + <dia:color val="#000000"/> | |
| 550 | + </dia:attribute> | |
| 551 | + <dia:attribute name="alignment"> | |
| 552 | + <dia:enum val="0"/> | |
| 553 | + </dia:attribute> | |
| 554 | + </dia:composite> | |
| 555 | + </dia:attribute> | |
| 556 | + <dia:attribute name="valign"> | |
| 557 | + <dia:enum val="3"/> | |
| 558 | + </dia:attribute> | |
| 559 | + </dia:object> | |
| 560 | + <dia:object type="Standard - Text" version="1" id="O18"> | |
| 561 | + <dia:attribute name="obj_pos"> | |
| 562 | + <dia:point val="18,6"/> | |
| 563 | + </dia:attribute> | |
| 564 | + <dia:attribute name="obj_bb"> | |
| 565 | + <dia:rectangle val="18,5.4575;21.06,6.3975"/> | |
| 566 | + </dia:attribute> | |
| 567 | + <dia:attribute name="text"> | |
| 568 | + <dia:composite type="text"> | |
| 569 | + <dia:attribute name="string"> | |
| 570 | + <dia:string>#belongs to#</dia:string> | |
| 571 | + </dia:attribute> | |
| 572 | + <dia:attribute name="font"> | |
| 573 | + <dia:font family="sans" style="0" name="Helvetica"/> | |
| 574 | + </dia:attribute> | |
| 575 | + <dia:attribute name="height"> | |
| 576 | + <dia:real val="0.80000000000000004"/> | |
| 577 | + </dia:attribute> | |
| 578 | + <dia:attribute name="pos"> | |
| 579 | + <dia:point val="18,6"/> | |
| 580 | + </dia:attribute> | |
| 581 | + <dia:attribute name="color"> | |
| 582 | + <dia:color val="#000000"/> | |
| 583 | + </dia:attribute> | |
| 584 | + <dia:attribute name="alignment"> | |
| 585 | + <dia:enum val="0"/> | |
| 586 | + </dia:attribute> | |
| 587 | + </dia:composite> | |
| 588 | + </dia:attribute> | |
| 589 | + <dia:attribute name="valign"> | |
| 590 | + <dia:enum val="3"/> | |
| 591 | + </dia:attribute> | |
| 592 | + </dia:object> | |
| 593 | + <dia:object type="Standard - Text" version="1" id="O19"> | |
| 594 | + <dia:attribute name="obj_pos"> | |
| 595 | + <dia:point val="18,16"/> | |
| 596 | + </dia:attribute> | |
| 597 | + <dia:attribute name="obj_bb"> | |
| 598 | + <dia:rectangle val="18,15.4575;19.03,16.3975"/> | |
| 599 | + </dia:attribute> | |
| 600 | + <dia:attribute name="text"> | |
| 601 | + <dia:composite type="text"> | |
| 602 | + <dia:attribute name="string"> | |
| 603 | + <dia:string>#has#</dia:string> | |
| 604 | + </dia:attribute> | |
| 605 | + <dia:attribute name="font"> | |
| 606 | + <dia:font family="sans" style="0" name="Helvetica"/> | |
| 607 | + </dia:attribute> | |
| 608 | + <dia:attribute name="height"> | |
| 609 | + <dia:real val="0.80000000000000004"/> | |
| 610 | + </dia:attribute> | |
| 611 | + <dia:attribute name="pos"> | |
| 612 | + <dia:point val="18,16"/> | |
| 613 | + </dia:attribute> | |
| 614 | + <dia:attribute name="color"> | |
| 615 | + <dia:color val="#000000"/> | |
| 616 | + </dia:attribute> | |
| 617 | + <dia:attribute name="alignment"> | |
| 618 | + <dia:enum val="0"/> | |
| 619 | + </dia:attribute> | |
| 620 | + </dia:composite> | |
| 621 | + </dia:attribute> | |
| 622 | + <dia:attribute name="valign"> | |
| 623 | + <dia:enum val="3"/> | |
| 624 | + </dia:attribute> | |
| 625 | + </dia:object> | |
| 626 | + <dia:object type="Standard - Text" version="1" id="O20"> | |
| 627 | + <dia:attribute name="obj_pos"> | |
| 628 | + <dia:point val="21,20"/> | |
| 629 | + </dia:attribute> | |
| 630 | + <dia:attribute name="obj_bb"> | |
| 631 | + <dia:rectangle val="21,19.4575;24.06,20.3975"/> | |
| 632 | + </dia:attribute> | |
| 633 | + <dia:attribute name="text"> | |
| 634 | + <dia:composite type="text"> | |
| 635 | + <dia:attribute name="string"> | |
| 636 | + <dia:string>#belongs to#</dia:string> | |
| 637 | + </dia:attribute> | |
| 638 | + <dia:attribute name="font"> | |
| 639 | + <dia:font family="sans" style="0" name="Helvetica"/> | |
| 640 | + </dia:attribute> | |
| 641 | + <dia:attribute name="height"> | |
| 642 | + <dia:real val="0.80000000000000004"/> | |
| 643 | + </dia:attribute> | |
| 644 | + <dia:attribute name="pos"> | |
| 645 | + <dia:point val="21,20"/> | |
| 646 | + </dia:attribute> | |
| 647 | + <dia:attribute name="color"> | |
| 648 | + <dia:color val="#000000"/> | |
| 649 | + </dia:attribute> | |
| 650 | + <dia:attribute name="alignment"> | |
| 651 | + <dia:enum val="0"/> | |
| 652 | + </dia:attribute> | |
| 653 | + </dia:composite> | |
| 654 | + </dia:attribute> | |
| 655 | + <dia:attribute name="valign"> | |
| 656 | + <dia:enum val="3"/> | |
| 657 | + </dia:attribute> | |
| 658 | + </dia:object> | |
| 659 | + <dia:object type="Standard - Text" version="1" id="O21"> | |
| 660 | + <dia:attribute name="obj_pos"> | |
| 661 | + <dia:point val="11,20"/> | |
| 662 | + </dia:attribute> | |
| 663 | + <dia:attribute name="obj_bb"> | |
| 664 | + <dia:rectangle val="11,19.4575;14.06,20.3975"/> | |
| 665 | + </dia:attribute> | |
| 666 | + <dia:attribute name="text"> | |
| 667 | + <dia:composite type="text"> | |
| 668 | + <dia:attribute name="string"> | |
| 669 | + <dia:string>#belongs to#</dia:string> | |
| 670 | + </dia:attribute> | |
| 671 | + <dia:attribute name="font"> | |
| 672 | + <dia:font family="sans" style="0" name="Helvetica"/> | |
| 673 | + </dia:attribute> | |
| 674 | + <dia:attribute name="height"> | |
| 675 | + <dia:real val="0.80000000000000004"/> | |
| 676 | + </dia:attribute> | |
| 677 | + <dia:attribute name="pos"> | |
| 678 | + <dia:point val="11,20"/> | |
| 679 | + </dia:attribute> | |
| 680 | + <dia:attribute name="color"> | |
| 681 | + <dia:color val="#000000"/> | |
| 682 | + </dia:attribute> | |
| 683 | + <dia:attribute name="alignment"> | |
| 684 | + <dia:enum val="0"/> | |
| 685 | + </dia:attribute> | |
| 686 | + </dia:composite> | |
| 687 | + </dia:attribute> | |
| 688 | + <dia:attribute name="valign"> | |
| 689 | + <dia:enum val="3"/> | |
| 690 | + </dia:attribute> | |
| 691 | + </dia:object> | |
| 692 | + <dia:object type="Standard - Text" version="1" id="O22"> | |
| 693 | + <dia:attribute name="obj_pos"> | |
| 694 | + <dia:point val="12,15"/> | |
| 695 | + </dia:attribute> | |
| 696 | + <dia:attribute name="obj_bb"> | |
| 697 | + <dia:rectangle val="12,14.4575;15.06,15.3975"/> | |
| 698 | + </dia:attribute> | |
| 699 | + <dia:attribute name="text"> | |
| 700 | + <dia:composite type="text"> | |
| 701 | + <dia:attribute name="string"> | |
| 702 | + <dia:string>#belongs to#</dia:string> | |
| 703 | + </dia:attribute> | |
| 704 | + <dia:attribute name="font"> | |
| 705 | + <dia:font family="sans" style="0" name="Helvetica"/> | |
| 706 | + </dia:attribute> | |
| 707 | + <dia:attribute name="height"> | |
| 708 | + <dia:real val="0.80000000000000004"/> | |
| 709 | + </dia:attribute> | |
| 710 | + <dia:attribute name="pos"> | |
| 711 | + <dia:point val="12,15"/> | |
| 712 | + </dia:attribute> | |
| 713 | + <dia:attribute name="color"> | |
| 714 | + <dia:color val="#000000"/> | |
| 715 | + </dia:attribute> | |
| 716 | + <dia:attribute name="alignment"> | |
| 717 | + <dia:enum val="0"/> | |
| 718 | + </dia:attribute> | |
| 719 | + </dia:composite> | |
| 720 | + </dia:attribute> | |
| 721 | + <dia:attribute name="valign"> | |
| 722 | + <dia:enum val="3"/> | |
| 723 | + </dia:attribute> | |
| 724 | + </dia:object> | |
| 725 | + <dia:object type="Standard - Text" version="1" id="O23"> | |
| 726 | + <dia:attribute name="obj_pos"> | |
| 727 | + <dia:point val="9,12"/> | |
| 728 | + </dia:attribute> | |
| 729 | + <dia:attribute name="obj_bb"> | |
| 730 | + <dia:rectangle val="9,11.4575;12.06,12.3975"/> | |
| 731 | + </dia:attribute> | |
| 732 | + <dia:attribute name="text"> | |
| 733 | + <dia:composite type="text"> | |
| 734 | + <dia:attribute name="string"> | |
| 735 | + <dia:string>#belongs to#</dia:string> | |
| 736 | + </dia:attribute> | |
| 737 | + <dia:attribute name="font"> | |
| 738 | + <dia:font family="sans" style="0" name="Helvetica"/> | |
| 739 | + </dia:attribute> | |
| 740 | + <dia:attribute name="height"> | |
| 741 | + <dia:real val="0.80000000000000004"/> | |
| 742 | + </dia:attribute> | |
| 743 | + <dia:attribute name="pos"> | |
| 744 | + <dia:point val="9,12"/> | |
| 745 | + </dia:attribute> | |
| 746 | + <dia:attribute name="color"> | |
| 747 | + <dia:color val="#000000"/> | |
| 748 | + </dia:attribute> | |
| 749 | + <dia:attribute name="alignment"> | |
| 750 | + <dia:enum val="0"/> | |
| 751 | + </dia:attribute> | |
| 752 | + </dia:composite> | |
| 753 | + </dia:attribute> | |
| 754 | + <dia:attribute name="valign"> | |
| 755 | + <dia:enum val="3"/> | |
| 756 | + </dia:attribute> | |
| 757 | + </dia:object> | |
| 758 | + <dia:object type="Standard - Text" version="1" id="O24"> | |
| 759 | + <dia:attribute name="obj_pos"> | |
| 760 | + <dia:point val="1,13"/> | |
| 761 | + </dia:attribute> | |
| 762 | + <dia:attribute name="obj_bb"> | |
| 763 | + <dia:rectangle val="1,12.4575;10.5175,13.3975"/> | |
| 764 | + </dia:attribute> | |
| 765 | + <dia:attribute name="text"> | |
| 766 | + <dia:composite type="text"> | |
| 767 | + <dia:attribute name="string"> | |
| 768 | + <dia:string>#(Line of Development / Branch)#</dia:string> | |
| 769 | + </dia:attribute> | |
| 770 | + <dia:attribute name="font"> | |
| 771 | + <dia:font family="sans" style="0" name="Helvetica"/> | |
| 772 | + </dia:attribute> | |
| 773 | + <dia:attribute name="height"> | |
| 774 | + <dia:real val="0.80000000000000004"/> | |
| 775 | + </dia:attribute> | |
| 776 | + <dia:attribute name="pos"> | |
| 777 | + <dia:point val="1,13"/> | |
| 778 | + </dia:attribute> | |
| 779 | + <dia:attribute name="color"> | |
| 780 | + <dia:color val="#000000"/> | |
| 781 | + </dia:attribute> | |
| 782 | + <dia:attribute name="alignment"> | |
| 783 | + <dia:enum val="0"/> | |
| 784 | + </dia:attribute> | |
| 785 | + </dia:composite> | |
| 786 | + </dia:attribute> | |
| 787 | + <dia:attribute name="valign"> | |
| 788 | + <dia:enum val="3"/> | |
| 789 | + </dia:attribute> | |
| 790 | + </dia:object> | |
| 791 | + </dia:group> | |
| 792 | + </dia:layer> | |
| 793 | +</dia:diagram> |
| --- a/art/CollRev1.dia | |
| +++ b/art/CollRev1.dia | |
| @@ -0,0 +1,793 @@ | |
| --- a/art/CollRev1.dia | |
| +++ b/art/CollRev1.dia | |
| @@ -0,0 +1,793 @@ | |
| 1 | <?xml version="1.0" encoding="UTF-8"?> |
| 2 | <dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/"> |
| 3 | <dia:diagramdata> |
| 4 | <dia:attribute name="background"> |
| 5 | <dia:color val="#ffffff"/> |
| 6 | </dia:attribute> |
| 7 | <dia:attribute name="pagebreak"> |
| 8 | <dia:color val="#000099"/> |
| 9 | </dia:attribute> |
| 10 | <dia:attribute name="paper"> |
| 11 | <dia:composite type="paper"> |
| 12 | <dia:attribute name="name"> |
| 13 | <dia:string>#Letter#</dia:string> |
| 14 | </dia:attribute> |
| 15 | <dia:attribute name="tmargin"> |
| 16 | <dia:real val="2.5399999618530273"/> |
| 17 | </dia:attribute> |
| 18 | <dia:attribute name="bmargin"> |
| 19 | <dia:real val="2.5399999618530273"/> |
| 20 | </dia:attribute> |
| 21 | <dia:attribute name="lmargin"> |
| 22 | <dia:real val="2.5399999618530273"/> |
| 23 | </dia:attribute> |
| 24 | <dia:attribute name="rmargin"> |
| 25 | <dia:real val="2.5399999618530273"/> |
| 26 | </dia:attribute> |
| 27 | <dia:attribute name="is_portrait"> |
| 28 | <dia:boolean val="true"/> |
| 29 | </dia:attribute> |
| 30 | <dia:attribute name="scaling"> |
| 31 | <dia:real val="1"/> |
| 32 | </dia:attribute> |
| 33 | <dia:attribute name="fitto"> |
| 34 | <dia:boolean val="false"/> |
| 35 | </dia:attribute> |
| 36 | </dia:composite> |
| 37 | </dia:attribute> |
| 38 | <dia:attribute name="grid"> |
| 39 | <dia:composite type="grid"> |
| 40 | <dia:attribute name="width_x"> |
| 41 | <dia:real val="1"/> |
| 42 | </dia:attribute> |
| 43 | <dia:attribute name="width_y"> |
| 44 | <dia:real val="1"/> |
| 45 | </dia:attribute> |
| 46 | <dia:attribute name="visible_x"> |
| 47 | <dia:int val="1"/> |
| 48 | </dia:attribute> |
| 49 | <dia:attribute name="visible_y"> |
| 50 | <dia:int val="1"/> |
| 51 | </dia:attribute> |
| 52 | <dia:composite type="color"/> |
| 53 | </dia:composite> |
| 54 | </dia:attribute> |
| 55 | <dia:attribute name="color"> |
| 56 | <dia:color val="#d8e5e5"/> |
| 57 | </dia:attribute> |
| 58 | <dia:attribute name="guides"> |
| 59 | <dia:composite type="guides"> |
| 60 | <dia:attribute name="hguides"/> |
| 61 | <dia:attribute name="vguides"/> |
| 62 | </dia:composite> |
| 63 | </dia:attribute> |
| 64 | </dia:diagramdata> |
| 65 | <dia:layer name="Background" visible="true"> |
| 66 | <dia:group> |
| 67 | <dia:group> |
| 68 | <dia:object type="Standard - Box" version="0" id="O0"> |
| 69 | <dia:attribute name="obj_pos"> |
| 70 | <dia:point val="15,13"/> |
| 71 | </dia:attribute> |
| 72 | <dia:attribute name="obj_bb"> |
| 73 | <dia:rectangle val="14.95,12.95;20.05,15.05"/> |
| 74 | </dia:attribute> |
| 75 | <dia:attribute name="elem_corner"> |
| 76 | <dia:point val="15,13"/> |
| 77 | </dia:attribute> |
| 78 | <dia:attribute name="elem_width"> |
| 79 | <dia:real val="5"/> |
| 80 | </dia:attribute> |
| 81 | <dia:attribute name="elem_height"> |
| 82 | <dia:real val="2"/> |
| 83 | </dia:attribute> |
| 84 | <dia:attribute name="show_background"> |
| 85 | <dia:boolean val="true"/> |
| 86 | </dia:attribute> |
| 87 | </dia:object> |
| 88 | <dia:object type="Standard - Text" version="1" id="O1"> |
| 89 | <dia:attribute name="obj_pos"> |
| 90 | <dia:point val="16.2733,14.064"/> |
| 91 | </dia:attribute> |
| 92 | <dia:attribute name="obj_bb"> |
| 93 | <dia:rectangle val="16.2733,13.5215;18.7096,14.4615"/> |
| 94 | </dia:attribute> |
| 95 | <dia:attribute name="text"> |
| 96 | <dia:composite type="text"> |
| 97 | <dia:attribute name="string"> |
| 98 | <dia:string>#Revision#</dia:string> |
| 99 | </dia:attribute> |
| 100 | <dia:attribute name="font"> |
| 101 | <dia:font family="sans" style="0" name="Helvetica"/> |
| 102 | </dia:attribute> |
| 103 | <dia:attribute name="height"> |
| 104 | <dia:real val="0.80000000000000004"/> |
| 105 | </dia:attribute> |
| 106 | <dia:attribute name="pos"> |
| 107 | <dia:point val="16.2733,14.064"/> |
| 108 | </dia:attribute> |
| 109 | <dia:attribute name="color"> |
| 110 | <dia:color val="#000000"/> |
| 111 | </dia:attribute> |
| 112 | <dia:attribute name="alignment"> |
| 113 | <dia:enum val="0"/> |
| 114 | </dia:attribute> |
| 115 | </dia:composite> |
| 116 | </dia:attribute> |
| 117 | <dia:attribute name="valign"> |
| 118 | <dia:enum val="3"/> |
| 119 | </dia:attribute> |
| 120 | </dia:object> |
| 121 | </dia:group> |
| 122 | <dia:group> |
| 123 | <dia:object type="Standard - Box" version="0" id="O2"> |
| 124 | <dia:attribute name="obj_pos"> |
| 125 | <dia:point val="15,7"/> |
| 126 | </dia:attribute> |
| 127 | <dia:attribute name="obj_bb"> |
| 128 | <dia:rectangle val="14.95,6.95;20.05,9.05"/> |
| 129 | </dia:attribute> |
| 130 | <dia:attribute name="elem_corner"> |
| 131 | <dia:point val="15,7"/> |
| 132 | </dia:attribute> |
| 133 | <dia:attribute name="elem_width"> |
| 134 | <dia:real val="5"/> |
| 135 | </dia:attribute> |
| 136 | <dia:attribute name="elem_height"> |
| 137 | <dia:real val="2"/> |
| 138 | </dia:attribute> |
| 139 | <dia:attribute name="show_background"> |
| 140 | <dia:boolean val="true"/> |
| 141 | </dia:attribute> |
| 142 | </dia:object> |
| 143 | <dia:object type="Standard - Text" version="1" id="O3"> |
| 144 | <dia:attribute name="obj_pos"> |
| 145 | <dia:point val="17.0039,8.06397"/> |
| 146 | </dia:attribute> |
| 147 | <dia:attribute name="obj_bb"> |
| 148 | <dia:rectangle val="17.0039,7.52147;17.979,8.46147"/> |
| 149 | </dia:attribute> |
| 150 | <dia:attribute name="text"> |
| 151 | <dia:composite type="text"> |
| 152 | <dia:attribute name="string"> |
| 153 | <dia:string>#File#</dia:string> |
| 154 | </dia:attribute> |
| 155 | <dia:attribute name="font"> |
| 156 | <dia:font family="sans" style="0" name="Helvetica"/> |
| 157 | </dia:attribute> |
| 158 | <dia:attribute name="height"> |
| 159 | <dia:real val="0.80000000000000004"/> |
| 160 | </dia:attribute> |
| 161 | <dia:attribute name="pos"> |
| 162 | <dia:point val="17.0039,8.06397"/> |
| 163 | </dia:attribute> |
| 164 | <dia:attribute name="color"> |
| 165 | <dia:color val="#000000"/> |
| 166 | </dia:attribute> |
| 167 | <dia:attribute name="alignment"> |
| 168 | <dia:enum val="0"/> |
| 169 | </dia:attribute> |
| 170 | </dia:composite> |
| 171 | </dia:attribute> |
| 172 | <dia:attribute name="valign"> |
| 173 | <dia:enum val="3"/> |
| 174 | </dia:attribute> |
| 175 | </dia:object> |
| 176 | </dia:group> |
| 177 | <dia:group> |
| 178 | <dia:object type="Standard - Box" version="0" id="O4"> |
| 179 | <dia:attribute name="obj_pos"> |
| 180 | <dia:point val="15,1"/> |
| 181 | </dia:attribute> |
| 182 | <dia:attribute name="obj_bb"> |
| 183 | <dia:rectangle val="14.95,0.95;20.05,3.05"/> |
| 184 | </dia:attribute> |
| 185 | <dia:attribute name="elem_corner"> |
| 186 | <dia:point val="15,1"/> |
| 187 | </dia:attribute> |
| 188 | <dia:attribute name="elem_width"> |
| 189 | <dia:real val="5"/> |
| 190 | </dia:attribute> |
| 191 | <dia:attribute name="elem_height"> |
| 192 | <dia:real val="2"/> |
| 193 | </dia:attribute> |
| 194 | <dia:attribute name="show_background"> |
| 195 | <dia:boolean val="true"/> |
| 196 | </dia:attribute> |
| 197 | </dia:object> |
| 198 | <dia:object type="Standard - Text" version="1" id="O5"> |
| 199 | <dia:attribute name="obj_pos"> |
| 200 | <dia:point val="16.4942,2.06397"/> |
| 201 | </dia:attribute> |
| 202 | <dia:attribute name="obj_bb"> |
| 203 | <dia:rectangle val="16.4942,1.52147;18.4887,2.46147"/> |
| 204 | </dia:attribute> |
| 205 | <dia:attribute name="text"> |
| 206 | <dia:composite type="text"> |
| 207 | <dia:attribute name="string"> |
| 208 | <dia:string>#Project#</dia:string> |
| 209 | </dia:attribute> |
| 210 | <dia:attribute name="font"> |
| 211 | <dia:font family="sans" style="0" name="Helvetica"/> |
| 212 | </dia:attribute> |
| 213 | <dia:attribute name="height"> |
| 214 | <dia:real val="0.80000000000000004"/> |
| 215 | </dia:attribute> |
| 216 | <dia:attribute name="pos"> |
| 217 | <dia:point val="16.4942,2.06397"/> |
| 218 | </dia:attribute> |
| 219 | <dia:attribute name="color"> |
| 220 | <dia:color val="#000000"/> |
| 221 | </dia:attribute> |
| 222 | <dia:attribute name="alignment"> |
| 223 | <dia:enum val="0"/> |
| 224 | </dia:attribute> |
| 225 | </dia:composite> |
| 226 | </dia:attribute> |
| 227 | <dia:attribute name="valign"> |
| 228 | <dia:enum val="3"/> |
| 229 | </dia:attribute> |
| 230 | </dia:object> |
| 231 | </dia:group> |
| 232 | <dia:object type="Standard - ZigZagLine" version="1" id="O6"> |
| 233 | <dia:attribute name="obj_pos"> |
| 234 | <dia:point val="17.5,13"/> |
| 235 | </dia:attribute> |
| 236 | <dia:attribute name="obj_bb"> |
| 237 | <dia:rectangle val="17.45,8.92929;17.55,13"/> |
| 238 | </dia:attribute> |
| 239 | <dia:attribute name="orth_points"> |
| 240 | <dia:point val="17.5,13"/> |
| 241 | <dia:point val="17.5,13"/> |
| 242 | <dia:point val="17.5,9"/> |
| 243 | <dia:point val="17.5,9"/> |
| 244 | </dia:attribute> |
| 245 | <dia:attribute name="orth_orient"> |
| 246 | <dia:enum val="0"/> |
| 247 | <dia:enum val="1"/> |
| 248 | <dia:enum val="0"/> |
| 249 | </dia:attribute> |
| 250 | <dia:attribute name="autorouting"> |
| 251 | <dia:boolean val="true"/> |
| 252 | </dia:attribute> |
| 253 | <dia:attribute name="end_arrow"> |
| 254 | <dia:enum val="22"/> |
| 255 | </dia:attribute> |
| 256 | <dia:attribute name="end_arrow_length"> |
| 257 | <dia:real val="0.5"/> |
| 258 | </dia:attribute> |
| 259 | <dia:attribute name="end_arrow_width"> |
| 260 | <dia:real val="0.5"/> |
| 261 | </dia:attribute> |
| 262 | </dia:object> |
| 263 | <dia:object type="Standard - ZigZagLine" version="1" id="O7"> |
| 264 | <dia:attribute name="obj_pos"> |
| 265 | <dia:point val="17.5,7"/> |
| 266 | </dia:attribute> |
| 267 | <dia:attribute name="obj_bb"> |
| 268 | <dia:rectangle val="17.45,2.92929;17.55,7"/> |
| 269 | </dia:attribute> |
| 270 | <dia:attribute name="orth_points"> |
| 271 | <dia:point val="17.5,7"/> |
| 272 | <dia:point val="17.5,7"/> |
| 273 | <dia:point val="17.5,3"/> |
| 274 | <dia:point val="17.5,3"/> |
| 275 | </dia:attribute> |
| 276 | <dia:attribute name="orth_orient"> |
| 277 | <dia:enum val="0"/> |
| 278 | <dia:enum val="1"/> |
| 279 | <dia:enum val="0"/> |
| 280 | </dia:attribute> |
| 281 | <dia:attribute name="autorouting"> |
| 282 | <dia:boolean val="true"/> |
| 283 | </dia:attribute> |
| 284 | <dia:attribute name="end_arrow"> |
| 285 | <dia:enum val="22"/> |
| 286 | </dia:attribute> |
| 287 | <dia:attribute name="end_arrow_length"> |
| 288 | <dia:real val="0.5"/> |
| 289 | </dia:attribute> |
| 290 | <dia:attribute name="end_arrow_width"> |
| 291 | <dia:real val="0.5"/> |
| 292 | </dia:attribute> |
| 293 | </dia:object> |
| 294 | <dia:group> |
| 295 | <dia:object type="Standard - Box" version="0" id="O8"> |
| 296 | <dia:attribute name="obj_pos"> |
| 297 | <dia:point val="15,19"/> |
| 298 | </dia:attribute> |
| 299 | <dia:attribute name="obj_bb"> |
| 300 | <dia:rectangle val="14.95,18.95;20.05,21.05"/> |
| 301 | </dia:attribute> |
| 302 | <dia:attribute name="elem_corner"> |
| 303 | <dia:point val="15,19"/> |
| 304 | </dia:attribute> |
| 305 | <dia:attribute name="elem_width"> |
| 306 | <dia:real val="5"/> |
| 307 | </dia:attribute> |
| 308 | <dia:attribute name="elem_height"> |
| 309 | <dia:real val="2"/> |
| 310 | </dia:attribute> |
| 311 | <dia:attribute name="show_background"> |
| 312 | <dia:boolean val="true"/> |
| 313 | </dia:attribute> |
| 314 | </dia:object> |
| 315 | <dia:object type="Standard - Text" version="1" id="O9"> |
| 316 | <dia:attribute name="obj_pos"> |
| 317 | <dia:point val="16.7775,20.064"/> |
| 318 | </dia:attribute> |
| 319 | <dia:attribute name="obj_bb"> |
| 320 | <dia:rectangle val="16.7775,19.5215;18.2225,20.4615"/> |
| 321 | </dia:attribute> |
| 322 | <dia:attribute name="text"> |
| 323 | <dia:composite type="text"> |
| 324 | <dia:attribute name="string"> |
| 325 | <dia:string>#Meta#</dia:string> |
| 326 | </dia:attribute> |
| 327 | <dia:attribute name="font"> |
| 328 | <dia:font family="sans" style="0" name="Helvetica"/> |
| 329 | </dia:attribute> |
| 330 | <dia:attribute name="height"> |
| 331 | <dia:real val="0.80000000000000004"/> |
| 332 | </dia:attribute> |
| 333 | <dia:attribute name="pos"> |
| 334 | <dia:point val="16.7775,20.064"/> |
| 335 | </dia:attribute> |
| 336 | <dia:attribute name="color"> |
| 337 | <dia:color val="#000000"/> |
| 338 | </dia:attribute> |
| 339 | <dia:attribute name="alignment"> |
| 340 | <dia:enum val="0"/> |
| 341 | </dia:attribute> |
| 342 | </dia:composite> |
| 343 | </dia:attribute> |
| 344 | <dia:attribute name="valign"> |
| 345 | <dia:enum val="3"/> |
| 346 | </dia:attribute> |
| 347 | </dia:object> |
| 348 | </dia:group> |
| 349 | <dia:object type="Standard - PolyLine" version="0" id="O10"> |
| 350 | <dia:attribute name="obj_pos"> |
| 351 | <dia:point val="15,20"/> |
| 352 | </dia:attribute> |
| 353 | <dia:attribute name="obj_bb"> |
| 354 | <dia:rectangle val="7.5,14.95;15.05,20.05"/> |
| 355 | </dia:attribute> |
| 356 | <dia:attribute name="poly_points"> |
| 357 | <dia:point val="15,20"/> |
| 358 | <dia:point val="8,20"/> |
| 359 | <dia:point val="8,15"/> |
| 360 | </dia:attribute> |
| 361 | <dia:attribute name="end_arrow"> |
| 362 | <dia:enum val="22"/> |
| 363 | </dia:attribute> |
| 364 | <dia:attribute name="end_arrow_length"> |
| 365 | <dia:real val="0.5"/> |
| 366 | </dia:attribute> |
| 367 | <dia:attribute name="end_arrow_width"> |
| 368 | <dia:real val="0.5"/> |
| 369 | </dia:attribute> |
| 370 | </dia:object> |
| 371 | <dia:object type="Standard - Line" version="0" id="O11"> |
| 372 | <dia:attribute name="obj_pos"> |
| 373 | <dia:point val="15,14"/> |
| 374 | </dia:attribute> |
| 375 | <dia:attribute name="obj_bb"> |
| 376 | <dia:rectangle val="10.95,13.5;15.05,14.5"/> |
| 377 | </dia:attribute> |
| 378 | <dia:attribute name="conn_endpoints"> |
| 379 | <dia:point val="15,14"/> |
| 380 | <dia:point val="11,14"/> |
| 381 | </dia:attribute> |
| 382 | <dia:attribute name="numcp"> |
| 383 | <dia:int val="1"/> |
| 384 | </dia:attribute> |
| 385 | <dia:attribute name="end_arrow"> |
| 386 | <dia:enum val="22"/> |
| 387 | </dia:attribute> |
| 388 | <dia:attribute name="end_arrow_length"> |
| 389 | <dia:real val="0.5"/> |
| 390 | </dia:attribute> |
| 391 | <dia:attribute name="end_arrow_width"> |
| 392 | <dia:real val="0.5"/> |
| 393 | </dia:attribute> |
| 394 | </dia:object> |
| 395 | <dia:object type="Standard - ZigZagLine" version="1" id="O12"> |
| 396 | <dia:attribute name="obj_pos"> |
| 397 | <dia:point val="20,20"/> |
| 398 | </dia:attribute> |
| 399 | <dia:attribute name="obj_bb"> |
| 400 | <dia:rectangle val="19.95,1.5;27.05,20.05"/> |
| 401 | </dia:attribute> |
| 402 | <dia:attribute name="orth_points"> |
| 403 | <dia:point val="20,20"/> |
| 404 | <dia:point val="27,20"/> |
| 405 | <dia:point val="27,2"/> |
| 406 | <dia:point val="20,2"/> |
| 407 | </dia:attribute> |
| 408 | <dia:attribute name="orth_orient"> |
| 409 | <dia:enum val="0"/> |
| 410 | <dia:enum val="1"/> |
| 411 | <dia:enum val="0"/> |
| 412 | </dia:attribute> |
| 413 | <dia:attribute name="autorouting"> |
| 414 | <dia:boolean val="false"/> |
| 415 | </dia:attribute> |
| 416 | <dia:attribute name="end_arrow"> |
| 417 | <dia:enum val="22"/> |
| 418 | </dia:attribute> |
| 419 | <dia:attribute name="end_arrow_length"> |
| 420 | <dia:real val="0.5"/> |
| 421 | </dia:attribute> |
| 422 | <dia:attribute name="end_arrow_width"> |
| 423 | <dia:real val="0.5"/> |
| 424 | </dia:attribute> |
| 425 | </dia:object> |
| 426 | <dia:object type="Standard - Line" version="0" id="O13"> |
| 427 | <dia:attribute name="obj_pos"> |
| 428 | <dia:point val="17.5,15"/> |
| 429 | </dia:attribute> |
| 430 | <dia:attribute name="obj_bb"> |
| 431 | <dia:rectangle val="17,14.95;18,19.05"/> |
| 432 | </dia:attribute> |
| 433 | <dia:attribute name="conn_endpoints"> |
| 434 | <dia:point val="17.5,15"/> |
| 435 | <dia:point val="17.5,19"/> |
| 436 | </dia:attribute> |
| 437 | <dia:attribute name="numcp"> |
| 438 | <dia:int val="1"/> |
| 439 | </dia:attribute> |
| 440 | <dia:attribute name="end_arrow"> |
| 441 | <dia:enum val="22"/> |
| 442 | </dia:attribute> |
| 443 | <dia:attribute name="end_arrow_length"> |
| 444 | <dia:real val="0.5"/> |
| 445 | </dia:attribute> |
| 446 | <dia:attribute name="end_arrow_width"> |
| 447 | <dia:real val="0.5"/> |
| 448 | </dia:attribute> |
| 449 | </dia:object> |
| 450 | <dia:object type="Standard - PolyLine" version="0" id="O14"> |
| 451 | <dia:attribute name="obj_pos"> |
| 452 | <dia:point val="8,13"/> |
| 453 | </dia:attribute> |
| 454 | <dia:attribute name="obj_bb"> |
| 455 | <dia:rectangle val="7.95,1.5;15.05,13.05"/> |
| 456 | </dia:attribute> |
| 457 | <dia:attribute name="poly_points"> |
| 458 | <dia:point val="8,13"/> |
| 459 | <dia:point val="8,2"/> |
| 460 | <dia:point val="15,2"/> |
| 461 | </dia:attribute> |
| 462 | <dia:attribute name="end_arrow"> |
| 463 | <dia:enum val="22"/> |
| 464 | </dia:attribute> |
| 465 | <dia:attribute name="end_arrow_length"> |
| 466 | <dia:real val="0.5"/> |
| 467 | </dia:attribute> |
| 468 | <dia:attribute name="end_arrow_width"> |
| 469 | <dia:real val="0.5"/> |
| 470 | </dia:attribute> |
| 471 | </dia:object> |
| 472 | <dia:group> |
| 473 | <dia:object type="Standard - Box" version="0" id="O15"> |
| 474 | <dia:attribute name="obj_pos"> |
| 475 | <dia:point val="5,13"/> |
| 476 | </dia:attribute> |
| 477 | <dia:attribute name="obj_bb"> |
| 478 | <dia:rectangle val="4.95,12.95;11.05,15.05"/> |
| 479 | </dia:attribute> |
| 480 | <dia:attribute name="elem_corner"> |
| 481 | <dia:point val="5,13"/> |
| 482 | </dia:attribute> |
| 483 | <dia:attribute name="elem_width"> |
| 484 | <dia:real val="6"/> |
| 485 | </dia:attribute> |
| 486 | <dia:attribute name="elem_height"> |
| 487 | <dia:real val="2"/> |
| 488 | </dia:attribute> |
| 489 | <dia:attribute name="show_background"> |
| 490 | <dia:boolean val="true"/> |
| 491 | </dia:attribute> |
| 492 | </dia:object> |
| 493 | <dia:object type="Standard - Text" version="1" id="O16"> |
| 494 | <dia:attribute name="obj_pos"> |
| 495 | <dia:point val="6.91375,14.0725"/> |
| 496 | </dia:attribute> |
| 497 | <dia:attribute name="obj_bb"> |
| 498 | <dia:rectangle val="6.91375,13.53;9.08625,14.47"/> |
| 499 | </dia:attribute> |
| 500 | <dia:attribute name="text"> |
| 501 | <dia:composite type="text"> |
| 502 | <dia:attribute name="string"> |
| 503 | <dia:string>#Symbol#</dia:string> |
| 504 | </dia:attribute> |
| 505 | <dia:attribute name="font"> |
| 506 | <dia:font family="sans" style="0" name="Helvetica"/> |
| 507 | </dia:attribute> |
| 508 | <dia:attribute name="height"> |
| 509 | <dia:real val="0.80000000000000004"/> |
| 510 | </dia:attribute> |
| 511 | <dia:attribute name="pos"> |
| 512 | <dia:point val="6.91375,14.0725"/> |
| 513 | </dia:attribute> |
| 514 | <dia:attribute name="color"> |
| 515 | <dia:color val="#000000"/> |
| 516 | </dia:attribute> |
| 517 | <dia:attribute name="alignment"> |
| 518 | <dia:enum val="0"/> |
| 519 | </dia:attribute> |
| 520 | </dia:composite> |
| 521 | </dia:attribute> |
| 522 | <dia:attribute name="valign"> |
| 523 | <dia:enum val="3"/> |
| 524 | </dia:attribute> |
| 525 | </dia:object> |
| 526 | </dia:group> |
| 527 | <dia:object type="Standard - Text" version="1" id="O17"> |
| 528 | <dia:attribute name="obj_pos"> |
| 529 | <dia:point val="18,12"/> |
| 530 | </dia:attribute> |
| 531 | <dia:attribute name="obj_bb"> |
| 532 | <dia:rectangle val="18,11.4575;21.06,12.3975"/> |
| 533 | </dia:attribute> |
| 534 | <dia:attribute name="text"> |
| 535 | <dia:composite type="text"> |
| 536 | <dia:attribute name="string"> |
| 537 | <dia:string>#belongs to#</dia:string> |
| 538 | </dia:attribute> |
| 539 | <dia:attribute name="font"> |
| 540 | <dia:font family="sans" style="0" name="Helvetica"/> |
| 541 | </dia:attribute> |
| 542 | <dia:attribute name="height"> |
| 543 | <dia:real val="0.80000000000000004"/> |
| 544 | </dia:attribute> |
| 545 | <dia:attribute name="pos"> |
| 546 | <dia:point val="18,12"/> |
| 547 | </dia:attribute> |
| 548 | <dia:attribute name="color"> |
| 549 | <dia:color val="#000000"/> |
| 550 | </dia:attribute> |
| 551 | <dia:attribute name="alignment"> |
| 552 | <dia:enum val="0"/> |
| 553 | </dia:attribute> |
| 554 | </dia:composite> |
| 555 | </dia:attribute> |
| 556 | <dia:attribute name="valign"> |
| 557 | <dia:enum val="3"/> |
| 558 | </dia:attribute> |
| 559 | </dia:object> |
| 560 | <dia:object type="Standard - Text" version="1" id="O18"> |
| 561 | <dia:attribute name="obj_pos"> |
| 562 | <dia:point val="18,6"/> |
| 563 | </dia:attribute> |
| 564 | <dia:attribute name="obj_bb"> |
| 565 | <dia:rectangle val="18,5.4575;21.06,6.3975"/> |
| 566 | </dia:attribute> |
| 567 | <dia:attribute name="text"> |
| 568 | <dia:composite type="text"> |
| 569 | <dia:attribute name="string"> |
| 570 | <dia:string>#belongs to#</dia:string> |
| 571 | </dia:attribute> |
| 572 | <dia:attribute name="font"> |
| 573 | <dia:font family="sans" style="0" name="Helvetica"/> |
| 574 | </dia:attribute> |
| 575 | <dia:attribute name="height"> |
| 576 | <dia:real val="0.80000000000000004"/> |
| 577 | </dia:attribute> |
| 578 | <dia:attribute name="pos"> |
| 579 | <dia:point val="18,6"/> |
| 580 | </dia:attribute> |
| 581 | <dia:attribute name="color"> |
| 582 | <dia:color val="#000000"/> |
| 583 | </dia:attribute> |
| 584 | <dia:attribute name="alignment"> |
| 585 | <dia:enum val="0"/> |
| 586 | </dia:attribute> |
| 587 | </dia:composite> |
| 588 | </dia:attribute> |
| 589 | <dia:attribute name="valign"> |
| 590 | <dia:enum val="3"/> |
| 591 | </dia:attribute> |
| 592 | </dia:object> |
| 593 | <dia:object type="Standard - Text" version="1" id="O19"> |
| 594 | <dia:attribute name="obj_pos"> |
| 595 | <dia:point val="18,16"/> |
| 596 | </dia:attribute> |
| 597 | <dia:attribute name="obj_bb"> |
| 598 | <dia:rectangle val="18,15.4575;19.03,16.3975"/> |
| 599 | </dia:attribute> |
| 600 | <dia:attribute name="text"> |
| 601 | <dia:composite type="text"> |
| 602 | <dia:attribute name="string"> |
| 603 | <dia:string>#has#</dia:string> |
| 604 | </dia:attribute> |
| 605 | <dia:attribute name="font"> |
| 606 | <dia:font family="sans" style="0" name="Helvetica"/> |
| 607 | </dia:attribute> |
| 608 | <dia:attribute name="height"> |
| 609 | <dia:real val="0.80000000000000004"/> |
| 610 | </dia:attribute> |
| 611 | <dia:attribute name="pos"> |
| 612 | <dia:point val="18,16"/> |
| 613 | </dia:attribute> |
| 614 | <dia:attribute name="color"> |
| 615 | <dia:color val="#000000"/> |
| 616 | </dia:attribute> |
| 617 | <dia:attribute name="alignment"> |
| 618 | <dia:enum val="0"/> |
| 619 | </dia:attribute> |
| 620 | </dia:composite> |
| 621 | </dia:attribute> |
| 622 | <dia:attribute name="valign"> |
| 623 | <dia:enum val="3"/> |
| 624 | </dia:attribute> |
| 625 | </dia:object> |
| 626 | <dia:object type="Standard - Text" version="1" id="O20"> |
| 627 | <dia:attribute name="obj_pos"> |
| 628 | <dia:point val="21,20"/> |
| 629 | </dia:attribute> |
| 630 | <dia:attribute name="obj_bb"> |
| 631 | <dia:rectangle val="21,19.4575;24.06,20.3975"/> |
| 632 | </dia:attribute> |
| 633 | <dia:attribute name="text"> |
| 634 | <dia:composite type="text"> |
| 635 | <dia:attribute name="string"> |
| 636 | <dia:string>#belongs to#</dia:string> |
| 637 | </dia:attribute> |
| 638 | <dia:attribute name="font"> |
| 639 | <dia:font family="sans" style="0" name="Helvetica"/> |
| 640 | </dia:attribute> |
| 641 | <dia:attribute name="height"> |
| 642 | <dia:real val="0.80000000000000004"/> |
| 643 | </dia:attribute> |
| 644 | <dia:attribute name="pos"> |
| 645 | <dia:point val="21,20"/> |
| 646 | </dia:attribute> |
| 647 | <dia:attribute name="color"> |
| 648 | <dia:color val="#000000"/> |
| 649 | </dia:attribute> |
| 650 | <dia:attribute name="alignment"> |
| 651 | <dia:enum val="0"/> |
| 652 | </dia:attribute> |
| 653 | </dia:composite> |
| 654 | </dia:attribute> |
| 655 | <dia:attribute name="valign"> |
| 656 | <dia:enum val="3"/> |
| 657 | </dia:attribute> |
| 658 | </dia:object> |
| 659 | <dia:object type="Standard - Text" version="1" id="O21"> |
| 660 | <dia:attribute name="obj_pos"> |
| 661 | <dia:point val="11,20"/> |
| 662 | </dia:attribute> |
| 663 | <dia:attribute name="obj_bb"> |
| 664 | <dia:rectangle val="11,19.4575;14.06,20.3975"/> |
| 665 | </dia:attribute> |
| 666 | <dia:attribute name="text"> |
| 667 | <dia:composite type="text"> |
| 668 | <dia:attribute name="string"> |
| 669 | <dia:string>#belongs to#</dia:string> |
| 670 | </dia:attribute> |
| 671 | <dia:attribute name="font"> |
| 672 | <dia:font family="sans" style="0" name="Helvetica"/> |
| 673 | </dia:attribute> |
| 674 | <dia:attribute name="height"> |
| 675 | <dia:real val="0.80000000000000004"/> |
| 676 | </dia:attribute> |
| 677 | <dia:attribute name="pos"> |
| 678 | <dia:point val="11,20"/> |
| 679 | </dia:attribute> |
| 680 | <dia:attribute name="color"> |
| 681 | <dia:color val="#000000"/> |
| 682 | </dia:attribute> |
| 683 | <dia:attribute name="alignment"> |
| 684 | <dia:enum val="0"/> |
| 685 | </dia:attribute> |
| 686 | </dia:composite> |
| 687 | </dia:attribute> |
| 688 | <dia:attribute name="valign"> |
| 689 | <dia:enum val="3"/> |
| 690 | </dia:attribute> |
| 691 | </dia:object> |
| 692 | <dia:object type="Standard - Text" version="1" id="O22"> |
| 693 | <dia:attribute name="obj_pos"> |
| 694 | <dia:point val="12,15"/> |
| 695 | </dia:attribute> |
| 696 | <dia:attribute name="obj_bb"> |
| 697 | <dia:rectangle val="12,14.4575;15.06,15.3975"/> |
| 698 | </dia:attribute> |
| 699 | <dia:attribute name="text"> |
| 700 | <dia:composite type="text"> |
| 701 | <dia:attribute name="string"> |
| 702 | <dia:string>#belongs to#</dia:string> |
| 703 | </dia:attribute> |
| 704 | <dia:attribute name="font"> |
| 705 | <dia:font family="sans" style="0" name="Helvetica"/> |
| 706 | </dia:attribute> |
| 707 | <dia:attribute name="height"> |
| 708 | <dia:real val="0.80000000000000004"/> |
| 709 | </dia:attribute> |
| 710 | <dia:attribute name="pos"> |
| 711 | <dia:point val="12,15"/> |
| 712 | </dia:attribute> |
| 713 | <dia:attribute name="color"> |
| 714 | <dia:color val="#000000"/> |
| 715 | </dia:attribute> |
| 716 | <dia:attribute name="alignment"> |
| 717 | <dia:enum val="0"/> |
| 718 | </dia:attribute> |
| 719 | </dia:composite> |
| 720 | </dia:attribute> |
| 721 | <dia:attribute name="valign"> |
| 722 | <dia:enum val="3"/> |
| 723 | </dia:attribute> |
| 724 | </dia:object> |
| 725 | <dia:object type="Standard - Text" version="1" id="O23"> |
| 726 | <dia:attribute name="obj_pos"> |
| 727 | <dia:point val="9,12"/> |
| 728 | </dia:attribute> |
| 729 | <dia:attribute name="obj_bb"> |
| 730 | <dia:rectangle val="9,11.4575;12.06,12.3975"/> |
| 731 | </dia:attribute> |
| 732 | <dia:attribute name="text"> |
| 733 | <dia:composite type="text"> |
| 734 | <dia:attribute name="string"> |
| 735 | <dia:string>#belongs to#</dia:string> |
| 736 | </dia:attribute> |
| 737 | <dia:attribute name="font"> |
| 738 | <dia:font family="sans" style="0" name="Helvetica"/> |
| 739 | </dia:attribute> |
| 740 | <dia:attribute name="height"> |
| 741 | <dia:real val="0.80000000000000004"/> |
| 742 | </dia:attribute> |
| 743 | <dia:attribute name="pos"> |
| 744 | <dia:point val="9,12"/> |
| 745 | </dia:attribute> |
| 746 | <dia:attribute name="color"> |
| 747 | <dia:color val="#000000"/> |
| 748 | </dia:attribute> |
| 749 | <dia:attribute name="alignment"> |
| 750 | <dia:enum val="0"/> |
| 751 | </dia:attribute> |
| 752 | </dia:composite> |
| 753 | </dia:attribute> |
| 754 | <dia:attribute name="valign"> |
| 755 | <dia:enum val="3"/> |
| 756 | </dia:attribute> |
| 757 | </dia:object> |
| 758 | <dia:object type="Standard - Text" version="1" id="O24"> |
| 759 | <dia:attribute name="obj_pos"> |
| 760 | <dia:point val="1,13"/> |
| 761 | </dia:attribute> |
| 762 | <dia:attribute name="obj_bb"> |
| 763 | <dia:rectangle val="1,12.4575;10.5175,13.3975"/> |
| 764 | </dia:attribute> |
| 765 | <dia:attribute name="text"> |
| 766 | <dia:composite type="text"> |
| 767 | <dia:attribute name="string"> |
| 768 | <dia:string>#(Line of Development / Branch)#</dia:string> |
| 769 | </dia:attribute> |
| 770 | <dia:attribute name="font"> |
| 771 | <dia:font family="sans" style="0" name="Helvetica"/> |
| 772 | </dia:attribute> |
| 773 | <dia:attribute name="height"> |
| 774 | <dia:real val="0.80000000000000004"/> |
| 775 | </dia:attribute> |
| 776 | <dia:attribute name="pos"> |
| 777 | <dia:point val="1,13"/> |
| 778 | </dia:attribute> |
| 779 | <dia:attribute name="color"> |
| 780 | <dia:color val="#000000"/> |
| 781 | </dia:attribute> |
| 782 | <dia:attribute name="alignment"> |
| 783 | <dia:enum val="0"/> |
| 784 | </dia:attribute> |
| 785 | </dia:composite> |
| 786 | </dia:attribute> |
| 787 | <dia:attribute name="valign"> |
| 788 | <dia:enum val="3"/> |
| 789 | </dia:attribute> |
| 790 | </dia:object> |
| 791 | </dia:group> |
| 792 | </dia:layer> |
| 793 | </dia:diagram> |
+576
| --- a/art/CollRev2.dia | ||
| +++ b/art/CollRev2.dia | ||
| @@ -0,0 +1,576 @@ | ||
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | |
| 2 | +<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/"> | |
| 3 | + <dia:diagramdata> | |
| 4 | + <dia:attribute name="background"> | |
| 5 | + <dia:color val="#ffffff"/> | |
| 6 | + </dia:attribute> | |
| 7 | + <dia:attribute name="pagebreak"> | |
| 8 | + <dia:color val="#000099"/> | |
| 9 | + </dia:attribute> | |
| 10 | + <dia:attribute name="paper"> | |
| 11 | + <dia:composite type="paper"> | |
| 12 | + <dia:attribute name="name"> | |
| 13 | + <dia:string>#Letter#</dia:string> | |
| 14 | + </dia:attribute> | |
| 15 | + <dia:attribute name="tmargin"> | |
| 16 | + <dia:real val="2.5399999618530273"/> | |
| 17 | + </dia:attribute> | |
| 18 | + <dia:attribute name="bmargin"> | |
| 19 | + <dia:real val="2.5399999618530273"/> | |
| 20 | + </dia:attribute> | |
| 21 | + <dia:attribute name="lmargin"> | |
| 22 | + <dia:real val="2.5399999618530273"/> | |
| 23 | + </dia:attribute> | |
| 24 | + <dia:attribute name="rmargin"> | |
| 25 | + <dia:real val="2.5399999618530273"/> | |
| 26 | + </dia:attribute> | |
| 27 | + <dia:attribute name="is_portrait"> | |
| 28 | + <dia:boolean val="true"/> | |
| 29 | + </dia:attribute> | |
| 30 | + <dia:attribute name="scaling"> | |
| 31 | + <dia:real val="1"/> | |
| 32 | + </dia:attribute> | |
| 33 | + <dia:attribute name="fitto"> | |
| 34 | + <dia:boolean val="false"/> | |
| 35 | + </dia:attribute> | |
| 36 | + </dia:composite> | |
| 37 | + </dia:attribute> | |
| 38 | + <dia:attribute name="grid"> | |
| 39 | + <dia:composite type="grid"> | |
| 40 | + <dia:attribute name="width_x"> | |
| 41 | + <dia:real val="1"/> | |
| 42 | + </dia:attribute> | |
| 43 | + <dia:attribute name="width_y"> | |
| 44 | + <dia:real val="1"/> | |
| 45 | + </dia:attribute> | |
| 46 | + <dia:attribute name="visible_x"> | |
| 47 | + <dia:int val="1"/> | |
| 48 | + </dia:attribute> | |
| 49 | + <dia:attribute name="visible_y"> | |
| 50 | + <dia:int val="1"/> | |
| 51 | + </dia:attribute> | |
| 52 | + <dia:composite type="color"/> | |
| 53 | + </dia:composite> | |
| 54 | + </dia:attribute> | |
| 55 | + <dia:attribute name="color"> | |
| 56 | + <dia:color val="#d8e5e5"/> | |
| 57 | + </dia:attribute> | |
| 58 | + <dia:attribute name="guides"> | |
| 59 | + <dia:composite type="guides"> | |
| 60 | + <dia:attribute name="hguides"/> | |
| 61 | + <dia:attribute name="vguides"/> | |
| 62 | + </dia:composite> | |
| 63 | + </dia:attribute> | |
| 64 | + </dia:diagramdata> | |
| 65 | + <dia:layer name="Background" visible="true"> | |
| 66 | + <dia:group> | |
| 67 | + <dia:group> | |
| 68 | + <dia:object type="Standard - Box" version="0" id="O0"> | |
| 69 | + <dia:attribute name="obj_pos"> | |
| 70 | + <dia:point val="13,1"/> | |
| 71 | + </dia:attribute> | |
| 72 | + <dia:attribute name="obj_bb"> | |
| 73 | + <dia:rectangle val="12.95,0.95;20.05,3.05"/> | |
| 74 | + </dia:attribute> | |
| 75 | + <dia:attribute name="elem_corner"> | |
| 76 | + <dia:point val="13,1"/> | |
| 77 | + </dia:attribute> | |
| 78 | + <dia:attribute name="elem_width"> | |
| 79 | + <dia:real val="7"/> | |
| 80 | + </dia:attribute> | |
| 81 | + <dia:attribute name="elem_height"> | |
| 82 | + <dia:real val="2"/> | |
| 83 | + </dia:attribute> | |
| 84 | + <dia:attribute name="show_background"> | |
| 85 | + <dia:boolean val="true"/> | |
| 86 | + </dia:attribute> | |
| 87 | + </dia:object> | |
| 88 | + <dia:object type="Standard - Text" version="1" id="O1"> | |
| 89 | + <dia:attribute name="obj_pos"> | |
| 90 | + <dia:point val="15.2818,2.06397"/> | |
| 91 | + </dia:attribute> | |
| 92 | + <dia:attribute name="obj_bb"> | |
| 93 | + <dia:rectangle val="15.2818,1.52147;17.7182,2.46147"/> | |
| 94 | + </dia:attribute> | |
| 95 | + <dia:attribute name="text"> | |
| 96 | + <dia:composite type="text"> | |
| 97 | + <dia:attribute name="string"> | |
| 98 | + <dia:string>#Revision#</dia:string> | |
| 99 | + </dia:attribute> | |
| 100 | + <dia:attribute name="font"> | |
| 101 | + <dia:font family="sans" style="0" name="Helvetica"/> | |
| 102 | + </dia:attribute> | |
| 103 | + <dia:attribute name="height"> | |
| 104 | + <dia:real val="0.80000000000000004"/> | |
| 105 | + </dia:attribute> | |
| 106 | + <dia:attribute name="pos"> | |
| 107 | + <dia:point val="15.2818,2.06397"/> | |
| 108 | + </dia:attribute> | |
| 109 | + <dia:attribute name="color"> | |
| 110 | + <dia:color val="#000000"/> | |
| 111 | + </dia:attribute> | |
| 112 | + <dia:attribute name="alignment"> | |
| 113 | + <dia:enum val="0"/> | |
| 114 | + </dia:attribute> | |
| 115 | + </dia:composite> | |
| 116 | + </dia:attribute> | |
| 117 | + <dia:attribute name="valign"> | |
| 118 | + <dia:enum val="3"/> | |
| 119 | + </dia:attribute> | |
| 120 | + </dia:object> | |
| 121 | + </dia:group> | |
| 122 | + <dia:group> | |
| 123 | + <dia:object type="Standard - Box" version="0" id="O2"> | |
| 124 | + <dia:attribute name="obj_pos"> | |
| 125 | + <dia:point val="13,7"/> | |
| 126 | + </dia:attribute> | |
| 127 | + <dia:attribute name="obj_bb"> | |
| 128 | + <dia:rectangle val="12.95,6.95;20.05,9.05"/> | |
| 129 | + </dia:attribute> | |
| 130 | + <dia:attribute name="elem_corner"> | |
| 131 | + <dia:point val="13,7"/> | |
| 132 | + </dia:attribute> | |
| 133 | + <dia:attribute name="elem_width"> | |
| 134 | + <dia:real val="7"/> | |
| 135 | + </dia:attribute> | |
| 136 | + <dia:attribute name="elem_height"> | |
| 137 | + <dia:real val="2"/> | |
| 138 | + </dia:attribute> | |
| 139 | + <dia:attribute name="show_background"> | |
| 140 | + <dia:boolean val="true"/> | |
| 141 | + </dia:attribute> | |
| 142 | + </dia:object> | |
| 143 | + <dia:object type="Standard - Text" version="1" id="O3"> | |
| 144 | + <dia:attribute name="obj_pos"> | |
| 145 | + <dia:point val="14.1456,8.06397"/> | |
| 146 | + </dia:attribute> | |
| 147 | + <dia:attribute name="obj_bb"> | |
| 148 | + <dia:rectangle val="14.1456,7.52147;18.8544,8.46147"/> | |
| 149 | + </dia:attribute> | |
| 150 | + <dia:attribute name="text"> | |
| 151 | + <dia:composite type="text"> | |
| 152 | + <dia:attribute name="string"> | |
| 153 | + <dia:string>#Revision' (Child)#</dia:string> | |
| 154 | + </dia:attribute> | |
| 155 | + <dia:attribute name="font"> | |
| 156 | + <dia:font family="sans" style="0" name="Helvetica"/> | |
| 157 | + </dia:attribute> | |
| 158 | + <dia:attribute name="height"> | |
| 159 | + <dia:real val="0.80000000000000004"/> | |
| 160 | + </dia:attribute> | |
| 161 | + <dia:attribute name="pos"> | |
| 162 | + <dia:point val="14.1456,8.06397"/> | |
| 163 | + </dia:attribute> | |
| 164 | + <dia:attribute name="color"> | |
| 165 | + <dia:color val="#000000"/> | |
| 166 | + </dia:attribute> | |
| 167 | + <dia:attribute name="alignment"> | |
| 168 | + <dia:enum val="0"/> | |
| 169 | + </dia:attribute> | |
| 170 | + </dia:composite> | |
| 171 | + </dia:attribute> | |
| 172 | + <dia:attribute name="valign"> | |
| 173 | + <dia:enum val="3"/> | |
| 174 | + </dia:attribute> | |
| 175 | + </dia:object> | |
| 176 | + </dia:group> | |
| 177 | + <dia:group> | |
| 178 | + <dia:object type="Standard - Box" version="0" id="O4"> | |
| 179 | + <dia:attribute name="obj_pos"> | |
| 180 | + <dia:point val="2,2"/> | |
| 181 | + </dia:attribute> | |
| 182 | + <dia:attribute name="obj_bb"> | |
| 183 | + <dia:rectangle val="1.95,1.95;9.05,4.05"/> | |
| 184 | + </dia:attribute> | |
| 185 | + <dia:attribute name="elem_corner"> | |
| 186 | + <dia:point val="2,2"/> | |
| 187 | + </dia:attribute> | |
| 188 | + <dia:attribute name="elem_width"> | |
| 189 | + <dia:real val="7"/> | |
| 190 | + </dia:attribute> | |
| 191 | + <dia:attribute name="elem_height"> | |
| 192 | + <dia:real val="2"/> | |
| 193 | + </dia:attribute> | |
| 194 | + <dia:attribute name="show_background"> | |
| 195 | + <dia:boolean val="true"/> | |
| 196 | + </dia:attribute> | |
| 197 | + </dia:object> | |
| 198 | + <dia:object type="Standard - Text" version="1" id="O5"> | |
| 199 | + <dia:attribute name="obj_pos"> | |
| 200 | + <dia:point val="5.00393,3.06397"/> | |
| 201 | + </dia:attribute> | |
| 202 | + <dia:attribute name="obj_bb"> | |
| 203 | + <dia:rectangle val="5.00393,2.52147;5.97901,3.46147"/> | |
| 204 | + </dia:attribute> | |
| 205 | + <dia:attribute name="text"> | |
| 206 | + <dia:composite type="text"> | |
| 207 | + <dia:attribute name="string"> | |
| 208 | + <dia:string>#File#</dia:string> | |
| 209 | + </dia:attribute> | |
| 210 | + <dia:attribute name="font"> | |
| 211 | + <dia:font family="sans" style="0" name="Helvetica"/> | |
| 212 | + </dia:attribute> | |
| 213 | + <dia:attribute name="height"> | |
| 214 | + <dia:real val="0.80000000000000004"/> | |
| 215 | + </dia:attribute> | |
| 216 | + <dia:attribute name="pos"> | |
| 217 | + <dia:point val="5.00393,3.06397"/> | |
| 218 | + </dia:attribute> | |
| 219 | + <dia:attribute name="color"> | |
| 220 | + <dia:color val="#000000"/> | |
| 221 | + </dia:attribute> | |
| 222 | + <dia:attribute name="alignment"> | |
| 223 | + <dia:enum val="0"/> | |
| 224 | + </dia:attribute> | |
| 225 | + </dia:composite> | |
| 226 | + </dia:attribute> | |
| 227 | + <dia:attribute name="valign"> | |
| 228 | + <dia:enum val="3"/> | |
| 229 | + </dia:attribute> | |
| 230 | + </dia:object> | |
| 231 | + </dia:group> | |
| 232 | + <dia:object type="Standard - Line" version="0" id="O6"> | |
| 233 | + <dia:attribute name="obj_pos"> | |
| 234 | + <dia:point val="13,8"/> | |
| 235 | + </dia:attribute> | |
| 236 | + <dia:attribute name="obj_bb"> | |
| 237 | + <dia:rectangle val="8.83023,6.5028;13.0606,8.06063"/> | |
| 238 | + </dia:attribute> | |
| 239 | + <dia:attribute name="conn_endpoints"> | |
| 240 | + <dia:point val="13,8"/> | |
| 241 | + <dia:point val="9,7"/> | |
| 242 | + </dia:attribute> | |
| 243 | + <dia:attribute name="numcp"> | |
| 244 | + <dia:int val="1"/> | |
| 245 | + </dia:attribute> | |
| 246 | + <dia:attribute name="end_arrow"> | |
| 247 | + <dia:enum val="22"/> | |
| 248 | + </dia:attribute> | |
| 249 | + <dia:attribute name="end_arrow_length"> | |
| 250 | + <dia:real val="0.5"/> | |
| 251 | + </dia:attribute> | |
| 252 | + <dia:attribute name="end_arrow_width"> | |
| 253 | + <dia:real val="0.5"/> | |
| 254 | + </dia:attribute> | |
| 255 | + </dia:object> | |
| 256 | + <dia:object type="Standard - Line" version="0" id="O7"> | |
| 257 | + <dia:attribute name="obj_pos"> | |
| 258 | + <dia:point val="13,2"/> | |
| 259 | + </dia:attribute> | |
| 260 | + <dia:attribute name="obj_bb"> | |
| 261 | + <dia:rectangle val="8.83023,1.93937;13.0606,3.4972"/> | |
| 262 | + </dia:attribute> | |
| 263 | + <dia:attribute name="conn_endpoints"> | |
| 264 | + <dia:point val="13,2"/> | |
| 265 | + <dia:point val="9,3"/> | |
| 266 | + </dia:attribute> | |
| 267 | + <dia:attribute name="numcp"> | |
| 268 | + <dia:int val="1"/> | |
| 269 | + </dia:attribute> | |
| 270 | + <dia:attribute name="end_arrow"> | |
| 271 | + <dia:enum val="22"/> | |
| 272 | + </dia:attribute> | |
| 273 | + <dia:attribute name="end_arrow_length"> | |
| 274 | + <dia:real val="0.5"/> | |
| 275 | + </dia:attribute> | |
| 276 | + <dia:attribute name="end_arrow_width"> | |
| 277 | + <dia:real val="0.5"/> | |
| 278 | + </dia:attribute> | |
| 279 | + </dia:object> | |
| 280 | + <dia:object type="Standard - Line" version="0" id="O8"> | |
| 281 | + <dia:attribute name="obj_pos"> | |
| 282 | + <dia:point val="13,2"/> | |
| 283 | + </dia:attribute> | |
| 284 | + <dia:attribute name="obj_bb"> | |
| 285 | + <dia:rectangle val="8.57833,1.92972;13.0703,7.35139"/> | |
| 286 | + </dia:attribute> | |
| 287 | + <dia:attribute name="conn_endpoints"> | |
| 288 | + <dia:point val="13,2"/> | |
| 289 | + <dia:point val="9,7"/> | |
| 290 | + </dia:attribute> | |
| 291 | + <dia:attribute name="numcp"> | |
| 292 | + <dia:int val="1"/> | |
| 293 | + </dia:attribute> | |
| 294 | + <dia:attribute name="end_arrow"> | |
| 295 | + <dia:enum val="22"/> | |
| 296 | + </dia:attribute> | |
| 297 | + <dia:attribute name="end_arrow_length"> | |
| 298 | + <dia:real val="0.5"/> | |
| 299 | + </dia:attribute> | |
| 300 | + <dia:attribute name="end_arrow_width"> | |
| 301 | + <dia:real val="0.5"/> | |
| 302 | + </dia:attribute> | |
| 303 | + </dia:object> | |
| 304 | + <dia:object type="Standard - Line" version="0" id="O9"> | |
| 305 | + <dia:attribute name="obj_pos"> | |
| 306 | + <dia:point val="13,8"/> | |
| 307 | + </dia:attribute> | |
| 308 | + <dia:attribute name="obj_bb"> | |
| 309 | + <dia:rectangle val="8.57833,2.64861;13.0703,8.07028"/> | |
| 310 | + </dia:attribute> | |
| 311 | + <dia:attribute name="conn_endpoints"> | |
| 312 | + <dia:point val="13,8"/> | |
| 313 | + <dia:point val="9,3"/> | |
| 314 | + </dia:attribute> | |
| 315 | + <dia:attribute name="numcp"> | |
| 316 | + <dia:int val="1"/> | |
| 317 | + </dia:attribute> | |
| 318 | + <dia:attribute name="end_arrow"> | |
| 319 | + <dia:enum val="22"/> | |
| 320 | + </dia:attribute> | |
| 321 | + <dia:attribute name="end_arrow_length"> | |
| 322 | + <dia:real val="0.5"/> | |
| 323 | + </dia:attribute> | |
| 324 | + <dia:attribute name="end_arrow_width"> | |
| 325 | + <dia:real val="0.5"/> | |
| 326 | + </dia:attribute> | |
| 327 | + </dia:object> | |
| 328 | + <dia:group> | |
| 329 | + <dia:object type="Standard - Box" version="0" id="O10"> | |
| 330 | + <dia:attribute name="obj_pos"> | |
| 331 | + <dia:point val="2,6"/> | |
| 332 | + </dia:attribute> | |
| 333 | + <dia:attribute name="obj_bb"> | |
| 334 | + <dia:rectangle val="1.95,5.95;9.05,8.05"/> | |
| 335 | + </dia:attribute> | |
| 336 | + <dia:attribute name="elem_corner"> | |
| 337 | + <dia:point val="2,6"/> | |
| 338 | + </dia:attribute> | |
| 339 | + <dia:attribute name="elem_width"> | |
| 340 | + <dia:real val="7"/> | |
| 341 | + </dia:attribute> | |
| 342 | + <dia:attribute name="elem_height"> | |
| 343 | + <dia:real val="2"/> | |
| 344 | + </dia:attribute> | |
| 345 | + <dia:attribute name="show_background"> | |
| 346 | + <dia:boolean val="true"/> | |
| 347 | + </dia:attribute> | |
| 348 | + </dia:object> | |
| 349 | + <dia:object type="Standard - Text" version="1" id="O11"> | |
| 350 | + <dia:attribute name="obj_pos"> | |
| 351 | + <dia:point val="3.53147,6.6725"/> | |
| 352 | + </dia:attribute> | |
| 353 | + <dia:attribute name="obj_bb"> | |
| 354 | + <dia:rectangle val="3.53147,6.13;7.45147,7.87"/> | |
| 355 | + </dia:attribute> | |
| 356 | + <dia:attribute name="text"> | |
| 357 | + <dia:composite type="text"> | |
| 358 | + <dia:attribute name="string"> | |
| 359 | + <dia:string>#Line of | |
| 360 | +Development#</dia:string> | |
| 361 | + </dia:attribute> | |
| 362 | + <dia:attribute name="font"> | |
| 363 | + <dia:font family="sans" style="0" name="Helvetica"/> | |
| 364 | + </dia:attribute> | |
| 365 | + <dia:attribute name="height"> | |
| 366 | + <dia:real val="0.80000000000000004"/> | |
| 367 | + </dia:attribute> | |
| 368 | + <dia:attribute name="pos"> | |
| 369 | + <dia:point val="3.53147,6.6725"/> | |
| 370 | + </dia:attribute> | |
| 371 | + <dia:attribute name="color"> | |
| 372 | + <dia:color val="#000000"/> | |
| 373 | + </dia:attribute> | |
| 374 | + <dia:attribute name="alignment"> | |
| 375 | + <dia:enum val="0"/> | |
| 376 | + </dia:attribute> | |
| 377 | + </dia:composite> | |
| 378 | + </dia:attribute> | |
| 379 | + <dia:attribute name="valign"> | |
| 380 | + <dia:enum val="3"/> | |
| 381 | + </dia:attribute> | |
| 382 | + </dia:object> | |
| 383 | + </dia:group> | |
| 384 | + <dia:object type="Standard - Text" version="1" id="O12"> | |
| 385 | + <dia:attribute name="obj_pos"> | |
| 386 | + <dia:point val="18,6"/> | |
| 387 | + </dia:attribute> | |
| 388 | + <dia:attribute name="obj_bb"> | |
| 389 | + <dia:rectangle val="18,5.4575;20.0947,6.3975"/> | |
| 390 | + </dia:attribute> | |
| 391 | + <dia:attribute name="text"> | |
| 392 | + <dia:composite type="text"> | |
| 393 | + <dia:attribute name="string"> | |
| 394 | + <dia:string># parent#</dia:string> | |
| 395 | + </dia:attribute> | |
| 396 | + <dia:attribute name="font"> | |
| 397 | + <dia:font family="sans" style="0" name="Helvetica"/> | |
| 398 | + </dia:attribute> | |
| 399 | + <dia:attribute name="height"> | |
| 400 | + <dia:real val="0.80000000000000004"/> | |
| 401 | + </dia:attribute> | |
| 402 | + <dia:attribute name="pos"> | |
| 403 | + <dia:point val="18,6"/> | |
| 404 | + </dia:attribute> | |
| 405 | + <dia:attribute name="color"> | |
| 406 | + <dia:color val="#000000"/> | |
| 407 | + </dia:attribute> | |
| 408 | + <dia:attribute name="alignment"> | |
| 409 | + <dia:enum val="0"/> | |
| 410 | + </dia:attribute> | |
| 411 | + </dia:composite> | |
| 412 | + </dia:attribute> | |
| 413 | + <dia:attribute name="valign"> | |
| 414 | + <dia:enum val="3"/> | |
| 415 | + </dia:attribute> | |
| 416 | + </dia:object> | |
| 417 | + <dia:object type="Standard - Line" version="0" id="O13"> | |
| 418 | + <dia:attribute name="obj_pos"> | |
| 419 | + <dia:point val="18,7"/> | |
| 420 | + </dia:attribute> | |
| 421 | + <dia:attribute name="obj_bb"> | |
| 422 | + <dia:rectangle val="17.5,2.95;18.5,7.05"/> | |
| 423 | + </dia:attribute> | |
| 424 | + <dia:attribute name="conn_endpoints"> | |
| 425 | + <dia:point val="18,7"/> | |
| 426 | + <dia:point val="18,3"/> | |
| 427 | + </dia:attribute> | |
| 428 | + <dia:attribute name="numcp"> | |
| 429 | + <dia:int val="1"/> | |
| 430 | + </dia:attribute> | |
| 431 | + <dia:attribute name="end_arrow"> | |
| 432 | + <dia:enum val="22"/> | |
| 433 | + </dia:attribute> | |
| 434 | + <dia:attribute name="end_arrow_length"> | |
| 435 | + <dia:real val="0.5"/> | |
| 436 | + </dia:attribute> | |
| 437 | + <dia:attribute name="end_arrow_width"> | |
| 438 | + <dia:real val="0.5"/> | |
| 439 | + </dia:attribute> | |
| 440 | + </dia:object> | |
| 441 | + <dia:group> | |
| 442 | + <dia:object type="Standard - Text" version="1" id="O14"> | |
| 443 | + <dia:attribute name="obj_pos"> | |
| 444 | + <dia:point val="22,7"/> | |
| 445 | + </dia:attribute> | |
| 446 | + <dia:attribute name="obj_bb"> | |
| 447 | + <dia:rectangle val="22,6.4575;28.4122,8.1975"/> | |
| 448 | + </dia:attribute> | |
| 449 | + <dia:attribute name="text"> | |
| 450 | + <dia:composite type="text"> | |
| 451 | + <dia:attribute name="string"> | |
| 452 | + <dia:string>#branch parent symbol | |
| 453 | + (NULL)#</dia:string> | |
| 454 | + </dia:attribute> | |
| 455 | + <dia:attribute name="font"> | |
| 456 | + <dia:font family="sans" style="0" name="Helvetica"/> | |
| 457 | + </dia:attribute> | |
| 458 | + <dia:attribute name="height"> | |
| 459 | + <dia:real val="0.80000000000000004"/> | |
| 460 | + </dia:attribute> | |
| 461 | + <dia:attribute name="pos"> | |
| 462 | + <dia:point val="22,7"/> | |
| 463 | + </dia:attribute> | |
| 464 | + <dia:attribute name="color"> | |
| 465 | + <dia:color val="#000000"/> | |
| 466 | + </dia:attribute> | |
| 467 | + <dia:attribute name="alignment"> | |
| 468 | + <dia:enum val="0"/> | |
| 469 | + </dia:attribute> | |
| 470 | + </dia:composite> | |
| 471 | + </dia:attribute> | |
| 472 | + <dia:attribute name="valign"> | |
| 473 | + <dia:enum val="3"/> | |
| 474 | + </dia:attribute> | |
| 475 | + </dia:object> | |
| 476 | + <dia:object type="Standard - Line" version="0" id="O15"> | |
| 477 | + <dia:attribute name="obj_pos"> | |
| 478 | + <dia:point val="20,8"/> | |
| 479 | + </dia:attribute> | |
| 480 | + <dia:attribute name="obj_bb"> | |
| 481 | + <dia:rectangle val="19.95,7.5;22.05,8.5"/> | |
| 482 | + </dia:attribute> | |
| 483 | + <dia:attribute name="conn_endpoints"> | |
| 484 | + <dia:point val="20,8"/> | |
| 485 | + <dia:point val="22,8"/> | |
| 486 | + </dia:attribute> | |
| 487 | + <dia:attribute name="numcp"> | |
| 488 | + <dia:int val="1"/> | |
| 489 | + </dia:attribute> | |
| 490 | + <dia:attribute name="end_arrow"> | |
| 491 | + <dia:enum val="22"/> | |
| 492 | + </dia:attribute> | |
| 493 | + <dia:attribute name="end_arrow_length"> | |
| 494 | + <dia:real val="0.5"/> | |
| 495 | + </dia:attribute> | |
| 496 | + <dia:attribute name="end_arrow_width"> | |
| 497 | + <dia:real val="0.5"/> | |
| 498 | + </dia:attribute> | |
| 499 | + </dia:object> | |
| 500 | + <dia:object type="Standard - Polygon" version="0" id="O16"> | |
| 501 | + <dia:attribute name="obj_pos"> | |
| 502 | + <dia:point val="23,7"/> | |
| 503 | + </dia:attribute> | |
| 504 | + <dia:attribute name="obj_bb"> | |
| 505 | + <dia:rectangle val="21.9293,6.87929;23.05,9.12071"/> | |
| 506 | + </dia:attribute> | |
| 507 | + <dia:attribute name="poly_points"> | |
| 508 | + <dia:point val="23,7"/> | |
| 509 | + <dia:point val="22,8"/> | |
| 510 | + <dia:point val="23,9"/> | |
| 511 | + </dia:attribute> | |
| 512 | + <dia:attribute name="show_background"> | |
| 513 | + <dia:boolean val="true"/> | |
| 514 | + </dia:attribute> | |
| 515 | + </dia:object> | |
| 516 | + </dia:group> | |
| 517 | + <dia:object type="Standard - Text" version="1" id="O17"> | |
| 518 | + <dia:attribute name="obj_pos"> | |
| 519 | + <dia:point val="15,4"/> | |
| 520 | + </dia:attribute> | |
| 521 | + <dia:attribute name="obj_bb"> | |
| 522 | + <dia:rectangle val="15,3.4575;16.57,4.3975"/> | |
| 523 | + </dia:attribute> | |
| 524 | + <dia:attribute name="text"> | |
| 525 | + <dia:composite type="text"> | |
| 526 | + <dia:attribute name="string"> | |
| 527 | + <dia:string># child#</dia:string> | |
| 528 | + </dia:attribute> | |
| 529 | + <dia:attribute name="font"> | |
| 530 | + <dia:font family="sans" style="0" name="Helvetica"/> | |
| 531 | + </dia:attribute> | |
| 532 | + <dia:attribute name="height"> | |
| 533 | + <dia:real val="0.80000000000000004"/> | |
| 534 | + </dia:attribute> | |
| 535 | + <dia:attribute name="pos"> | |
| 536 | + <dia:point val="15,4"/> | |
| 537 | + </dia:attribute> | |
| 538 | + <dia:attribute name="color"> | |
| 539 | + <dia:color val="#000000"/> | |
| 540 | + </dia:attribute> | |
| 541 | + <dia:attribute name="alignment"> | |
| 542 | + <dia:enum val="0"/> | |
| 543 | + </dia:attribute> | |
| 544 | + </dia:composite> | |
| 545 | + </dia:attribute> | |
| 546 | + <dia:attribute name="valign"> | |
| 547 | + <dia:enum val="3"/> | |
| 548 | + </dia:attribute> | |
| 549 | + </dia:object> | |
| 550 | + <dia:object type="Standard - Line" version="0" id="O18"> | |
| 551 | + <dia:attribute name="obj_pos"> | |
| 552 | + <dia:point val="15,3"/> | |
| 553 | + </dia:attribute> | |
| 554 | + <dia:attribute name="obj_bb"> | |
| 555 | + <dia:rectangle val="14.5,2.95;15.5,7.05"/> | |
| 556 | + </dia:attribute> | |
| 557 | + <dia:attribute name="conn_endpoints"> | |
| 558 | + <dia:point val="15,3"/> | |
| 559 | + <dia:point val="15,7"/> | |
| 560 | + </dia:attribute> | |
| 561 | + <dia:attribute name="numcp"> | |
| 562 | + <dia:int val="1"/> | |
| 563 | + </dia:attribute> | |
| 564 | + <dia:attribute name="end_arrow"> | |
| 565 | + <dia:enum val="22"/> | |
| 566 | + </dia:attribute> | |
| 567 | + <dia:attribute name="end_arrow_length"> | |
| 568 | + <dia:real val="0.5"/> | |
| 569 | + </dia:attribute> | |
| 570 | + <dia:attribute name="end_arrow_width"> | |
| 571 | + <dia:real val="0.5"/> | |
| 572 | + </dia:attribute> | |
| 573 | + </dia:object> | |
| 574 | + </dia:group> | |
| 575 | + </dia:layer> | |
| 576 | +</dia:diagram> |
| --- a/art/CollRev2.dia | |
| +++ b/art/CollRev2.dia | |
| @@ -0,0 +1,576 @@ | |
| --- a/art/CollRev2.dia | |
| +++ b/art/CollRev2.dia | |
| @@ -0,0 +1,576 @@ | |
| 1 | <?xml version="1.0" encoding="UTF-8"?> |
| 2 | <dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/"> |
| 3 | <dia:diagramdata> |
| 4 | <dia:attribute name="background"> |
| 5 | <dia:color val="#ffffff"/> |
| 6 | </dia:attribute> |
| 7 | <dia:attribute name="pagebreak"> |
| 8 | <dia:color val="#000099"/> |
| 9 | </dia:attribute> |
| 10 | <dia:attribute name="paper"> |
| 11 | <dia:composite type="paper"> |
| 12 | <dia:attribute name="name"> |
| 13 | <dia:string>#Letter#</dia:string> |
| 14 | </dia:attribute> |
| 15 | <dia:attribute name="tmargin"> |
| 16 | <dia:real val="2.5399999618530273"/> |
| 17 | </dia:attribute> |
| 18 | <dia:attribute name="bmargin"> |
| 19 | <dia:real val="2.5399999618530273"/> |
| 20 | </dia:attribute> |
| 21 | <dia:attribute name="lmargin"> |
| 22 | <dia:real val="2.5399999618530273"/> |
| 23 | </dia:attribute> |
| 24 | <dia:attribute name="rmargin"> |
| 25 | <dia:real val="2.5399999618530273"/> |
| 26 | </dia:attribute> |
| 27 | <dia:attribute name="is_portrait"> |
| 28 | <dia:boolean val="true"/> |
| 29 | </dia:attribute> |
| 30 | <dia:attribute name="scaling"> |
| 31 | <dia:real val="1"/> |
| 32 | </dia:attribute> |
| 33 | <dia:attribute name="fitto"> |
| 34 | <dia:boolean val="false"/> |
| 35 | </dia:attribute> |
| 36 | </dia:composite> |
| 37 | </dia:attribute> |
| 38 | <dia:attribute name="grid"> |
| 39 | <dia:composite type="grid"> |
| 40 | <dia:attribute name="width_x"> |
| 41 | <dia:real val="1"/> |
| 42 | </dia:attribute> |
| 43 | <dia:attribute name="width_y"> |
| 44 | <dia:real val="1"/> |
| 45 | </dia:attribute> |
| 46 | <dia:attribute name="visible_x"> |
| 47 | <dia:int val="1"/> |
| 48 | </dia:attribute> |
| 49 | <dia:attribute name="visible_y"> |
| 50 | <dia:int val="1"/> |
| 51 | </dia:attribute> |
| 52 | <dia:composite type="color"/> |
| 53 | </dia:composite> |
| 54 | </dia:attribute> |
| 55 | <dia:attribute name="color"> |
| 56 | <dia:color val="#d8e5e5"/> |
| 57 | </dia:attribute> |
| 58 | <dia:attribute name="guides"> |
| 59 | <dia:composite type="guides"> |
| 60 | <dia:attribute name="hguides"/> |
| 61 | <dia:attribute name="vguides"/> |
| 62 | </dia:composite> |
| 63 | </dia:attribute> |
| 64 | </dia:diagramdata> |
| 65 | <dia:layer name="Background" visible="true"> |
| 66 | <dia:group> |
| 67 | <dia:group> |
| 68 | <dia:object type="Standard - Box" version="0" id="O0"> |
| 69 | <dia:attribute name="obj_pos"> |
| 70 | <dia:point val="13,1"/> |
| 71 | </dia:attribute> |
| 72 | <dia:attribute name="obj_bb"> |
| 73 | <dia:rectangle val="12.95,0.95;20.05,3.05"/> |
| 74 | </dia:attribute> |
| 75 | <dia:attribute name="elem_corner"> |
| 76 | <dia:point val="13,1"/> |
| 77 | </dia:attribute> |
| 78 | <dia:attribute name="elem_width"> |
| 79 | <dia:real val="7"/> |
| 80 | </dia:attribute> |
| 81 | <dia:attribute name="elem_height"> |
| 82 | <dia:real val="2"/> |
| 83 | </dia:attribute> |
| 84 | <dia:attribute name="show_background"> |
| 85 | <dia:boolean val="true"/> |
| 86 | </dia:attribute> |
| 87 | </dia:object> |
| 88 | <dia:object type="Standard - Text" version="1" id="O1"> |
| 89 | <dia:attribute name="obj_pos"> |
| 90 | <dia:point val="15.2818,2.06397"/> |
| 91 | </dia:attribute> |
| 92 | <dia:attribute name="obj_bb"> |
| 93 | <dia:rectangle val="15.2818,1.52147;17.7182,2.46147"/> |
| 94 | </dia:attribute> |
| 95 | <dia:attribute name="text"> |
| 96 | <dia:composite type="text"> |
| 97 | <dia:attribute name="string"> |
| 98 | <dia:string>#Revision#</dia:string> |
| 99 | </dia:attribute> |
| 100 | <dia:attribute name="font"> |
| 101 | <dia:font family="sans" style="0" name="Helvetica"/> |
| 102 | </dia:attribute> |
| 103 | <dia:attribute name="height"> |
| 104 | <dia:real val="0.80000000000000004"/> |
| 105 | </dia:attribute> |
| 106 | <dia:attribute name="pos"> |
| 107 | <dia:point val="15.2818,2.06397"/> |
| 108 | </dia:attribute> |
| 109 | <dia:attribute name="color"> |
| 110 | <dia:color val="#000000"/> |
| 111 | </dia:attribute> |
| 112 | <dia:attribute name="alignment"> |
| 113 | <dia:enum val="0"/> |
| 114 | </dia:attribute> |
| 115 | </dia:composite> |
| 116 | </dia:attribute> |
| 117 | <dia:attribute name="valign"> |
| 118 | <dia:enum val="3"/> |
| 119 | </dia:attribute> |
| 120 | </dia:object> |
| 121 | </dia:group> |
| 122 | <dia:group> |
| 123 | <dia:object type="Standard - Box" version="0" id="O2"> |
| 124 | <dia:attribute name="obj_pos"> |
| 125 | <dia:point val="13,7"/> |
| 126 | </dia:attribute> |
| 127 | <dia:attribute name="obj_bb"> |
| 128 | <dia:rectangle val="12.95,6.95;20.05,9.05"/> |
| 129 | </dia:attribute> |
| 130 | <dia:attribute name="elem_corner"> |
| 131 | <dia:point val="13,7"/> |
| 132 | </dia:attribute> |
| 133 | <dia:attribute name="elem_width"> |
| 134 | <dia:real val="7"/> |
| 135 | </dia:attribute> |
| 136 | <dia:attribute name="elem_height"> |
| 137 | <dia:real val="2"/> |
| 138 | </dia:attribute> |
| 139 | <dia:attribute name="show_background"> |
| 140 | <dia:boolean val="true"/> |
| 141 | </dia:attribute> |
| 142 | </dia:object> |
| 143 | <dia:object type="Standard - Text" version="1" id="O3"> |
| 144 | <dia:attribute name="obj_pos"> |
| 145 | <dia:point val="14.1456,8.06397"/> |
| 146 | </dia:attribute> |
| 147 | <dia:attribute name="obj_bb"> |
| 148 | <dia:rectangle val="14.1456,7.52147;18.8544,8.46147"/> |
| 149 | </dia:attribute> |
| 150 | <dia:attribute name="text"> |
| 151 | <dia:composite type="text"> |
| 152 | <dia:attribute name="string"> |
| 153 | <dia:string>#Revision' (Child)#</dia:string> |
| 154 | </dia:attribute> |
| 155 | <dia:attribute name="font"> |
| 156 | <dia:font family="sans" style="0" name="Helvetica"/> |
| 157 | </dia:attribute> |
| 158 | <dia:attribute name="height"> |
| 159 | <dia:real val="0.80000000000000004"/> |
| 160 | </dia:attribute> |
| 161 | <dia:attribute name="pos"> |
| 162 | <dia:point val="14.1456,8.06397"/> |
| 163 | </dia:attribute> |
| 164 | <dia:attribute name="color"> |
| 165 | <dia:color val="#000000"/> |
| 166 | </dia:attribute> |
| 167 | <dia:attribute name="alignment"> |
| 168 | <dia:enum val="0"/> |
| 169 | </dia:attribute> |
| 170 | </dia:composite> |
| 171 | </dia:attribute> |
| 172 | <dia:attribute name="valign"> |
| 173 | <dia:enum val="3"/> |
| 174 | </dia:attribute> |
| 175 | </dia:object> |
| 176 | </dia:group> |
| 177 | <dia:group> |
| 178 | <dia:object type="Standard - Box" version="0" id="O4"> |
| 179 | <dia:attribute name="obj_pos"> |
| 180 | <dia:point val="2,2"/> |
| 181 | </dia:attribute> |
| 182 | <dia:attribute name="obj_bb"> |
| 183 | <dia:rectangle val="1.95,1.95;9.05,4.05"/> |
| 184 | </dia:attribute> |
| 185 | <dia:attribute name="elem_corner"> |
| 186 | <dia:point val="2,2"/> |
| 187 | </dia:attribute> |
| 188 | <dia:attribute name="elem_width"> |
| 189 | <dia:real val="7"/> |
| 190 | </dia:attribute> |
| 191 | <dia:attribute name="elem_height"> |
| 192 | <dia:real val="2"/> |
| 193 | </dia:attribute> |
| 194 | <dia:attribute name="show_background"> |
| 195 | <dia:boolean val="true"/> |
| 196 | </dia:attribute> |
| 197 | </dia:object> |
| 198 | <dia:object type="Standard - Text" version="1" id="O5"> |
| 199 | <dia:attribute name="obj_pos"> |
| 200 | <dia:point val="5.00393,3.06397"/> |
| 201 | </dia:attribute> |
| 202 | <dia:attribute name="obj_bb"> |
| 203 | <dia:rectangle val="5.00393,2.52147;5.97901,3.46147"/> |
| 204 | </dia:attribute> |
| 205 | <dia:attribute name="text"> |
| 206 | <dia:composite type="text"> |
| 207 | <dia:attribute name="string"> |
| 208 | <dia:string>#File#</dia:string> |
| 209 | </dia:attribute> |
| 210 | <dia:attribute name="font"> |
| 211 | <dia:font family="sans" style="0" name="Helvetica"/> |
| 212 | </dia:attribute> |
| 213 | <dia:attribute name="height"> |
| 214 | <dia:real val="0.80000000000000004"/> |
| 215 | </dia:attribute> |
| 216 | <dia:attribute name="pos"> |
| 217 | <dia:point val="5.00393,3.06397"/> |
| 218 | </dia:attribute> |
| 219 | <dia:attribute name="color"> |
| 220 | <dia:color val="#000000"/> |
| 221 | </dia:attribute> |
| 222 | <dia:attribute name="alignment"> |
| 223 | <dia:enum val="0"/> |
| 224 | </dia:attribute> |
| 225 | </dia:composite> |
| 226 | </dia:attribute> |
| 227 | <dia:attribute name="valign"> |
| 228 | <dia:enum val="3"/> |
| 229 | </dia:attribute> |
| 230 | </dia:object> |
| 231 | </dia:group> |
| 232 | <dia:object type="Standard - Line" version="0" id="O6"> |
| 233 | <dia:attribute name="obj_pos"> |
| 234 | <dia:point val="13,8"/> |
| 235 | </dia:attribute> |
| 236 | <dia:attribute name="obj_bb"> |
| 237 | <dia:rectangle val="8.83023,6.5028;13.0606,8.06063"/> |
| 238 | </dia:attribute> |
| 239 | <dia:attribute name="conn_endpoints"> |
| 240 | <dia:point val="13,8"/> |
| 241 | <dia:point val="9,7"/> |
| 242 | </dia:attribute> |
| 243 | <dia:attribute name="numcp"> |
| 244 | <dia:int val="1"/> |
| 245 | </dia:attribute> |
| 246 | <dia:attribute name="end_arrow"> |
| 247 | <dia:enum val="22"/> |
| 248 | </dia:attribute> |
| 249 | <dia:attribute name="end_arrow_length"> |
| 250 | <dia:real val="0.5"/> |
| 251 | </dia:attribute> |
| 252 | <dia:attribute name="end_arrow_width"> |
| 253 | <dia:real val="0.5"/> |
| 254 | </dia:attribute> |
| 255 | </dia:object> |
| 256 | <dia:object type="Standard - Line" version="0" id="O7"> |
| 257 | <dia:attribute name="obj_pos"> |
| 258 | <dia:point val="13,2"/> |
| 259 | </dia:attribute> |
| 260 | <dia:attribute name="obj_bb"> |
| 261 | <dia:rectangle val="8.83023,1.93937;13.0606,3.4972"/> |
| 262 | </dia:attribute> |
| 263 | <dia:attribute name="conn_endpoints"> |
| 264 | <dia:point val="13,2"/> |
| 265 | <dia:point val="9,3"/> |
| 266 | </dia:attribute> |
| 267 | <dia:attribute name="numcp"> |
| 268 | <dia:int val="1"/> |
| 269 | </dia:attribute> |
| 270 | <dia:attribute name="end_arrow"> |
| 271 | <dia:enum val="22"/> |
| 272 | </dia:attribute> |
| 273 | <dia:attribute name="end_arrow_length"> |
| 274 | <dia:real val="0.5"/> |
| 275 | </dia:attribute> |
| 276 | <dia:attribute name="end_arrow_width"> |
| 277 | <dia:real val="0.5"/> |
| 278 | </dia:attribute> |
| 279 | </dia:object> |
| 280 | <dia:object type="Standard - Line" version="0" id="O8"> |
| 281 | <dia:attribute name="obj_pos"> |
| 282 | <dia:point val="13,2"/> |
| 283 | </dia:attribute> |
| 284 | <dia:attribute name="obj_bb"> |
| 285 | <dia:rectangle val="8.57833,1.92972;13.0703,7.35139"/> |
| 286 | </dia:attribute> |
| 287 | <dia:attribute name="conn_endpoints"> |
| 288 | <dia:point val="13,2"/> |
| 289 | <dia:point val="9,7"/> |
| 290 | </dia:attribute> |
| 291 | <dia:attribute name="numcp"> |
| 292 | <dia:int val="1"/> |
| 293 | </dia:attribute> |
| 294 | <dia:attribute name="end_arrow"> |
| 295 | <dia:enum val="22"/> |
| 296 | </dia:attribute> |
| 297 | <dia:attribute name="end_arrow_length"> |
| 298 | <dia:real val="0.5"/> |
| 299 | </dia:attribute> |
| 300 | <dia:attribute name="end_arrow_width"> |
| 301 | <dia:real val="0.5"/> |
| 302 | </dia:attribute> |
| 303 | </dia:object> |
| 304 | <dia:object type="Standard - Line" version="0" id="O9"> |
| 305 | <dia:attribute name="obj_pos"> |
| 306 | <dia:point val="13,8"/> |
| 307 | </dia:attribute> |
| 308 | <dia:attribute name="obj_bb"> |
| 309 | <dia:rectangle val="8.57833,2.64861;13.0703,8.07028"/> |
| 310 | </dia:attribute> |
| 311 | <dia:attribute name="conn_endpoints"> |
| 312 | <dia:point val="13,8"/> |
| 313 | <dia:point val="9,3"/> |
| 314 | </dia:attribute> |
| 315 | <dia:attribute name="numcp"> |
| 316 | <dia:int val="1"/> |
| 317 | </dia:attribute> |
| 318 | <dia:attribute name="end_arrow"> |
| 319 | <dia:enum val="22"/> |
| 320 | </dia:attribute> |
| 321 | <dia:attribute name="end_arrow_length"> |
| 322 | <dia:real val="0.5"/> |
| 323 | </dia:attribute> |
| 324 | <dia:attribute name="end_arrow_width"> |
| 325 | <dia:real val="0.5"/> |
| 326 | </dia:attribute> |
| 327 | </dia:object> |
| 328 | <dia:group> |
| 329 | <dia:object type="Standard - Box" version="0" id="O10"> |
| 330 | <dia:attribute name="obj_pos"> |
| 331 | <dia:point val="2,6"/> |
| 332 | </dia:attribute> |
| 333 | <dia:attribute name="obj_bb"> |
| 334 | <dia:rectangle val="1.95,5.95;9.05,8.05"/> |
| 335 | </dia:attribute> |
| 336 | <dia:attribute name="elem_corner"> |
| 337 | <dia:point val="2,6"/> |
| 338 | </dia:attribute> |
| 339 | <dia:attribute name="elem_width"> |
| 340 | <dia:real val="7"/> |
| 341 | </dia:attribute> |
| 342 | <dia:attribute name="elem_height"> |
| 343 | <dia:real val="2"/> |
| 344 | </dia:attribute> |
| 345 | <dia:attribute name="show_background"> |
| 346 | <dia:boolean val="true"/> |
| 347 | </dia:attribute> |
| 348 | </dia:object> |
| 349 | <dia:object type="Standard - Text" version="1" id="O11"> |
| 350 | <dia:attribute name="obj_pos"> |
| 351 | <dia:point val="3.53147,6.6725"/> |
| 352 | </dia:attribute> |
| 353 | <dia:attribute name="obj_bb"> |
| 354 | <dia:rectangle val="3.53147,6.13;7.45147,7.87"/> |
| 355 | </dia:attribute> |
| 356 | <dia:attribute name="text"> |
| 357 | <dia:composite type="text"> |
| 358 | <dia:attribute name="string"> |
| 359 | <dia:string>#Line of |
| 360 | Development#</dia:string> |
| 361 | </dia:attribute> |
| 362 | <dia:attribute name="font"> |
| 363 | <dia:font family="sans" style="0" name="Helvetica"/> |
| 364 | </dia:attribute> |
| 365 | <dia:attribute name="height"> |
| 366 | <dia:real val="0.80000000000000004"/> |
| 367 | </dia:attribute> |
| 368 | <dia:attribute name="pos"> |
| 369 | <dia:point val="3.53147,6.6725"/> |
| 370 | </dia:attribute> |
| 371 | <dia:attribute name="color"> |
| 372 | <dia:color val="#000000"/> |
| 373 | </dia:attribute> |
| 374 | <dia:attribute name="alignment"> |
| 375 | <dia:enum val="0"/> |
| 376 | </dia:attribute> |
| 377 | </dia:composite> |
| 378 | </dia:attribute> |
| 379 | <dia:attribute name="valign"> |
| 380 | <dia:enum val="3"/> |
| 381 | </dia:attribute> |
| 382 | </dia:object> |
| 383 | </dia:group> |
| 384 | <dia:object type="Standard - Text" version="1" id="O12"> |
| 385 | <dia:attribute name="obj_pos"> |
| 386 | <dia:point val="18,6"/> |
| 387 | </dia:attribute> |
| 388 | <dia:attribute name="obj_bb"> |
| 389 | <dia:rectangle val="18,5.4575;20.0947,6.3975"/> |
| 390 | </dia:attribute> |
| 391 | <dia:attribute name="text"> |
| 392 | <dia:composite type="text"> |
| 393 | <dia:attribute name="string"> |
| 394 | <dia:string># parent#</dia:string> |
| 395 | </dia:attribute> |
| 396 | <dia:attribute name="font"> |
| 397 | <dia:font family="sans" style="0" name="Helvetica"/> |
| 398 | </dia:attribute> |
| 399 | <dia:attribute name="height"> |
| 400 | <dia:real val="0.80000000000000004"/> |
| 401 | </dia:attribute> |
| 402 | <dia:attribute name="pos"> |
| 403 | <dia:point val="18,6"/> |
| 404 | </dia:attribute> |
| 405 | <dia:attribute name="color"> |
| 406 | <dia:color val="#000000"/> |
| 407 | </dia:attribute> |
| 408 | <dia:attribute name="alignment"> |
| 409 | <dia:enum val="0"/> |
| 410 | </dia:attribute> |
| 411 | </dia:composite> |
| 412 | </dia:attribute> |
| 413 | <dia:attribute name="valign"> |
| 414 | <dia:enum val="3"/> |
| 415 | </dia:attribute> |
| 416 | </dia:object> |
| 417 | <dia:object type="Standard - Line" version="0" id="O13"> |
| 418 | <dia:attribute name="obj_pos"> |
| 419 | <dia:point val="18,7"/> |
| 420 | </dia:attribute> |
| 421 | <dia:attribute name="obj_bb"> |
| 422 | <dia:rectangle val="17.5,2.95;18.5,7.05"/> |
| 423 | </dia:attribute> |
| 424 | <dia:attribute name="conn_endpoints"> |
| 425 | <dia:point val="18,7"/> |
| 426 | <dia:point val="18,3"/> |
| 427 | </dia:attribute> |
| 428 | <dia:attribute name="numcp"> |
| 429 | <dia:int val="1"/> |
| 430 | </dia:attribute> |
| 431 | <dia:attribute name="end_arrow"> |
| 432 | <dia:enum val="22"/> |
| 433 | </dia:attribute> |
| 434 | <dia:attribute name="end_arrow_length"> |
| 435 | <dia:real val="0.5"/> |
| 436 | </dia:attribute> |
| 437 | <dia:attribute name="end_arrow_width"> |
| 438 | <dia:real val="0.5"/> |
| 439 | </dia:attribute> |
| 440 | </dia:object> |
| 441 | <dia:group> |
| 442 | <dia:object type="Standard - Text" version="1" id="O14"> |
| 443 | <dia:attribute name="obj_pos"> |
| 444 | <dia:point val="22,7"/> |
| 445 | </dia:attribute> |
| 446 | <dia:attribute name="obj_bb"> |
| 447 | <dia:rectangle val="22,6.4575;28.4122,8.1975"/> |
| 448 | </dia:attribute> |
| 449 | <dia:attribute name="text"> |
| 450 | <dia:composite type="text"> |
| 451 | <dia:attribute name="string"> |
| 452 | <dia:string>#branch parent symbol |
| 453 | (NULL)#</dia:string> |
| 454 | </dia:attribute> |
| 455 | <dia:attribute name="font"> |
| 456 | <dia:font family="sans" style="0" name="Helvetica"/> |
| 457 | </dia:attribute> |
| 458 | <dia:attribute name="height"> |
| 459 | <dia:real val="0.80000000000000004"/> |
| 460 | </dia:attribute> |
| 461 | <dia:attribute name="pos"> |
| 462 | <dia:point val="22,7"/> |
| 463 | </dia:attribute> |
| 464 | <dia:attribute name="color"> |
| 465 | <dia:color val="#000000"/> |
| 466 | </dia:attribute> |
| 467 | <dia:attribute name="alignment"> |
| 468 | <dia:enum val="0"/> |
| 469 | </dia:attribute> |
| 470 | </dia:composite> |
| 471 | </dia:attribute> |
| 472 | <dia:attribute name="valign"> |
| 473 | <dia:enum val="3"/> |
| 474 | </dia:attribute> |
| 475 | </dia:object> |
| 476 | <dia:object type="Standard - Line" version="0" id="O15"> |
| 477 | <dia:attribute name="obj_pos"> |
| 478 | <dia:point val="20,8"/> |
| 479 | </dia:attribute> |
| 480 | <dia:attribute name="obj_bb"> |
| 481 | <dia:rectangle val="19.95,7.5;22.05,8.5"/> |
| 482 | </dia:attribute> |
| 483 | <dia:attribute name="conn_endpoints"> |
| 484 | <dia:point val="20,8"/> |
| 485 | <dia:point val="22,8"/> |
| 486 | </dia:attribute> |
| 487 | <dia:attribute name="numcp"> |
| 488 | <dia:int val="1"/> |
| 489 | </dia:attribute> |
| 490 | <dia:attribute name="end_arrow"> |
| 491 | <dia:enum val="22"/> |
| 492 | </dia:attribute> |
| 493 | <dia:attribute name="end_arrow_length"> |
| 494 | <dia:real val="0.5"/> |
| 495 | </dia:attribute> |
| 496 | <dia:attribute name="end_arrow_width"> |
| 497 | <dia:real val="0.5"/> |
| 498 | </dia:attribute> |
| 499 | </dia:object> |
| 500 | <dia:object type="Standard - Polygon" version="0" id="O16"> |
| 501 | <dia:attribute name="obj_pos"> |
| 502 | <dia:point val="23,7"/> |
| 503 | </dia:attribute> |
| 504 | <dia:attribute name="obj_bb"> |
| 505 | <dia:rectangle val="21.9293,6.87929;23.05,9.12071"/> |
| 506 | </dia:attribute> |
| 507 | <dia:attribute name="poly_points"> |
| 508 | <dia:point val="23,7"/> |
| 509 | <dia:point val="22,8"/> |
| 510 | <dia:point val="23,9"/> |
| 511 | </dia:attribute> |
| 512 | <dia:attribute name="show_background"> |
| 513 | <dia:boolean val="true"/> |
| 514 | </dia:attribute> |
| 515 | </dia:object> |
| 516 | </dia:group> |
| 517 | <dia:object type="Standard - Text" version="1" id="O17"> |
| 518 | <dia:attribute name="obj_pos"> |
| 519 | <dia:point val="15,4"/> |
| 520 | </dia:attribute> |
| 521 | <dia:attribute name="obj_bb"> |
| 522 | <dia:rectangle val="15,3.4575;16.57,4.3975"/> |
| 523 | </dia:attribute> |
| 524 | <dia:attribute name="text"> |
| 525 | <dia:composite type="text"> |
| 526 | <dia:attribute name="string"> |
| 527 | <dia:string># child#</dia:string> |
| 528 | </dia:attribute> |
| 529 | <dia:attribute name="font"> |
| 530 | <dia:font family="sans" style="0" name="Helvetica"/> |
| 531 | </dia:attribute> |
| 532 | <dia:attribute name="height"> |
| 533 | <dia:real val="0.80000000000000004"/> |
| 534 | </dia:attribute> |
| 535 | <dia:attribute name="pos"> |
| 536 | <dia:point val="15,4"/> |
| 537 | </dia:attribute> |
| 538 | <dia:attribute name="color"> |
| 539 | <dia:color val="#000000"/> |
| 540 | </dia:attribute> |
| 541 | <dia:attribute name="alignment"> |
| 542 | <dia:enum val="0"/> |
| 543 | </dia:attribute> |
| 544 | </dia:composite> |
| 545 | </dia:attribute> |
| 546 | <dia:attribute name="valign"> |
| 547 | <dia:enum val="3"/> |
| 548 | </dia:attribute> |
| 549 | </dia:object> |
| 550 | <dia:object type="Standard - Line" version="0" id="O18"> |
| 551 | <dia:attribute name="obj_pos"> |
| 552 | <dia:point val="15,3"/> |
| 553 | </dia:attribute> |
| 554 | <dia:attribute name="obj_bb"> |
| 555 | <dia:rectangle val="14.5,2.95;15.5,7.05"/> |
| 556 | </dia:attribute> |
| 557 | <dia:attribute name="conn_endpoints"> |
| 558 | <dia:point val="15,3"/> |
| 559 | <dia:point val="15,7"/> |
| 560 | </dia:attribute> |
| 561 | <dia:attribute name="numcp"> |
| 562 | <dia:int val="1"/> |
| 563 | </dia:attribute> |
| 564 | <dia:attribute name="end_arrow"> |
| 565 | <dia:enum val="22"/> |
| 566 | </dia:attribute> |
| 567 | <dia:attribute name="end_arrow_length"> |
| 568 | <dia:real val="0.5"/> |
| 569 | </dia:attribute> |
| 570 | <dia:attribute name="end_arrow_width"> |
| 571 | <dia:real val="0.5"/> |
| 572 | </dia:attribute> |
| 573 | </dia:object> |
| 574 | </dia:group> |
| 575 | </dia:layer> |
| 576 | </dia:diagram> |
+18
| --- a/art/CollRev3.dia | ||
| +++ b/art/CollRev3.dia | ||
| @@ -0,0 +1,18 @@ | ||
| 1 | +<?xml version="1.0" encoding="UTF | |
| 2 | +6,15"/> | |
| 3 | + </dia:attribute> | |
| 4 | + <dia:attribute name="a:object> | |
| 5 | + </dia::attribute name="string"> | |
| 6 | + <dia:string># child#</dia:string> | |
| 7 | + </dia:attribute> | |
| 8 | + <dia:attribute name="font"> | |
| 9 | + <dia:font family="sans" style="0" name="Helvetica"/> | |
| 10 | + </dia:attribute> | |
| 11 | + <dia:attribute name="height"> | |
| 12 | + <dia:real val="0.80000000000000004"/> | |
| 13 | + </dia:attribute> | |
| 14 | + <dia:attribute6"> | |
| 15 | + <dia:attribute name="obj_pos"> | |
| 16 | + <dia:point val="19 <dia:attribute name="obj_pos"> | |
| 17 | + <dia:point val="18,9"/> | |
| 18 | + |
| --- a/art/CollRev3.dia | |
| +++ b/art/CollRev3.dia | |
| @@ -0,0 +1,18 @@ | |
| --- a/art/CollRev3.dia | |
| +++ b/art/CollRev3.dia | |
| @@ -0,0 +1,18 @@ | |
| 1 | <?xml version="1.0" encoding="UTF |
| 2 | 6,15"/> |
| 3 | </dia:attribute> |
| 4 | <dia:attribute name="a:object> |
| 5 | </dia::attribute name="string"> |
| 6 | <dia:string># child#</dia:string> |
| 7 | </dia:attribute> |
| 8 | <dia:attribute name="font"> |
| 9 | <dia:font family="sans" style="0" name="Helvetica"/> |
| 10 | </dia:attribute> |
| 11 | <dia:attribute name="height"> |
| 12 | <dia:real val="0.80000000000000004"/> |
| 13 | </dia:attribute> |
| 14 | <dia:attribute6"> |
| 15 | <dia:attribute name="obj_pos"> |
| 16 | <dia:point val="19 <dia:attribute name="obj_pos"> |
| 17 | <dia:point val="18,9"/> |
| 18 |
+590
| --- a/art/CollRev4.dia | ||
| +++ b/art/CollRev4.dia | ||
| @@ -0,0 +1,590 @@ | ||
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | |
| 2 | +<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/"> | |
| 3 | + <dia:diagramdata> | |
| 4 | + <dia:attribute name="background"> | |
| 5 | + <dia:color val="#ffffff"/> | |
| 6 | + </dia:attribute> | |
| 7 | + <dia:attribute name="pagebreak"> | |
| 8 | + <dia:color val="#000099"/> | |
| 9 | + </dia:attribute> | |
| 10 | + <dia:attribute name="paper"> | |
| 11 | + <dia:composite type="paper"> | |
| 12 | + <dia:attribute name="name"> | |
| 13 | + <dia:string>#Letter#</dia:string> | |
| 14 | + </dia:attribute> | |
| 15 | + <dia:attribute name="tmargin"> | |
| 16 | + <dia:real val="2.5399999618530273"/> | |
| 17 | + </dia:attribute> | |
| 18 | + <dia:attribute name="bmargin"> | |
| 19 | + <dia:real val="2.5399999618530273"/> | |
| 20 | + </dia:attribute> | |
| 21 | + <dia:attribute name="lmargin"> | |
| 22 | + <dia:real val="2.5399999618530273"/> | |
| 23 | + </dia:attribute> | |
| 24 | + <dia:attribute name="rmargin"> | |
| 25 | + <dia:real val="2.5399999618530273"/> | |
| 26 | + </dia:attribute> | |
| 27 | + <dia:attribute name="is_portrait"> | |
| 28 | + <dia:boolean val="true"/> | |
| 29 | + </dia:attribute> | |
| 30 | + <dia:attribute name="scaling"> | |
| 31 | + <dia:real val="1"/> | |
| 32 | + </dia:attribute> | |
| 33 | + <dia:attribute name="fitto"> | |
| 34 | + <dia:boolean val="false"/> | |
| 35 | + </dia:attribute> | |
| 36 | + </dia:composite> | |
| 37 | + </dia:attribute> | |
| 38 | + <dia:attribute name="grid"> | |
| 39 | + <dia:composite type="grid"> | |
| 40 | + <dia:attribute name="width_x"> | |
| 41 | + <dia:real val="1"/> | |
| 42 | + </dia:attribute> | |
| 43 | + <dia:attribute name="width_y"> | |
| 44 | + <dia:real val="1"/> | |
| 45 | + </dia:attribute> | |
| 46 | + <dia:attribute name="visible_x"> | |
| 47 | + <dia:int val="1"/> | |
| 48 | + </dia:attribute> | |
| 49 | + <dia:attribute name="visible_y"> | |
| 50 | + <dia:int val="1"/> | |
| 51 | + </dia:attribute> | |
| 52 | + <dia:composite type="color"/> | |
| 53 | + </dia:composite> | |
| 54 | + </dia:attribute> | |
| 55 | + <dia:attribute name="color"> | |
| 56 | + <dia:color val="#d8e5e5"/> | |
| 57 | + </dia:attribute> | |
| 58 | + <dia:attribute name="guides"> | |
| 59 | + <dia:composite type="guides"> | |
| 60 | + <dia:attribute name="hguides"/> | |
| 61 | + <dia:attribute name="vguides"/> | |
| 62 | + </dia:composite> | |
| 63 | + </dia:attribute> | |
| 64 | + </dia:diagramdata> | |
| 65 | + <dia:layer name="Background" visible="true"> | |
| 66 | + <dia:group> | |
| 67 | + <dia:group> | |
| 68 | + <dia:object type="Standard - Box" version="0" id="O0"> | |
| 69 | + <dia:attribute name="obj_pos"> | |
| 70 | + <dia:point val="3,8"/> | |
| 71 | + </dia:attribute> | |
| 72 | + <dia:attribute name="obj_bb"> | |
| 73 | + <dia:rectangle val="2.95,7.95;9.05,10.05"/> | |
| 74 | + </dia:attribute> | |
| 75 | + <dia:attribute name="elem_corner"> | |
| 76 | + <dia:point val="3,8"/> | |
| 77 | + </dia:attribute> | |
| 78 | + <dia:attribute name="elem_width"> | |
| 79 | + <dia:real val="6"/> | |
| 80 | + </dia:attribute> | |
| 81 | + <dia:attribute name="elem_height"> | |
| 82 | + <dia:real val="2"/> | |
| 83 | + </dia:attribute> | |
| 84 | + <dia:attribute name="show_background"> | |
| 85 | + <dia:boolean val="true"/> | |
| 86 | + </dia:attribute> | |
| 87 | + </dia:object> | |
| 88 | + <dia:object type="Standard - Text" version="1" id="O1"> | |
| 89 | + <dia:attribute name="obj_pos"> | |
| 90 | + <dia:point val="4.11647,8.66397"/> | |
| 91 | + </dia:attribute> | |
| 92 | + <dia:attribute name="obj_bb"> | |
| 93 | + <dia:rectangle val="4.11647,8.12147;7.86647,9.86147"/> | |
| 94 | + </dia:attribute> | |
| 95 | + <dia:attribute name="text"> | |
| 96 | + <dia:composite type="text"> | |
| 97 | + <dia:attribute name="string"> | |
| 98 | + <dia:string>#Revision' | |
| 99 | +(Child NTDB)#</dia:string> | |
| 100 | + </dia:attribute> | |
| 101 | + <dia:attribute name="font"> | |
| 102 | + <dia:font family="sans" style="0" name="Helvetica"/> | |
| 103 | + </dia:attribute> | |
| 104 | + <dia:attribute name="height"> | |
| 105 | + <dia:real val="0.80000000000000004"/> | |
| 106 | + </dia:attribute> | |
| 107 | + <dia:attribute name="pos"> | |
| 108 | + <dia:point val="4.11647,8.66397"/> | |
| 109 | + </dia:attribute> | |
| 110 | + <dia:attribute name="color"> | |
| 111 | + <dia:color val="#000000"/> | |
| 112 | + </dia:attribute> | |
| 113 | + <dia:attribute name="alignment"> | |
| 114 | + <dia:enum val="0"/> | |
| 115 | + </dia:attribute> | |
| 116 | + </dia:composite> | |
| 117 | + </dia:attribute> | |
| 118 | + <dia:attribute name="valign"> | |
| 119 | + <dia:enum val="3"/> | |
| 120 | + </dia:attribute> | |
| 121 | + </dia:object> | |
| 122 | + </dia:group> | |
| 123 | + <dia:group> | |
| 124 | + <dia:object type="Standard - Box" version="0" id="O2"> | |
| 125 | + <dia:attribute name="obj_pos"> | |
| 126 | + <dia:point val="5,1"/> | |
| 127 | + </dia:attribute> | |
| 128 | + <dia:attribute name="obj_bb"> | |
| 129 | + <dia:rectangle val="4.95,0.95;11.05,3.05"/> | |
| 130 | + </dia:attribute> | |
| 131 | + <dia:attribute name="elem_corner"> | |
| 132 | + <dia:point val="5,1"/> | |
| 133 | + </dia:attribute> | |
| 134 | + <dia:attribute name="elem_width"> | |
| 135 | + <dia:real val="6"/> | |
| 136 | + </dia:attribute> | |
| 137 | + <dia:attribute name="elem_height"> | |
| 138 | + <dia:real val="2"/> | |
| 139 | + </dia:attribute> | |
| 140 | + <dia:attribute name="show_background"> | |
| 141 | + <dia:boolean val="true"/> | |
| 142 | + </dia:attribute> | |
| 143 | + </dia:object> | |
| 144 | + <dia:object type="Standard - Text" version="1" id="O3"> | |
| 145 | + <dia:attribute name="obj_pos"> | |
| 146 | + <dia:point val="6.78184,1.6725"/> | |
| 147 | + </dia:attribute> | |
| 148 | + <dia:attribute name="obj_bb"> | |
| 149 | + <dia:rectangle val="6.78184,1.13;9.21816,2.87"/> | |
| 150 | + </dia:attribute> | |
| 151 | + <dia:attribute name="text"> | |
| 152 | + <dia:composite type="text"> | |
| 153 | + <dia:attribute name="string"> | |
| 154 | + <dia:string>#Revision | |
| 155 | +(NTDB)#</dia:string> | |
| 156 | + </dia:attribute> | |
| 157 | + <dia:attribute name="font"> | |
| 158 | + <dia:font family="sans" style="0" name="Helvetica"/> | |
| 159 | + </dia:attribute> | |
| 160 | + <dia:attribute name="height"> | |
| 161 | + <dia:real val="0.80000000000000004"/> | |
| 162 | + </dia:attribute> | |
| 163 | + <dia:attribute name="pos"> | |
| 164 | + <dia:point val="6.78184,1.6725"/> | |
| 165 | + </dia:attribute> | |
| 166 | + <dia:attribute name="color"> | |
| 167 | + <dia:color val="#000000"/> | |
| 168 | + </dia:attribute> | |
| 169 | + <dia:attribute name="alignment"> | |
| 170 | + <dia:enum val="0"/> | |
| 171 | + </dia:attribute> | |
| 172 | + </dia:composite> | |
| 173 | + </dia:attribute> | |
| 174 | + <dia:attribute name="valign"> | |
| 175 | + <dia:enum val="3"/> | |
| 176 | + </dia:attribute> | |
| 177 | + </dia:object> | |
| 178 | + </dia:group> | |
| 179 | + <dia:group> | |
| 180 | + <dia:object type="Standard - Box" version="0" id="O4"> | |
| 181 | + <dia:attribute name="obj_pos"> | |
| 182 | + <dia:point val="1,15"/> | |
| 183 | + </dia:attribute> | |
| 184 | + <dia:attribute name="obj_bb"> | |
| 185 | + <dia:rectangle val="0.95,14.95;7.05,17.05"/> | |
| 186 | + </dia:attribute> | |
| 187 | + <dia:attribute name="elem_corner"> | |
| 188 | + <dia:point val="1,15"/> | |
| 189 | + </dia:attribute> | |
| 190 | + <dia:attribute name="elem_width"> | |
| 191 | + <dia:real val="6"/> | |
| 192 | + </dia:attribute> | |
| 193 | + <dia:attribute name="elem_height"> | |
| 194 | + <dia:real val="2"/> | |
| 195 | + </dia:attribute> | |
| 196 | + <dia:attribute name="show_background"> | |
| 197 | + <dia:boolean val="true"/> | |
| 198 | + </dia:attribute> | |
| 199 | + </dia:object> | |
| 200 | + <dia:object type="Standard - Text" version="1" id="O5"> | |
| 201 | + <dia:attribute name="obj_pos"> | |
| 202 | + <dia:point val="2.11647,15.664"/> | |
| 203 | + </dia:attribute> | |
| 204 | + <dia:attribute name="obj_bb"> | |
| 205 | + <dia:rectangle val="2.11647,15.1215;5.86647,16.8615"/> | |
| 206 | + </dia:attribute> | |
| 207 | + <dia:attribute name="text"> | |
| 208 | + <dia:composite type="text"> | |
| 209 | + <dia:attribute name="string"> | |
| 210 | + <dia:string>#Revision'' | |
| 211 | +(Child NTDB)#</dia:string> | |
| 212 | + </dia:attribute> | |
| 213 | + <dia:attribute name="font"> | |
| 214 | + <dia:font family="sans" style="0" name="Helvetica"/> | |
| 215 | + </dia:attribute> | |
| 216 | + <dia:attribute name="height"> | |
| 217 | + <dia:real val="0.80000000000000004"/> | |
| 218 | + </dia:attribute> | |
| 219 | + <dia:attribute name="pos"> | |
| 220 | + <dia:point val="2.11647,15.664"/> | |
| 221 | + </dia:attribute> | |
| 222 | + <dia:attribute name="color"> | |
| 223 | + <dia:color val="#000000"/> | |
| 224 | + </dia:attribute> | |
| 225 | + <dia:attribute name="alignment"> | |
| 226 | + <dia:enum val="0"/> | |
| 227 | + </dia:attribute> | |
| 228 | + </dia:composite> | |
| 229 | + </dia:attribute> | |
| 230 | + <dia:attribute name="valign"> | |
| 231 | + <dia:enum val="3"/> | |
| 232 | + </dia:attribute> | |
| 233 | + </dia:object> | |
| 234 | + </dia:group> | |
| 235 | + <dia:group> | |
| 236 | + <dia:object type="Standard - Box" version="0" id="O6"> | |
| 237 | + <dia:attribute name="obj_pos"> | |
| 238 | + <dia:point val="13,13"/> | |
| 239 | + </dia:attribute> | |
| 240 | + <dia:attribute name="obj_bb"> | |
| 241 | + <dia:rectangle val="12.95,12.95;19.05,15.05"/> | |
| 242 | + </dia:attribute> | |
| 243 | + <dia:attribute name="elem_corner"> | |
| 244 | + <dia:point val="13,13"/> | |
| 245 | + </dia:attribute> | |
| 246 | + <dia:attribute name="elem_width"> | |
| 247 | + <dia:real val="6"/> | |
| 248 | + </dia:attribute> | |
| 249 | + <dia:attribute name="elem_height"> | |
| 250 | + <dia:real val="2"/> | |
| 251 | + </dia:attribute> | |
| 252 | + <dia:attribute name="show_background"> | |
| 253 | + <dia:boolean val="true"/> | |
| 254 | + </dia:attribute> | |
| 255 | + </dia:object> | |
| 256 | + <dia:object type="Standard - Text" version="1" id="O7"> | |
| 257 | + <dia:attribute name="obj_pos"> | |
| 258 | + <dia:point val="14.2915,13.664"/> | |
| 259 | + </dia:attribute> | |
| 260 | + <dia:attribute name="obj_bb"> | |
| 261 | + <dia:rectangle val="14.2915,13.1215;17.6915,14.8615"/> | |
| 262 | + </dia:attribute> | |
| 263 | + <dia:attribute name="text"> | |
| 264 | + <dia:composite type="text"> | |
| 265 | + <dia:attribute name="string"> | |
| 266 | + <dia:string>#Revision"" | |
| 267 | +(non-NTDB)#</dia:string> | |
| 268 | + </dia:attribute> | |
| 269 | + <dia:attribute name="font"> | |
| 270 | + <dia:font family="sans" style="0" name="Helvetica"/> | |
| 271 | + </dia:attribute> | |
| 272 | + <dia:attribute name="height"> | |
| 273 | + <dia:real val="0.80000000000000004"/> | |
| 274 | + </dia:attribute> | |
| 275 | + <dia:attribute name="pos"> | |
| 276 | + <dia:point val="14.2915,13.664"/> | |
| 277 | + </dia:attribute> | |
| 278 | + <dia:attribute name="color"> | |
| 279 | + <dia:color val="#000000"/> | |
| 280 | + </dia:attribute> | |
| 281 | + <dia:attribute name="alignment"> | |
| 282 | + <dia:enum val="0"/> | |
| 283 | + </dia:attribute> | |
| 284 | + </dia:composite> | |
| 285 | + </dia:attribute> | |
| 286 | + <dia:attribute name="valign"> | |
| 287 | + <dia:enum val="3"/> | |
| 288 | + </dia:attribute> | |
| 289 | + </dia:object> | |
| 290 | + </dia:group> | |
| 291 | + <dia:object type="Standard - Line" version="0" id="O8"> | |
| 292 | + <dia:attribute name="obj_pos"> | |
| 293 | + <dia:point val="8,8"/> | |
| 294 | + </dia:attribute> | |
| 295 | + <dia:attribute name="obj_bb"> | |
| 296 | + <dia:rectangle val="7.93501,2.76788;10.4828,8.06499"/> | |
| 297 | + </dia:attribute> | |
| 298 | + <dia:attribute name="conn_endpoints"> | |
| 299 | + <dia:point val="8,8"/> | |
| 300 | + <dia:point val="10,3"/> | |
| 301 | + </dia:attribute> | |
| 302 | + <dia:attribute name="numcp"> | |
| 303 | + <dia:int val="1"/> | |
| 304 | + </dia:attribute> | |
| 305 | + <dia:attribute name="end_arrow"> | |
| 306 | + <dia:enum val="22"/> | |
| 307 | + </dia:attribute> | |
| 308 | + <dia:attribute name="end_arrow_length"> | |
| 309 | + <dia:real val="0.5"/> | |
| 310 | + </dia:attribute> | |
| 311 | + <dia:attribute name="end_arrow_width"> | |
| 312 | + <dia:real val="0.5"/> | |
| 313 | + </dia:attribute> | |
| 314 | + </dia:object> | |
| 315 | + <dia:object type="Standard - Line" version="0" id="O9"> | |
| 316 | + <dia:attribute name="obj_pos"> | |
| 317 | + <dia:point val="6,3"/> | |
| 318 | + </dia:attribute> | |
| 319 | + <dia:attribute name="obj_bb"> | |
| 320 | + <dia:rectangle val="3.51719,2.93501;6.06499,8.23212"/> | |
| 321 | + </dia:attribute> | |
| 322 | + <dia:attribute name="conn_endpoints"> | |
| 323 | + <dia:point val="6,3"/> | |
| 324 | + <dia:point val="4,8"/> | |
| 325 | + </dia:attribute> | |
| 326 | + <dia:attribute name="numcp"> | |
| 327 | + <dia:int val="1"/> | |
| 328 | + </dia:attribute> | |
| 329 | + <dia:attribute name="end_arrow"> | |
| 330 | + <dia:enum val="22"/> | |
| 331 | + </dia:attribute> | |
| 332 | + <dia:attribute name="end_arrow_length"> | |
| 333 | + <dia:real val="0.5"/> | |
| 334 | + </dia:attribute> | |
| 335 | + <dia:attribute name="end_arrow_width"> | |
| 336 | + <dia:real val="0.5"/> | |
| 337 | + </dia:attribute> | |
| 338 | + </dia:object> | |
| 339 | + <dia:object type="Standard - Line" version="0" id="O10"> | |
| 340 | + <dia:attribute name="obj_pos"> | |
| 341 | + <dia:point val="4,10"/> | |
| 342 | + </dia:attribute> | |
| 343 | + <dia:attribute name="obj_bb"> | |
| 344 | + <dia:rectangle val="1.51719,9.93501;4.06499,15.2321"/> | |
| 345 | + </dia:attribute> | |
| 346 | + <dia:attribute name="conn_endpoints"> | |
| 347 | + <dia:point val="4,10"/> | |
| 348 | + <dia:point val="2,15"/> | |
| 349 | + </dia:attribute> | |
| 350 | + <dia:attribute name="numcp"> | |
| 351 | + <dia:int val="1"/> | |
| 352 | + </dia:attribute> | |
| 353 | + <dia:attribute name="end_arrow"> | |
| 354 | + <dia:enum val="22"/> | |
| 355 | + </dia:attribute> | |
| 356 | + <dia:attribute name="end_arrow_length"> | |
| 357 | + <dia:real val="0.5"/> | |
| 358 | + </dia:attribute> | |
| 359 | + <dia:attribute name="end_arrow_width"> | |
| 360 | + <dia:real val="0.5"/> | |
| 361 | + </dia:attribute> | |
| 362 | + </dia:object> | |
| 363 | + <dia:object type="Standard - Line" version="0" id="O11"> | |
| 364 | + <dia:attribute name="obj_pos"> | |
| 365 | + <dia:point val="6,15"/> | |
| 366 | + </dia:attribute> | |
| 367 | + <dia:attribute name="obj_bb"> | |
| 368 | + <dia:rectangle val="5.93501,9.76788;8.48281,15.065"/> | |
| 369 | + </dia:attribute> | |
| 370 | + <dia:attribute name="conn_endpoints"> | |
| 371 | + <dia:point val="6,15"/> | |
| 372 | + <dia:point val="8,10"/> | |
| 373 | + </dia:attribute> | |
| 374 | + <dia:attribute name="numcp"> | |
| 375 | + <dia:int val="1"/> | |
| 376 | + </dia:attribute> | |
| 377 | + <dia:attribute name="end_arrow"> | |
| 378 | + <dia:enum val="22"/> | |
| 379 | + </dia:attribute> | |
| 380 | + <dia:attribute name="end_arrow_length"> | |
| 381 | + <dia:real val="0.5"/> | |
| 382 | + </dia:attribute> | |
| 383 | + <dia:attribute name="end_arrow_width"> | |
| 384 | + <dia:real val="0.5"/> | |
| 385 | + </dia:attribute> | |
| 386 | + </dia:object> | |
| 387 | + <dia:object type="Standard - Line" version="0" id="O12"> | |
| 388 | + <dia:attribute name="obj_pos"> | |
| 389 | + <dia:point val="16,13"/> | |
| 390 | + </dia:attribute> | |
| 391 | + <dia:attribute name="obj_bb"> | |
| 392 | + <dia:rectangle val="8.70852,8.54107;16.0682,13.0682"/> | |
| 393 | + </dia:attribute> | |
| 394 | + <dia:attribute name="conn_endpoints"> | |
| 395 | + <dia:point val="16,13"/> | |
| 396 | + <dia:point val="9,9"/> | |
| 397 | + </dia:attribute> | |
| 398 | + <dia:attribute name="numcp"> | |
| 399 | + <dia:int val="1"/> | |
| 400 | + </dia:attribute> | |
| 401 | + <dia:attribute name="end_arrow"> | |
| 402 | + <dia:enum val="22"/> | |
| 403 | + </dia:attribute> | |
| 404 | + <dia:attribute name="end_arrow_length"> | |
| 405 | + <dia:real val="0.5"/> | |
| 406 | + </dia:attribute> | |
| 407 | + <dia:attribute name="end_arrow_width"> | |
| 408 | + <dia:real val="0.5"/> | |
| 409 | + </dia:attribute> | |
| 410 | + </dia:object> | |
| 411 | + <dia:object type="Standard - Line" version="0" id="O13"> | |
| 412 | + <dia:attribute name="obj_pos"> | |
| 413 | + <dia:point val="6,10"/> | |
| 414 | + </dia:attribute> | |
| 415 | + <dia:attribute name="obj_bb"> | |
| 416 | + <dia:rectangle val="5.93178,9.93178;13.2915,14.4589"/> | |
| 417 | + </dia:attribute> | |
| 418 | + <dia:attribute name="conn_endpoints"> | |
| 419 | + <dia:point val="6,10"/> | |
| 420 | + <dia:point val="13,14"/> | |
| 421 | + </dia:attribute> | |
| 422 | + <dia:attribute name="numcp"> | |
| 423 | + <dia:int val="1"/> | |
| 424 | + </dia:attribute> | |
| 425 | + <dia:attribute name="end_arrow"> | |
| 426 | + <dia:enum val="22"/> | |
| 427 | + </dia:attribute> | |
| 428 | + <dia:attribute name="end_arrow_length"> | |
| 429 | + <dia:real val="0.5"/> | |
| 430 | + </dia:attribute> | |
| 431 | + <dia:attribute name="end_arrow_width"> | |
| 432 | + <dia:real val="0.5"/> | |
| 433 | + </dia:attribute> | |
| 434 | + </dia:object> | |
| 435 | + <dia:object type="Standard - Text" version="1" id="O14"> | |
| 436 | + <dia:attribute name="obj_pos"> | |
| 437 | + <dia:point val="6,14"/> | |
| 438 | + </dia:attribute> | |
| 439 | + <dia:attribute name="obj_bb"> | |
| 440 | + <dia:rectangle val="6,13.5288;8.27969,15.3987"/> | |
| 441 | + </dia:attribute> | |
| 442 | + <dia:attribute name="text"> | |
| 443 | + <dia:composite type="text"> | |
| 444 | + <dia:attribute name="string"> | |
| 445 | + <dia:string># | |
| 446 | + parent#</dia:string> | |
| 447 | + </dia:attribute> | |
| 448 | + <dia:attribute name="font"> | |
| 449 | + <dia:font family="sans" style="0" name="Helvetica"/> | |
| 450 | + </dia:attribute> | |
| 451 | + <dia:attribute name="height"> | |
| 452 | + <dia:real val="0.80000000000000004"/> | |
| 453 | + </dia:attribute> | |
| 454 | + <dia:attribute name="pos"> | |
| 455 | + <dia:point val="6,14"/> | |
| 456 | + </dia:attribute> | |
| 457 | + <dia:attribute name="color"> | |
| 458 | + <dia:color val="#000000"/> | |
| 459 | + </dia:attribute> | |
| 460 | + <dia:attribute name="alignment"> | |
| 461 | + <dia:enum val="0"/> | |
| 462 | + </dia:attribute> | |
| 463 | + </dia:composite> | |
| 464 | + </dia:attribute> | |
| 465 | + <dia:attribute name="valign"> | |
| 466 | + <dia:enum val="3"/> | |
| 467 | + </dia:attribute> | |
| 468 | + </dia:object> | |
| 469 | + <dia:object type="Standard - Text" version="1" id="O15"> | |
| 470 | + <dia:attribute name="obj_pos"> | |
| 471 | + <dia:point val="6,3"/> | |
| 472 | + </dia:attribute> | |
| 473 | + <dia:attribute name="obj_bb"> | |
| 474 | + <dia:rectangle val="6,2.4575;7.385,4.1975"/> | |
| 475 | + </dia:attribute> | |
| 476 | + <dia:attribute name="text"> | |
| 477 | + <dia:composite type="text"> | |
| 478 | + <dia:attribute name="string"> | |
| 479 | + <dia:string># | |
| 480 | +childe name="valign"> | |
| 481 | + <dia:enum val="3"/> | |
| 482 | + </dia:attribute> | |
| 483 | + </dia:object> | |
| 484 | + <dia:object type="Standard - Text" version="1" id="O16"> | |
| 485 | + <dia:attribute name="obj_pos"> | |
| 486 | + <dia:point val="4,10"/> | |
| 487 | + </dia:attribute> | |
| 488 | + <dia:attribute name="obj_bb"> | |
| 489 | + <dia:rectangle val="4,9.4575;5.385,11.1975"/6,3"/> | |
| 490 | + </dia:attribute> | |
| 491 | + <dia:attribute name="ia:group> | |
| 492 | + <dia:g <dia:string># | |
| 493 | +child#</dia:string> | |
| 494 | + </dia:attribute> | |
| 495 | + <dia:attribute name="font"> | |
| 496 | + <dia:font family="sans" style="0" name="Helvetica"/> | |
| 497 | + </dia:attribute> | |
| 498 | + <dia:attribute name="height"> | |
| 499 | + <dia:real val="0.80000000000000004"/> | |
| 500 | + </dia:attribute> | |
| 501 | + <dia:attribute name="pos"> | |
| 502 | + <di6="Standard - Line" version="0" id="O11"> | |
| 503 | + <dia:attribute name | |
| 504 | + <dia:point val="4,10"/> | |
| 505 | + </dia:attribute> | |
| 506 | + <dia:attribute name="obj_bb"> | |
| 507 | + <dia:rectangle val="4,9.4575;5.385,11.1975"/> | |
| 508 | + </dia:attribute> | |
| 509 | + <dia:attribute name="text"> | |
| 510 | + <dia:composite type="text"> | |
| 511 | + <di | |
| 512 | +childe name="valign"> | |
| 513 | + <dia:enum val="3"/> | |
| 514 | + </dia:attribute> | |
| 515 | + </dia:object> | |
| 516 | + <dia:object type="Standard - Text" version="1" id="O16"> | |
| 517 | + <dia:attribute name="obj_pos"> | |
| 518 | + <dia:point val="4,10"/> | |
| 519 | + </dia:attribute> | |
| 520 | + <dia:attribute name="obj_bb"> | |
| 521 | + <dia:rectangle val="4,9.4575;5.385,11.1975"/ | |
| 522 | + <dia: </dia:attribute> | |
| 523 | + ia:group> | |
| 524 | + <dia:g <dia:string># | |
| 525 | +child#</dia:string> | |
| 526 | + </dia:attribute> | |
| 527 | + <dia:attribute name="font"> | |
| 528 | + <dia:font family="sans" style="0" name="Helvetica"/> | |
| 529 | + </dia:attribute> | |
| 530 | + <dia:attribute name="height"> | |
| 531 | + <dia:real val="0.80000000000000004"/> | |
| 532 | + </dia:attribute> | |
| 533 | + <dia:attribute name="pos"> | |
| 534 | + <di7="Standard - Line" version="0" id="O11"> | |
| 535 | + <dia:attribute name15,12"/> | |
| 536 | + </dia:attribute> | |
| 537 | + <dia:attribute name="obj_bb"> | |
| 538 | + > | |
| 539 | + <dia:attribute name="alignment"> | |
| 540 | + <dia:enum val="0"/> | |
| 541 | + </dia:attribute> | |
| 542 | + </dia:composite> | |
| 543 | + </dia:attribute> | |
| 544 | + <dia:attribute name="valign"> | |
| 545 | + <dia:enum val="3"/> | |
| 546 | + </dia:attribute> | |
| 547 | + </dia:object> | |
| 548 | + <dia:object type="Standard - Text" version="1" id="O16"> | |
| 549 | + <dia:attribute name="obj_pos"> | |
| 550 | + <dia:point val="4,10"/> | |
| 551 | + </dia:attribute> | |
| 552 | + <dia:attribute name="obj_bb"> | |
| 553 | + <dia:rectangle val="4,9.4575;5.385,11.1975"/> | |
| 554 | + </dia:attribute> | |
| 555 | + <dia:attribute name="text"> | |
| 556 | + <dia:composite type="text"> | |
| 557 | + <dia:attribute name="string"> | |
| 558 | + <dia:string># | |
| 559 | +child#</dia:string> | |
| 560 | + </dia:attribute> | |
| 561 | + <dia:attribute name="font"> | |
| 562 | + <dia:font family="sans" style="0" name="Helvetica"/> | |
| 563 | + </dia:attribute> | |
| 564 | + <dia:attribute name="height"> | |
| 565 | + <dia:string># | |
| 566 | + parent#</dia:string> | |
| 567 | + </dia:attribute> | |
| 568 | + <dia:attribute name="font"> | |
| 569 | + <dia:font family="sans" style="0" name="Helvetica"/> | |
| 570 | + </dia:attribute> | |
| 571 | + <dia:attribute name="height"> | |
| 572 | + <dia:real val="0.80000000000000004"/> | |
| 573 | + </dia:attribute> | |
| 574 | + <dia:attribute name="pos"> | |
| 575 | + <dia:point val="8,7"/> | |
| 576 | + </dia:attribute> | |
| 577 | + <dia:attribute name="color"> | |
| 578 | + <dia:color val="#000000"/> | |
| 579 | + </dia:attribute> | |
| 580 | + <dia:attribute name="alignment"> | |
| 581 | + <dia:enum val="0"/> | |
| 582 | + </dia:attribute> | |
| 583 | + </dia:composite> | |
| 584 | + </dia:attribute> | |
| 585 | + <dia:attribute name="valign"> | |
| 586 | + <dia:enum val="3"/> | |
| 587 | + </dia:attribute> | |
| 588 | + </dia:object> | |
| 589 | + </dia:group> | |
| 590 | + < |
| --- a/art/CollRev4.dia | |
| +++ b/art/CollRev4.dia | |
| @@ -0,0 +1,590 @@ | |
| --- a/art/CollRev4.dia | |
| +++ b/art/CollRev4.dia | |
| @@ -0,0 +1,590 @@ | |
| 1 | <?xml version="1.0" encoding="UTF-8"?> |
| 2 | <dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/"> |
| 3 | <dia:diagramdata> |
| 4 | <dia:attribute name="background"> |
| 5 | <dia:color val="#ffffff"/> |
| 6 | </dia:attribute> |
| 7 | <dia:attribute name="pagebreak"> |
| 8 | <dia:color val="#000099"/> |
| 9 | </dia:attribute> |
| 10 | <dia:attribute name="paper"> |
| 11 | <dia:composite type="paper"> |
| 12 | <dia:attribute name="name"> |
| 13 | <dia:string>#Letter#</dia:string> |
| 14 | </dia:attribute> |
| 15 | <dia:attribute name="tmargin"> |
| 16 | <dia:real val="2.5399999618530273"/> |
| 17 | </dia:attribute> |
| 18 | <dia:attribute name="bmargin"> |
| 19 | <dia:real val="2.5399999618530273"/> |
| 20 | </dia:attribute> |
| 21 | <dia:attribute name="lmargin"> |
| 22 | <dia:real val="2.5399999618530273"/> |
| 23 | </dia:attribute> |
| 24 | <dia:attribute name="rmargin"> |
| 25 | <dia:real val="2.5399999618530273"/> |
| 26 | </dia:attribute> |
| 27 | <dia:attribute name="is_portrait"> |
| 28 | <dia:boolean val="true"/> |
| 29 | </dia:attribute> |
| 30 | <dia:attribute name="scaling"> |
| 31 | <dia:real val="1"/> |
| 32 | </dia:attribute> |
| 33 | <dia:attribute name="fitto"> |
| 34 | <dia:boolean val="false"/> |
| 35 | </dia:attribute> |
| 36 | </dia:composite> |
| 37 | </dia:attribute> |
| 38 | <dia:attribute name="grid"> |
| 39 | <dia:composite type="grid"> |
| 40 | <dia:attribute name="width_x"> |
| 41 | <dia:real val="1"/> |
| 42 | </dia:attribute> |
| 43 | <dia:attribute name="width_y"> |
| 44 | <dia:real val="1"/> |
| 45 | </dia:attribute> |
| 46 | <dia:attribute name="visible_x"> |
| 47 | <dia:int val="1"/> |
| 48 | </dia:attribute> |
| 49 | <dia:attribute name="visible_y"> |
| 50 | <dia:int val="1"/> |
| 51 | </dia:attribute> |
| 52 | <dia:composite type="color"/> |
| 53 | </dia:composite> |
| 54 | </dia:attribute> |
| 55 | <dia:attribute name="color"> |
| 56 | <dia:color val="#d8e5e5"/> |
| 57 | </dia:attribute> |
| 58 | <dia:attribute name="guides"> |
| 59 | <dia:composite type="guides"> |
| 60 | <dia:attribute name="hguides"/> |
| 61 | <dia:attribute name="vguides"/> |
| 62 | </dia:composite> |
| 63 | </dia:attribute> |
| 64 | </dia:diagramdata> |
| 65 | <dia:layer name="Background" visible="true"> |
| 66 | <dia:group> |
| 67 | <dia:group> |
| 68 | <dia:object type="Standard - Box" version="0" id="O0"> |
| 69 | <dia:attribute name="obj_pos"> |
| 70 | <dia:point val="3,8"/> |
| 71 | </dia:attribute> |
| 72 | <dia:attribute name="obj_bb"> |
| 73 | <dia:rectangle val="2.95,7.95;9.05,10.05"/> |
| 74 | </dia:attribute> |
| 75 | <dia:attribute name="elem_corner"> |
| 76 | <dia:point val="3,8"/> |
| 77 | </dia:attribute> |
| 78 | <dia:attribute name="elem_width"> |
| 79 | <dia:real val="6"/> |
| 80 | </dia:attribute> |
| 81 | <dia:attribute name="elem_height"> |
| 82 | <dia:real val="2"/> |
| 83 | </dia:attribute> |
| 84 | <dia:attribute name="show_background"> |
| 85 | <dia:boolean val="true"/> |
| 86 | </dia:attribute> |
| 87 | </dia:object> |
| 88 | <dia:object type="Standard - Text" version="1" id="O1"> |
| 89 | <dia:attribute name="obj_pos"> |
| 90 | <dia:point val="4.11647,8.66397"/> |
| 91 | </dia:attribute> |
| 92 | <dia:attribute name="obj_bb"> |
| 93 | <dia:rectangle val="4.11647,8.12147;7.86647,9.86147"/> |
| 94 | </dia:attribute> |
| 95 | <dia:attribute name="text"> |
| 96 | <dia:composite type="text"> |
| 97 | <dia:attribute name="string"> |
| 98 | <dia:string>#Revision' |
| 99 | (Child NTDB)#</dia:string> |
| 100 | </dia:attribute> |
| 101 | <dia:attribute name="font"> |
| 102 | <dia:font family="sans" style="0" name="Helvetica"/> |
| 103 | </dia:attribute> |
| 104 | <dia:attribute name="height"> |
| 105 | <dia:real val="0.80000000000000004"/> |
| 106 | </dia:attribute> |
| 107 | <dia:attribute name="pos"> |
| 108 | <dia:point val="4.11647,8.66397"/> |
| 109 | </dia:attribute> |
| 110 | <dia:attribute name="color"> |
| 111 | <dia:color val="#000000"/> |
| 112 | </dia:attribute> |
| 113 | <dia:attribute name="alignment"> |
| 114 | <dia:enum val="0"/> |
| 115 | </dia:attribute> |
| 116 | </dia:composite> |
| 117 | </dia:attribute> |
| 118 | <dia:attribute name="valign"> |
| 119 | <dia:enum val="3"/> |
| 120 | </dia:attribute> |
| 121 | </dia:object> |
| 122 | </dia:group> |
| 123 | <dia:group> |
| 124 | <dia:object type="Standard - Box" version="0" id="O2"> |
| 125 | <dia:attribute name="obj_pos"> |
| 126 | <dia:point val="5,1"/> |
| 127 | </dia:attribute> |
| 128 | <dia:attribute name="obj_bb"> |
| 129 | <dia:rectangle val="4.95,0.95;11.05,3.05"/> |
| 130 | </dia:attribute> |
| 131 | <dia:attribute name="elem_corner"> |
| 132 | <dia:point val="5,1"/> |
| 133 | </dia:attribute> |
| 134 | <dia:attribute name="elem_width"> |
| 135 | <dia:real val="6"/> |
| 136 | </dia:attribute> |
| 137 | <dia:attribute name="elem_height"> |
| 138 | <dia:real val="2"/> |
| 139 | </dia:attribute> |
| 140 | <dia:attribute name="show_background"> |
| 141 | <dia:boolean val="true"/> |
| 142 | </dia:attribute> |
| 143 | </dia:object> |
| 144 | <dia:object type="Standard - Text" version="1" id="O3"> |
| 145 | <dia:attribute name="obj_pos"> |
| 146 | <dia:point val="6.78184,1.6725"/> |
| 147 | </dia:attribute> |
| 148 | <dia:attribute name="obj_bb"> |
| 149 | <dia:rectangle val="6.78184,1.13;9.21816,2.87"/> |
| 150 | </dia:attribute> |
| 151 | <dia:attribute name="text"> |
| 152 | <dia:composite type="text"> |
| 153 | <dia:attribute name="string"> |
| 154 | <dia:string>#Revision |
| 155 | (NTDB)#</dia:string> |
| 156 | </dia:attribute> |
| 157 | <dia:attribute name="font"> |
| 158 | <dia:font family="sans" style="0" name="Helvetica"/> |
| 159 | </dia:attribute> |
| 160 | <dia:attribute name="height"> |
| 161 | <dia:real val="0.80000000000000004"/> |
| 162 | </dia:attribute> |
| 163 | <dia:attribute name="pos"> |
| 164 | <dia:point val="6.78184,1.6725"/> |
| 165 | </dia:attribute> |
| 166 | <dia:attribute name="color"> |
| 167 | <dia:color val="#000000"/> |
| 168 | </dia:attribute> |
| 169 | <dia:attribute name="alignment"> |
| 170 | <dia:enum val="0"/> |
| 171 | </dia:attribute> |
| 172 | </dia:composite> |
| 173 | </dia:attribute> |
| 174 | <dia:attribute name="valign"> |
| 175 | <dia:enum val="3"/> |
| 176 | </dia:attribute> |
| 177 | </dia:object> |
| 178 | </dia:group> |
| 179 | <dia:group> |
| 180 | <dia:object type="Standard - Box" version="0" id="O4"> |
| 181 | <dia:attribute name="obj_pos"> |
| 182 | <dia:point val="1,15"/> |
| 183 | </dia:attribute> |
| 184 | <dia:attribute name="obj_bb"> |
| 185 | <dia:rectangle val="0.95,14.95;7.05,17.05"/> |
| 186 | </dia:attribute> |
| 187 | <dia:attribute name="elem_corner"> |
| 188 | <dia:point val="1,15"/> |
| 189 | </dia:attribute> |
| 190 | <dia:attribute name="elem_width"> |
| 191 | <dia:real val="6"/> |
| 192 | </dia:attribute> |
| 193 | <dia:attribute name="elem_height"> |
| 194 | <dia:real val="2"/> |
| 195 | </dia:attribute> |
| 196 | <dia:attribute name="show_background"> |
| 197 | <dia:boolean val="true"/> |
| 198 | </dia:attribute> |
| 199 | </dia:object> |
| 200 | <dia:object type="Standard - Text" version="1" id="O5"> |
| 201 | <dia:attribute name="obj_pos"> |
| 202 | <dia:point val="2.11647,15.664"/> |
| 203 | </dia:attribute> |
| 204 | <dia:attribute name="obj_bb"> |
| 205 | <dia:rectangle val="2.11647,15.1215;5.86647,16.8615"/> |
| 206 | </dia:attribute> |
| 207 | <dia:attribute name="text"> |
| 208 | <dia:composite type="text"> |
| 209 | <dia:attribute name="string"> |
| 210 | <dia:string>#Revision'' |
| 211 | (Child NTDB)#</dia:string> |
| 212 | </dia:attribute> |
| 213 | <dia:attribute name="font"> |
| 214 | <dia:font family="sans" style="0" name="Helvetica"/> |
| 215 | </dia:attribute> |
| 216 | <dia:attribute name="height"> |
| 217 | <dia:real val="0.80000000000000004"/> |
| 218 | </dia:attribute> |
| 219 | <dia:attribute name="pos"> |
| 220 | <dia:point val="2.11647,15.664"/> |
| 221 | </dia:attribute> |
| 222 | <dia:attribute name="color"> |
| 223 | <dia:color val="#000000"/> |
| 224 | </dia:attribute> |
| 225 | <dia:attribute name="alignment"> |
| 226 | <dia:enum val="0"/> |
| 227 | </dia:attribute> |
| 228 | </dia:composite> |
| 229 | </dia:attribute> |
| 230 | <dia:attribute name="valign"> |
| 231 | <dia:enum val="3"/> |
| 232 | </dia:attribute> |
| 233 | </dia:object> |
| 234 | </dia:group> |
| 235 | <dia:group> |
| 236 | <dia:object type="Standard - Box" version="0" id="O6"> |
| 237 | <dia:attribute name="obj_pos"> |
| 238 | <dia:point val="13,13"/> |
| 239 | </dia:attribute> |
| 240 | <dia:attribute name="obj_bb"> |
| 241 | <dia:rectangle val="12.95,12.95;19.05,15.05"/> |
| 242 | </dia:attribute> |
| 243 | <dia:attribute name="elem_corner"> |
| 244 | <dia:point val="13,13"/> |
| 245 | </dia:attribute> |
| 246 | <dia:attribute name="elem_width"> |
| 247 | <dia:real val="6"/> |
| 248 | </dia:attribute> |
| 249 | <dia:attribute name="elem_height"> |
| 250 | <dia:real val="2"/> |
| 251 | </dia:attribute> |
| 252 | <dia:attribute name="show_background"> |
| 253 | <dia:boolean val="true"/> |
| 254 | </dia:attribute> |
| 255 | </dia:object> |
| 256 | <dia:object type="Standard - Text" version="1" id="O7"> |
| 257 | <dia:attribute name="obj_pos"> |
| 258 | <dia:point val="14.2915,13.664"/> |
| 259 | </dia:attribute> |
| 260 | <dia:attribute name="obj_bb"> |
| 261 | <dia:rectangle val="14.2915,13.1215;17.6915,14.8615"/> |
| 262 | </dia:attribute> |
| 263 | <dia:attribute name="text"> |
| 264 | <dia:composite type="text"> |
| 265 | <dia:attribute name="string"> |
| 266 | <dia:string>#Revision"" |
| 267 | (non-NTDB)#</dia:string> |
| 268 | </dia:attribute> |
| 269 | <dia:attribute name="font"> |
| 270 | <dia:font family="sans" style="0" name="Helvetica"/> |
| 271 | </dia:attribute> |
| 272 | <dia:attribute name="height"> |
| 273 | <dia:real val="0.80000000000000004"/> |
| 274 | </dia:attribute> |
| 275 | <dia:attribute name="pos"> |
| 276 | <dia:point val="14.2915,13.664"/> |
| 277 | </dia:attribute> |
| 278 | <dia:attribute name="color"> |
| 279 | <dia:color val="#000000"/> |
| 280 | </dia:attribute> |
| 281 | <dia:attribute name="alignment"> |
| 282 | <dia:enum val="0"/> |
| 283 | </dia:attribute> |
| 284 | </dia:composite> |
| 285 | </dia:attribute> |
| 286 | <dia:attribute name="valign"> |
| 287 | <dia:enum val="3"/> |
| 288 | </dia:attribute> |
| 289 | </dia:object> |
| 290 | </dia:group> |
| 291 | <dia:object type="Standard - Line" version="0" id="O8"> |
| 292 | <dia:attribute name="obj_pos"> |
| 293 | <dia:point val="8,8"/> |
| 294 | </dia:attribute> |
| 295 | <dia:attribute name="obj_bb"> |
| 296 | <dia:rectangle val="7.93501,2.76788;10.4828,8.06499"/> |
| 297 | </dia:attribute> |
| 298 | <dia:attribute name="conn_endpoints"> |
| 299 | <dia:point val="8,8"/> |
| 300 | <dia:point val="10,3"/> |
| 301 | </dia:attribute> |
| 302 | <dia:attribute name="numcp"> |
| 303 | <dia:int val="1"/> |
| 304 | </dia:attribute> |
| 305 | <dia:attribute name="end_arrow"> |
| 306 | <dia:enum val="22"/> |
| 307 | </dia:attribute> |
| 308 | <dia:attribute name="end_arrow_length"> |
| 309 | <dia:real val="0.5"/> |
| 310 | </dia:attribute> |
| 311 | <dia:attribute name="end_arrow_width"> |
| 312 | <dia:real val="0.5"/> |
| 313 | </dia:attribute> |
| 314 | </dia:object> |
| 315 | <dia:object type="Standard - Line" version="0" id="O9"> |
| 316 | <dia:attribute name="obj_pos"> |
| 317 | <dia:point val="6,3"/> |
| 318 | </dia:attribute> |
| 319 | <dia:attribute name="obj_bb"> |
| 320 | <dia:rectangle val="3.51719,2.93501;6.06499,8.23212"/> |
| 321 | </dia:attribute> |
| 322 | <dia:attribute name="conn_endpoints"> |
| 323 | <dia:point val="6,3"/> |
| 324 | <dia:point val="4,8"/> |
| 325 | </dia:attribute> |
| 326 | <dia:attribute name="numcp"> |
| 327 | <dia:int val="1"/> |
| 328 | </dia:attribute> |
| 329 | <dia:attribute name="end_arrow"> |
| 330 | <dia:enum val="22"/> |
| 331 | </dia:attribute> |
| 332 | <dia:attribute name="end_arrow_length"> |
| 333 | <dia:real val="0.5"/> |
| 334 | </dia:attribute> |
| 335 | <dia:attribute name="end_arrow_width"> |
| 336 | <dia:real val="0.5"/> |
| 337 | </dia:attribute> |
| 338 | </dia:object> |
| 339 | <dia:object type="Standard - Line" version="0" id="O10"> |
| 340 | <dia:attribute name="obj_pos"> |
| 341 | <dia:point val="4,10"/> |
| 342 | </dia:attribute> |
| 343 | <dia:attribute name="obj_bb"> |
| 344 | <dia:rectangle val="1.51719,9.93501;4.06499,15.2321"/> |
| 345 | </dia:attribute> |
| 346 | <dia:attribute name="conn_endpoints"> |
| 347 | <dia:point val="4,10"/> |
| 348 | <dia:point val="2,15"/> |
| 349 | </dia:attribute> |
| 350 | <dia:attribute name="numcp"> |
| 351 | <dia:int val="1"/> |
| 352 | </dia:attribute> |
| 353 | <dia:attribute name="end_arrow"> |
| 354 | <dia:enum val="22"/> |
| 355 | </dia:attribute> |
| 356 | <dia:attribute name="end_arrow_length"> |
| 357 | <dia:real val="0.5"/> |
| 358 | </dia:attribute> |
| 359 | <dia:attribute name="end_arrow_width"> |
| 360 | <dia:real val="0.5"/> |
| 361 | </dia:attribute> |
| 362 | </dia:object> |
| 363 | <dia:object type="Standard - Line" version="0" id="O11"> |
| 364 | <dia:attribute name="obj_pos"> |
| 365 | <dia:point val="6,15"/> |
| 366 | </dia:attribute> |
| 367 | <dia:attribute name="obj_bb"> |
| 368 | <dia:rectangle val="5.93501,9.76788;8.48281,15.065"/> |
| 369 | </dia:attribute> |
| 370 | <dia:attribute name="conn_endpoints"> |
| 371 | <dia:point val="6,15"/> |
| 372 | <dia:point val="8,10"/> |
| 373 | </dia:attribute> |
| 374 | <dia:attribute name="numcp"> |
| 375 | <dia:int val="1"/> |
| 376 | </dia:attribute> |
| 377 | <dia:attribute name="end_arrow"> |
| 378 | <dia:enum val="22"/> |
| 379 | </dia:attribute> |
| 380 | <dia:attribute name="end_arrow_length"> |
| 381 | <dia:real val="0.5"/> |
| 382 | </dia:attribute> |
| 383 | <dia:attribute name="end_arrow_width"> |
| 384 | <dia:real val="0.5"/> |
| 385 | </dia:attribute> |
| 386 | </dia:object> |
| 387 | <dia:object type="Standard - Line" version="0" id="O12"> |
| 388 | <dia:attribute name="obj_pos"> |
| 389 | <dia:point val="16,13"/> |
| 390 | </dia:attribute> |
| 391 | <dia:attribute name="obj_bb"> |
| 392 | <dia:rectangle val="8.70852,8.54107;16.0682,13.0682"/> |
| 393 | </dia:attribute> |
| 394 | <dia:attribute name="conn_endpoints"> |
| 395 | <dia:point val="16,13"/> |
| 396 | <dia:point val="9,9"/> |
| 397 | </dia:attribute> |
| 398 | <dia:attribute name="numcp"> |
| 399 | <dia:int val="1"/> |
| 400 | </dia:attribute> |
| 401 | <dia:attribute name="end_arrow"> |
| 402 | <dia:enum val="22"/> |
| 403 | </dia:attribute> |
| 404 | <dia:attribute name="end_arrow_length"> |
| 405 | <dia:real val="0.5"/> |
| 406 | </dia:attribute> |
| 407 | <dia:attribute name="end_arrow_width"> |
| 408 | <dia:real val="0.5"/> |
| 409 | </dia:attribute> |
| 410 | </dia:object> |
| 411 | <dia:object type="Standard - Line" version="0" id="O13"> |
| 412 | <dia:attribute name="obj_pos"> |
| 413 | <dia:point val="6,10"/> |
| 414 | </dia:attribute> |
| 415 | <dia:attribute name="obj_bb"> |
| 416 | <dia:rectangle val="5.93178,9.93178;13.2915,14.4589"/> |
| 417 | </dia:attribute> |
| 418 | <dia:attribute name="conn_endpoints"> |
| 419 | <dia:point val="6,10"/> |
| 420 | <dia:point val="13,14"/> |
| 421 | </dia:attribute> |
| 422 | <dia:attribute name="numcp"> |
| 423 | <dia:int val="1"/> |
| 424 | </dia:attribute> |
| 425 | <dia:attribute name="end_arrow"> |
| 426 | <dia:enum val="22"/> |
| 427 | </dia:attribute> |
| 428 | <dia:attribute name="end_arrow_length"> |
| 429 | <dia:real val="0.5"/> |
| 430 | </dia:attribute> |
| 431 | <dia:attribute name="end_arrow_width"> |
| 432 | <dia:real val="0.5"/> |
| 433 | </dia:attribute> |
| 434 | </dia:object> |
| 435 | <dia:object type="Standard - Text" version="1" id="O14"> |
| 436 | <dia:attribute name="obj_pos"> |
| 437 | <dia:point val="6,14"/> |
| 438 | </dia:attribute> |
| 439 | <dia:attribute name="obj_bb"> |
| 440 | <dia:rectangle val="6,13.5288;8.27969,15.3987"/> |
| 441 | </dia:attribute> |
| 442 | <dia:attribute name="text"> |
| 443 | <dia:composite type="text"> |
| 444 | <dia:attribute name="string"> |
| 445 | <dia:string># |
| 446 | parent#</dia:string> |
| 447 | </dia:attribute> |
| 448 | <dia:attribute name="font"> |
| 449 | <dia:font family="sans" style="0" name="Helvetica"/> |
| 450 | </dia:attribute> |
| 451 | <dia:attribute name="height"> |
| 452 | <dia:real val="0.80000000000000004"/> |
| 453 | </dia:attribute> |
| 454 | <dia:attribute name="pos"> |
| 455 | <dia:point val="6,14"/> |
| 456 | </dia:attribute> |
| 457 | <dia:attribute name="color"> |
| 458 | <dia:color val="#000000"/> |
| 459 | </dia:attribute> |
| 460 | <dia:attribute name="alignment"> |
| 461 | <dia:enum val="0"/> |
| 462 | </dia:attribute> |
| 463 | </dia:composite> |
| 464 | </dia:attribute> |
| 465 | <dia:attribute name="valign"> |
| 466 | <dia:enum val="3"/> |
| 467 | </dia:attribute> |
| 468 | </dia:object> |
| 469 | <dia:object type="Standard - Text" version="1" id="O15"> |
| 470 | <dia:attribute name="obj_pos"> |
| 471 | <dia:point val="6,3"/> |
| 472 | </dia:attribute> |
| 473 | <dia:attribute name="obj_bb"> |
| 474 | <dia:rectangle val="6,2.4575;7.385,4.1975"/> |
| 475 | </dia:attribute> |
| 476 | <dia:attribute name="text"> |
| 477 | <dia:composite type="text"> |
| 478 | <dia:attribute name="string"> |
| 479 | <dia:string># |
| 480 | childe name="valign"> |
| 481 | <dia:enum val="3"/> |
| 482 | </dia:attribute> |
| 483 | </dia:object> |
| 484 | <dia:object type="Standard - Text" version="1" id="O16"> |
| 485 | <dia:attribute name="obj_pos"> |
| 486 | <dia:point val="4,10"/> |
| 487 | </dia:attribute> |
| 488 | <dia:attribute name="obj_bb"> |
| 489 | <dia:rectangle val="4,9.4575;5.385,11.1975"/6,3"/> |
| 490 | </dia:attribute> |
| 491 | <dia:attribute name="ia:group> |
| 492 | <dia:g <dia:string># |
| 493 | child#</dia:string> |
| 494 | </dia:attribute> |
| 495 | <dia:attribute name="font"> |
| 496 | <dia:font family="sans" style="0" name="Helvetica"/> |
| 497 | </dia:attribute> |
| 498 | <dia:attribute name="height"> |
| 499 | <dia:real val="0.80000000000000004"/> |
| 500 | </dia:attribute> |
| 501 | <dia:attribute name="pos"> |
| 502 | <di6="Standard - Line" version="0" id="O11"> |
| 503 | <dia:attribute name |
| 504 | <dia:point val="4,10"/> |
| 505 | </dia:attribute> |
| 506 | <dia:attribute name="obj_bb"> |
| 507 | <dia:rectangle val="4,9.4575;5.385,11.1975"/> |
| 508 | </dia:attribute> |
| 509 | <dia:attribute name="text"> |
| 510 | <dia:composite type="text"> |
| 511 | <di |
| 512 | childe name="valign"> |
| 513 | <dia:enum val="3"/> |
| 514 | </dia:attribute> |
| 515 | </dia:object> |
| 516 | <dia:object type="Standard - Text" version="1" id="O16"> |
| 517 | <dia:attribute name="obj_pos"> |
| 518 | <dia:point val="4,10"/> |
| 519 | </dia:attribute> |
| 520 | <dia:attribute name="obj_bb"> |
| 521 | <dia:rectangle val="4,9.4575;5.385,11.1975"/ |
| 522 | <dia: </dia:attribute> |
| 523 | ia:group> |
| 524 | <dia:g <dia:string># |
| 525 | child#</dia:string> |
| 526 | </dia:attribute> |
| 527 | <dia:attribute name="font"> |
| 528 | <dia:font family="sans" style="0" name="Helvetica"/> |
| 529 | </dia:attribute> |
| 530 | <dia:attribute name="height"> |
| 531 | <dia:real val="0.80000000000000004"/> |
| 532 | </dia:attribute> |
| 533 | <dia:attribute name="pos"> |
| 534 | <di7="Standard - Line" version="0" id="O11"> |
| 535 | <dia:attribute name15,12"/> |
| 536 | </dia:attribute> |
| 537 | <dia:attribute name="obj_bb"> |
| 538 | > |
| 539 | <dia:attribute name="alignment"> |
| 540 | <dia:enum val="0"/> |
| 541 | </dia:attribute> |
| 542 | </dia:composite> |
| 543 | </dia:attribute> |
| 544 | <dia:attribute name="valign"> |
| 545 | <dia:enum val="3"/> |
| 546 | </dia:attribute> |
| 547 | </dia:object> |
| 548 | <dia:object type="Standard - Text" version="1" id="O16"> |
| 549 | <dia:attribute name="obj_pos"> |
| 550 | <dia:point val="4,10"/> |
| 551 | </dia:attribute> |
| 552 | <dia:attribute name="obj_bb"> |
| 553 | <dia:rectangle val="4,9.4575;5.385,11.1975"/> |
| 554 | </dia:attribute> |
| 555 | <dia:attribute name="text"> |
| 556 | <dia:composite type="text"> |
| 557 | <dia:attribute name="string"> |
| 558 | <dia:string># |
| 559 | child#</dia:string> |
| 560 | </dia:attribute> |
| 561 | <dia:attribute name="font"> |
| 562 | <dia:font family="sans" style="0" name="Helvetica"/> |
| 563 | </dia:attribute> |
| 564 | <dia:attribute name="height"> |
| 565 | <dia:string># |
| 566 | parent#</dia:string> |
| 567 | </dia:attribute> |
| 568 | <dia:attribute name="font"> |
| 569 | <dia:font family="sans" style="0" name="Helvetica"/> |
| 570 | </dia:attribute> |
| 571 | <dia:attribute name="height"> |
| 572 | <dia:real val="0.80000000000000004"/> |
| 573 | </dia:attribute> |
| 574 | <dia:attribute name="pos"> |
| 575 | <dia:point val="8,7"/> |
| 576 | </dia:attribute> |
| 577 | <dia:attribute name="color"> |
| 578 | <dia:color val="#000000"/> |
| 579 | </dia:attribute> |
| 580 | <dia:attribute name="alignment"> |
| 581 | <dia:enum val="0"/> |
| 582 | </dia:attribute> |
| 583 | </dia:composite> |
| 584 | </dia:attribute> |
| 585 | <dia:attribute name="valign"> |
| 586 | <dia:enum val="3"/> |
| 587 | </dia:attribute> |
| 588 | </dia:object> |
| 589 | </dia:group> |
| 590 | < |
+1
-1
| --- src/diff.c | ||
| +++ src/diff.c | ||
| @@ -23,11 +23,11 @@ | ||
| 23 | 23 | ** |
| 24 | 24 | ** This file contains code used to compute a "diff" between two |
| 25 | 25 | ** text files. |
| 26 | 26 | */ |
| 27 | 27 | #include "config.h" |
| 28 | -#include "diff2.h" | |
| 28 | +#include "diff.h" | |
| 29 | 29 | #include <assert.h> |
| 30 | 30 | |
| 31 | 31 | |
| 32 | 32 | #if 0 |
| 33 | 33 | #define DEBUG(X) X |
| 34 | 34 | |
| 35 | 35 | ADDED tools/cvs2fossil/cvs2fossil |
| 36 | 36 | ADDED tools/cvs2fossil/doc/LICENSE |
| 37 | 37 | ADDED tools/cvs2fossil/doc/README |
| 38 | 38 | ADDED tools/cvs2fossil/lib/c2f_cyclebreaker.tcl |
| 39 | 39 | ADDED tools/cvs2fossil/lib/c2f_file.tcl |
| 40 | 40 | ADDED tools/cvs2fossil/lib/c2f_flodmgr.tcl |
| 41 | 41 | ADDED tools/cvs2fossil/lib/c2f_frev.tcl |
| 42 | 42 | ADDED tools/cvs2fossil/lib/c2f_fsym.tcl |
| 43 | 43 | ADDED tools/cvs2fossil/lib/c2f_ftrunk.tcl |
| 44 | 44 | ADDED tools/cvs2fossil/lib/c2f_integrity.tcl |
| 45 | 45 | ADDED tools/cvs2fossil/lib/c2f_option.tcl |
| 46 | 46 | ADDED tools/cvs2fossil/lib/c2f_pass.tcl |
| 47 | 47 | ADDED tools/cvs2fossil/lib/c2f_pbreakacycle.tcl |
| 48 | 48 | ADDED tools/cvs2fossil/lib/c2f_pbreakrcycle.tcl |
| 49 | 49 | ADDED tools/cvs2fossil/lib/c2f_pbreakscycle.tcl |
| 50 | 50 | ADDED tools/cvs2fossil/lib/c2f_pcollar.tcl |
| 51 | 51 | ADDED tools/cvs2fossil/lib/c2f_pcollrev.tcl |
| 52 | 52 | ADDED tools/cvs2fossil/lib/c2f_pcollsym.tcl |
| 53 | 53 | ADDED tools/cvs2fossil/lib/c2f_pfiltersym.tcl |
| 54 | 54 | ADDED tools/cvs2fossil/lib/c2f_pinitcsets.tcl |
| 55 | 55 | ADDED tools/cvs2fossil/lib/c2f_plodmgr.tcl |
| 56 | 56 | ADDED tools/cvs2fossil/lib/c2f_prev.tcl |
| 57 | 57 | ADDED tools/cvs2fossil/lib/c2f_prevlink.tcl |
| 58 | 58 | ADDED tools/cvs2fossil/lib/c2f_project.tcl |
| 59 | 59 | ADDED tools/cvs2fossil/lib/c2f_psym.tcl |
| 60 | 60 | ADDED tools/cvs2fossil/lib/c2f_ptrunk.tcl |
| 61 | 61 | ADDED tools/cvs2fossil/lib/c2f_repository.tcl |
| 62 | 62 | ADDED tools/cvs2fossil/lib/c2f_state.tcl |
| 63 | 63 | ADDED tools/cvs2fossil/lib/cvs2fossil.tcl |
| 64 | 64 | ADDED tools/cvs2fossil/lib/id.tcl |
| 65 | 65 | ADDED tools/cvs2fossil/lib/log.tcl |
| 66 | 66 | ADDED tools/cvs2fossil/lib/misc.tcl |
| 67 | 67 | ADDED tools/cvs2fossil/lib/pkgIndex.tcl |
| 68 | 68 | ADDED tools/cvs2fossil/lib/rcsparser.tcl |
| 69 | 69 | ADDED tools/cvs2fossil/lib/trouble.tcl |
| 70 | 70 | DELETED tools/import-cvs.tcl |
| 71 | 71 | DELETED tools/lib/cvs.tcl |
| 72 | 72 | DELETED tools/lib/cvs_cmd.tcl |
| 73 | 73 | DELETED tools/lib/cvs_csets.tcl |
| 74 | 74 | DELETED tools/lib/cvs_files.tcl |
| 75 | 75 | DELETED tools/lib/cvs_timeline.tcl |
| 76 | 76 | DELETED tools/lib/fossil.tcl |
| 77 | 77 | DELETED tools/lib/fossil_cmd.tcl |
| 78 | 78 | DELETED tools/lib/import_map.tcl |
| 79 | 79 | DELETED tools/lib/import_statistics.tcl |
| 80 | 80 | DELETED tools/lib/importcvs.tcl |
| 81 | 81 | DELETED tools/lib/log.tcl |
| 82 | 82 | DELETED tools/lib/pkgIndex.tcl |
| 83 | 83 | DELETED tools/lib/rcsparser.tcl |
| 84 | 84 | DELETED tools/lib/trouble.tcl |
| 85 | 85 | ADDED www/CollRev1.gif |
| 86 | 86 | ADDED www/CollRev2.gif |
| 87 | 87 | ADDED www/CollRev3.gif |
| 88 | 88 | ADDED www/CollRev4.gif |
| --- src/diff.c | |
| +++ src/diff.c | |
| @@ -23,11 +23,11 @@ | |
| 23 | ** |
| 24 | ** This file contains code used to compute a "diff" between two |
| 25 | ** text files. |
| 26 | */ |
| 27 | #include "config.h" |
| 28 | #include "diff2.h" |
| 29 | #include <assert.h> |
| 30 | |
| 31 | |
| 32 | #if 0 |
| 33 | #define DEBUG(X) X |
| 34 | |
| 35 | DDED tools/cvs2fossil/cvs2fossil |
| 36 | DDED tools/cvs2fossil/doc/LICENSE |
| 37 | DDED tools/cvs2fossil/doc/README |
| 38 | DDED tools/cvs2fossil/lib/c2f_cyclebreaker.tcl |
| 39 | DDED tools/cvs2fossil/lib/c2f_file.tcl |
| 40 | DDED tools/cvs2fossil/lib/c2f_flodmgr.tcl |
| 41 | DDED tools/cvs2fossil/lib/c2f_frev.tcl |
| 42 | DDED tools/cvs2fossil/lib/c2f_fsym.tcl |
| 43 | DDED tools/cvs2fossil/lib/c2f_ftrunk.tcl |
| 44 | DDED tools/cvs2fossil/lib/c2f_integrity.tcl |
| 45 | DDED tools/cvs2fossil/lib/c2f_option.tcl |
| 46 | DDED tools/cvs2fossil/lib/c2f_pass.tcl |
| 47 | DDED tools/cvs2fossil/lib/c2f_pbreakacycle.tcl |
| 48 | DDED tools/cvs2fossil/lib/c2f_pbreakrcycle.tcl |
| 49 | DDED tools/cvs2fossil/lib/c2f_pbreakscycle.tcl |
| 50 | DDED tools/cvs2fossil/lib/c2f_pcollar.tcl |
| 51 | DDED tools/cvs2fossil/lib/c2f_pcollrev.tcl |
| 52 | DDED tools/cvs2fossil/lib/c2f_pcollsym.tcl |
| 53 | DDED tools/cvs2fossil/lib/c2f_pfiltersym.tcl |
| 54 | DDED tools/cvs2fossil/lib/c2f_pinitcsets.tcl |
| 55 | DDED tools/cvs2fossil/lib/c2f_plodmgr.tcl |
| 56 | DDED tools/cvs2fossil/lib/c2f_prev.tcl |
| 57 | DDED tools/cvs2fossil/lib/c2f_prevlink.tcl |
| 58 | DDED tools/cvs2fossil/lib/c2f_project.tcl |
| 59 | DDED tools/cvs2fossil/lib/c2f_psym.tcl |
| 60 | DDED tools/cvs2fossil/lib/c2f_ptrunk.tcl |
| 61 | DDED tools/cvs2fossil/lib/c2f_repository.tcl |
| 62 | DDED tools/cvs2fossil/lib/c2f_state.tcl |
| 63 | DDED tools/cvs2fossil/lib/cvs2fossil.tcl |
| 64 | DDED tools/cvs2fossil/lib/id.tcl |
| 65 | DDED tools/cvs2fossil/lib/log.tcl |
| 66 | DDED tools/cvs2fossil/lib/misc.tcl |
| 67 | DDED tools/cvs2fossil/lib/pkgIndex.tcl |
| 68 | DDED tools/cvs2fossil/lib/rcsparser.tcl |
| 69 | DDED tools/cvs2fossil/lib/trouble.tcl |
| 70 | ELETED tools/import-cvs.tcl |
| 71 | ELETED tools/lib/cvs.tcl |
| 72 | ELETED tools/lib/cvs_cmd.tcl |
| 73 | ELETED tools/lib/cvs_csets.tcl |
| 74 | ELETED tools/lib/cvs_files.tcl |
| 75 | ELETED tools/lib/cvs_timeline.tcl |
| 76 | ELETED tools/lib/fossil.tcl |
| 77 | ELETED tools/lib/fossil_cmd.tcl |
| 78 | ELETED tools/lib/import_map.tcl |
| 79 | ELETED tools/lib/import_statistics.tcl |
| 80 | ELETED tools/lib/importcvs.tcl |
| 81 | ELETED tools/lib/log.tcl |
| 82 | ELETED tools/lib/pkgIndex.tcl |
| 83 | ELETED tools/lib/rcsparser.tcl |
| 84 | ELETED tools/lib/trouble.tcl |
| 85 | DDED www/CollRev1.gif |
| 86 | DDED www/CollRev2.gif |
| 87 | DDED www/CollRev3.gif |
| 88 | DDED www/CollRev4.gif |
| --- src/diff.c | |
| +++ src/diff.c | |
| @@ -23,11 +23,11 @@ | |
| 23 | ** |
| 24 | ** This file contains code used to compute a "diff" between two |
| 25 | ** text files. |
| 26 | */ |
| 27 | #include "config.h" |
| 28 | #include "diff.h" |
| 29 | #include <assert.h> |
| 30 | |
| 31 | |
| 32 | #if 0 |
| 33 | #define DEBUG(X) X |
| 34 | |
| 35 | DDED tools/cvs2fossil/cvs2fossil |
| 36 | DDED tools/cvs2fossil/doc/LICENSE |
| 37 | DDED tools/cvs2fossil/doc/README |
| 38 | DDED tools/cvs2fossil/lib/c2f_cyclebreaker.tcl |
| 39 | DDED tools/cvs2fossil/lib/c2f_file.tcl |
| 40 | DDED tools/cvs2fossil/lib/c2f_flodmgr.tcl |
| 41 | DDED tools/cvs2fossil/lib/c2f_frev.tcl |
| 42 | DDED tools/cvs2fossil/lib/c2f_fsym.tcl |
| 43 | DDED tools/cvs2fossil/lib/c2f_ftrunk.tcl |
| 44 | DDED tools/cvs2fossil/lib/c2f_integrity.tcl |
| 45 | DDED tools/cvs2fossil/lib/c2f_option.tcl |
| 46 | DDED tools/cvs2fossil/lib/c2f_pass.tcl |
| 47 | DDED tools/cvs2fossil/lib/c2f_pbreakacycle.tcl |
| 48 | DDED tools/cvs2fossil/lib/c2f_pbreakrcycle.tcl |
| 49 | DDED tools/cvs2fossil/lib/c2f_pbreakscycle.tcl |
| 50 | DDED tools/cvs2fossil/lib/c2f_pcollar.tcl |
| 51 | DDED tools/cvs2fossil/lib/c2f_pcollrev.tcl |
| 52 | DDED tools/cvs2fossil/lib/c2f_pcollsym.tcl |
| 53 | DDED tools/cvs2fossil/lib/c2f_pfiltersym.tcl |
| 54 | DDED tools/cvs2fossil/lib/c2f_pinitcsets.tcl |
| 55 | DDED tools/cvs2fossil/lib/c2f_plodmgr.tcl |
| 56 | DDED tools/cvs2fossil/lib/c2f_prev.tcl |
| 57 | DDED tools/cvs2fossil/lib/c2f_prevlink.tcl |
| 58 | DDED tools/cvs2fossil/lib/c2f_project.tcl |
| 59 | DDED tools/cvs2fossil/lib/c2f_psym.tcl |
| 60 | DDED tools/cvs2fossil/lib/c2f_ptrunk.tcl |
| 61 | DDED tools/cvs2fossil/lib/c2f_repository.tcl |
| 62 | DDED tools/cvs2fossil/lib/c2f_state.tcl |
| 63 | DDED tools/cvs2fossil/lib/cvs2fossil.tcl |
| 64 | DDED tools/cvs2fossil/lib/id.tcl |
| 65 | DDED tools/cvs2fossil/lib/log.tcl |
| 66 | DDED tools/cvs2fossil/lib/misc.tcl |
| 67 | DDED tools/cvs2fossil/lib/pkgIndex.tcl |
| 68 | DDED tools/cvs2fossil/lib/rcsparser.tcl |
| 69 | DDED tools/cvs2fossil/lib/trouble.tcl |
| 70 | ELETED tools/import-cvs.tcl |
| 71 | ELETED tools/lib/cvs.tcl |
| 72 | ELETED tools/lib/cvs_cmd.tcl |
| 73 | ELETED tools/lib/cvs_csets.tcl |
| 74 | ELETED tools/lib/cvs_files.tcl |
| 75 | ELETED tools/lib/cvs_timeline.tcl |
| 76 | ELETED tools/lib/fossil.tcl |
| 77 | ELETED tools/lib/fossil_cmd.tcl |
| 78 | ELETED tools/lib/import_map.tcl |
| 79 | ELETED tools/lib/import_statistics.tcl |
| 80 | ELETED tools/lib/importcvs.tcl |
| 81 | ELETED tools/lib/log.tcl |
| 82 | ELETED tools/lib/pkgIndex.tcl |
| 83 | ELETED tools/lib/rcsparser.tcl |
| 84 | ELETED tools/lib/trouble.tcl |
| 85 | DDED www/CollRev1.gif |
| 86 | DDED www/CollRev2.gif |
| 87 | DDED www/CollRev3.gif |
| 88 | DDED www/CollRev4.gif |
+1
-1
| --- src/diff.c | ||
| +++ src/diff.c | ||
| @@ -23,11 +23,11 @@ | ||
| 23 | 23 | ** |
| 24 | 24 | ** This file contains code used to compute a "diff" between two |
| 25 | 25 | ** text files. |
| 26 | 26 | */ |
| 27 | 27 | #include "config.h" |
| 28 | -#include "diff2.h" | |
| 28 | +#include "diff.h" | |
| 29 | 29 | #include <assert.h> |
| 30 | 30 | |
| 31 | 31 | |
| 32 | 32 | #if 0 |
| 33 | 33 | #define DEBUG(X) X |
| 34 | 34 | |
| 35 | 35 | ADDED tools/cvs2fossil/cvs2fossil |
| 36 | 36 | ADDED tools/cvs2fossil/doc/LICENSE |
| 37 | 37 | ADDED tools/cvs2fossil/doc/README |
| 38 | 38 | ADDED tools/cvs2fossil/lib/c2f_cyclebreaker.tcl |
| 39 | 39 | ADDED tools/cvs2fossil/lib/c2f_file.tcl |
| 40 | 40 | ADDED tools/cvs2fossil/lib/c2f_flodmgr.tcl |
| 41 | 41 | ADDED tools/cvs2fossil/lib/c2f_frev.tcl |
| 42 | 42 | ADDED tools/cvs2fossil/lib/c2f_fsym.tcl |
| 43 | 43 | ADDED tools/cvs2fossil/lib/c2f_ftrunk.tcl |
| 44 | 44 | ADDED tools/cvs2fossil/lib/c2f_integrity.tcl |
| 45 | 45 | ADDED tools/cvs2fossil/lib/c2f_option.tcl |
| 46 | 46 | ADDED tools/cvs2fossil/lib/c2f_pass.tcl |
| 47 | 47 | ADDED tools/cvs2fossil/lib/c2f_pbreakacycle.tcl |
| 48 | 48 | ADDED tools/cvs2fossil/lib/c2f_pbreakrcycle.tcl |
| 49 | 49 | ADDED tools/cvs2fossil/lib/c2f_pbreakscycle.tcl |
| 50 | 50 | ADDED tools/cvs2fossil/lib/c2f_pcollar.tcl |
| 51 | 51 | ADDED tools/cvs2fossil/lib/c2f_pcollrev.tcl |
| 52 | 52 | ADDED tools/cvs2fossil/lib/c2f_pcollsym.tcl |
| 53 | 53 | ADDED tools/cvs2fossil/lib/c2f_pfiltersym.tcl |
| 54 | 54 | ADDED tools/cvs2fossil/lib/c2f_pinitcsets.tcl |
| 55 | 55 | ADDED tools/cvs2fossil/lib/c2f_plodmgr.tcl |
| 56 | 56 | ADDED tools/cvs2fossil/lib/c2f_prev.tcl |
| 57 | 57 | ADDED tools/cvs2fossil/lib/c2f_prevlink.tcl |
| 58 | 58 | ADDED tools/cvs2fossil/lib/c2f_project.tcl |
| 59 | 59 | ADDED tools/cvs2fossil/lib/c2f_psym.tcl |
| 60 | 60 | ADDED tools/cvs2fossil/lib/c2f_ptrunk.tcl |
| 61 | 61 | ADDED tools/cvs2fossil/lib/c2f_repository.tcl |
| 62 | 62 | ADDED tools/cvs2fossil/lib/c2f_state.tcl |
| 63 | 63 | ADDED tools/cvs2fossil/lib/cvs2fossil.tcl |
| 64 | 64 | ADDED tools/cvs2fossil/lib/id.tcl |
| 65 | 65 | ADDED tools/cvs2fossil/lib/log.tcl |
| 66 | 66 | ADDED tools/cvs2fossil/lib/misc.tcl |
| 67 | 67 | ADDED tools/cvs2fossil/lib/pkgIndex.tcl |
| 68 | 68 | ADDED tools/cvs2fossil/lib/rcsparser.tcl |
| 69 | 69 | ADDED tools/cvs2fossil/lib/trouble.tcl |
| 70 | 70 | DELETED tools/import-cvs.tcl |
| 71 | 71 | DELETED tools/lib/cvs.tcl |
| 72 | 72 | DELETED tools/lib/cvs_cmd.tcl |
| 73 | 73 | DELETED tools/lib/cvs_csets.tcl |
| 74 | 74 | DELETED tools/lib/cvs_files.tcl |
| 75 | 75 | DELETED tools/lib/cvs_timeline.tcl |
| 76 | 76 | DELETED tools/lib/fossil.tcl |
| 77 | 77 | DELETED tools/lib/fossil_cmd.tcl |
| 78 | 78 | DELETED tools/lib/import_map.tcl |
| 79 | 79 | DELETED tools/lib/import_statistics.tcl |
| 80 | 80 | DELETED tools/lib/importcvs.tcl |
| 81 | 81 | DELETED tools/lib/log.tcl |
| 82 | 82 | DELETED tools/lib/pkgIndex.tcl |
| 83 | 83 | DELETED tools/lib/rcsparser.tcl |
| 84 | 84 | DELETED tools/lib/trouble.tcl |
| 85 | 85 | ADDED www/CollRev1.gif |
| 86 | 86 | ADDED www/CollRev2.gif |
| 87 | 87 | ADDED www/CollRev3.gif |
| 88 | 88 | ADDED www/CollRev4.gif |
| --- src/diff.c | |
| +++ src/diff.c | |
| @@ -23,11 +23,11 @@ | |
| 23 | ** |
| 24 | ** This file contains code used to compute a "diff" between two |
| 25 | ** text files. |
| 26 | */ |
| 27 | #include "config.h" |
| 28 | #include "diff2.h" |
| 29 | #include <assert.h> |
| 30 | |
| 31 | |
| 32 | #if 0 |
| 33 | #define DEBUG(X) X |
| 34 | |
| 35 | DDED tools/cvs2fossil/cvs2fossil |
| 36 | DDED tools/cvs2fossil/doc/LICENSE |
| 37 | DDED tools/cvs2fossil/doc/README |
| 38 | DDED tools/cvs2fossil/lib/c2f_cyclebreaker.tcl |
| 39 | DDED tools/cvs2fossil/lib/c2f_file.tcl |
| 40 | DDED tools/cvs2fossil/lib/c2f_flodmgr.tcl |
| 41 | DDED tools/cvs2fossil/lib/c2f_frev.tcl |
| 42 | DDED tools/cvs2fossil/lib/c2f_fsym.tcl |
| 43 | DDED tools/cvs2fossil/lib/c2f_ftrunk.tcl |
| 44 | DDED tools/cvs2fossil/lib/c2f_integrity.tcl |
| 45 | DDED tools/cvs2fossil/lib/c2f_option.tcl |
| 46 | DDED tools/cvs2fossil/lib/c2f_pass.tcl |
| 47 | DDED tools/cvs2fossil/lib/c2f_pbreakacycle.tcl |
| 48 | DDED tools/cvs2fossil/lib/c2f_pbreakrcycle.tcl |
| 49 | DDED tools/cvs2fossil/lib/c2f_pbreakscycle.tcl |
| 50 | DDED tools/cvs2fossil/lib/c2f_pcollar.tcl |
| 51 | DDED tools/cvs2fossil/lib/c2f_pcollrev.tcl |
| 52 | DDED tools/cvs2fossil/lib/c2f_pcollsym.tcl |
| 53 | DDED tools/cvs2fossil/lib/c2f_pfiltersym.tcl |
| 54 | DDED tools/cvs2fossil/lib/c2f_pinitcsets.tcl |
| 55 | DDED tools/cvs2fossil/lib/c2f_plodmgr.tcl |
| 56 | DDED tools/cvs2fossil/lib/c2f_prev.tcl |
| 57 | DDED tools/cvs2fossil/lib/c2f_prevlink.tcl |
| 58 | DDED tools/cvs2fossil/lib/c2f_project.tcl |
| 59 | DDED tools/cvs2fossil/lib/c2f_psym.tcl |
| 60 | DDED tools/cvs2fossil/lib/c2f_ptrunk.tcl |
| 61 | DDED tools/cvs2fossil/lib/c2f_repository.tcl |
| 62 | DDED tools/cvs2fossil/lib/c2f_state.tcl |
| 63 | DDED tools/cvs2fossil/lib/cvs2fossil.tcl |
| 64 | DDED tools/cvs2fossil/lib/id.tcl |
| 65 | DDED tools/cvs2fossil/lib/log.tcl |
| 66 | DDED tools/cvs2fossil/lib/misc.tcl |
| 67 | DDED tools/cvs2fossil/lib/pkgIndex.tcl |
| 68 | DDED tools/cvs2fossil/lib/rcsparser.tcl |
| 69 | DDED tools/cvs2fossil/lib/trouble.tcl |
| 70 | ELETED tools/import-cvs.tcl |
| 71 | ELETED tools/lib/cvs.tcl |
| 72 | ELETED tools/lib/cvs_cmd.tcl |
| 73 | ELETED tools/lib/cvs_csets.tcl |
| 74 | ELETED tools/lib/cvs_files.tcl |
| 75 | ELETED tools/lib/cvs_timeline.tcl |
| 76 | ELETED tools/lib/fossil.tcl |
| 77 | ELETED tools/lib/fossil_cmd.tcl |
| 78 | ELETED tools/lib/import_map.tcl |
| 79 | ELETED tools/lib/import_statistics.tcl |
| 80 | ELETED tools/lib/importcvs.tcl |
| 81 | ELETED tools/lib/log.tcl |
| 82 | ELETED tools/lib/pkgIndex.tcl |
| 83 | ELETED tools/lib/rcsparser.tcl |
| 84 | ELETED tools/lib/trouble.tcl |
| 85 | DDED www/CollRev1.gif |
| 86 | DDED www/CollRev2.gif |
| 87 | DDED www/CollRev3.gif |
| 88 | DDED www/CollRev4.gif |
| --- src/diff.c | |
| +++ src/diff.c | |
| @@ -23,11 +23,11 @@ | |
| 23 | ** |
| 24 | ** This file contains code used to compute a "diff" between two |
| 25 | ** text files. |
| 26 | */ |
| 27 | #include "config.h" |
| 28 | #include "diff.h" |
| 29 | #include <assert.h> |
| 30 | |
| 31 | |
| 32 | #if 0 |
| 33 | #define DEBUG(X) X |
| 34 | |
| 35 | DDED tools/cvs2fossil/cvs2fossil |
| 36 | DDED tools/cvs2fossil/doc/LICENSE |
| 37 | DDED tools/cvs2fossil/doc/README |
| 38 | DDED tools/cvs2fossil/lib/c2f_cyclebreaker.tcl |
| 39 | DDED tools/cvs2fossil/lib/c2f_file.tcl |
| 40 | DDED tools/cvs2fossil/lib/c2f_flodmgr.tcl |
| 41 | DDED tools/cvs2fossil/lib/c2f_frev.tcl |
| 42 | DDED tools/cvs2fossil/lib/c2f_fsym.tcl |
| 43 | DDED tools/cvs2fossil/lib/c2f_ftrunk.tcl |
| 44 | DDED tools/cvs2fossil/lib/c2f_integrity.tcl |
| 45 | DDED tools/cvs2fossil/lib/c2f_option.tcl |
| 46 | DDED tools/cvs2fossil/lib/c2f_pass.tcl |
| 47 | DDED tools/cvs2fossil/lib/c2f_pbreakacycle.tcl |
| 48 | DDED tools/cvs2fossil/lib/c2f_pbreakrcycle.tcl |
| 49 | DDED tools/cvs2fossil/lib/c2f_pbreakscycle.tcl |
| 50 | DDED tools/cvs2fossil/lib/c2f_pcollar.tcl |
| 51 | DDED tools/cvs2fossil/lib/c2f_pcollrev.tcl |
| 52 | DDED tools/cvs2fossil/lib/c2f_pcollsym.tcl |
| 53 | DDED tools/cvs2fossil/lib/c2f_pfiltersym.tcl |
| 54 | DDED tools/cvs2fossil/lib/c2f_pinitcsets.tcl |
| 55 | DDED tools/cvs2fossil/lib/c2f_plodmgr.tcl |
| 56 | DDED tools/cvs2fossil/lib/c2f_prev.tcl |
| 57 | DDED tools/cvs2fossil/lib/c2f_prevlink.tcl |
| 58 | DDED tools/cvs2fossil/lib/c2f_project.tcl |
| 59 | DDED tools/cvs2fossil/lib/c2f_psym.tcl |
| 60 | DDED tools/cvs2fossil/lib/c2f_ptrunk.tcl |
| 61 | DDED tools/cvs2fossil/lib/c2f_repository.tcl |
| 62 | DDED tools/cvs2fossil/lib/c2f_state.tcl |
| 63 | DDED tools/cvs2fossil/lib/cvs2fossil.tcl |
| 64 | DDED tools/cvs2fossil/lib/id.tcl |
| 65 | DDED tools/cvs2fossil/lib/log.tcl |
| 66 | DDED tools/cvs2fossil/lib/misc.tcl |
| 67 | DDED tools/cvs2fossil/lib/pkgIndex.tcl |
| 68 | DDED tools/cvs2fossil/lib/rcsparser.tcl |
| 69 | DDED tools/cvs2fossil/lib/trouble.tcl |
| 70 | ELETED tools/import-cvs.tcl |
| 71 | ELETED tools/lib/cvs.tcl |
| 72 | ELETED tools/lib/cvs_cmd.tcl |
| 73 | ELETED tools/lib/cvs_csets.tcl |
| 74 | ELETED tools/lib/cvs_files.tcl |
| 75 | ELETED tools/lib/cvs_timeline.tcl |
| 76 | ELETED tools/lib/fossil.tcl |
| 77 | ELETED tools/lib/fossil_cmd.tcl |
| 78 | ELETED tools/lib/import_map.tcl |
| 79 | ELETED tools/lib/import_statistics.tcl |
| 80 | ELETED tools/lib/importcvs.tcl |
| 81 | ELETED tools/lib/log.tcl |
| 82 | ELETED tools/lib/pkgIndex.tcl |
| 83 | ELETED tools/lib/rcsparser.tcl |
| 84 | ELETED tools/lib/trouble.tcl |
| 85 | DDED www/CollRev1.gif |
| 86 | DDED www/CollRev2.gif |
| 87 | DDED www/CollRev3.gif |
| 88 | DDED www/CollRev4.gif |
| --- a/tools/cvs2fossil/cvs2fossil | ||
| +++ b/tools/cvs2fossil/cvs2fossil | ||
| @@ -0,0 +1,32 @@ | ||
| 1 | +#!/bin/sh | |
| 2 | +## -*- tcl -*- \ | |
| 3 | +exec tclsh "$0" ${1+"$@"} | |
| 4 | + | |
| 5 | +# # ## ### ##### ######## ############# ##################### | |
| 6 | +## Copyright (c) 2007 Andreas Kupries. | |
| 7 | +# | |
| 8 | +# This software is licensed as described in the file LICENSE, which | |
| 9 | +# you should have received as part of this distribution. | |
| 10 | +# | |
| 11 | +# This software consists of voluntary contributions made by many | |
| 12 | +# individuals. For exact contribution history, see the revision | |
| 13 | +# history and logs, available at http://fossil-scm.hwaci.com/fossil | |
| 14 | +# # ## ### ##### ######## ############# ##################### | |
| 15 | + | |
| 16 | +## Command line application wrapped around the import packages. | |
| 17 | + | |
| 18 | +# # ## ### ##### ######## ############# ##################### | |
| 19 | +## Requirements, extended package management for local packages. | |
| 20 | + | |
| 21 | +lappend auto_path [file join [file dirname [info script]] lib] | |
| 22 | + | |
| 23 | +package require Tcl 8.4 ; # Required runtime. | |
| 24 | +package require vc::fossil::import::cvs ; # Main functionality. | |
| 25 | + | |
| 26 | +# # ## ### ##### ######## ############# ##################### | |
| 27 | +## Execution | |
| 28 | + | |
| 29 | +vc::fossil::import::cvs run $argv | |
| 30 | +exit 0 | |
| 31 | + | |
| 32 | +# # ## ### ##### ######## ############# ##################### |
| --- a/tools/cvs2fossil/cvs2fossil | |
| +++ b/tools/cvs2fossil/cvs2fossil | |
| @@ -0,0 +1,32 @@ | |
| --- a/tools/cvs2fossil/cvs2fossil | |
| +++ b/tools/cvs2fossil/cvs2fossil | |
| @@ -0,0 +1,32 @@ | |
| 1 | #!/bin/sh |
| 2 | ## -*- tcl -*- \ |
| 3 | exec tclsh "$0" ${1+"$@"} |
| 4 | |
| 5 | # # ## ### ##### ######## ############# ##################### |
| 6 | ## Copyright (c) 2007 Andreas Kupries. |
| 7 | # |
| 8 | # This software is licensed as described in the file LICENSE, which |
| 9 | # you should have received as part of this distribution. |
| 10 | # |
| 11 | # This software consists of voluntary contributions made by many |
| 12 | # individuals. For exact contribution history, see the revision |
| 13 | # history and logs, available at http://fossil-scm.hwaci.com/fossil |
| 14 | # # ## ### ##### ######## ############# ##################### |
| 15 | |
| 16 | ## Command line application wrapped around the import packages. |
| 17 | |
| 18 | # # ## ### ##### ######## ############# ##################### |
| 19 | ## Requirements, extended package management for local packages. |
| 20 | |
| 21 | lappend auto_path [file join [file dirname [info script]] lib] |
| 22 | |
| 23 | package require Tcl 8.4 ; # Required runtime. |
| 24 | package require vc::fossil::import::cvs ; # Main functionality. |
| 25 | |
| 26 | # # ## ### ##### ######## ############# ##################### |
| 27 | ## Execution |
| 28 | |
| 29 | vc::fossil::import::cvs run $argv |
| 30 | exit 0 |
| 31 | |
| 32 | # # ## ### ##### ######## ############# ##################### |
| --- a/tools/cvs2fossil/doc/LICENSE | ||
| +++ b/tools/cvs2fossil/doc/LICENSE | ||
| @@ -0,0 +1,19 @@ | ||
| 1 | +This code is under the same license as fossil itself. | |
| 2 | + | |
| 3 | +- - -- --- ----- --------- | |
| 4 | + | |
| 5 | +This program is free software; you can redistribute it and/or | |
| 6 | +modify it under the terms of the GNU General Public | |
| 7 | +License version 2 as published by the Free Software Foundation. | |
| 8 | + | |
| 9 | +This program is distributed in the hope that it will be useful, | |
| 10 | +but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 11 | +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 12 | +General Public License for more details. | |
| 13 | + | |
| 14 | +You should have received a copy of the GNU General Public | |
| 15 | +License along with this library; if not, write to the | |
| 16 | +Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
| 17 | +Boston, MA 02111-1307, USA. | |
| 18 | + | |
| 19 | +- - -- --- ----- --------- |
| --- a/tools/cvs2fossil/doc/LICENSE | |
| +++ b/tools/cvs2fossil/doc/LICENSE | |
| @@ -0,0 +1,19 @@ | |
| --- a/tools/cvs2fossil/doc/LICENSE | |
| +++ b/tools/cvs2fossil/doc/LICENSE | |
| @@ -0,0 +1,19 @@ | |
| 1 | This code is under the same license as fossil itself. |
| 2 | |
| 3 | - - -- --- ----- --------- |
| 4 | |
| 5 | This program is free software; you can redistribute it and/or |
| 6 | modify it under the terms of the GNU General Public |
| 7 | License version 2 as published by the Free Software Foundation. |
| 8 | |
| 9 | This program is distributed in the hope that it will be useful, |
| 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 12 | General Public License for more details. |
| 13 | |
| 14 | You should have received a copy of the GNU General Public |
| 15 | License along with this library; if not, write to the |
| 16 | Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
| 17 | Boston, MA 02111-1307, USA. |
| 18 | |
| 19 | - - -- --- ----- --------- |
| --- a/tools/cvs2fossil/doc/README | ||
| +++ b/tools/cvs2fossil/doc/README | ||
| @@ -0,0 +1,7 @@ | ||
| 1 | + | |
| 2 | +[Acknowledge the work done by the creators of and submitters to the | |
| 3 | +cvs2svn project/application. Needed their documentation, notes, and | |
| 4 | +code as guide for this implementation.] | |
| 5 | + | |
| 6 | +[Determine if their license allows me to copy their notes here for | |
| 7 | +reference.] |
| --- a/tools/cvs2fossil/doc/README | |
| +++ b/tools/cvs2fossil/doc/README | |
| @@ -0,0 +1,7 @@ | |
| --- a/tools/cvs2fossil/doc/README | |
| +++ b/tools/cvs2fossil/doc/README | |
| @@ -0,0 +1,7 @@ | |
| 1 | |
| 2 | [Acknowledge the work done by the creators of and submitters to the |
| 3 | cvs2svn project/application. Needed their documentation, notes, and |
| 4 | code as guide for this implementation.] |
| 5 | |
| 6 | [Determine if their license allows me to copy their notes here for |
| 7 | reference.] |
| --- a/tools/cvs2fossil/lib/c2f_cyclebreaker.tcl | ||
| +++ b/tools/cvs2fossil/lib/c2f_cyclebreaker.tcl | ||
| @@ -0,0 +1,180 @@ | ||
| 1 | + } | |
| 2 | + | |
| 3 | + typemethod breakcmd {cmd} { | |
| 4 | + ::variable mybreakcmd $cmd | |
| 5 | + return | |
| 6 | + } | |
| 7 | + | |
| 8 | + # # ## ### ##### ######## ############# | |
| 9 | + | |
| 10 | + typemethod dotsto {path} { | |
| 11 | + ::variable mydotdestination $path | |
| 12 | + return | |
| 13 | + } | |
| 14 | + | |
| 15 | + typemethod watch {id} { | |
| 16 | + ::variable mywatchids | |
| 17 | + lappend mywatchids $id | |
| 18 | + } | |
| 19 | + | |
| 20 | + typemethod dot {label changesets} { | |
| 21 | + ::variable mydotprefix $label | |
| 22 | + ::variable mydotid 0 | |
| 23 | + | |
| 24 | + set dg [Setup $changesets 0] | |
| 25 | + Mark $dg | |
| 26 | + $dg destroy | |
| 27 | + return | |
| 28 | + } | |
| 29 | + | |
| 30 | + typemethod mark {graph suffix {subgraph {}}} { | |
| 31 | + Mark $graph $suffix $subgraph | |
| 32 | + return | |
| 33 | + } | |
| 34 | + | |
| 35 | + # # ## ### ##### ######## ############# | |
| 36 | + | |
| 37 | + typemethod run {label changesetcmd} { | |
| 38 | + ::variable myat 0 | |
| 39 | + ::variable mydotprefix $label | |
| 40 | + ::variable mydotid 0 | |
| 41 | + | |
| 42 | + # We create a graph of the revision changesets, using the file | |
| 43 | + # level dependencies to construct a first approximation of the | |
| 44 | + # dependencies at the project level. Then we look for cycles | |
| 45 | + # in that graph and break them. | |
| 46 | + | |
| 47 | + # 1. Create nodes for all relevant changesets and a mapping | |
| 48 | + # from the revisions to tlogelevant changesets and a mappinggraph topologically. We mark off | |
| 49 | + # the nodes which have no predecs. If | |
| 50 | + # we find no nodes without predecessors we have a cycle, | |
| 51 | + # and work on breaking it. | |
| 52 | + | |
| 53 | + log write 3 cyclebreaker {Traverse changesets} | |
| 54 | + | |
| 55 | + InitializeCanNow sorting the chantivated. | |
| 56 | + | |
| 57 | + ::variable mydowhile {1} } | |
| 58 | + | |
| 59 | + d} { | |
| 60 | + ::variable mybreakcmybreakcmd $cmd | |
| 61 | + return | |
| 62 | + } | |
| 63 | + | |
| 64 | + # # ## ### ##### ######## ############# | |
| 65 | + | |
| 66 | + typemethod dotsto {path} { | |
| 67 | + ::variable mydotdestination run {# ######## {save We create a graph of at | |
| 68 | + # level dependencies to construct a first approximation of the | |
| 69 | + # dependencies at the project level. Then we look for cycles | |
| 70 | + # in that graph and break them. | |
| 71 | + | |
| 72 | + # 1. Create nodes for all relevant changesets and a mappi } | |
| 73 | + | |
| 74 | + # savecmdSaveAndRemove $dg $n | |
| 75 | + }clebreaker { BreakCycle $dg [FindCycle $dg]ivated. | |
| 76 | + | |
| 77 | + ::variable mydowhile {dowhile {1} } | |
| 78 | + | |
| 79 | + d} { | |
| 80 | + ::variable mybreakcmybreakcmd $cmd | |
| 81 | + return | |
| 82 | + }dowhile {1} } | |
| 83 | + | |
| 84 | + d} { | |
| 85 | + :# ############ typemethod dotsto {path} { | |
| 86 | + ::v ::varian | |
| 87 | + } | |
| 88 | + | |
| 89 | + # # ### } | |
| 90 | + | |
| 91 | + tymd $cmd | |
| 92 | + return | |
| 93 | + } | |
| 94 | + | |
| 95 | + # # ## ### ##### ######## ############# | |
| 96 | + | |
| 97 | + typemethod dotsto {path} { | |
| 98 | + ::variable 0# # ## ### ##### ######## {savedowhile {1} } | |
| 99 | + | |
| 100 | + d} { | |
| 101 | + e mydotid 0 | |
| 102 | + | |
| 103 | + # We create aid 0 | |
| 104 | + | |
| 105 | + # We create a graph of the revision changesets, using the file | |
| 106 | + # level dependencies to construct a first approximation of the | |
| 107 | + # dependencies at the p 0 | |
| 108 | + ::variable mydotprefix $label | |
| 109 | + ::variable mydotid 0 | |
| 110 | + | |
| 111 | + # We create a graph of the revision changesets, using the file | |
| 112 | + # level dependencies to construct a first approximation of the | |
| 113 | + # dependencies at the project level. Then we look for cycles | |
| 114 | + # in that graph and break them. | |
| 115 | + | |
| 116 | + # 1. Create nodes for all relevant changesets and a mapping | |
| 117 | + # from the revisions to their changesets/nodes. | |
| 118 | + | |
| 119 | + set changesets [uplevel #0 $changesetcmd] | |
| 120 | + set dg [Setup $changesets] | |
| 121 | + | |
| 122 | + # 3. Lastly we iterate the graph topologically. We mark off | |
| 123 | + # the nodes which have no predecs. If | |
| 124 | + # we find no nodes without predecessors we have a cycle, | |
| 125 | + # and work on breaking it. | |
| 126 | + | |
| 127 | + ll relevant changesets and a mappi } | |
| 128 | + | |
| 129 | + # savecmdSaveAndRemove $dg $n | |
| 130 | + }clebreaker { BreakCycle $dg [FindCycle $dg]ivated. | |
| 131 | + | |
| 132 | + ::variable mydowhile {1} } | |
| 133 | + | |
| 134 | + d} { | |
| 135 | + ::variable mybreakcmybreakcmd $ceakcmd {cmd} { | |
| 136 | + ::variable mybreakcmd $cmd | |
| 137 | + return | |
| 138 | + } | |
| 139 | + | |
| 140 | + # # ## ### } | |
| 141 | + | |
| 142 | + typemethod breakcmd {cmd} { | |
| 143 | + ::variable mybreakurn | |
| 144 | + } | |
| 145 | + | |
| 146 | + } | |
| 147 | + | |
| 148 | + typemethobottom [lrange $n | |
| 149 | + } | |
| 150 | + | |
| 151 | + # # ## ### ##### ######## ############# | |
| 152 | + | |
| 153 | + typemethod dotsto {path} { | |
| 154 | + ::variable mydotdestination $path | |
| 155 | + return | |
| 156 | + } | |
| 157 | + | |
| 158 | + typemethod watch {id} { | |
| 159 | + ::variable mywatchids | |
| 160 | + lappend mywatchids $id | |
| 161 | + } | |
| 162 | + | |
| 163 | + typemethod dot {label changesets} { | |
| 164 | + ::variable mydotprefix $label | |
| 165 | + ::variable mydotid 0 | |
| 166 | + | |
| 167 | + set dg [Setup $changesets 0] | |
| 168 | + Mark $dg | |
| 169 | + $dg destroy | |
| 170 | + return | |
| 171 | + } | |
| 172 | + | |
| 173 | + typemethod mark {graph suffix {subgraph {}}} { | |
| 174 | + Mark $graph $suffix $subgraph | |
| 175 | + } | |
| 176 | + | |
| 177 | + typemethod breakcmd atsave end $at $n] | |
| 178 | + } | |
| 179 | + | |
| 180 | + incr # ## ### ##### ######variable atbottomsavemethod break |
| --- a/tools/cvs2fossil/lib/c2f_cyclebreaker.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_cyclebreaker.tcl | |
| @@ -0,0 +1,180 @@ | |
| --- a/tools/cvs2fossil/lib/c2f_cyclebreaker.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_cyclebreaker.tcl | |
| @@ -0,0 +1,180 @@ | |
| 1 | } |
| 2 | |
| 3 | typemethod breakcmd {cmd} { |
| 4 | ::variable mybreakcmd $cmd |
| 5 | return |
| 6 | } |
| 7 | |
| 8 | # # ## ### ##### ######## ############# |
| 9 | |
| 10 | typemethod dotsto {path} { |
| 11 | ::variable mydotdestination $path |
| 12 | return |
| 13 | } |
| 14 | |
| 15 | typemethod watch {id} { |
| 16 | ::variable mywatchids |
| 17 | lappend mywatchids $id |
| 18 | } |
| 19 | |
| 20 | typemethod dot {label changesets} { |
| 21 | ::variable mydotprefix $label |
| 22 | ::variable mydotid 0 |
| 23 | |
| 24 | set dg [Setup $changesets 0] |
| 25 | Mark $dg |
| 26 | $dg destroy |
| 27 | return |
| 28 | } |
| 29 | |
| 30 | typemethod mark {graph suffix {subgraph {}}} { |
| 31 | Mark $graph $suffix $subgraph |
| 32 | return |
| 33 | } |
| 34 | |
| 35 | # # ## ### ##### ######## ############# |
| 36 | |
| 37 | typemethod run {label changesetcmd} { |
| 38 | ::variable myat 0 |
| 39 | ::variable mydotprefix $label |
| 40 | ::variable mydotid 0 |
| 41 | |
| 42 | # We create a graph of the revision changesets, using the file |
| 43 | # level dependencies to construct a first approximation of the |
| 44 | # dependencies at the project level. Then we look for cycles |
| 45 | # in that graph and break them. |
| 46 | |
| 47 | # 1. Create nodes for all relevant changesets and a mapping |
| 48 | # from the revisions to tlogelevant changesets and a mappinggraph topologically. We mark off |
| 49 | # the nodes which have no predecs. If |
| 50 | # we find no nodes without predecessors we have a cycle, |
| 51 | # and work on breaking it. |
| 52 | |
| 53 | log write 3 cyclebreaker {Traverse changesets} |
| 54 | |
| 55 | InitializeCanNow sorting the chantivated. |
| 56 | |
| 57 | ::variable mydowhile {1} } |
| 58 | |
| 59 | d} { |
| 60 | ::variable mybreakcmybreakcmd $cmd |
| 61 | return |
| 62 | } |
| 63 | |
| 64 | # # ## ### ##### ######## ############# |
| 65 | |
| 66 | typemethod dotsto {path} { |
| 67 | ::variable mydotdestination run {# ######## {save We create a graph of at |
| 68 | # level dependencies to construct a first approximation of the |
| 69 | # dependencies at the project level. Then we look for cycles |
| 70 | # in that graph and break them. |
| 71 | |
| 72 | # 1. Create nodes for all relevant changesets and a mappi } |
| 73 | |
| 74 | # savecmdSaveAndRemove $dg $n |
| 75 | }clebreaker { BreakCycle $dg [FindCycle $dg]ivated. |
| 76 | |
| 77 | ::variable mydowhile {dowhile {1} } |
| 78 | |
| 79 | d} { |
| 80 | ::variable mybreakcmybreakcmd $cmd |
| 81 | return |
| 82 | }dowhile {1} } |
| 83 | |
| 84 | d} { |
| 85 | :# ############ typemethod dotsto {path} { |
| 86 | ::v ::varian |
| 87 | } |
| 88 | |
| 89 | # # ### } |
| 90 | |
| 91 | tymd $cmd |
| 92 | return |
| 93 | } |
| 94 | |
| 95 | # # ## ### ##### ######## ############# |
| 96 | |
| 97 | typemethod dotsto {path} { |
| 98 | ::variable 0# # ## ### ##### ######## {savedowhile {1} } |
| 99 | |
| 100 | d} { |
| 101 | e mydotid 0 |
| 102 | |
| 103 | # We create aid 0 |
| 104 | |
| 105 | # We create a graph of the revision changesets, using the file |
| 106 | # level dependencies to construct a first approximation of the |
| 107 | # dependencies at the p 0 |
| 108 | ::variable mydotprefix $label |
| 109 | ::variable mydotid 0 |
| 110 | |
| 111 | # We create a graph of the revision changesets, using the file |
| 112 | # level dependencies to construct a first approximation of the |
| 113 | # dependencies at the project level. Then we look for cycles |
| 114 | # in that graph and break them. |
| 115 | |
| 116 | # 1. Create nodes for all relevant changesets and a mapping |
| 117 | # from the revisions to their changesets/nodes. |
| 118 | |
| 119 | set changesets [uplevel #0 $changesetcmd] |
| 120 | set dg [Setup $changesets] |
| 121 | |
| 122 | # 3. Lastly we iterate the graph topologically. We mark off |
| 123 | # the nodes which have no predecs. If |
| 124 | # we find no nodes without predecessors we have a cycle, |
| 125 | # and work on breaking it. |
| 126 | |
| 127 | ll relevant changesets and a mappi } |
| 128 | |
| 129 | # savecmdSaveAndRemove $dg $n |
| 130 | }clebreaker { BreakCycle $dg [FindCycle $dg]ivated. |
| 131 | |
| 132 | ::variable mydowhile {1} } |
| 133 | |
| 134 | d} { |
| 135 | ::variable mybreakcmybreakcmd $ceakcmd {cmd} { |
| 136 | ::variable mybreakcmd $cmd |
| 137 | return |
| 138 | } |
| 139 | |
| 140 | # # ## ### } |
| 141 | |
| 142 | typemethod breakcmd {cmd} { |
| 143 | ::variable mybreakurn |
| 144 | } |
| 145 | |
| 146 | } |
| 147 | |
| 148 | typemethobottom [lrange $n |
| 149 | } |
| 150 | |
| 151 | # # ## ### ##### ######## ############# |
| 152 | |
| 153 | typemethod dotsto {path} { |
| 154 | ::variable mydotdestination $path |
| 155 | return |
| 156 | } |
| 157 | |
| 158 | typemethod watch {id} { |
| 159 | ::variable mywatchids |
| 160 | lappend mywatchids $id |
| 161 | } |
| 162 | |
| 163 | typemethod dot {label changesets} { |
| 164 | ::variable mydotprefix $label |
| 165 | ::variable mydotid 0 |
| 166 | |
| 167 | set dg [Setup $changesets 0] |
| 168 | Mark $dg |
| 169 | $dg destroy |
| 170 | return |
| 171 | } |
| 172 | |
| 173 | typemethod mark {graph suffix {subgraph {}}} { |
| 174 | Mark $graph $suffix $subgraph |
| 175 | } |
| 176 | |
| 177 | typemethod breakcmd atsave end $at $n] |
| 178 | } |
| 179 | |
| 180 | incr # ## ### ##### ######variable atbottomsavemethod break |
| --- a/tools/cvs2fossil/lib/c2f_file.tcl | ||
| +++ b/tools/cvs2fossil/lib/c2f_file.tcl | ||
| @@ -0,0 +1,22 @@ | ||
| 1 | +seek $chan $offset start | |
| 2 | + | |
| 3 | + if {!tools::troubleState | |
| 4 | + } | |
| 5 | +} | |
| 6 | + | |
| 7 | +seek $chan $!branch | |
| 8 | + $first cutfrk $chan $offset start | |
| 9 | + | |
| 10 | + i!tools::troubleStathan $offset start | |
| 11 | + | |
| 12 | + if ools: }seek $chan $offset start | |
| 13 | + | |
| 14 | + if {!tools::troubleState | |
| 15 | + } | |
| 16 | +} | |
| 17 | + | |
| 18 | +seek $chan $!" trouble internal "Expected a number" | |
| 19 | + f {$myroot " f {$vendor " f {ne $ntdbchild} { | |
| 20 | + trouble internal "ntdb - trunk linkage broken" | |
| 21 | + trouble internal "" } | |
| 22 | + if { trouble internal "spawned branches" |
| --- a/tools/cvs2fossil/lib/c2f_file.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_file.tcl | |
| @@ -0,0 +1,22 @@ | |
| --- a/tools/cvs2fossil/lib/c2f_file.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_file.tcl | |
| @@ -0,0 +1,22 @@ | |
| 1 | seek $chan $offset start |
| 2 | |
| 3 | if {!tools::troubleState |
| 4 | } |
| 5 | } |
| 6 | |
| 7 | seek $chan $!branch |
| 8 | $first cutfrk $chan $offset start |
| 9 | |
| 10 | i!tools::troubleStathan $offset start |
| 11 | |
| 12 | if ools: }seek $chan $offset start |
| 13 | |
| 14 | if {!tools::troubleState |
| 15 | } |
| 16 | } |
| 17 | |
| 18 | seek $chan $!" trouble internal "Expected a number" |
| 19 | f {$myroot " f {$vendor " f {ne $ntdbchild} { |
| 20 | trouble internal "ntdb - trunk linkage broken" |
| 21 | trouble internal "" } |
| 22 | if { trouble internal "spawned branches" |
| --- a/tools/cvs2fossil/lib/c2f_flodmgr.tcl | ||
| +++ b/tools/cvs2fossil/lib/c2f_flodmgr.tcl | ||
| @@ -0,0 +1,57 @@ | ||
| 1 | +## -*- tcl -*- | |
| 2 | +# # ## ### ##### ######## ############# ##################### | |
| 3 | +## Copyright (c) 2007 Andreas Kupries. | |
| 4 | +# | |
| 5 | +# This software is licensed as described in the file LICENSE, which | |
| 6 | +# you should have received as part of this distribution. | |
| 7 | +# | |
| 8 | +# This software consists of voluntary contributions made by many | |
| 9 | +# individuals. For exact contribution history, see the revision | |
| 10 | +# history and logs, available at http://fossil-scm.hwaci.com/fossil | |
| 11 | +# # ## ### ##### ######## ############# ##################### | |
| 12 | + | |
| 13 | +## Lines of Development in a file (Symbols, and the trunk). | |
| 14 | + | |
| 15 | +# # ## ### ##### ######## ############# ##################### | |
| 16 | +## Requirements | |
| 17 | + | |
| 18 | +package require Tcl 8.4 ; # Required runtime. | |
| 19 | +package require snit ; # OO system. | |
| 20 | + | |
| 21 | +# # ## ### ##### ######## ############# ##################### | |
| 22 | +## | |
| 23 | + | |
| 24 | +snit::type ::vc::fossil::import::cvs::file::lodmgr { | |
| 25 | + # # ## ### ##### ######## ############# | |
| 26 | + ## Public API | |
| 27 | + | |
| 28 | + constructor {} { | |
| 29 | + return | |
| 30 | + } | |
| 31 | + | |
| 32 | + # # ## ### ##### ######## ############# | |
| 33 | + ## State | |
| 34 | + | |
| 35 | + # # ## ### ##### ######## ############# | |
| 36 | + ## Internal methods | |
| 37 | + | |
| 38 | + # # ## ### ##### ######## ############# | |
| 39 | + ## Configuration | |
| 40 | + | |
| 41 | + pragma -hastypeinfo no ; # no type introspection | |
| 42 | + pragma -hasinfo no ; # no object introspection | |
| 43 | + pragma -hastypemethods no ; # type is not relevant. | |
| 44 | + pragma -simpledispatch yes ; # simple fast dispatch | |
| 45 | + | |
| 46 | + # # ## ### ##### ######## ############# | |
| 47 | +} | |
| 48 | + | |
| 49 | +namespace eval ::vc::fossil::import::cvs::file { | |
| 50 | + namespace export lodmgr | |
| 51 | +} | |
| 52 | + | |
| 53 | +# # ## ### ##### ######## ############# ##################### | |
| 54 | +## Ready | |
| 55 | + | |
| 56 | +package provide vc::fossil::import::cvs::file::lodmgr 1.0 | |
| 57 | +return |
| --- a/tools/cvs2fossil/lib/c2f_flodmgr.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_flodmgr.tcl | |
| @@ -0,0 +1,57 @@ | |
| --- a/tools/cvs2fossil/lib/c2f_flodmgr.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_flodmgr.tcl | |
| @@ -0,0 +1,57 @@ | |
| 1 | ## -*- tcl -*- |
| 2 | # # ## ### ##### ######## ############# ##################### |
| 3 | ## Copyright (c) 2007 Andreas Kupries. |
| 4 | # |
| 5 | # This software is licensed as described in the file LICENSE, which |
| 6 | # you should have received as part of this distribution. |
| 7 | # |
| 8 | # This software consists of voluntary contributions made by many |
| 9 | # individuals. For exact contribution history, see the revision |
| 10 | # history and logs, available at http://fossil-scm.hwaci.com/fossil |
| 11 | # # ## ### ##### ######## ############# ##################### |
| 12 | |
| 13 | ## Lines of Development in a file (Symbols, and the trunk). |
| 14 | |
| 15 | # # ## ### ##### ######## ############# ##################### |
| 16 | ## Requirements |
| 17 | |
| 18 | package require Tcl 8.4 ; # Required runtime. |
| 19 | package require snit ; # OO system. |
| 20 | |
| 21 | # # ## ### ##### ######## ############# ##################### |
| 22 | ## |
| 23 | |
| 24 | snit::type ::vc::fossil::import::cvs::file::lodmgr { |
| 25 | # # ## ### ##### ######## ############# |
| 26 | ## Public API |
| 27 | |
| 28 | constructor {} { |
| 29 | return |
| 30 | } |
| 31 | |
| 32 | # # ## ### ##### ######## ############# |
| 33 | ## State |
| 34 | |
| 35 | # # ## ### ##### ######## ############# |
| 36 | ## Internal methods |
| 37 | |
| 38 | # # ## ### ##### ######## ############# |
| 39 | ## Configuration |
| 40 | |
| 41 | pragma -hastypeinfo no ; # no type introspection |
| 42 | pragma -hasinfo no ; # no object introspection |
| 43 | pragma -hastypemethods no ; # type is not relevant. |
| 44 | pragma -simpledispatch yes ; # simple fast dispatch |
| 45 | |
| 46 | # # ## ### ##### ######## ############# |
| 47 | } |
| 48 | |
| 49 | namespace eval ::vc::fossil::import::cvs::file { |
| 50 | namespace export lodmgr |
| 51 | } |
| 52 | |
| 53 | # # ## ### ##### ######## ############# ##################### |
| 54 | ## Ready |
| 55 | |
| 56 | package provide vc::fossil::import::cvs::file::lodmgr 1.0 |
| 57 | return |
| --- a/tools/cvs2fossil/lib/c2f_frev.tcl | ||
| +++ b/tools/cvs2fossil/lib/c2f_frev.tcl | ||
| @@ -0,0 +1,362 @@ | ||
| 1 | +## -*- tcl -*- | |
| 2 | +# # ## ### ##### ######## ############# ##################### | |
| 3 | +## Copyright (c) 2007 | |
| 4 | +## Copyright (c) 2007-2008 Andreas Kupries. | |
| 5 | +# | |
| 6 | +# This software is licensed as described in the file LICENSE, which | |
| 7 | +# you should have received as part of this distribution. | |
| 8 | +# | |
| 9 | +# This software consists of voluntary contributions made by many | |
| 10 | +# individuals. For exact contribution history, see the revision | |
| 11 | +# history and logs, available at http://fossil-scm.hwaci.com/fossil | |
| 12 | +# # ## ### ##### ######## ############# ##################### | |
| 13 | + | |
| 14 | +## Revisions per file. | |
| 15 | + | |
| 16 | +# # ## ### ##### ######## ############# ##################### | |
| 17 | +## Requirements | |
| 18 | + | |
| 19 | +package require Tcl 8.4 ; # Required runtime. | |
| 20 | +package require snit ; # OO system. | |
| 21 | +package require vc::tools::misc ; # Text formatting | |
| 22 | +package require v## ##################### | |
| 23 | +## | |
| 24 | + | |
| 25 | +snit::type ::vc::fossil::import::cvs ::file::rev { | |
| 26 | + # # ## ### ##### ######## ############# | |
| 27 | + ## Public API | |
| 28 | + | |
| 29 | + constructor {revnr date state thefile} { | |
| 30 | + set myrevnr $revnr | |
| 31 | + set mydate $date | |
| 32 | + set myorigdate $date | |
| 33 | + set mystate $state | |
| 34 | + set myfile $thefile | |
| 35 | + return | |
| 36 | + } | |
| 37 | + | |
| 38 | + method defid {} { | |
| 39 | + set myid [incr myidcounter] | |
| 40 | + r{} { return $myid} { return $myid } | |
| 41 | + method file {} { return $myfile } | |
| 42 | + | |
| 43 | + # Basic pieces ________________________ | |
| 44 | + | |
| 45 | + method hasmeta {} { retur1 -decreasing $tmp] {branchchildren $rev | |
| 46 | +expr {$mytextstart <= $mytextend}] | |
| 47 | + } | |
| 48 | + | |
| 49 | + method setmeta {meta} { set set mytext $texrent} { set myparent $pad | |
| 50 | + return | |
| 51 | + } | |
| 52 | + method setlod {lod} { set mylod $lod ; return } | |
| 53 | + | |
| 54 | + method revnr {} { return $myrevnr } | |
| 55 | + method state {} { return $mystate } | |
| 56 | + method lod {} { return $mylod } | |
| 57 | + method date {} { return $mydate } | |
| 58 | + | |
| 59 | + method isneeded {} { | |
| 60 | + if {$myoperation ne "nothing"} {return 1} | |
| 61 | + if {$myrevnr ne "1.1"} {return 1} | |
| 62 | + if {![$mylod istrunk]} {return 1} | |
| 63 | + if {![llength $mybranches]} {return 1} | |
| 64 | + set firstbranch [lindex $mybranches 0] | |
| 65 | + if {![$firstbranch haschild]} {return 1} | |
| 66 | + if {$myisondefaultbranch} {return 1} | |
| 67 | + | |
| 68 | + # FIX: This message will not match if the RCS file was renamed | |
| 69 | + # manually after it was created. | |
| 70 | + | |
| 71 | + set gen "file [file tail [$myfile usrpath]]f {$myparent ne ""} { trouble internal "Parent already defined" parent $parent | |
| 72 | + return | |
| 73 | + } | |
| 74 | + | |
| 75 | + method cutfromparent {} { set myparent "" ; return } | |
| 76 | + method cutfromchild {} { set mychild "" ; return } | |
| 77 | + | |
| 78 | + method setf {$mychild ne ""} { trouble internchild $child | |
| 79 | + return | |
| 80 | + } | |
| 81 | + | |
| 82 | + method changeparent {parent} { set myparent $parent ; return } | |
| 83 | + method changechild {child} { set mychild $child ; return } | |
| 84 | + | |
| 85 | + method parent {} { return $myparent } | |
| 86 | + method child {} { return $mychild } | |
| 87 | + | |
| 88 | + # Branch linkage ______________________ | |
| 89 | + | |
| 90 | + method setparentbranch {branch} { | |
| 91 | + integrity f## Copyright (c) 2007 | |
| 92 | +#### -*- tcl -*- | |
| 93 | +# # ##rent already defined} | |
| 94 | + set my" } | |
| 95 | + setend map @P@ [expet myparentbranch $branch | |
| 96 | + return | |
| 97 | + } | |
| 98 | + | |
| 99 | + method hasparentbranch {} { return [expr {$myparentbranch ne ""}] } | |
| 100 | + method hasbranches {} { return [llength $mybranches] } | |
| 101 | + | |
| 102 | + method parentbranch {} { return $myparentbranch } | |
| 103 | + method branches {} { return $mybranches } | |
| 104 | + | |
| 105 | + method addbranch {branch} { | |
| 106 | + lappend mybranches $branch | |
| 107 | + return | |
| 108 | + } | |
| 109 | + | |
| 110 | + method addchildonbranch {child} { | |
| 111 | + lappend mybranchchildren $child | |
| 112 | + return | |
| 113 | + } | |
| 114 | + | |
| 115 | + method cutfromparentbranch {} { set myparentbranch "" ; return } | |
| 116 | + | |
| 117 | + method removebranch {branch} { | |
| 118 | + ldelete mybranches $branch | |
| 119 | + return | |
| 120 | + } | |
| 121 | + | |
| 122 | + method removechildonbranch {rev} { | |
| 123 | + ldelete mybranchchildren $rev | |
| 124 | + return | |
| 125 | + } | |
| 126 | + | |
| 127 | + method sortbranches {} { | |
| 128 | + # Pass 2: CollectRev | |
| 129 | + | |
| 130 | + if {[llength $mybranches] < 2} return | |
| 131 | + | |
| 132 | + # Sort the branches spawned by this revision in creation | |
| 133 | + # order. To help in this our file gave all branches a position | |
| 134 | + # id, in order of their definition by the RCS archive. | |
| 135 | + # | |
| 136 | + # The creation order is (apparently) the reverse of the | |
| 137 | + # definition order. (If a branch is created then deleted, a | |
| 138 | + # later branch can be assigned the recycled branch number; | |
| 139 | + # therefore branch numbers are not an indication of creation | |
| 140 | + # order.) | |
| 141 | + | |
| 142 | + set tmp {} | |
| 143 | + foreach branch $mybranches { | |
| 144 | + lappend tmp [list $branch [$branch position]] | |
| 145 | + } | |
| 146 | + | |
| 147 | + set mybranches {} | |
| 148 | + foreach item [lsort -index 1 -decreasing $tmp] { | |
| 149 | + struct::list assign $item branch position | |
| 150 | + lappend mybranches $branch | |
| 151 | + } | |
| 152 | + return | |
| 153 | + } | |
| 154 | + | |
| 155 | + method movebranchesto {rev} { | |
| 156 | + set revlod [$rev lod] | |
| 157 | + foreach branch $mybranches { | |
| 158 | + $rev addbranch $branch | |
| 159 | + $branch setparent $rev | |
| 160 | + $branch setlod $revlod | |
| 161 | + } | |
| 162 | + foreach branchrev $mybranchchildren { | |
| 163 | + $rev addchildonbranch $branchrev | |
| 164 | + $branchrev cutfromparent | |
| 165 | + $branchrev setparent $rev | |
| 166 | + } | |
| 167 | + set mybranches {} | |
| 168 | + set mybranchchildren {} | |
| 169 | + return | |
| 170 | + } | |
| 171 | + | |
| 172 | + method removeallbranches {} { | |
| 173 | + set mybranches {} | |
| 174 | + set mybranchchildren {} | |
| 175 | + return | |
| 176 | + } | |
| 177 | + | |
| 178 | + # Tag linkage _________________________ | |
| 179 | + | |
| 180 | + method addtag {tag} { | |
| 181 | + lappend mytags $tag | |
| 182 | + return | |
| 183 | + } | |
| 184 | + | |
| 185 | + method tags {} { return $mytags } | |
| 186 | + | |
| 187 | + method removealltags {} { | |
| 188 | + set mytags {} | |
| 189 | + return | |
| 190 | + } | |
| 191 | + | |
| 192 | + method movetagsto {rev} { | |
| 193 | + set revlod [$rev lod] | |
| 194 | + foreach tag $mytags { | |
| 195 | + $rev addtag $tag | |
| 196 | + $tag settagrev $rev | |
| 197 | + $tag setlod $revlod | |
| 198 | + } | |
| 199 | + set mytags {} | |
| 200 | + return | |
| 201 | + } | |
| 202 | + | |
| 203 | + # general symbol operations ___________ | |
| 204 | + | |
| 205 | + method movesymbolsto {rev} { | |
| 206 | + # Move the tags and branches attached to this revision to the | |
| 207 | + # destination and fix all pointers. | |
| 208 | + | |
| 209 | + $self movetagsto $rev | |
| 210 | + $self movebranchesto $rev | |
| 211 | + return | |
| 212 | + } | |
| 213 | + | |
| 214 | + # Derived stuff _______________________ | |
| 215 | + | |
| 216 | + method determineoperation {} { | |
| 217 | + # Look at the state of both this revision and its parent to | |
| 218 | + # determine the type opf operation which was performed (add, | |
| 219 | + # modify, delete, none). | |
| 220 | + # | |
| 221 | + # The important information is dead vs not-dead for both, | |
| 222 | + # giving rise to four possible types. | |
| 223 | + | |
| 224 | + set sdead [expr {$mystate eq "dead"}] | |
| 225 | + set pdead [expr {$myparent eq "" || [$myparent state] eq "dead"}] | |
| 226 | + | |
| 227 | + set myoperation $myopstate([list $pdead $sdead]) | |
| 228 | + return | |
| 229 | + } | |
| 230 | + | |
| 231 | + method operation {} { return $myoperation } | |
| 232 | + method retype {x} { set myoperation $x ; return } | |
| 233 | + | |
| 234 | + method isondefaultbranch {} { return $myisondefaultbranch } | |
| 235 | + | |
| 236 | + method setondefaultbranch {x} { set myisondefaultbranch $x ; return } | |
| 237 | + | |
| 238 | + method setdefaultbranchchild {rev} { set mydbchild $rev ; return } | |
| 239 | + method setdefaultbranchparent {rev} { | |
| 240 | + set mydbparent $rev | |
| 241 | + | |
| 242 | + # Retype the revision (may change from 'add' to 'change'). | |
| 243 | + | |
| 244 | + set sdead [expr {$myoperation ne "change"}] | |
| 245 | + set pdead [expr {[$rev operation] ne "change"}] | |
| 246 | + set myoperation $myopstate([list $pdead $sdead]) | |
| 247 | + return | |
| 248 | + } | |
| 249 | + | |
| 250 | + method cutdefaultbranchparent {} { set mydbparent "" ; return } | |
| 251 | + method cutdefaultbranchchild {} { set mydbchild "" ; return } | |
| 252 | + | |
| 253 | + method defaultbranchchild {} { return $mydbchild } | |
| 254 | + method defaultbranchparent {} { return $mydbparent } | |
| 255 | + | |
| 256 | + method hasdefaultbranchchild {} { return [expr {$mydbchild ne ""}] } | |
| 257 | + method hasdefaultbranchparent {} { return [expr {$mydbparent ne ""}] } | |
| 258 | + | |
| 259 | + # # ## ### ##### ######## ############# | |
| 260 | + ## Type API | |
| 261 | + | |
| 262 | + typemethod istrunkrevnr {revnr} { | |
| 263 | + return [expr {[llength [split $revnr .]] == 2}] | |
| 264 | + } | |
| 265 | + | |
| 266 | + typemethod isbranchrevnr {revnr _ bv} { | |
| 267 | + if {[regexp $mybranchpattern $revnr -> head tail]} { | |
| 268 | + upvar 1 $bv branchnr | |
| 269 | + set branchnr ${head}$tail | |
| 270 | + return 1 | |
| 271 | + } | |
| 272 | + return 0 | |
| 273 | + } | |
| 274 | + | |
| 275 | + typemethod 2branchnr {revnr} { | |
| 276 | + # Input is a branch revision number, i.e. a revision number | |
| 277 | + # with an even number of components; for example '2.9.2.1' | |
| 278 | + # (never '2.9.2' nor '2.9.0.2'). The return value is the | |
| 279 | + # branch number (for example, '2.9.2'). For trunk revisions, | |
| 280 | + # like '3.4', we return the empty string. | |
| 281 | + | |
| 282 | + if {[$type istrunkrevnr $revnr]} { | |
| 283 | + return "" | |
| 284 | + } | |
| 285 | + return [join [lrange [split $revnr .] 0 end-1] .] | |
| 286 | + } | |
| 287 | + | |
| 288 | + typemethod 2branchparentrevnr {branchnr} { | |
| 289 | + # Chop the last segment off | |
| 290 | + return [join [lrange [split $branchnr .] 0 end-1] .] | |
| 291 | + } | |
| 292 | + | |
| 293 | + # # ## ### ##### ######## ############# | |
| 294 | + | |
| 295 | + method persist {} { | |
| 296 | + set fid [$myfile id] | |
| 297 | + set lod [$mylod id] | |
| 298 | + set op $myopcode($myoperation) | |
| 299 | + se | |
| 300 | + 1 -decreasing $tmp] {mytext coff ende set clen [expr {eend - $coffch | |
| 301 | + | |
| 302 | + lappend map @P@ [expr { ($myparent eq "") ? "NULL" : [$myparent id] }] | |
| 303 | + lappend map @C@ [expr { ($mychild eq "") ? "NULL" : [$mychild id] }] | |
| 304 | + lappend map @DP [expr { ($mydbparent eq "") ? "NULL" : [$mydbparent id] }] | |
| 305 | + lappend map @DC [exLICENSE, which | |
| 306 | +# you## -*- tcl -*- | |
| 307 | +# # ## ### ##### ######## ############# ##################### | |
| 308 | +## Copyright (c) 2007 | |
| 309 | +## Copyright (c) 2007-2008 Andreas Kupries. | |
| 310 | +# | |
| 311 | +# This software is licensed as described in the file LICENSE, which | |
| 312 | +# you should have received as part of this distribution. | |
| 313 | +# | |
| 314 | +# This software consists of voluntary contributions made by many | |
| 315 | +# individuals. For exact contribution history, see the revision | |
| 316 | +# history and logs, available at http://fossil-scm.hwaci.com/fossil | |
| 317 | +# # ## ### ##### ######## ############# ##################### | |
| 318 | + | |
| 319 | +## Revisions per file. | |
| 320 | + | |
| 321 | +# # ## ### ##### ######## ############# ##################### | |
| 322 | +## Requirements | |
| 323 | + | |
| 324 | +package require Tcl 8.4 ; # Required runtime. | |
| 325 | +package require snit ; # OO system. | |
| 326 | +package require vc::tools::misc ; # Text formatting | |
| 327 | +package require vc::fossil::import::cvs::state ; # State storage. | |
| 328 | +package require vc::fossil::import::cvs::integrity ; # State integrity checks. | |
| 329 | + | |
| 330 | +# # ## ### ##### ######## ############# ##################### | |
| 331 | +## | |
| 332 | + | |
| 333 | +snit::type ::vc::fossil::import::cvs::file::rev { | |
| 334 | + # # ## ### ##### ######## ############# | |
| 335 | + ## Public API | |
| 336 | + | |
| 337 | + constructor {revnr date state thefile} { | |
| 338 | + set myrevnr $revnr | |
| 339 | + set mydate $date | |
| 340 | + set myorigdate $date | |
| 341 | + set mystate $state | |
| 342 | + set myfile $thefile | |
| 343 | + return | |
| 344 | + } | |
| 345 | + | |
| 346 | + method defid {} {a project-level object | |
| 347 | + urn 1} | |
| 348 | + if {$myisondefaultbranch} {return 1} | |
| 349 | + | |
| 350 | + # FIX: This message will not match if the RCS file was renamed | |
| 351 | + # manually after it was created. | |
| 352 | + | |
| 353 | + set gen "file [file tail [$myfile usrpath]] was initially added on branch [$firstbranch name]." | |
| 354 | + set log [$myfile commitmessageof $mymetaid] | |
| 355 | + | |
| 356 | + return [expr {$log ne $gen}] | |
| 357 | + } | |
| 358 | + | |
| 359 | + method isneededbranchdel {} { | |
| 360 | + if {$myparentbranch eq "" ; return } | |
| 361 | + | |
| 362 | + meth |
| --- a/tools/cvs2fossil/lib/c2f_frev.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_frev.tcl | |
| @@ -0,0 +1,362 @@ | |
| --- a/tools/cvs2fossil/lib/c2f_frev.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_frev.tcl | |
| @@ -0,0 +1,362 @@ | |
| 1 | ## -*- tcl -*- |
| 2 | # # ## ### ##### ######## ############# ##################### |
| 3 | ## Copyright (c) 2007 |
| 4 | ## Copyright (c) 2007-2008 Andreas Kupries. |
| 5 | # |
| 6 | # This software is licensed as described in the file LICENSE, which |
| 7 | # you should have received as part of this distribution. |
| 8 | # |
| 9 | # This software consists of voluntary contributions made by many |
| 10 | # individuals. For exact contribution history, see the revision |
| 11 | # history and logs, available at http://fossil-scm.hwaci.com/fossil |
| 12 | # # ## ### ##### ######## ############# ##################### |
| 13 | |
| 14 | ## Revisions per file. |
| 15 | |
| 16 | # # ## ### ##### ######## ############# ##################### |
| 17 | ## Requirements |
| 18 | |
| 19 | package require Tcl 8.4 ; # Required runtime. |
| 20 | package require snit ; # OO system. |
| 21 | package require vc::tools::misc ; # Text formatting |
| 22 | package require v## ##################### |
| 23 | ## |
| 24 | |
| 25 | snit::type ::vc::fossil::import::cvs ::file::rev { |
| 26 | # # ## ### ##### ######## ############# |
| 27 | ## Public API |
| 28 | |
| 29 | constructor {revnr date state thefile} { |
| 30 | set myrevnr $revnr |
| 31 | set mydate $date |
| 32 | set myorigdate $date |
| 33 | set mystate $state |
| 34 | set myfile $thefile |
| 35 | return |
| 36 | } |
| 37 | |
| 38 | method defid {} { |
| 39 | set myid [incr myidcounter] |
| 40 | r{} { return $myid} { return $myid } |
| 41 | method file {} { return $myfile } |
| 42 | |
| 43 | # Basic pieces ________________________ |
| 44 | |
| 45 | method hasmeta {} { retur1 -decreasing $tmp] {branchchildren $rev |
| 46 | expr {$mytextstart <= $mytextend}] |
| 47 | } |
| 48 | |
| 49 | method setmeta {meta} { set set mytext $texrent} { set myparent $pad |
| 50 | return |
| 51 | } |
| 52 | method setlod {lod} { set mylod $lod ; return } |
| 53 | |
| 54 | method revnr {} { return $myrevnr } |
| 55 | method state {} { return $mystate } |
| 56 | method lod {} { return $mylod } |
| 57 | method date {} { return $mydate } |
| 58 | |
| 59 | method isneeded {} { |
| 60 | if {$myoperation ne "nothing"} {return 1} |
| 61 | if {$myrevnr ne "1.1"} {return 1} |
| 62 | if {![$mylod istrunk]} {return 1} |
| 63 | if {![llength $mybranches]} {return 1} |
| 64 | set firstbranch [lindex $mybranches 0] |
| 65 | if {![$firstbranch haschild]} {return 1} |
| 66 | if {$myisondefaultbranch} {return 1} |
| 67 | |
| 68 | # FIX: This message will not match if the RCS file was renamed |
| 69 | # manually after it was created. |
| 70 | |
| 71 | set gen "file [file tail [$myfile usrpath]]f {$myparent ne ""} { trouble internal "Parent already defined" parent $parent |
| 72 | return |
| 73 | } |
| 74 | |
| 75 | method cutfromparent {} { set myparent "" ; return } |
| 76 | method cutfromchild {} { set mychild "" ; return } |
| 77 | |
| 78 | method setf {$mychild ne ""} { trouble internchild $child |
| 79 | return |
| 80 | } |
| 81 | |
| 82 | method changeparent {parent} { set myparent $parent ; return } |
| 83 | method changechild {child} { set mychild $child ; return } |
| 84 | |
| 85 | method parent {} { return $myparent } |
| 86 | method child {} { return $mychild } |
| 87 | |
| 88 | # Branch linkage ______________________ |
| 89 | |
| 90 | method setparentbranch {branch} { |
| 91 | integrity f## Copyright (c) 2007 |
| 92 | #### -*- tcl -*- |
| 93 | # # ##rent already defined} |
| 94 | set my" } |
| 95 | setend map @P@ [expet myparentbranch $branch |
| 96 | return |
| 97 | } |
| 98 | |
| 99 | method hasparentbranch {} { return [expr {$myparentbranch ne ""}] } |
| 100 | method hasbranches {} { return [llength $mybranches] } |
| 101 | |
| 102 | method parentbranch {} { return $myparentbranch } |
| 103 | method branches {} { return $mybranches } |
| 104 | |
| 105 | method addbranch {branch} { |
| 106 | lappend mybranches $branch |
| 107 | return |
| 108 | } |
| 109 | |
| 110 | method addchildonbranch {child} { |
| 111 | lappend mybranchchildren $child |
| 112 | return |
| 113 | } |
| 114 | |
| 115 | method cutfromparentbranch {} { set myparentbranch "" ; return } |
| 116 | |
| 117 | method removebranch {branch} { |
| 118 | ldelete mybranches $branch |
| 119 | return |
| 120 | } |
| 121 | |
| 122 | method removechildonbranch {rev} { |
| 123 | ldelete mybranchchildren $rev |
| 124 | return |
| 125 | } |
| 126 | |
| 127 | method sortbranches {} { |
| 128 | # Pass 2: CollectRev |
| 129 | |
| 130 | if {[llength $mybranches] < 2} return |
| 131 | |
| 132 | # Sort the branches spawned by this revision in creation |
| 133 | # order. To help in this our file gave all branches a position |
| 134 | # id, in order of their definition by the RCS archive. |
| 135 | # |
| 136 | # The creation order is (apparently) the reverse of the |
| 137 | # definition order. (If a branch is created then deleted, a |
| 138 | # later branch can be assigned the recycled branch number; |
| 139 | # therefore branch numbers are not an indication of creation |
| 140 | # order.) |
| 141 | |
| 142 | set tmp {} |
| 143 | foreach branch $mybranches { |
| 144 | lappend tmp [list $branch [$branch position]] |
| 145 | } |
| 146 | |
| 147 | set mybranches {} |
| 148 | foreach item [lsort -index 1 -decreasing $tmp] { |
| 149 | struct::list assign $item branch position |
| 150 | lappend mybranches $branch |
| 151 | } |
| 152 | return |
| 153 | } |
| 154 | |
| 155 | method movebranchesto {rev} { |
| 156 | set revlod [$rev lod] |
| 157 | foreach branch $mybranches { |
| 158 | $rev addbranch $branch |
| 159 | $branch setparent $rev |
| 160 | $branch setlod $revlod |
| 161 | } |
| 162 | foreach branchrev $mybranchchildren { |
| 163 | $rev addchildonbranch $branchrev |
| 164 | $branchrev cutfromparent |
| 165 | $branchrev setparent $rev |
| 166 | } |
| 167 | set mybranches {} |
| 168 | set mybranchchildren {} |
| 169 | return |
| 170 | } |
| 171 | |
| 172 | method removeallbranches {} { |
| 173 | set mybranches {} |
| 174 | set mybranchchildren {} |
| 175 | return |
| 176 | } |
| 177 | |
| 178 | # Tag linkage _________________________ |
| 179 | |
| 180 | method addtag {tag} { |
| 181 | lappend mytags $tag |
| 182 | return |
| 183 | } |
| 184 | |
| 185 | method tags {} { return $mytags } |
| 186 | |
| 187 | method removealltags {} { |
| 188 | set mytags {} |
| 189 | return |
| 190 | } |
| 191 | |
| 192 | method movetagsto {rev} { |
| 193 | set revlod [$rev lod] |
| 194 | foreach tag $mytags { |
| 195 | $rev addtag $tag |
| 196 | $tag settagrev $rev |
| 197 | $tag setlod $revlod |
| 198 | } |
| 199 | set mytags {} |
| 200 | return |
| 201 | } |
| 202 | |
| 203 | # general symbol operations ___________ |
| 204 | |
| 205 | method movesymbolsto {rev} { |
| 206 | # Move the tags and branches attached to this revision to the |
| 207 | # destination and fix all pointers. |
| 208 | |
| 209 | $self movetagsto $rev |
| 210 | $self movebranchesto $rev |
| 211 | return |
| 212 | } |
| 213 | |
| 214 | # Derived stuff _______________________ |
| 215 | |
| 216 | method determineoperation {} { |
| 217 | # Look at the state of both this revision and its parent to |
| 218 | # determine the type opf operation which was performed (add, |
| 219 | # modify, delete, none). |
| 220 | # |
| 221 | # The important information is dead vs not-dead for both, |
| 222 | # giving rise to four possible types. |
| 223 | |
| 224 | set sdead [expr {$mystate eq "dead"}] |
| 225 | set pdead [expr {$myparent eq "" || [$myparent state] eq "dead"}] |
| 226 | |
| 227 | set myoperation $myopstate([list $pdead $sdead]) |
| 228 | return |
| 229 | } |
| 230 | |
| 231 | method operation {} { return $myoperation } |
| 232 | method retype {x} { set myoperation $x ; return } |
| 233 | |
| 234 | method isondefaultbranch {} { return $myisondefaultbranch } |
| 235 | |
| 236 | method setondefaultbranch {x} { set myisondefaultbranch $x ; return } |
| 237 | |
| 238 | method setdefaultbranchchild {rev} { set mydbchild $rev ; return } |
| 239 | method setdefaultbranchparent {rev} { |
| 240 | set mydbparent $rev |
| 241 | |
| 242 | # Retype the revision (may change from 'add' to 'change'). |
| 243 | |
| 244 | set sdead [expr {$myoperation ne "change"}] |
| 245 | set pdead [expr {[$rev operation] ne "change"}] |
| 246 | set myoperation $myopstate([list $pdead $sdead]) |
| 247 | return |
| 248 | } |
| 249 | |
| 250 | method cutdefaultbranchparent {} { set mydbparent "" ; return } |
| 251 | method cutdefaultbranchchild {} { set mydbchild "" ; return } |
| 252 | |
| 253 | method defaultbranchchild {} { return $mydbchild } |
| 254 | method defaultbranchparent {} { return $mydbparent } |
| 255 | |
| 256 | method hasdefaultbranchchild {} { return [expr {$mydbchild ne ""}] } |
| 257 | method hasdefaultbranchparent {} { return [expr {$mydbparent ne ""}] } |
| 258 | |
| 259 | # # ## ### ##### ######## ############# |
| 260 | ## Type API |
| 261 | |
| 262 | typemethod istrunkrevnr {revnr} { |
| 263 | return [expr {[llength [split $revnr .]] == 2}] |
| 264 | } |
| 265 | |
| 266 | typemethod isbranchrevnr {revnr _ bv} { |
| 267 | if {[regexp $mybranchpattern $revnr -> head tail]} { |
| 268 | upvar 1 $bv branchnr |
| 269 | set branchnr ${head}$tail |
| 270 | return 1 |
| 271 | } |
| 272 | return 0 |
| 273 | } |
| 274 | |
| 275 | typemethod 2branchnr {revnr} { |
| 276 | # Input is a branch revision number, i.e. a revision number |
| 277 | # with an even number of components; for example '2.9.2.1' |
| 278 | # (never '2.9.2' nor '2.9.0.2'). The return value is the |
| 279 | # branch number (for example, '2.9.2'). For trunk revisions, |
| 280 | # like '3.4', we return the empty string. |
| 281 | |
| 282 | if {[$type istrunkrevnr $revnr]} { |
| 283 | return "" |
| 284 | } |
| 285 | return [join [lrange [split $revnr .] 0 end-1] .] |
| 286 | } |
| 287 | |
| 288 | typemethod 2branchparentrevnr {branchnr} { |
| 289 | # Chop the last segment off |
| 290 | return [join [lrange [split $branchnr .] 0 end-1] .] |
| 291 | } |
| 292 | |
| 293 | # # ## ### ##### ######## ############# |
| 294 | |
| 295 | method persist {} { |
| 296 | set fid [$myfile id] |
| 297 | set lod [$mylod id] |
| 298 | set op $myopcode($myoperation) |
| 299 | se |
| 300 | 1 -decreasing $tmp] {mytext coff ende set clen [expr {eend - $coffch |
| 301 | |
| 302 | lappend map @P@ [expr { ($myparent eq "") ? "NULL" : [$myparent id] }] |
| 303 | lappend map @C@ [expr { ($mychild eq "") ? "NULL" : [$mychild id] }] |
| 304 | lappend map @DP [expr { ($mydbparent eq "") ? "NULL" : [$mydbparent id] }] |
| 305 | lappend map @DC [exLICENSE, which |
| 306 | # you## -*- tcl -*- |
| 307 | # # ## ### ##### ######## ############# ##################### |
| 308 | ## Copyright (c) 2007 |
| 309 | ## Copyright (c) 2007-2008 Andreas Kupries. |
| 310 | # |
| 311 | # This software is licensed as described in the file LICENSE, which |
| 312 | # you should have received as part of this distribution. |
| 313 | # |
| 314 | # This software consists of voluntary contributions made by many |
| 315 | # individuals. For exact contribution history, see the revision |
| 316 | # history and logs, available at http://fossil-scm.hwaci.com/fossil |
| 317 | # # ## ### ##### ######## ############# ##################### |
| 318 | |
| 319 | ## Revisions per file. |
| 320 | |
| 321 | # # ## ### ##### ######## ############# ##################### |
| 322 | ## Requirements |
| 323 | |
| 324 | package require Tcl 8.4 ; # Required runtime. |
| 325 | package require snit ; # OO system. |
| 326 | package require vc::tools::misc ; # Text formatting |
| 327 | package require vc::fossil::import::cvs::state ; # State storage. |
| 328 | package require vc::fossil::import::cvs::integrity ; # State integrity checks. |
| 329 | |
| 330 | # # ## ### ##### ######## ############# ##################### |
| 331 | ## |
| 332 | |
| 333 | snit::type ::vc::fossil::import::cvs::file::rev { |
| 334 | # # ## ### ##### ######## ############# |
| 335 | ## Public API |
| 336 | |
| 337 | constructor {revnr date state thefile} { |
| 338 | set myrevnr $revnr |
| 339 | set mydate $date |
| 340 | set myorigdate $date |
| 341 | set mystate $state |
| 342 | set myfile $thefile |
| 343 | return |
| 344 | } |
| 345 | |
| 346 | method defid {} {a project-level object |
| 347 | urn 1} |
| 348 | if {$myisondefaultbranch} {return 1} |
| 349 | |
| 350 | # FIX: This message will not match if the RCS file was renamed |
| 351 | # manually after it was created. |
| 352 | |
| 353 | set gen "file [file tail [$myfile usrpath]] was initially added on branch [$firstbranch name]." |
| 354 | set log [$myfile commitmessageof $mymetaid] |
| 355 | |
| 356 | return [expr {$log ne $gen}] |
| 357 | } |
| 358 | |
| 359 | method isneededbranchdel {} { |
| 360 | if {$myparentbranch eq "" ; return } |
| 361 | |
| 362 | meth |
| --- a/tools/cvs2fossil/lib/c2f_fsym.tcl | ||
| +++ b/tools/cvs2fossil/lib/c2f_fsym.tcl | ||
| @@ -0,0 +1,115 @@ | ||
| 1 | +## -*- tcl -*- | |
| 2 | +# # ## ### ##### ######## ############# ##################### | |
| 3 | +## Copyright (c) 2007 | |
| 4 | +## Copyright (c) 2007-2008 Andreas Kupries. | |
| 5 | +# | |
| 6 | +# This software is licensed as described in the file LICENSE, which | |
| 7 | +# you should have received as part of this distribution. | |
| 8 | +# | |
| 9 | +# This software consists of voluntary contributions made by many | |
| 10 | +# individuals. For exact contribution history, see the revision | |
| 11 | +# history and logs, available at http://fossil-scm.hwaci.com/fossil | |
| 12 | +# # ## ### ##### ######## ############# ##################### | |
| 13 | + | |
| 14 | +## Symbols (Tags, Branches) per file. | |
| 15 | + | |
| 16 | +# # ## ### ##### ######## ############# ##################### | |
| 17 | +## Requirements | |
| 18 | + | |
| 19 | +package require Tcl 8.4 ; # Required runtime. | |
| 20 | +packaem. | |
| 21 | +package require vc::tools::trouble ; # Error reporting. | |
| 22 | +package require vc::fossil::import::cvs::file::rev ; # CVS per file revisions. | |
| 23 | +package require vc::fossil::import::cvs::state ; # State storage. | |
| 24 | +package require vc::fossil::imp(Tags, Branches) per file. | |
| 25 | + | |
| 26 | +# # ## ### ##### ######## ########### it::type ::vc::fossil::import::cvs::file::sym { | |
| 27 | + # # ## ### ##### ######## ############# | |
| 28 | + ## Public API | |
| 29 | + | |
| 30 | + constructor {symtype nr symbol file} { | |
| 31 | + set myfile $file | |
| 32 | + set mytype $symtype | |
| 33 | + set mynr $nr | |
| 34 | + set mysymbol $symbol | |
| 35 | + | |
| 36 | + switch -exact -- $mytype { | |
| 37 | + ntegrity assert 0} | |
| 38 | + default { trouble internal "Bad symbol type '$mytype'" } | |
| 39 | + }turn | |
| 40 | + } | |
| 41 | + | |
| 42 | + method fid f were committed earlier than { trouble interno mysymbol | |
| 43 | + | |
| 44 | + # Symbol aggregation methods | |
| 45 | + | |
| 46 | + delegate method countsbranch to mysymbol | |
| 47 | + delegate method countastag to mysymbol | |
| 48 | + delegate method countacommit to mysymbol | |
| 49 | + | |
| 50 | + method blockedby{fsymbol} { | |
| 51 | + $mysymbol blockedby [$fsymbol symbol] | |
| 52 | + return | |
| 53 | + } | |
| 54 | + | |
| 55 | + method possibself TagParents } | |
| 56 | + } | |
| 57 | + return | |
| 58 | + } | |
| 59 | + | |
| 60 | + method BranchParents {} { | |
| 61 | + # The "obvious" parent of a branch is the branch holding the | |
| 62 | + # revision spawning the branch. Any other branches that are | |
| 63 | + # rooted at the same revision and were committed earlier than | |
| 64 | + # the branch are also possible parents. | |
| 65 | + | |
| 66 | + # Ignore this if the branch symbol is detached. | |
| 67 | + if {$mybranchparent eq ""} return | |
| 68 | + | |
| 69 | + $mysymbol possibleparent [[$mybranchparent lod] symbol] | |
| 70 | + | |
| 71 | + foreach branch [$mybranchparent branches] { | |
| 72 | + # A branch cannot be its own parent. Nor can a branch | |
| 73 | + # created after this one be its parent. This means that we | |
| 74 | + # can abort the loop when we have reached ourselves in the | |
| 75 | + # list of branches. Here the order of file::rev.mybranches | |
| 76 | + # comes into play, as created by file::rev::sortbranches. | |
| 77 | + | |
| 78 | + if {$branch eq $self} break | |
| 79 | + $mysymbol possibleparent [$branch symbol] | |
| 80 | + } | |
| 81 | + return | |
| 82 | + } | |
| 83 | + | |
| 84 | + method TagParents {} { | |
| 85 | + # The "obvious" parent of a tag is the branch holding the | |
| 86 | + # revision spawning the tag. Branches that are spawned by the | |
| 87 | + # same revision are also possible parents. | |
| 88 | + | |
| 89 | + $mysymbol possibleparent [[$mytagrev lod] symbol] | |
| 90 | + | |
| 91 | + foreach branch [$mytagrev branches] { | |
| 92 | + $mysymbol possibleparent [$branch symbol] | |
| 93 | + } | |
| 94 | + return | |
| 95 | + } | |
| 96 | + | |
| 97 | + # | |
| 98 | + | |
| 99 | + method istrunk {} { return 0 } | |
| 100 | + | |
| 101 | + # Branch acessor methods. | |
| 102 | + | |
| 103 | + method setchildrevnr {revnr} { | |
| 104 | + integrity assert {$mybranchchildrevnr eq ""} {Child already defined} | |
| 105 | + set mybranchchildrevnr $revnr | |
| 106 | + return | |
| 107 | + } | |
| 108 | + | |
| 109 | + method setposition {n} { set mybranchposition $n ; return } | |
| 110 | + method setparent {rev} { set mybranchparent $rev ; return } | |
| 111 | + method setchild {rev} { set mybranchchild $rev ; return } | |
| 112 | + ") ? "NULL" : [$mybranchchilchild id] }] | |
| 113 | + | |
| 114 | + set ridybranchchild id] }] | |
| 115 | +ranchparent eq "") ? "NULL" :$rid file - tag.fid |
| --- a/tools/cvs2fossil/lib/c2f_fsym.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_fsym.tcl | |
| @@ -0,0 +1,115 @@ | |
| --- a/tools/cvs2fossil/lib/c2f_fsym.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_fsym.tcl | |
| @@ -0,0 +1,115 @@ | |
| 1 | ## -*- tcl -*- |
| 2 | # # ## ### ##### ######## ############# ##################### |
| 3 | ## Copyright (c) 2007 |
| 4 | ## Copyright (c) 2007-2008 Andreas Kupries. |
| 5 | # |
| 6 | # This software is licensed as described in the file LICENSE, which |
| 7 | # you should have received as part of this distribution. |
| 8 | # |
| 9 | # This software consists of voluntary contributions made by many |
| 10 | # individuals. For exact contribution history, see the revision |
| 11 | # history and logs, available at http://fossil-scm.hwaci.com/fossil |
| 12 | # # ## ### ##### ######## ############# ##################### |
| 13 | |
| 14 | ## Symbols (Tags, Branches) per file. |
| 15 | |
| 16 | # # ## ### ##### ######## ############# ##################### |
| 17 | ## Requirements |
| 18 | |
| 19 | package require Tcl 8.4 ; # Required runtime. |
| 20 | packaem. |
| 21 | package require vc::tools::trouble ; # Error reporting. |
| 22 | package require vc::fossil::import::cvs::file::rev ; # CVS per file revisions. |
| 23 | package require vc::fossil::import::cvs::state ; # State storage. |
| 24 | package require vc::fossil::imp(Tags, Branches) per file. |
| 25 | |
| 26 | # # ## ### ##### ######## ########### it::type ::vc::fossil::import::cvs::file::sym { |
| 27 | # # ## ### ##### ######## ############# |
| 28 | ## Public API |
| 29 | |
| 30 | constructor {symtype nr symbol file} { |
| 31 | set myfile $file |
| 32 | set mytype $symtype |
| 33 | set mynr $nr |
| 34 | set mysymbol $symbol |
| 35 | |
| 36 | switch -exact -- $mytype { |
| 37 | ntegrity assert 0} |
| 38 | default { trouble internal "Bad symbol type '$mytype'" } |
| 39 | }turn |
| 40 | } |
| 41 | |
| 42 | method fid f were committed earlier than { trouble interno mysymbol |
| 43 | |
| 44 | # Symbol aggregation methods |
| 45 | |
| 46 | delegate method countsbranch to mysymbol |
| 47 | delegate method countastag to mysymbol |
| 48 | delegate method countacommit to mysymbol |
| 49 | |
| 50 | method blockedby{fsymbol} { |
| 51 | $mysymbol blockedby [$fsymbol symbol] |
| 52 | return |
| 53 | } |
| 54 | |
| 55 | method possibself TagParents } |
| 56 | } |
| 57 | return |
| 58 | } |
| 59 | |
| 60 | method BranchParents {} { |
| 61 | # The "obvious" parent of a branch is the branch holding the |
| 62 | # revision spawning the branch. Any other branches that are |
| 63 | # rooted at the same revision and were committed earlier than |
| 64 | # the branch are also possible parents. |
| 65 | |
| 66 | # Ignore this if the branch symbol is detached. |
| 67 | if {$mybranchparent eq ""} return |
| 68 | |
| 69 | $mysymbol possibleparent [[$mybranchparent lod] symbol] |
| 70 | |
| 71 | foreach branch [$mybranchparent branches] { |
| 72 | # A branch cannot be its own parent. Nor can a branch |
| 73 | # created after this one be its parent. This means that we |
| 74 | # can abort the loop when we have reached ourselves in the |
| 75 | # list of branches. Here the order of file::rev.mybranches |
| 76 | # comes into play, as created by file::rev::sortbranches. |
| 77 | |
| 78 | if {$branch eq $self} break |
| 79 | $mysymbol possibleparent [$branch symbol] |
| 80 | } |
| 81 | return |
| 82 | } |
| 83 | |
| 84 | method TagParents {} { |
| 85 | # The "obvious" parent of a tag is the branch holding the |
| 86 | # revision spawning the tag. Branches that are spawned by the |
| 87 | # same revision are also possible parents. |
| 88 | |
| 89 | $mysymbol possibleparent [[$mytagrev lod] symbol] |
| 90 | |
| 91 | foreach branch [$mytagrev branches] { |
| 92 | $mysymbol possibleparent [$branch symbol] |
| 93 | } |
| 94 | return |
| 95 | } |
| 96 | |
| 97 | # |
| 98 | |
| 99 | method istrunk {} { return 0 } |
| 100 | |
| 101 | # Branch acessor methods. |
| 102 | |
| 103 | method setchildrevnr {revnr} { |
| 104 | integrity assert {$mybranchchildrevnr eq ""} {Child already defined} |
| 105 | set mybranchchildrevnr $revnr |
| 106 | return |
| 107 | } |
| 108 | |
| 109 | method setposition {n} { set mybranchposition $n ; return } |
| 110 | method setparent {rev} { set mybranchparent $rev ; return } |
| 111 | method setchild {rev} { set mybranchchild $rev ; return } |
| 112 | ") ? "NULL" : [$mybranchchilchild id] }] |
| 113 | |
| 114 | set ridybranchchild id] }] |
| 115 | ranchparent eq "") ? "NULL" :$rid file - tag.fid |
| --- a/tools/cvs2fossil/lib/c2f_ftrunk.tcl | ||
| +++ b/tools/cvs2fossil/lib/c2f_ftrunk.tcl | ||
| @@ -0,0 +1,56 @@ | ||
| 1 | +## -*- tcl -*- | |
| 2 | +# # ## ### ##### ######## ############# ##################### | |
| 3 | +## Copyright (c) 2007 Andreas Kupries. | |
| 4 | +# | |
| 5 | +# This software is licensed as described in the file LICENSE, which | |
| 6 | +# you should have received as part of this distribution. | |
| 7 | +# | |
| 8 | +# This software consists of voluntary contributions made by many | |
| 9 | +# individuals. For exact contribution history, see the revision | |
| 10 | +# history and logs, available at http://fossil-scm.hwaci.com/fossil | |
| 11 | +# # ## ### ##### ######## ############# ##################### | |
| 12 | + | |
| 13 | +## Trunk, the special main line of development in a file. | |
| 14 | + | |
| 15 | +# # ## ### ##### ######## ############# ##################### | |
| 16 | +## Requirements | |
| 17 | + | |
| 18 | +package require Tcl 8.4 ; # Required runtime. | |
| 19 | +package require snit ; # OO system. | |
| 20 | + | |
| 21 | +# # ## ### ##### ######## ############# ##################### | |
| 22 | +## | |
| 23 | + | |
| 24 | +snit::type ::vc::fossil::import::cvs::file::fossil::import::cvs::file::trunk { | |
| 25 | + # # ## ### ##### ######## ############# | |
| 26 | + ## Public API | |
| 27 | + | |
| 28 | + constructor {} { | |
| 29 | + return | |
| 30 | + } | |
| 31 | + | |
| 32 | + # # ## ### ##### ######## ############# | |
| 33 | + ## State | |
| 34 | + | |
| 35 | + # # ## ### ##### ######## ############# | |
| 36 | + ## Internal methods | |
| 37 | + | |
| 38 | + # # ## ### ##### ######## ############# | |
| 39 | + ## Configuration | |
| 40 | + | |
| 41 | + pragma -hastypeinfo no ; # no type introspection | |
| 42 | + pragma -hasinfo no ; # no object introspection | |
| 43 | + pragma -hastypemethods no ; # type is not relevant. | |
| 44 | + pragma -simpledispatch yes ; # simple fast dispatch | |
| 45 | + | |
| 46 | + # # ## ### ##### ######## ############# | |
| 47 | +} | |
| 48 | + | |
| 49 | +namespace eval ::vc::fossil::import::cvs::file { | |
| 50 | + namespace export trunk | |
| 51 | +} | |
| 52 | + | |
| 53 | +# # ## ### ##### ######## ############# ##################### | |
| 54 | +## Ready | |
| 55 | + | |
| 56 | +package provide vc::fossil::import::c |
| --- a/tools/cvs2fossil/lib/c2f_ftrunk.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_ftrunk.tcl | |
| @@ -0,0 +1,56 @@ | |
| --- a/tools/cvs2fossil/lib/c2f_ftrunk.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_ftrunk.tcl | |
| @@ -0,0 +1,56 @@ | |
| 1 | ## -*- tcl -*- |
| 2 | # # ## ### ##### ######## ############# ##################### |
| 3 | ## Copyright (c) 2007 Andreas Kupries. |
| 4 | # |
| 5 | # This software is licensed as described in the file LICENSE, which |
| 6 | # you should have received as part of this distribution. |
| 7 | # |
| 8 | # This software consists of voluntary contributions made by many |
| 9 | # individuals. For exact contribution history, see the revision |
| 10 | # history and logs, available at http://fossil-scm.hwaci.com/fossil |
| 11 | # # ## ### ##### ######## ############# ##################### |
| 12 | |
| 13 | ## Trunk, the special main line of development in a file. |
| 14 | |
| 15 | # # ## ### ##### ######## ############# ##################### |
| 16 | ## Requirements |
| 17 | |
| 18 | package require Tcl 8.4 ; # Required runtime. |
| 19 | package require snit ; # OO system. |
| 20 | |
| 21 | # # ## ### ##### ######## ############# ##################### |
| 22 | ## |
| 23 | |
| 24 | snit::type ::vc::fossil::import::cvs::file::fossil::import::cvs::file::trunk { |
| 25 | # # ## ### ##### ######## ############# |
| 26 | ## Public API |
| 27 | |
| 28 | constructor {} { |
| 29 | return |
| 30 | } |
| 31 | |
| 32 | # # ## ### ##### ######## ############# |
| 33 | ## State |
| 34 | |
| 35 | # # ## ### ##### ######## ############# |
| 36 | ## Internal methods |
| 37 | |
| 38 | # # ## ### ##### ######## ############# |
| 39 | ## Configuration |
| 40 | |
| 41 | pragma -hastypeinfo no ; # no type introspection |
| 42 | pragma -hasinfo no ; # no object introspection |
| 43 | pragma -hastypemethods no ; # type is not relevant. |
| 44 | pragma -simpledispatch yes ; # simple fast dispatch |
| 45 | |
| 46 | # # ## ### ##### ######## ############# |
| 47 | } |
| 48 | |
| 49 | namespace eval ::vc::fossil::import::cvs::file { |
| 50 | namespace export trunk |
| 51 | } |
| 52 | |
| 53 | # # ## ### ##### ######## ############# ##################### |
| 54 | ## Ready |
| 55 | |
| 56 | package provide vc::fossil::import::c |
| --- a/tools/cvs2fossil/lib/c2f_integrity.tcl | ||
| +++ b/tools/cvs2fossil/lib/c2f_integrity.tcl | ||
| @@ -0,0 +1,2 @@ | ||
| 1 | +## -AllChangesetsSymboland## -fileand -CS""""""set n 0 | |
| 2 | + RevisionCSetLinkageRevisionCSetLinkage {} {tsSymboland# |
| --- a/tools/cvs2fossil/lib/c2f_integrity.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_integrity.tcl | |
| @@ -0,0 +1,2 @@ | |
| --- a/tools/cvs2fossil/lib/c2f_integrity.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_integrity.tcl | |
| @@ -0,0 +1,2 @@ | |
| 1 | ## -AllChangesetsSymboland## -fileand -CS""""""set n 0 |
| 2 | RevisionCSetLinkageRevisionCSetLinkage {} {tsSymboland# |
| --- a/tools/cvs2fossil/lib/c2f_option.tcl | ||
| +++ b/tools/cvs2fossil/lib/c2f_option.tcl | ||
| @@ -0,0 +1 @@ | ||
| 1 | +##}iscprojectpass # --loopcheck--loopcheck{ integrity loopcheckon--loopcheckActivate the ewith loops, i. ass # --loopcheck--loopcheck{ integrity loopcheckon--loopcheckA |
| --- a/tools/cvs2fossil/lib/c2f_option.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_option.tcl | |
| @@ -0,0 +1 @@ | |
| --- a/tools/cvs2fossil/lib/c2f_option.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_option.tcl | |
| @@ -0,0 +1 @@ | |
| 1 | ##}iscprojectpass # --loopcheck--loopcheck{ integrity loopcheckon--loopcheckActivate the ewith loops, i. ass # --loopcheck--loopcheck{ integrity loopcheckon--loopcheckA |
| --- a/tools/cvs2fossil/lib/c2f_pass.tcl | ||
| +++ b/tools/cvs2fossil/lib/c2f_pass.tcl | ||
| @@ -0,0 +1,81 @@ | ||
| 1 | +Time $p [lindeydesc($name) $descriptioDone $p"string length [llength $mypasses]]s | |
| 2 | + | |
| 3 | + foreach code $mypasses { | |
| 4 | + trouble info " [format $nfmt $n]: [format $cfmt $code] : $mydesc($code)" | |
| 5 | + incr n | |
| 6 | + } | |
| 7 | + trouble info "" | |
| 8 | + return | |
| 9 | + } | |
| 10 | + | |
| 11 | + # # ## ### ##### ######## ############# | |
| 12 | + ## Public API, Methods (Execution) | |
| 13 | + | |
| 14 | + typemethodu(Execution) | |
| 15 | + | |
| 16 | + typemethod su## -*- tcl -*- | |
| 17 | +# # ## ### ##### ##### ####ar 1 $ov ok | |
| 18 | + ::variable mydesc | |
| 19 | + if {$emptyok && ($code eq "")} return | |
| 20 | + if {[info exists mydesc($code)]} return | |
| 21 | + if {$label ne ""} {append label " "} | |
| 22 | + trouble fatal "Bad ${label}pass code $code" | |
| 23 | + set ok 0 | |
| 24 | + return | |
| 25 | + } | |
| 26 | + | |
| 27 | + proc Convert {code default} { | |
| 28 | + ::variable mypasses | |
| 29 | + return [expr {($code eq "") ? $default : [Id $code]}] | |
| 30 | + } | |
| 31 | + | |
| 32 | + proc Id {code} { | |
| 33 | + ::variable mypasses | |
| 34 | + return [lsearch -exact $mypasses $code] | |
| 35 | + } | |
| 36 | + | |
| 37 | + c Call {code args} { | |
| 38 | + ::variable mycmd | |
| 39 | + set cmd $mycmd($code) | |
| 40 | + foreach##### #####(codes). | |
| 41 | + typevariable myes). | |
| 42 | + typevariable mydesc -array {} ; enddescriptions (one li. | |
| 43 | + typevariable mycmd -array {} ; # Pass callback command. | |
| 44 | + | |
| 45 | + tvariable mystart -1 | |
| 46 | + typevariable myend -1 | |
| 47 | + typriable mytime {} ; # Timing data for each executed pass. | |
| 48 | + typevariable mycurrentpass {} ; # Pass currently running. | |
| 49 | + | |
| 50 | + # # ## ### ##### # ####### ############# | |
| 51 | + ## Configuration | |
| 52 | + | |
| 53 | + pragma -hasinstances no ; # singleton | |
| 54 | + pragma -hastypeinfo no ; # noname)]} { | |
| 55 | + trouble internal "##### #########" | |
| 56 | + #### | |
| 57 | +} | |
| 58 | + | |
| 59 | +namespace eval ::vc::fossil::import::cvs { | |
| 60 | + namespace export pass | |
| 61 | + namespace eval pass { | |
| 62 | + namespace import ::vc::fossil::import::cvs::state | |
| 63 | + namespace import ::vc::fossil::import::cvs::integrity | |
| 64 | + namespace import ::vc::tools::misc::* | |
| 65 | + namespace import ::vc::tools::trouble | |
| 66 | + namespace import ::vc::tools::log | |
| 67 | + log register pass | |
| 68 | + } | |
| 69 | +} | |
| 70 | + | |
| 71 | +# # ## ### ##### ######## ############# #### -*- tcl -*- | |
| 72 | +########### | |
| 73 | +## Copyright (c) 2007 Andreas Kupries. | |
| 74 | +# | |
| 75 | +# This software iTime $p [lindeydesc($name) $descriptioDone $p"string length [llength $mypasses]]s | |
| 76 | + | |
| 77 | + foreach codeydesc($name) $descriptioDoneTime $p [lindeydesc($n$sec sec/$pass" | |
| 78 | + }Time $p [lindeydesc(deydesc($names::pass 1.0 | |
| 79 | +return | |
| 80 | +ShowTimes {## -nfo exists mydesc($code)]} return | |
| 81 | + if {$label ne ""} |
| --- a/tools/cvs2fossil/lib/c2f_pass.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_pass.tcl | |
| @@ -0,0 +1,81 @@ | |
| --- a/tools/cvs2fossil/lib/c2f_pass.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_pass.tcl | |
| @@ -0,0 +1,81 @@ | |
| 1 | Time $p [lindeydesc($name) $descriptioDone $p"string length [llength $mypasses]]s |
| 2 | |
| 3 | foreach code $mypasses { |
| 4 | trouble info " [format $nfmt $n]: [format $cfmt $code] : $mydesc($code)" |
| 5 | incr n |
| 6 | } |
| 7 | trouble info "" |
| 8 | return |
| 9 | } |
| 10 | |
| 11 | # # ## ### ##### ######## ############# |
| 12 | ## Public API, Methods (Execution) |
| 13 | |
| 14 | typemethodu(Execution) |
| 15 | |
| 16 | typemethod su## -*- tcl -*- |
| 17 | # # ## ### ##### ##### ####ar 1 $ov ok |
| 18 | ::variable mydesc |
| 19 | if {$emptyok && ($code eq "")} return |
| 20 | if {[info exists mydesc($code)]} return |
| 21 | if {$label ne ""} {append label " "} |
| 22 | trouble fatal "Bad ${label}pass code $code" |
| 23 | set ok 0 |
| 24 | return |
| 25 | } |
| 26 | |
| 27 | proc Convert {code default} { |
| 28 | ::variable mypasses |
| 29 | return [expr {($code eq "") ? $default : [Id $code]}] |
| 30 | } |
| 31 | |
| 32 | proc Id {code} { |
| 33 | ::variable mypasses |
| 34 | return [lsearch -exact $mypasses $code] |
| 35 | } |
| 36 | |
| 37 | c Call {code args} { |
| 38 | ::variable mycmd |
| 39 | set cmd $mycmd($code) |
| 40 | foreach##### #####(codes). |
| 41 | typevariable myes). |
| 42 | typevariable mydesc -array {} ; enddescriptions (one li. |
| 43 | typevariable mycmd -array {} ; # Pass callback command. |
| 44 | |
| 45 | tvariable mystart -1 |
| 46 | typevariable myend -1 |
| 47 | typriable mytime {} ; # Timing data for each executed pass. |
| 48 | typevariable mycurrentpass {} ; # Pass currently running. |
| 49 | |
| 50 | # # ## ### ##### # ####### ############# |
| 51 | ## Configuration |
| 52 | |
| 53 | pragma -hasinstances no ; # singleton |
| 54 | pragma -hastypeinfo no ; # noname)]} { |
| 55 | trouble internal "##### #########" |
| 56 | #### |
| 57 | } |
| 58 | |
| 59 | namespace eval ::vc::fossil::import::cvs { |
| 60 | namespace export pass |
| 61 | namespace eval pass { |
| 62 | namespace import ::vc::fossil::import::cvs::state |
| 63 | namespace import ::vc::fossil::import::cvs::integrity |
| 64 | namespace import ::vc::tools::misc::* |
| 65 | namespace import ::vc::tools::trouble |
| 66 | namespace import ::vc::tools::log |
| 67 | log register pass |
| 68 | } |
| 69 | } |
| 70 | |
| 71 | # # ## ### ##### ######## ############# #### -*- tcl -*- |
| 72 | ########### |
| 73 | ## Copyright (c) 2007 Andreas Kupries. |
| 74 | # |
| 75 | # This software iTime $p [lindeydesc($name) $descriptioDone $p"string length [llength $mypasses]]s |
| 76 | |
| 77 | foreach codeydesc($name) $descriptioDoneTime $p [lindeydesc($n$sec sec/$pass" |
| 78 | }Time $p [lindeydesc(deydesc($names::pass 1.0 |
| 79 | return |
| 80 | ShowTimes {## -nfo exists mydesc($code)]} return |
| 81 | if {$label ne ""} |
| --- a/tools/cvs2fossil/lib/c2f_pbreakacycle.tcl | ||
| +++ b/tools/cvs2fossil/lib/c2f_pbreakacycle.tcl | ||
| @@ -0,0 +1 @@ | ||
| 1 | +retrogradebreakRetrograde |
| --- a/tools/cvs2fossil/lib/c2f_pbreakacycle.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_pbreakacycle.tcl | |
| @@ -0,0 +1 @@ | |
| --- a/tools/cvs2fossil/lib/c2f_pbreakacycle.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_pbreakacycle.tcl | |
| @@ -0,0 +1 @@ | |
| 1 | retrogradebreakRetrograde |
| --- a/tools/cvs2fossil/lib/c2f_pbreakrcycle.tcl | ||
| +++ b/tools/cvs2fossil/lib/c2f_pbreakrcycle.tcl | ||
| @@ -0,0 +1,8 @@ | ||
| 1 | +set changesets [Changesets] | |
| 2 | + cyclebreaker dot break-rev-start $changesets$changesets | |
| 3 | + } | |
| 4 | + | |
| 5 | + cyclebreaker dot [myproc SaveOrder] [myproc Savdone $changesets\ | |
| 6 | + \ | |
| 7 | + [myproc SaveOrder] | |
| 8 | + } |
| --- a/tools/cvs2fossil/lib/c2f_pbreakrcycle.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_pbreakrcycle.tcl | |
| @@ -0,0 +1,8 @@ | |
| --- a/tools/cvs2fossil/lib/c2f_pbreakrcycle.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_pbreakrcycle.tcl | |
| @@ -0,0 +1,8 @@ | |
| 1 | set changesets [Changesets] |
| 2 | cyclebreaker dot break-rev-start $changesets$changesets |
| 3 | } |
| 4 | |
| 5 | cyclebreaker dot [myproc SaveOrder] [myproc Savdone $changesets\ |
| 6 | \ |
| 7 | [myproc SaveOrder] |
| 8 | } |
| --- a/tools/cvs2fossil/lib/c2f_pbreakscycle.tcl | ||
| +++ b/tools/cvs2fossil/lib/c2f_pbreakscycle.tcl | ||
| @@ -0,0 +1,4 @@ | ||
| 1 | +## -*- tcl -*- | |
| 2 | +#s\ | |
| 3 | + [myproc IsBySymbol]] | |
| 4 | + } |
| --- a/tools/cvs2fossil/lib/c2f_pbreakscycle.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_pbreakscycle.tcl | |
| @@ -0,0 +1,4 @@ | |
| --- a/tools/cvs2fossil/lib/c2f_pbreakscycle.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_pbreakscycle.tcl | |
| @@ -0,0 +1,4 @@ | |
| 1 | ## -*- tcl -*- |
| 2 | #s\ |
| 3 | [myproc IsBySymbol]] |
| 4 | } |
| --- a/tools/cvs2fossil/lib/c2f_pcollar.tcl | ||
| +++ b/tools/cvs2fossil/lib/c2f_pcollar.tcl | ||
| @@ -0,0 +1,17 @@ | ||
| 1 | +#lsearch [glob -nocomplain -tail -types f -directory $base *] $usr] != -1 && | |
| 2 | + [lsearch [glob -nocomplain -tail -types d -directory $base *] $usr] != -1 {return 0} | |
| 3 | + | |
| 4 | + # use glob to account for case insensitive file systems | |
| 5 | + if {[lsearch [glob -nocomplain -tail -directory $base *] $usr,v] == -1tailif { | |
| 6 | + [file exists $base/$usr] && | |
| 7 | + [file isdirectory $base/$usr] if {![file exists $base/$usr,v]writingwritingreading project | |
| 8 | + state reading | |
| 9 | + | |
| 10 | +snit::type [glob -nocomplain -tail -ty#lsearch [glob -nocomplain -tail -types f -directory $base *] $usr] != -1 && | |
| 11 | + [lsearch [glob -nocomplain -tail -types d -directory $base *] $usr] != -1 {return 0} | |
| 12 | + | |
| 13 | + # use glob to account for case insensitive file systems | |
| 14 | + if {[lsearch [glob -nocomplain -tail -directory $base *] $usr,v] == -1tailif { | |
| 15 | + [file exists $base/$usr] && | |
| 16 | + [file isdirectory $base/$usr] if {![file exists $base/$usr,v]writingwritingreading project | |
| 17 | + state reading |
| --- a/tools/cvs2fossil/lib/c2f_pcollar.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_pcollar.tcl | |
| @@ -0,0 +1,17 @@ | |
| --- a/tools/cvs2fossil/lib/c2f_pcollar.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_pcollar.tcl | |
| @@ -0,0 +1,17 @@ | |
| 1 | #lsearch [glob -nocomplain -tail -types f -directory $base *] $usr] != -1 && |
| 2 | [lsearch [glob -nocomplain -tail -types d -directory $base *] $usr] != -1 {return 0} |
| 3 | |
| 4 | # use glob to account for case insensitive file systems |
| 5 | if {[lsearch [glob -nocomplain -tail -directory $base *] $usr,v] == -1tailif { |
| 6 | [file exists $base/$usr] && |
| 7 | [file isdirectory $base/$usr] if {![file exists $base/$usr,v]writingwritingreading project |
| 8 | state reading |
| 9 | |
| 10 | snit::type [glob -nocomplain -tail -ty#lsearch [glob -nocomplain -tail -types f -directory $base *] $usr] != -1 && |
| 11 | [lsearch [glob -nocomplain -tail -types d -directory $base *] $usr] != -1 {return 0} |
| 12 | |
| 13 | # use glob to account for case insensitive file systems |
| 14 | if {[lsearch [glob -nocomplain -tail -directory $base *] $usr,v] == -1tailif { |
| 15 | [file exists $base/$usr] && |
| 16 | [file isdirectory $base/$usr] if {![file exists $base/$usr,v]writingwritingreading project |
| 17 | state reading |
| --- a/tools/cvs2fossil/lib/c2f_pcollrev.tcl | ||
| +++ b/tools/cvs2fossil/lib/c2f_pcollrev.tcl | ||
| @@ -0,0 +1,174 @@ | ||
| 1 | +## -*- tcl -*- | |
| 2 | +# # ## ### ##### ######## ############# ##################### | |
| 3 | +## Copyright (c) 2007 | |
| 4 | +## Copyright (c) 2007-2008 Andreas Kupries. | |
| 5 | +# | |
| 6 | +# This software is licensed as described in the file LICENSE, which | |
| 7 | +# you should have received as part of this distribution. | |
| 8 | +# | |
| 9 | +# This software consists of voluntary contributions made by many | |
| 10 | +# individuals. For exact contribution history, see the revision | |
| 11 | +# history and logs, available at http://fossil-scm.hwaci.com/fossil | |
| 12 | +# # ## ### ##### ######## ############# ##################### | |
| 13 | + | |
| 14 | +## Pass II. This pass parses the collected rcs archives and extracts | |
| 15 | +## all the information they contain (revisions, and symbols). | |
| 16 | + | |
| 17 | +# # ## ### ##### ######## ############# ##################### | |
| 18 | +## Requirements | |
| 19 | + | |
| 20 | +package require Tcl 8.4 ; # Required runtime. | |
| 21 | +package require snit ; # OO system. | |
| 22 | +package require vc::tools::trouble ; # Error reporting. | |
| 23 | +package require vc::tools::log ; # User feedback. | |
| 24 | +package require vc::fossil::import::cvs::pass ; # Pass management. | |
| 25 | +package require vc::fossil::import::cvs::repository ; # Repository management. | |
| 26 | +package require vc::fossil::import::cvs::state ; # State storage. | |
| 27 | +package require vc::fossil::import::cvs::integrity ; # State integrity checks. | |
| 28 | +package require vc::fossil::import::cvs::project::sym ; # Project level symbols. | |
| 29 | +package require vc::fossil::import::cvs::file::rev ; # File level revisions. | |
| 30 | +package require vc::rcs::parser ; # Rcs archive data extraction. | |
| 31 | + | |
| 32 | +# # ## ### ##### ######## ############# ##################### | |
| 33 | +## Register the pass with the management | |
| 34 | + | |
| 35 | +vc::fossil::import::cvs::pass define \ | |
| 36 | + CollectRev \ | |
| 37 | + {Collect revisions and symbols} \ | |
| 38 | + ::vc::fossil::import::cvs::pass::collrev | |
| 39 | + | |
| 40 | +# # ## ### ##### ######## ########### ## ##################### | |
| 41 | +## | |
| 42 | + | |
| 43 | +snit::type ::vc::fossil::import::cvs::pass::collrev { | |
| 44 | + # # ## ### ##### ######## ############# | |
| 45 | + ## Public API | |
| 46 | + | |
| 47 | + typemethod setup {} { | |
| 48 | + # Define names and strucreading project | |
| 49 | + state readingtate use project | |
| 50 | + state use file | |
| 51 | + | |
| 52 | + # We deal with per project and per file data, the first | |
| 53 | + # collated from the second. | |
| 54 | + | |
| 55 | + # Per file we have general information, ..., and then | |
| 56 | + # revisions and symbols. The latter can be further separated | |
| 57 | + # into tags and branches. At project level the per-file | |
| 58 | + # symbols information is merged. | |
| 59 | + | |
| 60 | + # File level ... | |
| 61 | + # Revisions, Branches, Tags | |
| 62 | + # | |
| 63 | + # Pseudo class hierarchy | |
| 64 | + # Tag <- Symbol <- Event | |
| 65 | + # Branch <- Symbol <- Event | |
| 66 | + # Revision writing ; # OO system. | |
| 67 | +package require vc::tools::trouble ; # Error reporting. | |
| 68 | +package require vc::tools::log ; # User feedback. | |
| 69 | +package require vc::fossil::import::cvs::pass ; # Pass management. | |
| 70 | +package require vc::fossil::import::cvs::repository ; # Repository management. | |
| 71 | +package require vc::fossil::import::cvs::state ; # State storage. | |
| 72 | +package require vc::fossil::import::cvs::integrity ; # State integrity checks. | |
| 73 | +package require vc::fossil::import::cvs::project::sym ; # Project level symbols. | |
| 74 | +package require vc::fossil::import::cvs::file::rev ; # File level revisions. | |
| 75 | +package require vc::rcs::parser ; # Rcs archive data extraction. | |
| 76 | + | |
| 77 | +# # ## ### ##### ######## ############# ##################### | |
| 78 | +## Register the pass with the management | |
| 79 | + | |
| 80 | +vc::fossil::import::cvs::pass define \ | |
| 81 | + CollectRev \ | |
| 82 | + {Collect revisions and symbols} \ | |
| 83 | + ::vc::fossil::import::cvs::pass::collrev | |
| 84 | + | |
| 85 | +# # ## ### ##### ######## ############# ##################### | |
| 86 | +## | |
| 87 | + | |
| 88 | +snit::type ::vc::fossil::import::cvs::pass::collrev { | |
| 89 | + # # ## ### ##### ######## ############# | |
| 90 | + ## Public API | |
| 91 | + | |
| 92 | + typemethod setup {} { | |
| 93 | + # Define names and structure of the persistent state of this | |
| 94 | + # pass. | |
| 95 | + | |
| 96 | + state use project | |
| 97 | + state use file | |
| 98 | + | |
| 99 | + # We deal with per project and per file data, the first | |
| 100 | + # collated from the second. | |
| 101 | + | |
| 102 | + # Per file we have general information, ..., and then | |
| 103 | + # revisions and symbols. The latter can be further separated | |
| 104 | + # into tags and branches. At project level the per-file | |
| 105 | + # symbols information is merged. | |
| 106 | + | |
| 107 | + # File lwritingvision, | |
| 108 | + dbchild INTEGER REFERENCES revision, | |
| 109 | + | |
| 110 | + -- The main payload of the revision are the date/time it | |
| 111 | + -- was entered, its state, operation (= type/class), text | |
| 112 | + -- content, and meta data (author, log message, branch, | |
| 113 | + -- project). The last is encoded as single id, see table | |
| 114 | + -- 'meta'. The date/time is given in seconds since the | |
| 115 | + -- The text content writing --## Copyright (c) 2007-2008 And## -*- tcl -*- | |
| 116 | +# # ## nothing to | |
| 117 | + -- sprout from, the dead revision was removed, hence no | |
| 118 | + -- root. | |
| 119 | + } { root first sid } | |
| 120 | + # Indices on: root (revision successors) | |
| 121 | + # first (revision predecessors) | |
| 122 | + # sid (tag predecessors, branch successors/predecewritingot of | |
| 123 | + -- the trunk. The root also has a non-NULL dbparent | |
| 124 | + -- refering to X. | |
| 125 | + | |
| 126 | + isdefault INTEGER NOT NULL, | |
| 127 | + dbparent INTEGER REFERENCES revision, | |
| 128 | + dbchild INTEGER REFERENCES revision, | |
| 129 | + | |
| 130 | + -- The main payload of the revision are the date/time it | |
| 131 | + -- was entered, its state, operation (= type/class), text | |
| 132 | + -- content, and meta data (author, log message, branch, | |
| 133 | + -- project). The last y after it has beecontent is an | |
| 134 | + --## Copyright (c) 2007-2008 And## -*- tcl -*- | |
| 135 | +# # ## nothing to | |
| 136 | + -- sprout from, the dead revision was removed, hence no | |
| 137 | + -- root. | |
| 138 | + } { root first sid } | |
| 139 | + # Indices on: root (revision successors) | |
| 140 | + # first (revision predecessors) | |
| 141 | + # sid (tag predecessors, branch sucarent INTEGER REFER sid (tag predecesES revision, | |
| 142 | + dbchild INTEGER REFERENCES revision, | |
| 143 | + | |
| 144 | + -- The main payload of the revision are the date/time it | |
| 145 | + -- was entered, its state, operation (= type/class), text | |
| 146 | + -- content, and meta data (author, log message, branch, | |
| 147 | + -- project). The# -*- tcl -*- | |
| 148 | +# # ## ### ##### ######## ############# ##################### | |
| 149 | +## Copyright (c) 2007 | |
| 150 | +## Copyright (c) 2007-2008 Andreas Kupries. | |
| 151 | +# | |
| 152 | +# This software is licensed as described in the file LICENSE, which | |
| 153 | +# you should have received as part of this distribution. | |
| 154 | +# | |
| 155 | +# This software consists of voluntary contributions made by many | |
| 156 | +# individuals. For exact contribution history, see the revision | |
| 157 | +# history and logs, available at http://fossil-scm.hwaci.com/fossil | |
| 158 | +# # ## ### ##### ######## ############# ##################### | |
| 159 | + | |
| 160 | +## Pass II. This pass parses the collected rcs archives and extracts | |
| 161 | +## all the information they contain (revisions, and symbols). | |
| 162 | + | |
| 163 | +# # ## ### ##### ######## ############# ##################### | |
| 164 | +## Requirements | |
| 165 | + | |
| 166 | +package require Tcl 8.4 ; # Required runtime. | |
| 167 | +package require snit ; # OO system. | |
| 168 | +package require vc::tools::trouble ; # Error reporting. | |
| 169 | +package require vc::tools:: | |
| 170 | + bmain payload of the revision are User feedback. | |
| 171 | +package require vc::fossil::import::cvs::pass ; # Pass management. | |
| 172 | +package require vc::fossil::import::cvs::repository ; # Repository management. | |
| 173 | +package require vc::fossil::import::cvs::state ; # State storage. | |
| 174 | +package require vc::fossil::import::cvs::integrity |
| --- a/tools/cvs2fossil/lib/c2f_pcollrev.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_pcollrev.tcl | |
| @@ -0,0 +1,174 @@ | |
| --- a/tools/cvs2fossil/lib/c2f_pcollrev.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_pcollrev.tcl | |
| @@ -0,0 +1,174 @@ | |
| 1 | ## -*- tcl -*- |
| 2 | # # ## ### ##### ######## ############# ##################### |
| 3 | ## Copyright (c) 2007 |
| 4 | ## Copyright (c) 2007-2008 Andreas Kupries. |
| 5 | # |
| 6 | # This software is licensed as described in the file LICENSE, which |
| 7 | # you should have received as part of this distribution. |
| 8 | # |
| 9 | # This software consists of voluntary contributions made by many |
| 10 | # individuals. For exact contribution history, see the revision |
| 11 | # history and logs, available at http://fossil-scm.hwaci.com/fossil |
| 12 | # # ## ### ##### ######## ############# ##################### |
| 13 | |
| 14 | ## Pass II. This pass parses the collected rcs archives and extracts |
| 15 | ## all the information they contain (revisions, and symbols). |
| 16 | |
| 17 | # # ## ### ##### ######## ############# ##################### |
| 18 | ## Requirements |
| 19 | |
| 20 | package require Tcl 8.4 ; # Required runtime. |
| 21 | package require snit ; # OO system. |
| 22 | package require vc::tools::trouble ; # Error reporting. |
| 23 | package require vc::tools::log ; # User feedback. |
| 24 | package require vc::fossil::import::cvs::pass ; # Pass management. |
| 25 | package require vc::fossil::import::cvs::repository ; # Repository management. |
| 26 | package require vc::fossil::import::cvs::state ; # State storage. |
| 27 | package require vc::fossil::import::cvs::integrity ; # State integrity checks. |
| 28 | package require vc::fossil::import::cvs::project::sym ; # Project level symbols. |
| 29 | package require vc::fossil::import::cvs::file::rev ; # File level revisions. |
| 30 | package require vc::rcs::parser ; # Rcs archive data extraction. |
| 31 | |
| 32 | # # ## ### ##### ######## ############# ##################### |
| 33 | ## Register the pass with the management |
| 34 | |
| 35 | vc::fossil::import::cvs::pass define \ |
| 36 | CollectRev \ |
| 37 | {Collect revisions and symbols} \ |
| 38 | ::vc::fossil::import::cvs::pass::collrev |
| 39 | |
| 40 | # # ## ### ##### ######## ########### ## ##################### |
| 41 | ## |
| 42 | |
| 43 | snit::type ::vc::fossil::import::cvs::pass::collrev { |
| 44 | # # ## ### ##### ######## ############# |
| 45 | ## Public API |
| 46 | |
| 47 | typemethod setup {} { |
| 48 | # Define names and strucreading project |
| 49 | state readingtate use project |
| 50 | state use file |
| 51 | |
| 52 | # We deal with per project and per file data, the first |
| 53 | # collated from the second. |
| 54 | |
| 55 | # Per file we have general information, ..., and then |
| 56 | # revisions and symbols. The latter can be further separated |
| 57 | # into tags and branches. At project level the per-file |
| 58 | # symbols information is merged. |
| 59 | |
| 60 | # File level ... |
| 61 | # Revisions, Branches, Tags |
| 62 | # |
| 63 | # Pseudo class hierarchy |
| 64 | # Tag <- Symbol <- Event |
| 65 | # Branch <- Symbol <- Event |
| 66 | # Revision writing ; # OO system. |
| 67 | package require vc::tools::trouble ; # Error reporting. |
| 68 | package require vc::tools::log ; # User feedback. |
| 69 | package require vc::fossil::import::cvs::pass ; # Pass management. |
| 70 | package require vc::fossil::import::cvs::repository ; # Repository management. |
| 71 | package require vc::fossil::import::cvs::state ; # State storage. |
| 72 | package require vc::fossil::import::cvs::integrity ; # State integrity checks. |
| 73 | package require vc::fossil::import::cvs::project::sym ; # Project level symbols. |
| 74 | package require vc::fossil::import::cvs::file::rev ; # File level revisions. |
| 75 | package require vc::rcs::parser ; # Rcs archive data extraction. |
| 76 | |
| 77 | # # ## ### ##### ######## ############# ##################### |
| 78 | ## Register the pass with the management |
| 79 | |
| 80 | vc::fossil::import::cvs::pass define \ |
| 81 | CollectRev \ |
| 82 | {Collect revisions and symbols} \ |
| 83 | ::vc::fossil::import::cvs::pass::collrev |
| 84 | |
| 85 | # # ## ### ##### ######## ############# ##################### |
| 86 | ## |
| 87 | |
| 88 | snit::type ::vc::fossil::import::cvs::pass::collrev { |
| 89 | # # ## ### ##### ######## ############# |
| 90 | ## Public API |
| 91 | |
| 92 | typemethod setup {} { |
| 93 | # Define names and structure of the persistent state of this |
| 94 | # pass. |
| 95 | |
| 96 | state use project |
| 97 | state use file |
| 98 | |
| 99 | # We deal with per project and per file data, the first |
| 100 | # collated from the second. |
| 101 | |
| 102 | # Per file we have general information, ..., and then |
| 103 | # revisions and symbols. The latter can be further separated |
| 104 | # into tags and branches. At project level the per-file |
| 105 | # symbols information is merged. |
| 106 | |
| 107 | # File lwritingvision, |
| 108 | dbchild INTEGER REFERENCES revision, |
| 109 | |
| 110 | -- The main payload of the revision are the date/time it |
| 111 | -- was entered, its state, operation (= type/class), text |
| 112 | -- content, and meta data (author, log message, branch, |
| 113 | -- project). The last is encoded as single id, see table |
| 114 | -- 'meta'. The date/time is given in seconds since the |
| 115 | -- The text content writing --## Copyright (c) 2007-2008 And## -*- tcl -*- |
| 116 | # # ## nothing to |
| 117 | -- sprout from, the dead revision was removed, hence no |
| 118 | -- root. |
| 119 | } { root first sid } |
| 120 | # Indices on: root (revision successors) |
| 121 | # first (revision predecessors) |
| 122 | # sid (tag predecessors, branch successors/predecewritingot of |
| 123 | -- the trunk. The root also has a non-NULL dbparent |
| 124 | -- refering to X. |
| 125 | |
| 126 | isdefault INTEGER NOT NULL, |
| 127 | dbparent INTEGER REFERENCES revision, |
| 128 | dbchild INTEGER REFERENCES revision, |
| 129 | |
| 130 | -- The main payload of the revision are the date/time it |
| 131 | -- was entered, its state, operation (= type/class), text |
| 132 | -- content, and meta data (author, log message, branch, |
| 133 | -- project). The last y after it has beecontent is an |
| 134 | --## Copyright (c) 2007-2008 And## -*- tcl -*- |
| 135 | # # ## nothing to |
| 136 | -- sprout from, the dead revision was removed, hence no |
| 137 | -- root. |
| 138 | } { root first sid } |
| 139 | # Indices on: root (revision successors) |
| 140 | # first (revision predecessors) |
| 141 | # sid (tag predecessors, branch sucarent INTEGER REFER sid (tag predecesES revision, |
| 142 | dbchild INTEGER REFERENCES revision, |
| 143 | |
| 144 | -- The main payload of the revision are the date/time it |
| 145 | -- was entered, its state, operation (= type/class), text |
| 146 | -- content, and meta data (author, log message, branch, |
| 147 | -- project). The# -*- tcl -*- |
| 148 | # # ## ### ##### ######## ############# ##################### |
| 149 | ## Copyright (c) 2007 |
| 150 | ## Copyright (c) 2007-2008 Andreas Kupries. |
| 151 | # |
| 152 | # This software is licensed as described in the file LICENSE, which |
| 153 | # you should have received as part of this distribution. |
| 154 | # |
| 155 | # This software consists of voluntary contributions made by many |
| 156 | # individuals. For exact contribution history, see the revision |
| 157 | # history and logs, available at http://fossil-scm.hwaci.com/fossil |
| 158 | # # ## ### ##### ######## ############# ##################### |
| 159 | |
| 160 | ## Pass II. This pass parses the collected rcs archives and extracts |
| 161 | ## all the information they contain (revisions, and symbols). |
| 162 | |
| 163 | # # ## ### ##### ######## ############# ##################### |
| 164 | ## Requirements |
| 165 | |
| 166 | package require Tcl 8.4 ; # Required runtime. |
| 167 | package require snit ; # OO system. |
| 168 | package require vc::tools::trouble ; # Error reporting. |
| 169 | package require vc::tools:: |
| 170 | bmain payload of the revision are User feedback. |
| 171 | package require vc::fossil::import::cvs::pass ; # Pass management. |
| 172 | package require vc::fossil::import::cvs::repository ; # Repository management. |
| 173 | package require vc::fossil::import::cvs::state ; # State storage. |
| 174 | package require vc::fossil::import::cvs::integrity |
| --- a/tools/cvs2fossil/lib/c2f_pcollsym.tcl | ||
| +++ b/tools/cvs2fossil/lib/c2f_pcollsym.tcl | ||
| @@ -0,0 +1,112 @@ | ||
| 1 | +## -*- tcl -* ######## ##########ted`)) -- Restrict to symeleted by this pass, not only marked. It is the next | |
| 2 | +## pass however, 'FilterSym', which performs the full deletion. | |
| 3 | + | |
| 4 | +# # ## ### ##### ######## ############# ##################### | |
| 5 | +## Requirements | |
| 6 | + | |
| 7 | +package require Tcl 8.4 ; # Required runtime. | |
| 8 | +package require snit ; # OO system. | |
| 9 | +package require vc::tools::trouble ; # Error reporting. | |
| 10 | +package require vc::tools::log ; # User feedback. | |
| 11 | +package require vc::fossil::import::cvs::repository ; # Repository management. | |
| 12 | +package require vc::fossil::import::cvs::state ; # State storage. | |
| 13 | +package require vc::fossil::import::cvs::project::sym ; # Project level symbols | |
| 14 | + | |
| 15 | +# # ## ### ##### ######## ############# ##################### | |
| 16 | +## Register the pass with the management | |
| 17 | + | |
| 18 | +vc::fossil::import::cvs::pass define \ | |
| 19 | + CollateSymbols \ | |
| 20 | + {Collate symbols} \ | |
| 21 | + ::vc::fossil::import::cvs::pass::collsym | |
| 22 | + | |
| 23 | +# # ## ### ##### ######## ############# ##################### | |
| 24 | +## | |
| 25 | + | |
| 26 | +snit::type ::vc::fossil::import:pass. | |
| 27 | + | |
| 28 | + state use project | |
| 29 | + state use symbol | |
| 30 | + state use symtype | |
| 31 | + state use blocker | |
| 32 | + state use parent | |
| 33 | + | |
| 34 | + state extend preferedparent { | |
| 35 | + reading symbol | |
| 36 | + state reading blocker | |
| 37 | + state reading parent | |
| 38 | + | |
| 39 | + state writinghe symbol '$snamminePref= $undefreachrow { | |
| 40 | + S one tree per | |
| 41 | + -- project. | |
| 42 | + | |
| 43 | + sid INTEGER NOT NULL PRIMARY KEY RE] { | |
| 44 | + trouble fatal "$p## -*- tcl -*- | |
| 45 | +# # ## ### ##### ######## ############# ##################### | |
| 46 | +## Copyright (c) 2007 Andreas Kupries. | |
| 47 | +# | |
| 48 | +# This software is licensed as described in the file LICENSE, which | |
| 49 | +# you should h *- | |
| 50 | +# # ## ### ##### #### -*- tcl -*- | |
| 51 | +# ### -*- tcl -*- | |
| 52 | +# name | |
| 53 | + FROM symbol S, project P | |
| 54 | + WHERE S.type NOT IN (0,1,2) -- Restrict to symbols with bogus type codes | |
| 55 | + AND P.pid = S.pid -- Get project of symbol | |
| 56 | + } { | |
| 57 | + trouble fatal "$pname : The symbol '$sname' has no proper conversion type" | |
| 58 | + } | |
| 59 | + return | |
| 60 | + } | |
| 61 | + | |
| 62 | + proc BlockedExcludes {} { | |
| 63 | + # Paranoia - Have we scheduled symbols for exclusion without | |
| 64 | + # also excluding their dependent symbols ? | |
| 65 | + | |
| 66 | + set excl [project::sym excluded] | |
| 67 | + | |
| 68 | + state foreachrow { | |
| 69 | + SELECT P.name AS pname, S.name AS sname, SB.name AS bname | |
| 70 | + FROM symbol S, blocker B, symbol SB, project P | |
| 71 | + WHERE S.type = $excl -- Restrict to excluded symbols | |
| 72 | + AND S.sid = B.sid -- Get symbols blocking them | |
| 73 | + AND B.bid = SB.sid -- and | |
| 74 | + AND SB.type != $excl -- which are not excluded themselves | |
| 75 | + AND P.pid = S.pid -- Get project of symbol | |
| 76 | + } { | |
| 77 | + trouble fatal "$pname : The symbol '$sname' cannot be excluded as the unexcluded symbol '$bname' depends on it." | |
| 78 | + } | |
| 79 | + return | |
| 80 | + } | |
| 81 | + | |
| 82 | + proc InvalidTags {} { | |
| 83 | + # Paranoi, we | |
| 84 | + # # Paranoia - Have we not | |
| 85 | + # # which absolutely cannot be converted as tags due to commits | |
| 86 | + # made on them ? | |
| 87 | + | |
| 88 | + # In other words, this checks finds out if the user has asked | |
| 89 | + # nonsensical conversions of symbols, which should have been | |
| 90 | + # left to the heuristics, most specifically | |
| 91 | + # 'project::sym.HasCommits()'. | |
| 92 | + | |
| 93 | + set tag [project::sym tag] | |
| 94 | + | |
| 95 | + state foreachrow { | |
| 96 | + SELECT P.name AS pname, S.name AS sname | |
| 97 | + FROM project P, symbol S | |
| 98 | + WHERE S.type = $tag -- Restrict to tag symbols | |
| 99 | + AND S.commit_count > 0 -- which have revisions committed to them | |
| 100 | + AND P.pid = S.pid -- Get project of symbol | |
| 101 | + } { | |
| 102 | + trouble fatal "$pname : The symbol '$sname' cannot be forced to be converted as tag because it has commits." | |
| 103 | + } | |
| 104 | + return | |
| 105 | + } | |
| 106 | + | |
| 107 | + proc DropExcludedSymbolsFromReferences {} { | |
| 108 | + # The excluded symbols cann be used as blockers nor as | |
| 109 | + # possible parent for other symbols. We now drop the relevant | |
| 110 | + # entries to prevent them from causing confusion later on. | |
| 111 | + | |
| 112 | + set excl [project |
| --- a/tools/cvs2fossil/lib/c2f_pcollsym.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_pcollsym.tcl | |
| @@ -0,0 +1,112 @@ | |
| --- a/tools/cvs2fossil/lib/c2f_pcollsym.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_pcollsym.tcl | |
| @@ -0,0 +1,112 @@ | |
| 1 | ## -*- tcl -* ######## ##########ted`)) -- Restrict to symeleted by this pass, not only marked. It is the next |
| 2 | ## pass however, 'FilterSym', which performs the full deletion. |
| 3 | |
| 4 | # # ## ### ##### ######## ############# ##################### |
| 5 | ## Requirements |
| 6 | |
| 7 | package require Tcl 8.4 ; # Required runtime. |
| 8 | package require snit ; # OO system. |
| 9 | package require vc::tools::trouble ; # Error reporting. |
| 10 | package require vc::tools::log ; # User feedback. |
| 11 | package require vc::fossil::import::cvs::repository ; # Repository management. |
| 12 | package require vc::fossil::import::cvs::state ; # State storage. |
| 13 | package require vc::fossil::import::cvs::project::sym ; # Project level symbols |
| 14 | |
| 15 | # # ## ### ##### ######## ############# ##################### |
| 16 | ## Register the pass with the management |
| 17 | |
| 18 | vc::fossil::import::cvs::pass define \ |
| 19 | CollateSymbols \ |
| 20 | {Collate symbols} \ |
| 21 | ::vc::fossil::import::cvs::pass::collsym |
| 22 | |
| 23 | # # ## ### ##### ######## ############# ##################### |
| 24 | ## |
| 25 | |
| 26 | snit::type ::vc::fossil::import:pass. |
| 27 | |
| 28 | state use project |
| 29 | state use symbol |
| 30 | state use symtype |
| 31 | state use blocker |
| 32 | state use parent |
| 33 | |
| 34 | state extend preferedparent { |
| 35 | reading symbol |
| 36 | state reading blocker |
| 37 | state reading parent |
| 38 | |
| 39 | state writinghe symbol '$snamminePref= $undefreachrow { |
| 40 | S one tree per |
| 41 | -- project. |
| 42 | |
| 43 | sid INTEGER NOT NULL PRIMARY KEY RE] { |
| 44 | trouble fatal "$p## -*- tcl -*- |
| 45 | # # ## ### ##### ######## ############# ##################### |
| 46 | ## Copyright (c) 2007 Andreas Kupries. |
| 47 | # |
| 48 | # This software is licensed as described in the file LICENSE, which |
| 49 | # you should h *- |
| 50 | # # ## ### ##### #### -*- tcl -*- |
| 51 | # ### -*- tcl -*- |
| 52 | # name |
| 53 | FROM symbol S, project P |
| 54 | WHERE S.type NOT IN (0,1,2) -- Restrict to symbols with bogus type codes |
| 55 | AND P.pid = S.pid -- Get project of symbol |
| 56 | } { |
| 57 | trouble fatal "$pname : The symbol '$sname' has no proper conversion type" |
| 58 | } |
| 59 | return |
| 60 | } |
| 61 | |
| 62 | proc BlockedExcludes {} { |
| 63 | # Paranoia - Have we scheduled symbols for exclusion without |
| 64 | # also excluding their dependent symbols ? |
| 65 | |
| 66 | set excl [project::sym excluded] |
| 67 | |
| 68 | state foreachrow { |
| 69 | SELECT P.name AS pname, S.name AS sname, SB.name AS bname |
| 70 | FROM symbol S, blocker B, symbol SB, project P |
| 71 | WHERE S.type = $excl -- Restrict to excluded symbols |
| 72 | AND S.sid = B.sid -- Get symbols blocking them |
| 73 | AND B.bid = SB.sid -- and |
| 74 | AND SB.type != $excl -- which are not excluded themselves |
| 75 | AND P.pid = S.pid -- Get project of symbol |
| 76 | } { |
| 77 | trouble fatal "$pname : The symbol '$sname' cannot be excluded as the unexcluded symbol '$bname' depends on it." |
| 78 | } |
| 79 | return |
| 80 | } |
| 81 | |
| 82 | proc InvalidTags {} { |
| 83 | # Paranoi, we |
| 84 | # # Paranoia - Have we not |
| 85 | # # which absolutely cannot be converted as tags due to commits |
| 86 | # made on them ? |
| 87 | |
| 88 | # In other words, this checks finds out if the user has asked |
| 89 | # nonsensical conversions of symbols, which should have been |
| 90 | # left to the heuristics, most specifically |
| 91 | # 'project::sym.HasCommits()'. |
| 92 | |
| 93 | set tag [project::sym tag] |
| 94 | |
| 95 | state foreachrow { |
| 96 | SELECT P.name AS pname, S.name AS sname |
| 97 | FROM project P, symbol S |
| 98 | WHERE S.type = $tag -- Restrict to tag symbols |
| 99 | AND S.commit_count > 0 -- which have revisions committed to them |
| 100 | AND P.pid = S.pid -- Get project of symbol |
| 101 | } { |
| 102 | trouble fatal "$pname : The symbol '$sname' cannot be forced to be converted as tag because it has commits." |
| 103 | } |
| 104 | return |
| 105 | } |
| 106 | |
| 107 | proc DropExcludedSymbolsFromReferences {} { |
| 108 | # The excluded symbols cann be used as blockers nor as |
| 109 | # possible parent for other symbols. We now drop the relevant |
| 110 | # entries to prevent them from causing confusion later on. |
| 111 | |
| 112 | set excl [project |
| --- a/tools/cvs2fossil/lib/c2f_pfiltersym.tcl | ||
| +++ b/tools/cvs2fossil/lib/c2f_pfiltersym.tcl | ||
| @@ -0,0 +1,3 @@ | ||
| 1 | + tag] into branches | |
| 2 | +# | |
| 3 | +# This softwar## -*- tcl |
| --- a/tools/cvs2fossil/lib/c2f_pfiltersym.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_pfiltersym.tcl | |
| @@ -0,0 +1,3 @@ | |
| --- a/tools/cvs2fossil/lib/c2f_pfiltersym.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_pfiltersym.tcl | |
| @@ -0,0 +1,3 @@ | |
| 1 | tag] into branches |
| 2 | # |
| 3 | # This softwar## -*- tcl |
| --- a/tools/cvs2fossil/lib/c2f_pinitcsets.tcl | ||
| +++ b/tools/cvs2fossil/lib/c2f_pinitcsets.tcl | ||
| @@ -0,0 +1,124 @@ | ||
| 1 | +## -*- tcl -*- | |
| 2 | +# # ## ### ##### ######## ############# ##################### | |
| 3 | +## Copyright (c) 2007 | |
| 4 | +## Copyright (c) 2007-2008 Andreas Kupries. | |
| 5 | +# | |
| 6 | +# This software is licensed}set oldin the loop below uses | |
| 7 | + # | |
| 8 | + # TODO: Move to project::rev | |
| 9 | + set n 0 | |
| 10 | + log write 2 initcsets {Loading the changesets} | |
| 11 | +# -*- tcl -*- | |
| 12 | +# # ## ### ##### ######## ############# ##################### | |
| 13 | +## Copyright (c) 2007 | |
| 14 | +## Copyright (c) 2007-2008 Andreas Kupries. | |
| 15 | +# | |
| 16 | +# This software is licensed}set old*- | |
| 17 | +# # ## ### ##### ######## ############# ##################### | |
| 18 | +## Copyright (c) 2007 | |
| 19 | +## Copyright (c) 2007-2008 Andreas Kupries. | |
| 20 | +# | |
| 21 | +# Thispid] $cstype $srcid [state run { | |
| 22 | + SELECT C.iid | |
| 23 | + FROM csitem C | |
| 24 | + WHERE C.cid = $id | |
| 25 | + ORDER BY C.pos | |
| 26 | + }] $id] | |
| 27 | + incr n | |
| 28 | + } | |
| 29 | +counter# Copyright (c) 2007## -*- tcl -*- | |
| 30 | +# # ## ### ##### ######## ############# ##################### | |
| 31 | +## Copyright (c) 2007 | |
| 32 | +## Copyright (c) 2007-2008 Andreas Kupries. | |
| 33 | +# | |
| 34 | +# This software is licensed}set oldreading meta | |
| 35 | + state readingreadingreading branch | |
| 36 | + state readinwriting## -*- tcl -*- | |
| 37 | +# # ## ### ####ght (c) 2007 | |
| 38 | +## Copyright (c) 2007-2008 Andreas Kupries. | |
| 39 | +# | |
| 40 | +# This software ### ##### ######## ############### -*- t# Copyright (c) 2 the revisions | |
| 41 | + #are is## -*- tcl -*- changeset. | |
| 42 | + an appear | |
| 43 | + # in both revision and symbol changesets, and in multiple | |
| 44 | + ts {Loading the changesets} | |
| 45 | +# -*- tcl -*- | |
| 46 | +# # ## ### ##### ######## ############# ##################### | |
| 47 | +## Copyright (c) 200revision Copyright (c) 2007-2008 Andreas Kupries. | |
| 48 | +# | |
| 49 | +# This software is licensed}set old* [projecrid## Copyright (c) 20) 2007 | |
| 50 | +## Copyright (c) 2007-2008 Andreas Kupries. | |
| 51 | +# | |
| 52 | +# This software is licensrid) | |
| 53 | + } | |
| 54 | + | |
| 55 | + state readinwriting## -*### ######## ############# ##################### | |
| 56 | +## Copyright (c) 2007 | |
| 57 | +## Copyright (c) 2007-2008 Andreas Kupries. | |
| 58 | +# | |
| 59 | +# This software is licensed}set old*- | |
| 60 | +# # ## revision7 | |
| 61 | +## Copyright (c)ries. | |
| 62 | +# | |
| 63 | +# This software is licensed}set oldreading meta | |
| 64 | + state readingreadingreading branch | |
| 65 | + state readinwriting## -*- tcl -*- | |
| 66 | +# # ## ### ##### ######## ############# ##################### | |
| 67 | +## Copyright (c) 2007 | |
| 68 | +## Copyright (c) 2007-2008 Andreas Kupries. | |
| 69 | +# | |
| 70 | +# This software is licensed}set oldin the loop below uses | |
| 71 | + # | |
| 72 | + # TODO: Move to pr### ###ght (c) 2007 | |
| 73 | +## Copyright (c) 2007-2008 Andreas Kupries. | |
| 74 | +# | |
| 75 | +# This softwarerid | |
| 76 | + FROM csrevisionsoftware is licensed}set oldwrite rerevisionrevisionsrrevisionrevisionsr | |
| 77 | + # unique within the chan Check ifH@K0,F: are possible. | |
| 78 | +I@eG,1r@uq,1: K@wk,1:,59@xE,5l@13Y,A:getcstypeslo@193,7:lod 9@24~,4:lastR@24t,S: {} | |
| 79 | + | |
| 80 | + foreach {sid rid lod pT@13x,s:S.sid, R.rid, R.lod, S.pid | |
| 81 | + FROM tag T, revision R14@1wf,M:rev = R.rid | |
| 82 | + AND _@1xg,4:R.loP@1gg,g:($lastlod != $lod) || ($lastsymbol != $sid)20@28u,1K@1~x,B:lod $lo2q@1kR,3:symP@1~x,3:} | |
| 83 | + | |
| 84 | +G@20l,I:{} | |
| 85 | + set lastlod y@24h,5:lod pT@13x,I:S.sid, R.rid, R.loU@26I,A:revision R11@26j,N:root = R.rid | |
| 86 | + AND a@27h,4:R.loP@1g}d*- | |
| 87 | +# # ## revision7 | |
| 88 | +## Copyrig is licensed}set old* [projecrid## Copyright (c) 20) 2007 | |
| 89 | +## Copyright (c) 2007-2008 Andreas Kupries. | |
| 90 | +# | |
| 91 | +# This software is licensrid) | |
| 92 | + } | |
| 93 | + | |
| 94 | + state readinwriting## -*### ######## ############# ##################### | |
| 95 | +## Copyright (c) 2007 | |
| 96 | +## Copyright (c) 2007-2008 Andreas Kupries. | |
| 97 | +# | |
| 98 | +# This software is licensed}set old*- | |
| 99 | +# # ## revision7 | |
| 100 | +## Copyright (c)ries. | |
| 101 | +# | |
| 102 | +# This software is licensed}set oldreading meta | |
| 103 | + state readingreadingreading branch | |
| 104 | + state readinwriting## -*- tcl -*- | |
| 105 | +# # ## ### ##### ######## ############# ##################### | |
| 106 | +## Copyright (c) 2007 | |
| 107 | +## Copyright (c) 2007-2008 Andreas Kupries. | |
| 108 | +# | |
| 109 | +# This software is licensed}set oldin the loop below uses | |
| 110 | + # | |
| 111 | + # TODO: Move to pr### ###ght (c) 2007 | |
| 112 | +## Copyright (c) 2007-2008 Andreas Kupries. | |
| 113 | +# | |
| 114 | +# This softwarerid | |
| 115 | + FROM csrevisionsoftware is licensed}set oldwrite rerevisionrevisionsrrevisionrevisionsr | |
| 116 | + # unique within the chan Check ifH@K0,F: are possible. | |
| 117 | +I@eG,1r@uq,1: K@wk,1:,59@xE,5l@13Y,A:getcstypeslo@193,7:lod 9@24~,4:lastR@24t,S: {} | |
| 118 | + | |
| 119 | + foreach {sid rid lod pT@13x,s:S.sid, R.rid, R.lod, S.pid | |
| 120 | + FROM tag T, revision R14@1wf,M:rev = R.rid | |
| 121 | + AND _@1xg,4:R.loP@1gg,g:($lastlod != $lod) || ($lastsymbol != $sid)20@28u,1K@1~x,B:lod ] | |
| 122 | + $r setid $ido2q@1kR,3:symP@1~x,3:} | |
| 123 | + | |
| 124 | +G@20l,Id, R.rid, R.l |
| --- a/tools/cvs2fossil/lib/c2f_pinitcsets.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_pinitcsets.tcl | |
| @@ -0,0 +1,124 @@ | |
| --- a/tools/cvs2fossil/lib/c2f_pinitcsets.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_pinitcsets.tcl | |
| @@ -0,0 +1,124 @@ | |
| 1 | ## -*- tcl -*- |
| 2 | # # ## ### ##### ######## ############# ##################### |
| 3 | ## Copyright (c) 2007 |
| 4 | ## Copyright (c) 2007-2008 Andreas Kupries. |
| 5 | # |
| 6 | # This software is licensed}set oldin the loop below uses |
| 7 | # |
| 8 | # TODO: Move to project::rev |
| 9 | set n 0 |
| 10 | log write 2 initcsets {Loading the changesets} |
| 11 | # -*- tcl -*- |
| 12 | # # ## ### ##### ######## ############# ##################### |
| 13 | ## Copyright (c) 2007 |
| 14 | ## Copyright (c) 2007-2008 Andreas Kupries. |
| 15 | # |
| 16 | # This software is licensed}set old*- |
| 17 | # # ## ### ##### ######## ############# ##################### |
| 18 | ## Copyright (c) 2007 |
| 19 | ## Copyright (c) 2007-2008 Andreas Kupries. |
| 20 | # |
| 21 | # Thispid] $cstype $srcid [state run { |
| 22 | SELECT C.iid |
| 23 | FROM csitem C |
| 24 | WHERE C.cid = $id |
| 25 | ORDER BY C.pos |
| 26 | }] $id] |
| 27 | incr n |
| 28 | } |
| 29 | counter# Copyright (c) 2007## -*- tcl -*- |
| 30 | # # ## ### ##### ######## ############# ##################### |
| 31 | ## Copyright (c) 2007 |
| 32 | ## Copyright (c) 2007-2008 Andreas Kupries. |
| 33 | # |
| 34 | # This software is licensed}set oldreading meta |
| 35 | state readingreadingreading branch |
| 36 | state readinwriting## -*- tcl -*- |
| 37 | # # ## ### ####ght (c) 2007 |
| 38 | ## Copyright (c) 2007-2008 Andreas Kupries. |
| 39 | # |
| 40 | # This software ### ##### ######## ############### -*- t# Copyright (c) 2 the revisions |
| 41 | #are is## -*- tcl -*- changeset. |
| 42 | an appear |
| 43 | # in both revision and symbol changesets, and in multiple |
| 44 | ts {Loading the changesets} |
| 45 | # -*- tcl -*- |
| 46 | # # ## ### ##### ######## ############# ##################### |
| 47 | ## Copyright (c) 200revision Copyright (c) 2007-2008 Andreas Kupries. |
| 48 | # |
| 49 | # This software is licensed}set old* [projecrid## Copyright (c) 20) 2007 |
| 50 | ## Copyright (c) 2007-2008 Andreas Kupries. |
| 51 | # |
| 52 | # This software is licensrid) |
| 53 | } |
| 54 | |
| 55 | state readinwriting## -*### ######## ############# ##################### |
| 56 | ## Copyright (c) 2007 |
| 57 | ## Copyright (c) 2007-2008 Andreas Kupries. |
| 58 | # |
| 59 | # This software is licensed}set old*- |
| 60 | # # ## revision7 |
| 61 | ## Copyright (c)ries. |
| 62 | # |
| 63 | # This software is licensed}set oldreading meta |
| 64 | state readingreadingreading branch |
| 65 | state readinwriting## -*- tcl -*- |
| 66 | # # ## ### ##### ######## ############# ##################### |
| 67 | ## Copyright (c) 2007 |
| 68 | ## Copyright (c) 2007-2008 Andreas Kupries. |
| 69 | # |
| 70 | # This software is licensed}set oldin the loop below uses |
| 71 | # |
| 72 | # TODO: Move to pr### ###ght (c) 2007 |
| 73 | ## Copyright (c) 2007-2008 Andreas Kupries. |
| 74 | # |
| 75 | # This softwarerid |
| 76 | FROM csrevisionsoftware is licensed}set oldwrite rerevisionrevisionsrrevisionrevisionsr |
| 77 | # unique within the chan Check ifH@K0,F: are possible. |
| 78 | I@eG,1r@uq,1: K@wk,1:,59@xE,5l@13Y,A:getcstypeslo@193,7:lod 9@24~,4:lastR@24t,S: {} |
| 79 | |
| 80 | foreach {sid rid lod pT@13x,s:S.sid, R.rid, R.lod, S.pid |
| 81 | FROM tag T, revision R14@1wf,M:rev = R.rid |
| 82 | AND _@1xg,4:R.loP@1gg,g:($lastlod != $lod) || ($lastsymbol != $sid)20@28u,1K@1~x,B:lod $lo2q@1kR,3:symP@1~x,3:} |
| 83 | |
| 84 | G@20l,I:{} |
| 85 | set lastlod y@24h,5:lod pT@13x,I:S.sid, R.rid, R.loU@26I,A:revision R11@26j,N:root = R.rid |
| 86 | AND a@27h,4:R.loP@1g}d*- |
| 87 | # # ## revision7 |
| 88 | ## Copyrig is licensed}set old* [projecrid## Copyright (c) 20) 2007 |
| 89 | ## Copyright (c) 2007-2008 Andreas Kupries. |
| 90 | # |
| 91 | # This software is licensrid) |
| 92 | } |
| 93 | |
| 94 | state readinwriting## -*### ######## ############# ##################### |
| 95 | ## Copyright (c) 2007 |
| 96 | ## Copyright (c) 2007-2008 Andreas Kupries. |
| 97 | # |
| 98 | # This software is licensed}set old*- |
| 99 | # # ## revision7 |
| 100 | ## Copyright (c)ries. |
| 101 | # |
| 102 | # This software is licensed}set oldreading meta |
| 103 | state readingreadingreading branch |
| 104 | state readinwriting## -*- tcl -*- |
| 105 | # # ## ### ##### ######## ############# ##################### |
| 106 | ## Copyright (c) 2007 |
| 107 | ## Copyright (c) 2007-2008 Andreas Kupries. |
| 108 | # |
| 109 | # This software is licensed}set oldin the loop below uses |
| 110 | # |
| 111 | # TODO: Move to pr### ###ght (c) 2007 |
| 112 | ## Copyright (c) 2007-2008 Andreas Kupries. |
| 113 | # |
| 114 | # This softwarerid |
| 115 | FROM csrevisionsoftware is licensed}set oldwrite rerevisionrevisionsrrevisionrevisionsr |
| 116 | # unique within the chan Check ifH@K0,F: are possible. |
| 117 | I@eG,1r@uq,1: K@wk,1:,59@xE,5l@13Y,A:getcstypeslo@193,7:lod 9@24~,4:lastR@24t,S: {} |
| 118 | |
| 119 | foreach {sid rid lod pT@13x,s:S.sid, R.rid, R.lod, S.pid |
| 120 | FROM tag T, revision R14@1wf,M:rev = R.rid |
| 121 | AND _@1xg,4:R.loP@1gg,g:($lastlod != $lod) || ($lastsymbol != $sid)20@28u,1K@1~x,B:lod ] |
| 122 | $r setid $ido2q@1kR,3:symP@1~x,3:} |
| 123 | |
| 124 | G@20l,Id, R.rid, R.l |
| --- a/tools/cvs2fossil/lib/c2f_plodmgr.tcl | ||
| +++ b/tools/cvs2fossil/lib/c2f_plodmgr.tcl | ||
| @@ -0,0 +1,56 @@ | ||
| 1 | +## -*- tcl -*- | |
| 2 | +# # ## ### ##### ######## ############# ##################### | |
| 3 | +## Copyright (c) 2007 Andreas Kupries. | |
| 4 | +# | |
| 5 | +# This software is licensed as described in the file LICENSE, which | |
| 6 | +# you should have received as part of this distribution. | |
| 7 | +# | |
| 8 | +# This software consists of voluntary contributions made by many | |
| 9 | +# individuals. For exact contribution history, see the revision | |
| 10 | +# history and logs, available at http://fossil-scm.hwaci.com/fossil | |
| 11 | +# # ## ### ##### ######## ############# ##################### | |
| 12 | + | |
| 13 | +## Lines of Development in a project (Symbols, and the trunk). | |
| 14 | + | |
| 15 | +# # ## ### ##### ######## ############# ##################### | |
| 16 | +## Requirements | |
| 17 | + | |
| 18 | +package require Tcl 8.4 ; # Required runtime. | |
| 19 | +package require snit ; # OO system. | |
| 20 | + | |
| 21 | +# # ## ### ##### ######## ############# ##################### | |
| 22 | +## | |
| 23 | + | |
| 24 | +snit::type ::vc::fossil::import::cvs::project::lodmgr { | |
| 25 | + # # ## ### ##### ######## ############# | |
| 26 | + ## Public API | |
| 27 | + | |
| 28 | + constructor {} { | |
| 29 | + return | |
| 30 | + } | |
| 31 | + | |
| 32 | + # # ## ### ##### ######## ############# | |
| 33 | + ## State | |
| 34 | + | |
| 35 | + # # ## ### ##### ######## ############# | |
| 36 | + ## Internal methods | |
| 37 | + | |
| 38 | + # # ## ### ##### ######## ############# | |
| 39 | + ## Configuration | |
| 40 | + | |
| 41 | + pragma -hastypeinfo no ; # no type introspection | |
| 42 | + pragma -hasinfo no ; # no object introspection | |
| 43 | + pragma -hastypemethods no ; # type is not relevant. | |
| 44 | + pragma -simpledispatch yes ; # simple fast dispatch | |
| 45 | + | |
| 46 | + # # ## ### ##### ######## ############# | |
| 47 | +} | |
| 48 | + | |
| 49 | +namespace eval ::vc::fossil::import::cvs::project { | |
| 50 | + namespace export lodmgr | |
| 51 | +} | |
| 52 | + | |
| 53 | +# # ## ### ##### ######## ############# ##################### | |
| 54 | +## Ready | |
| 55 | + | |
| 56 | +package provide vc::fossil::import::cvs:: |
| --- a/tools/cvs2fossil/lib/c2f_plodmgr.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_plodmgr.tcl | |
| @@ -0,0 +1,56 @@ | |
| --- a/tools/cvs2fossil/lib/c2f_plodmgr.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_plodmgr.tcl | |
| @@ -0,0 +1,56 @@ | |
| 1 | ## -*- tcl -*- |
| 2 | # # ## ### ##### ######## ############# ##################### |
| 3 | ## Copyright (c) 2007 Andreas Kupries. |
| 4 | # |
| 5 | # This software is licensed as described in the file LICENSE, which |
| 6 | # you should have received as part of this distribution. |
| 7 | # |
| 8 | # This software consists of voluntary contributions made by many |
| 9 | # individuals. For exact contribution history, see the revision |
| 10 | # history and logs, available at http://fossil-scm.hwaci.com/fossil |
| 11 | # # ## ### ##### ######## ############# ##################### |
| 12 | |
| 13 | ## Lines of Development in a project (Symbols, and the trunk). |
| 14 | |
| 15 | # # ## ### ##### ######## ############# ##################### |
| 16 | ## Requirements |
| 17 | |
| 18 | package require Tcl 8.4 ; # Required runtime. |
| 19 | package require snit ; # OO system. |
| 20 | |
| 21 | # # ## ### ##### ######## ############# ##################### |
| 22 | ## |
| 23 | |
| 24 | snit::type ::vc::fossil::import::cvs::project::lodmgr { |
| 25 | # # ## ### ##### ######## ############# |
| 26 | ## Public API |
| 27 | |
| 28 | constructor {} { |
| 29 | return |
| 30 | } |
| 31 | |
| 32 | # # ## ### ##### ######## ############# |
| 33 | ## State |
| 34 | |
| 35 | # # ## ### ##### ######## ############# |
| 36 | ## Internal methods |
| 37 | |
| 38 | # # ## ### ##### ######## ############# |
| 39 | ## Configuration |
| 40 | |
| 41 | pragma -hastypeinfo no ; # no type introspection |
| 42 | pragma -hasinfo no ; # no object introspection |
| 43 | pragma -hastypemethods no ; # type is not relevant. |
| 44 | pragma -simpledispatch yes ; # simple fast dispatch |
| 45 | |
| 46 | # # ## ### ##### ######## ############# |
| 47 | } |
| 48 | |
| 49 | namespace eval ::vc::fossil::import::cvs::project { |
| 50 | namespace export lodmgr |
| 51 | } |
| 52 | |
| 53 | # # ## ### ##### ######## ############# ##################### |
| 54 | ## Ready |
| 55 | |
| 56 | package provide vc::fossil::import::cvs:: |
| --- a/tools/cvs2fossil/lib/c2f_prev.tcl | ||
| +++ b/tools/cvs2fossil/lib/c2f_prev.tcl | ||
| @@ -0,0 +1,196 @@ | ||
| 1 | +suc= dict (item -> list (changeset)) | |
| 2 | + method successormap {} { | |
| 3 | + # NOTE / FUTURE: Definitive bottleneck (can be millions of pairs). | |
| 4 | + # | |
| 5 | + # Only user is pass 9, computing the limits of backward | |
| 6 | + # branches per branch. TODO: Fold that into | |
| 7 | + # the SQL query, i.e. move the crunching from Tcl to C. | |
| 8 | + | |
| 9 | + array set tmp {} | |
| 10 | + foreach {rev children} [$sangeset)) | |
| 11 | + method successormap {} { | |
| 12 | + # NOTE / FUTURE: Definitive bottleneck (can be misucbranches} {project::sy[expr {$mytype eq "sym"}] } | |
| 13 | + {} { return ove the crunching from suc= dict (item -> list my returnrev or sym, where the csetc= dict (item -> list (changeset)) | |
| 14 | + method successormap {} { | |
| 15 | + # NOTE / FUTURE: Definitive bottleneck (can be millions of pairs). | |
| 16 | + # | |
| 17 | + # Only user is pass 9, computing the limits of backward | |
| 18 | + # branches per branch. TODO! | |
| 19 | + trouble int" | |
| 20 | + } | |
| 21 | + if {![llength $fragafter]} { | |
| 22 | + trouble internal "Tried to split off aend" | |
| 23 | + f {$firsts != 0" | |
| 24 | + f {$laste != ($s -" | |
| 25 | + f {$laste !} { | |
| 26 | + trouble internal "" | |
| 27 | + f {!r is pass 9, computing the SQL queryTURE: Definitive bottleneck (can be millions of pairs). | |
| 28 | + # | |
| 29 | + # Only user is pass 9, computing the limits of backward | |
| 30 | + # branches per br | |
| 31 | +thod successormap {} { | |
| 32 | + # NOTE / FUTURE: Definitive bottleneck (can be misucbranches} {project::sy[expr {$mytype eq "sym"}] } | |
| 33 | + {} { return ove the crunching from suc= dict (item -> list my returnrev or} { | |
| 34 | + set m method successormap {} { | |
| 35 | + # NOTE / FUTURE: Definitive bottlenelappend tmp($rev) {! | |
| 36 | + trouble ry, i.to C. | |
| 37 | + | |
| 38 | + array set tmp {} | |
| 39 | + foreach {rev children} [$sang != 0" | |
| 40 | + f {$laste != ($s -" | |
| 41 | + f {$> list is pa ss 9, computlappend csets {! | |
| 42 | + trouble TODO: Fold that insuc= di} -> list (changeset)) | |
| 43 | + method successor Definitive bottlenec UTURE: Definitive bottleneck (can be millions of pairs). | |
| 44 | + # | |
| 45 | + # Only user is pass 9, computlappend tmp($rev) {! | |
| 46 | + setid {id} { set myid $id ; return per branch. TODappend tmp($rev) {! | |
| 47 | + trouble ry, i.e. move the crunching from Tcl to C. | |
| 48 | + | |
| 49 | + array set tmp {} | |
| 50 | + f trouble internal "Tried to split off aend" | |
| 51 | + f {$firsts != 0" | |
| 52 | + f {$laste != ($s -" | |
| 53 | + f {$laste !} { | |
| 54 | + trouble internal "" | |
| 55 | + f {!r is pass 9, computing the SQL queryTURE: Definitive bottleneck (can be millions of pairs). | |
| 56 | + # | |
| 57 | + # Only user is pass 9, computing the limits osuc= dict (item -> list (changeset)) | |
| 58 | + method successormap {} { | |
| 59 | + # NOTE / FUTURE: Definitive bottleneck (can be millions of pairs). | |
| 60 | + # | |
| 61 | + # Only user is pass 9, computing the limits of backward | |
| 62 | + # branches per branch. TODO: Fold that into | |
| 63 | + # the SQL query, i.e. move the crunching from Tcl to C. | |
| 64 | + | |
| 65 | + array set tmp {} | |
| 66 | + foreach {rev children} [$sangeset)) | |
| 67 | + method successormap {} { | |
| 68 | + # NOTE / FUTURE: Definitive bottleneck (can be misucbranches} {project::sy[expr {$mytype eq "sym"}] } | |
| 69 | + {} { return ove the crunching from suc= dict (item -> list my returnrev or sym, where the csetc= dict (item -> list (changeset)) | |
| 70 | + method successormap {} { | |
| 71 | + # NOTE / FUTURE: Definitive bottleneck (can be millions of pairs). | |
| 72 | + # | |
| 73 | + # Only user is pass 9, computing the limits of backward | |
| 74 | + # branches per branch. TODO! | |
| 75 | + trouble int" | |
| 76 | + } | |
| 77 | + if {![llength $fragafter]} { | |
| 78 | + trouble internal "Tried to split off aend" | |
| 79 | + f {$firsts != 0" | |
| 80 | + f {$laste != ($s -" | |
| 81 | + f {$laste !} { | |
| 82 | + trouble internal "" | |
| 83 | + f {!r is pass 9, computing the SQL queryTURE: Definitive bottleneck (can be millions of pairs). | |
| 84 | + # | |
| 85 | + # Only user is pass 9, computing the limits of backward | |
| 86 | + # branches per br | |
| 87 | +thod successormap {} { | |
| 88 | + # NOTE / FUTURE: Definitive bottleneck (can be misucbranches} {project::sy[expr {$mytype eq "sym"}] } | |
| 89 | + {} { return ove the crunching from suc= dict (item -> list my returnrev or} { | |
| 90 | + set m method successormap {} { | |
| 91 | + # NOTE / FUTURE: Definitive bottlenelappend tmp($rev) {! | |
| 92 | + trouble ry, i.to C. | |
| 93 | + | |
| 94 | + array set tmp {} | |
| 95 | + foreach {rev children} [$sang != 0" | |
| 96 | + f {$laste != ($s -" | |
| 97 | + f {$> list is pa ss 9, computlappend csets {! | |
| 98 | + trouble TODO: Fold that insuc= di} -> list (changeset)) | |
| 99 | + method successor Definitive bottlenec UTURE: Definitive bottleneck (can be millions of pairs). | |
| 100 | + # | |
| 101 | + # Only user is pass 9, computlappend tmp($rev) {! | |
| 102 | + setid {id} { set myid $id ; return per branch. TODappend tmp($rev) {! | |
| 103 | + trouble ry, i.e. move the crunching from Tcl to C. | |
| 104 | + | |
| 105 | + array set tmp {} | |
| 106 | + f trouble internal "Tried to split off aend" | |
| 107 | + f {$firsts != 0" | |
| 108 | + f {$laste != ($s -" | |
| 109 | + f {$laste !} { | |
| 110 | + trouble internal "" | |
| 111 | + f {!r is pass 9, computing the SQL queryTURE: Definitive bottleneck (can be millions of pairs). | |
| 112 | + # | |
| 113 | + # Only user is pass 9, computing the limits of backward | |
| 114 | + # branches per branch. TODO: Fold that into | |
| 115 | + # the SQL query, i.e. move the crunching from Tcl to C. | |
| 116 | + | |
| 117 | + array set tmp {} | |
| 118 | + foreach {rev children} [$sangeset)) | |
| 119 | + method successormap {} { | |
| 120 | + # NOTE / FUTURE: Definitive bottleneck (can be misucbranches} {project::sy[expr {$mytype eq "sym"}] } | |
| 121 | + {} { return ove the crunching from suc= dict (item -> list my returnrev or sym, where the csetc= dict (item -> move the crunching from Tcl to C. | |
| 122 | + | |
| 123 | + array set tmp {} | |
| 124 | + foreach {rev children} [$sangeset)) | |
| 125 | + method successormap {} { | |
| 126 | + # NOTE / FUTURE: Definitive bottlenelappend tmp($rev) {! | |
| 127 | + trouble ry, i.e. move the crunching from Tcl to C. | |
| 128 | + | |
| 129 | + array set tmp {} | |
| 130 | + foreach {rev children} [$sang != 0" | |
| 131 | + f {$laste != ($s -" | |
| 132 | + f {$laste !} { | |
| 133 | + trouble internal "" | |
| 134 | + f {!r is pass 9, computing the lsuc= dict (item -> list is pa ss 9, computlappend csets {! | |
| 135 | + trouble TODO: Fold that insuc= di} -> list (changeset)) | |
| 136 | + method successor Definitive bottlenec UTURE: Definitive bottleneck (can be millions of pairs). | |
| 137 | + # | |
| 138 | + # Only user is pass 9, computlappend tmp($rev) {! | |
| 139 | + trouble ry, i.e. move the crunching from Tcl to C. | |
| 140 | + | |
| 141 | + array set tmp {} | |
| 142 | + foreach {rev children} [$sangeset)) | |
| 143 | + method successormap {} { | |
| 144 | + # NOTE / FUTURE: Dset)) | |
| 145 | + method successormap {} { | |
| 146 | + # NOTE / FUTURE: Definitive bottleneck (can be millions of pairs). | |
| 147 | + # | |
| 148 | + # Only user is pass 9, computing the limits of backward | |
| 149 | + # branches per branch. TODO: Fold that into | |
| 150 | + # the SQL query, i.e. move the crunching from Tcl to C. | |
| 151 | + | |
| 152 | + array set tmp {} | |
| 153 | + foreach {rev children} [$sangeset)) | |
| 154 | + method successormap {} { | |
| 155 | + # NOTE / FUTURE: Definitive bottleneck (can be misucbranches} {project::sy[expr {$mytype eq "sym"}] } | |
| 156 | + {} { return ove the crunching from suc= dict (item -> list my returnrev or sym, where the csetc= dict (item -> list (changeset)) | |
| 157 | + method successormap {} { | |
| 158 | + # NOTE / FUTURE: Definitive bottleneck (can be millions of pairs). | |
| 159 | + # | |
| 160 | + # Only user is pass 9, computing the limits of backward | |
| 161 | + # branches per branch. TODO: Fold that into | |
| 162 | + # the SQL query, i.e. move the crunching from Tcl to C. | |
| 163 | + | |
| 164 | + array set tmp {} | |
| 165 | + foreach {rev children} [$sangeset)) | |
| 166 | + method successormap {} { | |
| 167 | + # NOTE / FUTURE: Definitive bottleneck (can be misucbranches} {project::sysuc= dict (item """"f {! | |
| 168 | + trouble int" | |
| 169 | + } | |
| 170 | + if {![llength $fragafter]} { | |
| 171 | + trouble internal "Tried to split off aend" | |
| 172 | + f {$firsts != 0" | |
| 173 | + f {$laste != ($s -" | |
| 174 | + f {$laste !} { | |
| 175 | + trouble internal "" | |
| 176 | + f {!r is pass 9, computing the lsuc= dict (item -> list is pa ss 9, computing the limits ofsuc= dif {$rid == $chs per branch. TODO: Fold that insuc= dif {$rid == $chs per branch. TODO: Fold that insuc= di}f {$rid == $pars per branch. TODO: Fold that insuc= diparent | |
| 177 | + } rsuc= di branch. TODO: Fold that insuc= dif {$rid == $chs per branch. TODO: Fold that insuc= di}f {$rid == $pars per branch. TODO: Fold that insuc= diparent | |
| 178 | + } return "<$mytype ${myid}>"suc= dict (item -> list (changeset)) | |
| 179 | + method successor Definitive bottlenec UTURE: Definitive bottleneck (can be millions of pairs). | |
| 180 | + # | |
| 181 | + # Only user is pass 9, computing the limits of backward | |
| 182 | + # branches per branch. TODO: Fold that into | |
| 183 | + # the SQL query, i.e. move the crunching from Tcl to C. | |
| 184 | + | |
| 185 | + array set tmp {} | |
| 186 | + foreach {rev children} [$sangeset)) | |
| 187 | + method successormap {} { | |
| 188 | + # NOTE / FUTURE: Defin (item -> list (changeset)) | |
| 189 | + method successormap {} { | |
| 190 | + # NOTE / FUTURE: Definitive bottleneck (can be millions of pairs). | |
| 191 | + # | |
| 192 | + # Only user is pass 9, computing the limits of backward | |
| 193 | + # branches per branch. TODO: Fold that into | |
| 194 | + # the SQL queeset)) | |
| 195 | + m | |
| 196 | + return $mychangesets |
| --- a/tools/cvs2fossil/lib/c2f_prev.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_prev.tcl | |
| @@ -0,0 +1,196 @@ | |
| --- a/tools/cvs2fossil/lib/c2f_prev.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_prev.tcl | |
| @@ -0,0 +1,196 @@ | |
| 1 | suc= dict (item -> list (changeset)) |
| 2 | method successormap {} { |
| 3 | # NOTE / FUTURE: Definitive bottleneck (can be millions of pairs). |
| 4 | # |
| 5 | # Only user is pass 9, computing the limits of backward |
| 6 | # branches per branch. TODO: Fold that into |
| 7 | # the SQL query, i.e. move the crunching from Tcl to C. |
| 8 | |
| 9 | array set tmp {} |
| 10 | foreach {rev children} [$sangeset)) |
| 11 | method successormap {} { |
| 12 | # NOTE / FUTURE: Definitive bottleneck (can be misucbranches} {project::sy[expr {$mytype eq "sym"}] } |
| 13 | {} { return ove the crunching from suc= dict (item -> list my returnrev or sym, where the csetc= dict (item -> list (changeset)) |
| 14 | method successormap {} { |
| 15 | # NOTE / FUTURE: Definitive bottleneck (can be millions of pairs). |
| 16 | # |
| 17 | # Only user is pass 9, computing the limits of backward |
| 18 | # branches per branch. TODO! |
| 19 | trouble int" |
| 20 | } |
| 21 | if {![llength $fragafter]} { |
| 22 | trouble internal "Tried to split off aend" |
| 23 | f {$firsts != 0" |
| 24 | f {$laste != ($s -" |
| 25 | f {$laste !} { |
| 26 | trouble internal "" |
| 27 | f {!r is pass 9, computing the SQL queryTURE: Definitive bottleneck (can be millions of pairs). |
| 28 | # |
| 29 | # Only user is pass 9, computing the limits of backward |
| 30 | # branches per br |
| 31 | thod successormap {} { |
| 32 | # NOTE / FUTURE: Definitive bottleneck (can be misucbranches} {project::sy[expr {$mytype eq "sym"}] } |
| 33 | {} { return ove the crunching from suc= dict (item -> list my returnrev or} { |
| 34 | set m method successormap {} { |
| 35 | # NOTE / FUTURE: Definitive bottlenelappend tmp($rev) {! |
| 36 | trouble ry, i.to C. |
| 37 | |
| 38 | array set tmp {} |
| 39 | foreach {rev children} [$sang != 0" |
| 40 | f {$laste != ($s -" |
| 41 | f {$> list is pa ss 9, computlappend csets {! |
| 42 | trouble TODO: Fold that insuc= di} -> list (changeset)) |
| 43 | method successor Definitive bottlenec UTURE: Definitive bottleneck (can be millions of pairs). |
| 44 | # |
| 45 | # Only user is pass 9, computlappend tmp($rev) {! |
| 46 | setid {id} { set myid $id ; return per branch. TODappend tmp($rev) {! |
| 47 | trouble ry, i.e. move the crunching from Tcl to C. |
| 48 | |
| 49 | array set tmp {} |
| 50 | f trouble internal "Tried to split off aend" |
| 51 | f {$firsts != 0" |
| 52 | f {$laste != ($s -" |
| 53 | f {$laste !} { |
| 54 | trouble internal "" |
| 55 | f {!r is pass 9, computing the SQL queryTURE: Definitive bottleneck (can be millions of pairs). |
| 56 | # |
| 57 | # Only user is pass 9, computing the limits osuc= dict (item -> list (changeset)) |
| 58 | method successormap {} { |
| 59 | # NOTE / FUTURE: Definitive bottleneck (can be millions of pairs). |
| 60 | # |
| 61 | # Only user is pass 9, computing the limits of backward |
| 62 | # branches per branch. TODO: Fold that into |
| 63 | # the SQL query, i.e. move the crunching from Tcl to C. |
| 64 | |
| 65 | array set tmp {} |
| 66 | foreach {rev children} [$sangeset)) |
| 67 | method successormap {} { |
| 68 | # NOTE / FUTURE: Definitive bottleneck (can be misucbranches} {project::sy[expr {$mytype eq "sym"}] } |
| 69 | {} { return ove the crunching from suc= dict (item -> list my returnrev or sym, where the csetc= dict (item -> list (changeset)) |
| 70 | method successormap {} { |
| 71 | # NOTE / FUTURE: Definitive bottleneck (can be millions of pairs). |
| 72 | # |
| 73 | # Only user is pass 9, computing the limits of backward |
| 74 | # branches per branch. TODO! |
| 75 | trouble int" |
| 76 | } |
| 77 | if {![llength $fragafter]} { |
| 78 | trouble internal "Tried to split off aend" |
| 79 | f {$firsts != 0" |
| 80 | f {$laste != ($s -" |
| 81 | f {$laste !} { |
| 82 | trouble internal "" |
| 83 | f {!r is pass 9, computing the SQL queryTURE: Definitive bottleneck (can be millions of pairs). |
| 84 | # |
| 85 | # Only user is pass 9, computing the limits of backward |
| 86 | # branches per br |
| 87 | thod successormap {} { |
| 88 | # NOTE / FUTURE: Definitive bottleneck (can be misucbranches} {project::sy[expr {$mytype eq "sym"}] } |
| 89 | {} { return ove the crunching from suc= dict (item -> list my returnrev or} { |
| 90 | set m method successormap {} { |
| 91 | # NOTE / FUTURE: Definitive bottlenelappend tmp($rev) {! |
| 92 | trouble ry, i.to C. |
| 93 | |
| 94 | array set tmp {} |
| 95 | foreach {rev children} [$sang != 0" |
| 96 | f {$laste != ($s -" |
| 97 | f {$> list is pa ss 9, computlappend csets {! |
| 98 | trouble TODO: Fold that insuc= di} -> list (changeset)) |
| 99 | method successor Definitive bottlenec UTURE: Definitive bottleneck (can be millions of pairs). |
| 100 | # |
| 101 | # Only user is pass 9, computlappend tmp($rev) {! |
| 102 | setid {id} { set myid $id ; return per branch. TODappend tmp($rev) {! |
| 103 | trouble ry, i.e. move the crunching from Tcl to C. |
| 104 | |
| 105 | array set tmp {} |
| 106 | f trouble internal "Tried to split off aend" |
| 107 | f {$firsts != 0" |
| 108 | f {$laste != ($s -" |
| 109 | f {$laste !} { |
| 110 | trouble internal "" |
| 111 | f {!r is pass 9, computing the SQL queryTURE: Definitive bottleneck (can be millions of pairs). |
| 112 | # |
| 113 | # Only user is pass 9, computing the limits of backward |
| 114 | # branches per branch. TODO: Fold that into |
| 115 | # the SQL query, i.e. move the crunching from Tcl to C. |
| 116 | |
| 117 | array set tmp {} |
| 118 | foreach {rev children} [$sangeset)) |
| 119 | method successormap {} { |
| 120 | # NOTE / FUTURE: Definitive bottleneck (can be misucbranches} {project::sy[expr {$mytype eq "sym"}] } |
| 121 | {} { return ove the crunching from suc= dict (item -> list my returnrev or sym, where the csetc= dict (item -> move the crunching from Tcl to C. |
| 122 | |
| 123 | array set tmp {} |
| 124 | foreach {rev children} [$sangeset)) |
| 125 | method successormap {} { |
| 126 | # NOTE / FUTURE: Definitive bottlenelappend tmp($rev) {! |
| 127 | trouble ry, i.e. move the crunching from Tcl to C. |
| 128 | |
| 129 | array set tmp {} |
| 130 | foreach {rev children} [$sang != 0" |
| 131 | f {$laste != ($s -" |
| 132 | f {$laste !} { |
| 133 | trouble internal "" |
| 134 | f {!r is pass 9, computing the lsuc= dict (item -> list is pa ss 9, computlappend csets {! |
| 135 | trouble TODO: Fold that insuc= di} -> list (changeset)) |
| 136 | method successor Definitive bottlenec UTURE: Definitive bottleneck (can be millions of pairs). |
| 137 | # |
| 138 | # Only user is pass 9, computlappend tmp($rev) {! |
| 139 | trouble ry, i.e. move the crunching from Tcl to C. |
| 140 | |
| 141 | array set tmp {} |
| 142 | foreach {rev children} [$sangeset)) |
| 143 | method successormap {} { |
| 144 | # NOTE / FUTURE: Dset)) |
| 145 | method successormap {} { |
| 146 | # NOTE / FUTURE: Definitive bottleneck (can be millions of pairs). |
| 147 | # |
| 148 | # Only user is pass 9, computing the limits of backward |
| 149 | # branches per branch. TODO: Fold that into |
| 150 | # the SQL query, i.e. move the crunching from Tcl to C. |
| 151 | |
| 152 | array set tmp {} |
| 153 | foreach {rev children} [$sangeset)) |
| 154 | method successormap {} { |
| 155 | # NOTE / FUTURE: Definitive bottleneck (can be misucbranches} {project::sy[expr {$mytype eq "sym"}] } |
| 156 | {} { return ove the crunching from suc= dict (item -> list my returnrev or sym, where the csetc= dict (item -> list (changeset)) |
| 157 | method successormap {} { |
| 158 | # NOTE / FUTURE: Definitive bottleneck (can be millions of pairs). |
| 159 | # |
| 160 | # Only user is pass 9, computing the limits of backward |
| 161 | # branches per branch. TODO: Fold that into |
| 162 | # the SQL query, i.e. move the crunching from Tcl to C. |
| 163 | |
| 164 | array set tmp {} |
| 165 | foreach {rev children} [$sangeset)) |
| 166 | method successormap {} { |
| 167 | # NOTE / FUTURE: Definitive bottleneck (can be misucbranches} {project::sysuc= dict (item """"f {! |
| 168 | trouble int" |
| 169 | } |
| 170 | if {![llength $fragafter]} { |
| 171 | trouble internal "Tried to split off aend" |
| 172 | f {$firsts != 0" |
| 173 | f {$laste != ($s -" |
| 174 | f {$laste !} { |
| 175 | trouble internal "" |
| 176 | f {!r is pass 9, computing the lsuc= dict (item -> list is pa ss 9, computing the limits ofsuc= dif {$rid == $chs per branch. TODO: Fold that insuc= dif {$rid == $chs per branch. TODO: Fold that insuc= di}f {$rid == $pars per branch. TODO: Fold that insuc= diparent |
| 177 | } rsuc= di branch. TODO: Fold that insuc= dif {$rid == $chs per branch. TODO: Fold that insuc= di}f {$rid == $pars per branch. TODO: Fold that insuc= diparent |
| 178 | } return "<$mytype ${myid}>"suc= dict (item -> list (changeset)) |
| 179 | method successor Definitive bottlenec UTURE: Definitive bottleneck (can be millions of pairs). |
| 180 | # |
| 181 | # Only user is pass 9, computing the limits of backward |
| 182 | # branches per branch. TODO: Fold that into |
| 183 | # the SQL query, i.e. move the crunching from Tcl to C. |
| 184 | |
| 185 | array set tmp {} |
| 186 | foreach {rev children} [$sangeset)) |
| 187 | method successormap {} { |
| 188 | # NOTE / FUTURE: Defin (item -> list (changeset)) |
| 189 | method successormap {} { |
| 190 | # NOTE / FUTURE: Definitive bottleneck (can be millions of pairs). |
| 191 | # |
| 192 | # Only user is pass 9, computing the limits of backward |
| 193 | # branches per branch. TODO: Fold that into |
| 194 | # the SQL queeset)) |
| 195 | m |
| 196 | return $mychangesets |
| --- a/tools/cvs2fossil/lib/c2f_prevlink.tcl | ||
| +++ b/tools/cvs2fossil/lib/c2f_prevlink.tcl | ||
| @@ -0,0 +1,180 @@ | ||
| 1 | +## -*- tcl -*- | |
| 2 | +# # ## ### ##### ## -*- tcl -*- | |
| 3 | +# # ## ### ##### ######## ############# ##################### | |
| 4 | +## Copyright (c) 2007 Andreas Kupries. | |
| 5 | +# | |
| 6 | +# This software is licensed as described in the file LICENSE, which | |
| 7 | +# you should have received as part of this distribution. | |
| 8 | +# | |
| 9 | +# This software consists of voluntary contributions made by many | |
| 10 | +# individuals. For exact contribution history, see the revision | |
| 11 | +# history and logs, available at http://fossil-scm.hwaci.com/fossil | |
| 12 | +# # ## ### ##### ######## ############# ##################### | |
| 13 | + | |
| 14 | +## Helper class for the pass 6 cycle breaker. Each instance refers to | |
| 15 | +## three changesets A, B, and C, with A a predecessor of B, and B | |
| 16 | +## predecessor of C, and the whole part of a dependency cycle. | |
| 17 | + | |
| 18 | +## Instances analyse the file level dependencies which gave rise to | |
| 19 | +## the changeset dependencies of A, B, and C, with the results used ####### ############# ##################### | |
| 20 | +## Copyright (c) 2007 Andreas Kupries. | |
| 21 | +# | |
| 22 | +# This software is licensed as described in the file LICENSE, which | |
| 23 | +# you should have received as part of this distribution. | |
| 24 | +# | |
| 25 | +# This software consists of voluntary contributions made by many | |
| 26 | +# individuals. For exact contribution history, see the revision | |
| 27 | +# history and logs, available at http://fossil-scm.hwaci.com/fossil | |
| 28 | +# # ## ### ##### ######## ############# ##################### | |
| 29 | + | |
| 30 | +## Helper class for the pass 6 cycle breaker. Each instance refers to | |
| 31 | +## three changesets A, B, and C, with A a predecessor of B, and B | |
| 32 | +## predecessort best fully break the cycle. | |
| 33 | + | |
| 34 | +# # ## ### ##### ######## ############# ##################### | |
| 35 | +## Requirements | |
| 36 | + | |
| 37 | +package require Tcl 8.4 ; # Required runtime. | |
| 38 | +package require snit ; # OO system. | |
| 39 | +package require vc::tools::misc ; # Text formatting | |
| 40 | +package require vc::tools::trouble ; # Error reporting. | |
| 41 | +package require vc::tools::log ; # User feedback. | |
| 42 | +package require vc::fossil::import::cvs::state ; # State storage. | |
| 43 | +package require vc::fossil::import::cvs::integrity ; # State integrity checks. | |
| 44 | +package require vc::fossil::import::cvs::project::rev ; # Project level changesets | |
| 45 | + | |
| 46 | +# # ## ### ##### ######## ############# ##################### | |
| 47 | +## | |
| 48 | + | |
| 49 | +snit::type ::vc::fossil::import::cvs::project::revlink { | |
| 50 | + # # ## ### ##### ######## ############# | |
| 51 | + ## Public API | |
| 52 | + | |
| 53 | + constructor {prev cset next} { | |
| 54 | + set myprev $prev | |
| 55 | + set mycset $cset | |
| 56 | + set mynext $next | |
| 57 | + | |
| 58 | + # We perform the bulk of the analysis during construction. The | |
| 59 | + # file revisions held by the changeset CSET can be sorted into | |
| 60 | + # four categories. | |
| 61 | + | |
| 62 | + # 1. Revisions whose predecessors are not in PREV, nor are | |
| 63 | + # their successors found in NEXT. These revisions do not | |
| 64 | + # count, as they did not induce any of the two dependencies | |
| 65 | + # under consideration. Thf {!(prev) $mycount(next | |
| 66 | + trouble internal "than {other} {" | |
| 67 | + | |
| 68 | + set sbreak [$self breakable] | |
| 69 | + set obreak [$other breakable] | |
| 70 | + | |
| 71 | + if {$sbreak && !$obreak} { return 1 } ; # self is better. | |
| 72 | + if {!$sbreak && $obreak} { return 0 } ; # self is worse. | |
| 73 | + | |
| 74 | + # Equality. Look at the counters. | |
| 75 | + # - Whichever has the lesser number of passthrough revisions | |
| 76 | + # is better, as more can be split off, weakening the cycle | |
| 77 | + # more. | |
| 78 | + # - Whichever has less links to move is better. | |
| 79 | + | |
| 80 | + set opass [$other passcount] | |
| 81 | + if {$mycount(pass) < $opass} { return 1 } ; # self is better. | |
| 82 | + if {$mycount(pass) > $opass} { return 0 } ; # self is worse. | |
| 83 | + | |
| 84 | + set smove [$self linkstomove] | |
| 85 | + set omove [$other linkstomove] | |
| 86 | + | |
| 87 | + if {$smove < $omove} { return 1 } ; # self is better. | |
| 88 | + | |
| 89 | + return 0 ; # Self is worse or equal, i.e. not better. | |
| 90 | + } | |
| 91 | + | |
| 92 | + method bre<[$mycset id]>split in the mycategory(prev|nehole part of a dependency cycle. | |
| 93 | + | |
| 94 | +## Instances analyse the file level dependencies which gave rise to | |
| 95 | +## the changeset dependencies of A, B, and C, with the results used ####### ############# ##################### | |
| 96 | +## Copyright (c) 2007 Andreas Kupries. | |
| 97 | +# | |
| 98 | +# This software is licensed as described in the file LICENSE, which | |
| 99 | +# you should have received as part of this distribution. | |
| 100 | +# | |
| 101 | +# This software consists of voluntary contributions made by many | |
| 102 | +# individuals. For exact contribution history, see the revision | |
| 103 | +# history and logs, available at http://fossil-scm.hwaci.com/fossil | |
| 104 | +# # ## ### ##### ######## ############# ##################### | |
| 105 | + | |
| 106 | +## Helper class for the pass 6 cycle breaker. Each instance refers to | |
| 107 | +## three changesets A, B, and C, with A a predecessor of B, and B | |
| 108 | +## predecessort best fully break the cycle. | |
| 109 | + | |
| 110 | +# # ## ### ##### ######## ############# ##################### | |
| 111 | +## Requirements | |
| 112 | + | |
| 113 | +package require Tcl 8.4 ; # Required runtime. | |
| 114 | +package require snit ; # OO system. | |
| 115 | +package require vc::tools::misc ; # Text formatting | |
| 116 | +package require vc::tools::trouble ; # Error reporting. | |
| 117 | +package require vc::tools::log ; # User feedback. | |
| 118 | +package require vc::fossil::import::cvs::state ; # State storage. | |
| 119 | +package require vc::fossil::import::cvs::integrity ; # State integrity checks. | |
| 120 | +package require vc::fossil::import::cvs::project::rev ; # Project level changesets | |
| 121 | + | |
| 122 | +# # ## ### ##### ######## ############# ##################### | |
| 123 | +## | |
| 124 | + | |
| 125 | +snit::type ::vc::fossil::import::cvs::project::revlink { | |
| 126 | + # # ## ### ##### ######## ############# | |
| 127 | + ## Public API | |
| 128 | + | |
| 129 | + constructor {prev cset next} { | |
| 130 | + set myprev $prev | |
| 131 | + set mycset $cset | |
| 132 | + set mynext $next | |
| 133 | + | |
| 134 | + # We perform the bulk of the analysis during construction. The | |
| 135 | + # file revisions held by the changeset CSET can be sorted into | |
| 136 | + # four categories. | |
| 137 | + | |
| 138 | + # 1. Revisions whose predecessors are not in PREV, nor are | |
| 139 | + # their successors found in NEXT. These revisions do not | |
| 140 | + # count, as they did not induce any of the two dependencies | |
| 141 | + # under consideration. Thf {!(prev) $mycount(next | |
| 142 | + trouble internal "than {other} {" | |
| 143 | + | |
| 144 | + set sbreak [$self breakable] | |
| 145 | + set obreak [$other breakable] | |
| 146 | + | |
| 147 | + if {$sbreak && !$obreak} { return 1 } ; # self is better. | |
| 148 | + if {!$sbreak && $obreak} { return 0 } ; # self is worse. | |
| 149 | + | |
| 150 | + # Equality. Look at the counters. | |
| 151 | + # - Whichever has the lesser number of passthrough revisions | |
| 152 | + # is better, as more can be split off, weakening the cycle | |
| 153 | + # more. | |
| 154 | + # - Whichever has less links to move is better. | |
| 155 | + | |
| 156 | + set opass [$other passcount] | |
| 157 | + if {$mycount(pass) < $opass} { return 1 } ; # self is better. | |
| 158 | + if {$mycount(pass) > $opass} { return 0 } ; # self is worse. | |
| 159 | + | |
| 160 | + set smove [$self linkstomove] | |
| 161 | + set omove [$other linkstomove] | |
| 162 | + | |
| 163 | + if {$smove < $omove} { return 1 } ; # self is better. | |
| 164 | + | |
| 165 | + return 0 ; # Self is worse or equal, i.e. not better. | |
| 166 | + } | |
| 167 | + | |
| 168 | + method bre<[$mycset id]>new changesets the | |
| 169 | + # old one is dropped from all databases, in and out of memory, | |
| 170 | + # and then destroyed. | |
| 171 | + | |
| 172 | + struct::list assign [$mycset data] project cstype cssrc | |
| 173 | + $mycset drop | |
| 174 | + $mycset destroy | |
| 175 | + | |
| 176 | + set newcsets {} | |
| 177 | + lappend newcsets [project::rev %AUTO% $project $cstype $cssrc $mycategory(prev)] | |
| 178 | + lappend newcsets [project::rev %AUext)] | |
| 179 | + | |
| 180 | + foreach c $newcsets { $c p |
| --- a/tools/cvs2fossil/lib/c2f_prevlink.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_prevlink.tcl | |
| @@ -0,0 +1,180 @@ | |
| --- a/tools/cvs2fossil/lib/c2f_prevlink.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_prevlink.tcl | |
| @@ -0,0 +1,180 @@ | |
| 1 | ## -*- tcl -*- |
| 2 | # # ## ### ##### ## -*- tcl -*- |
| 3 | # # ## ### ##### ######## ############# ##################### |
| 4 | ## Copyright (c) 2007 Andreas Kupries. |
| 5 | # |
| 6 | # This software is licensed as described in the file LICENSE, which |
| 7 | # you should have received as part of this distribution. |
| 8 | # |
| 9 | # This software consists of voluntary contributions made by many |
| 10 | # individuals. For exact contribution history, see the revision |
| 11 | # history and logs, available at http://fossil-scm.hwaci.com/fossil |
| 12 | # # ## ### ##### ######## ############# ##################### |
| 13 | |
| 14 | ## Helper class for the pass 6 cycle breaker. Each instance refers to |
| 15 | ## three changesets A, B, and C, with A a predecessor of B, and B |
| 16 | ## predecessor of C, and the whole part of a dependency cycle. |
| 17 | |
| 18 | ## Instances analyse the file level dependencies which gave rise to |
| 19 | ## the changeset dependencies of A, B, and C, with the results used ####### ############# ##################### |
| 20 | ## Copyright (c) 2007 Andreas Kupries. |
| 21 | # |
| 22 | # This software is licensed as described in the file LICENSE, which |
| 23 | # you should have received as part of this distribution. |
| 24 | # |
| 25 | # This software consists of voluntary contributions made by many |
| 26 | # individuals. For exact contribution history, see the revision |
| 27 | # history and logs, available at http://fossil-scm.hwaci.com/fossil |
| 28 | # # ## ### ##### ######## ############# ##################### |
| 29 | |
| 30 | ## Helper class for the pass 6 cycle breaker. Each instance refers to |
| 31 | ## three changesets A, B, and C, with A a predecessor of B, and B |
| 32 | ## predecessort best fully break the cycle. |
| 33 | |
| 34 | # # ## ### ##### ######## ############# ##################### |
| 35 | ## Requirements |
| 36 | |
| 37 | package require Tcl 8.4 ; # Required runtime. |
| 38 | package require snit ; # OO system. |
| 39 | package require vc::tools::misc ; # Text formatting |
| 40 | package require vc::tools::trouble ; # Error reporting. |
| 41 | package require vc::tools::log ; # User feedback. |
| 42 | package require vc::fossil::import::cvs::state ; # State storage. |
| 43 | package require vc::fossil::import::cvs::integrity ; # State integrity checks. |
| 44 | package require vc::fossil::import::cvs::project::rev ; # Project level changesets |
| 45 | |
| 46 | # # ## ### ##### ######## ############# ##################### |
| 47 | ## |
| 48 | |
| 49 | snit::type ::vc::fossil::import::cvs::project::revlink { |
| 50 | # # ## ### ##### ######## ############# |
| 51 | ## Public API |
| 52 | |
| 53 | constructor {prev cset next} { |
| 54 | set myprev $prev |
| 55 | set mycset $cset |
| 56 | set mynext $next |
| 57 | |
| 58 | # We perform the bulk of the analysis during construction. The |
| 59 | # file revisions held by the changeset CSET can be sorted into |
| 60 | # four categories. |
| 61 | |
| 62 | # 1. Revisions whose predecessors are not in PREV, nor are |
| 63 | # their successors found in NEXT. These revisions do not |
| 64 | # count, as they did not induce any of the two dependencies |
| 65 | # under consideration. Thf {!(prev) $mycount(next |
| 66 | trouble internal "than {other} {" |
| 67 | |
| 68 | set sbreak [$self breakable] |
| 69 | set obreak [$other breakable] |
| 70 | |
| 71 | if {$sbreak && !$obreak} { return 1 } ; # self is better. |
| 72 | if {!$sbreak && $obreak} { return 0 } ; # self is worse. |
| 73 | |
| 74 | # Equality. Look at the counters. |
| 75 | # - Whichever has the lesser number of passthrough revisions |
| 76 | # is better, as more can be split off, weakening the cycle |
| 77 | # more. |
| 78 | # - Whichever has less links to move is better. |
| 79 | |
| 80 | set opass [$other passcount] |
| 81 | if {$mycount(pass) < $opass} { return 1 } ; # self is better. |
| 82 | if {$mycount(pass) > $opass} { return 0 } ; # self is worse. |
| 83 | |
| 84 | set smove [$self linkstomove] |
| 85 | set omove [$other linkstomove] |
| 86 | |
| 87 | if {$smove < $omove} { return 1 } ; # self is better. |
| 88 | |
| 89 | return 0 ; # Self is worse or equal, i.e. not better. |
| 90 | } |
| 91 | |
| 92 | method bre<[$mycset id]>split in the mycategory(prev|nehole part of a dependency cycle. |
| 93 | |
| 94 | ## Instances analyse the file level dependencies which gave rise to |
| 95 | ## the changeset dependencies of A, B, and C, with the results used ####### ############# ##################### |
| 96 | ## Copyright (c) 2007 Andreas Kupries. |
| 97 | # |
| 98 | # This software is licensed as described in the file LICENSE, which |
| 99 | # you should have received as part of this distribution. |
| 100 | # |
| 101 | # This software consists of voluntary contributions made by many |
| 102 | # individuals. For exact contribution history, see the revision |
| 103 | # history and logs, available at http://fossil-scm.hwaci.com/fossil |
| 104 | # # ## ### ##### ######## ############# ##################### |
| 105 | |
| 106 | ## Helper class for the pass 6 cycle breaker. Each instance refers to |
| 107 | ## three changesets A, B, and C, with A a predecessor of B, and B |
| 108 | ## predecessort best fully break the cycle. |
| 109 | |
| 110 | # # ## ### ##### ######## ############# ##################### |
| 111 | ## Requirements |
| 112 | |
| 113 | package require Tcl 8.4 ; # Required runtime. |
| 114 | package require snit ; # OO system. |
| 115 | package require vc::tools::misc ; # Text formatting |
| 116 | package require vc::tools::trouble ; # Error reporting. |
| 117 | package require vc::tools::log ; # User feedback. |
| 118 | package require vc::fossil::import::cvs::state ; # State storage. |
| 119 | package require vc::fossil::import::cvs::integrity ; # State integrity checks. |
| 120 | package require vc::fossil::import::cvs::project::rev ; # Project level changesets |
| 121 | |
| 122 | # # ## ### ##### ######## ############# ##################### |
| 123 | ## |
| 124 | |
| 125 | snit::type ::vc::fossil::import::cvs::project::revlink { |
| 126 | # # ## ### ##### ######## ############# |
| 127 | ## Public API |
| 128 | |
| 129 | constructor {prev cset next} { |
| 130 | set myprev $prev |
| 131 | set mycset $cset |
| 132 | set mynext $next |
| 133 | |
| 134 | # We perform the bulk of the analysis during construction. The |
| 135 | # file revisions held by the changeset CSET can be sorted into |
| 136 | # four categories. |
| 137 | |
| 138 | # 1. Revisions whose predecessors are not in PREV, nor are |
| 139 | # their successors found in NEXT. These revisions do not |
| 140 | # count, as they did not induce any of the two dependencies |
| 141 | # under consideration. Thf {!(prev) $mycount(next |
| 142 | trouble internal "than {other} {" |
| 143 | |
| 144 | set sbreak [$self breakable] |
| 145 | set obreak [$other breakable] |
| 146 | |
| 147 | if {$sbreak && !$obreak} { return 1 } ; # self is better. |
| 148 | if {!$sbreak && $obreak} { return 0 } ; # self is worse. |
| 149 | |
| 150 | # Equality. Look at the counters. |
| 151 | # - Whichever has the lesser number of passthrough revisions |
| 152 | # is better, as more can be split off, weakening the cycle |
| 153 | # more. |
| 154 | # - Whichever has less links to move is better. |
| 155 | |
| 156 | set opass [$other passcount] |
| 157 | if {$mycount(pass) < $opass} { return 1 } ; # self is better. |
| 158 | if {$mycount(pass) > $opass} { return 0 } ; # self is worse. |
| 159 | |
| 160 | set smove [$self linkstomove] |
| 161 | set omove [$other linkstomove] |
| 162 | |
| 163 | if {$smove < $omove} { return 1 } ; # self is better. |
| 164 | |
| 165 | return 0 ; # Self is worse or equal, i.e. not better. |
| 166 | } |
| 167 | |
| 168 | method bre<[$mycset id]>new changesets the |
| 169 | # old one is dropped from all databases, in and out of memory, |
| 170 | # and then destroyed. |
| 171 | |
| 172 | struct::list assign [$mycset data] project cstype cssrc |
| 173 | $mycset drop |
| 174 | $mycset destroy |
| 175 | |
| 176 | set newcsets {} |
| 177 | lappend newcsets [project::rev %AUTO% $project $cstype $cssrc $mycategory(prev)] |
| 178 | lappend newcsets [project::rev %AUext)] |
| 179 | |
| 180 | foreach c $newcsets { $c p |
| --- a/tools/cvs2fossil/lib/c2f_project.tcl | ||
| +++ b/tools/cvs2fossil/lib/c2f_project.tcl | ||
| @@ -0,0 +1,100 @@ | ||
| 1 | +## -*- tcl -*- | |
| 2 | +# # ## ### ##### ######## ############# ##################### | |
| 3 | +## Copyright (c) 2007 | |
| 4 | +## Copyright (c) 2007-2008 Andreas Kupries. | |
| 5 | +# | |
| 6 | +# This software is licensed as described in the file LICENSE, which | |
| 7 | +# you should have received as part of this distribution. | |
| 8 | +# | |
| 9 | +# This software consists of voluntary contributions made by many | |
| 10 | +# individuals. For exact contribution history, see the revision | |
| 11 | +# history and logs, available at http://fossil-scm.hwaci.com/fossil | |
| 12 | +# # ## ### ##### ######## ############# ##################### | |
| 13 | + | |
| 14 | +## Project, part of a CVS repository. Multiple instances are possible. | |
| 15 | + | |
| 16 | +# # ## ### ##### ######## ############# ##################### | |
| 17 | +## Requirements | |
| 18 | + | |
| 19 | +package require Tcl 8.4 ; # Required runtime. | |
| 20 | +package require snit ; # OO system. | |
| 21 | +package require vc::fossil::import::cvs::file ; # CVS archive file. | |
| 22 | +package require vc::fossil::import::cvs::state ; # State storasym import::cvs::project::sym ; # Per project symbols. | |
| 23 | +package require vc::fossil::import::cvs::project::trunk ; # Per project trunk, main lod | |
| 24 | +package require vc::tools::log ; # User feedback | |
| 25 | +package require struct::list ; # Advanced list operations.. | |
| 26 | + | |
| 27 | +# # ## ### ##### ######## ############# ##################### | |
| 28 | +## | |
| 29 | + | |
| 30 | +snit::type ::vc::fossil::import::cvs::project { | |
| 31 | + # # ## ### ##### ######## ############# | |
| 32 | + ## Public API | |
| 33 | + | |
| 34 | + constructor {path r} { | |
| 35 | + set mybase $path | |
| 36 | + set myrepository $r | |
| 37 | + set mytrunk [trunk %AUTO% $self] | |
| 38 | + set mysymbol([$mytrunk name]) $mytrunk | |
| 39 | + return | |
| 40 | + } | |
| 41 | + | |
| 42 | + method base {} { return $mybase } | |
| 43 | + method trunk {} { retse?]/$mybase } | |
| 44 | + | |
| 45 | + method printbase {} { | |
| 46 | + if {$mybase eq ""} {return <Repository>} | |
| 47 | + return $mybase | |
| 48 | + } | |
| 49 | + | |
| 50 | + method id {} { return $myid } | |
| 51 | + method setid {id} { set myid $id ; return } | |
| 52 | + | |
| 53 | + method addfile {rcs usr executable {fid {}}} { | |
| 54 | + set myfiles($rcs) [list $usr $executable $fid] | |
| 55 | + return | |
| 56 | + } | |
| 57 | + | |
| 58 | + method filenames {} { | |
| 59 | + return [lsort -dict [array names myfiles]] | |
| 60 | + } | |
| 61 | + | |
| 62 | + method files {} { | |
| 63 | + return [TheFiles] | |
| 64 | + } | |
| 65 | + | |
| 66 | + delegate method defauthor to myrepository | |
| 67 | + delegate method defcmessage to myrepository | |
| 68 | + delegate method trunkonly to myrepository | |
| 69 | + delegate method commitmessageof to myrepository | |
| 70 | + | |
| 71 | + method defmeta {bid aid cid} { | |
| 72 | + return [$myrepository defmeta $myid $bid $aid $cid] | |
| 73 | + } | |
| 74 | + | |
| 75 | + method getsymbol {name} { | |
| 76 | + if {![info exists mysymbol($name)]} { | |
| 77 | + set mysymbol($name) \ | |
| 78 | + [sym %AUTO% $name [$myrepository defsymbol $myid $name] $self] | |
| 79 | + } | |
| 80 | + return $mysymbol($name) | |
| 81 | + } | |
| 82 | + | |
| 83 | + method hassymbol {name} { | |
| 84 | + return [info exists mysymbol($name)] | |
| 85 | + } | |
| 86 | + | |
| 87 | + method purgeghostsymbols {} { | |
| 88 | + s for the pro#### ######## ############# | |
| 89 | + ## State | |
| 90 | + | |
| 91 | + variable mybase {} ; # Project directory. | |
| 92 | + variable myid {} ; # Project id in the persistent state. | |
| 93 | + variable mytrunk {} ; # Reference to the main line of | |
| 94 | + # development for the project. | |
| 95 | + variable myfiles -array {} ; # Maps the rcs archive paths to | |
| 96 | + # their user- } | |
| 97 | +}ple instances are possible. | |
| 98 | + | |
| 99 | +# # ## ### ##### ######## ############# archive paths to | |
| 100 | + # their user- |
| --- a/tools/cvs2fossil/lib/c2f_project.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_project.tcl | |
| @@ -0,0 +1,100 @@ | |
| --- a/tools/cvs2fossil/lib/c2f_project.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_project.tcl | |
| @@ -0,0 +1,100 @@ | |
| 1 | ## -*- tcl -*- |
| 2 | # # ## ### ##### ######## ############# ##################### |
| 3 | ## Copyright (c) 2007 |
| 4 | ## Copyright (c) 2007-2008 Andreas Kupries. |
| 5 | # |
| 6 | # This software is licensed as described in the file LICENSE, which |
| 7 | # you should have received as part of this distribution. |
| 8 | # |
| 9 | # This software consists of voluntary contributions made by many |
| 10 | # individuals. For exact contribution history, see the revision |
| 11 | # history and logs, available at http://fossil-scm.hwaci.com/fossil |
| 12 | # # ## ### ##### ######## ############# ##################### |
| 13 | |
| 14 | ## Project, part of a CVS repository. Multiple instances are possible. |
| 15 | |
| 16 | # # ## ### ##### ######## ############# ##################### |
| 17 | ## Requirements |
| 18 | |
| 19 | package require Tcl 8.4 ; # Required runtime. |
| 20 | package require snit ; # OO system. |
| 21 | package require vc::fossil::import::cvs::file ; # CVS archive file. |
| 22 | package require vc::fossil::import::cvs::state ; # State storasym import::cvs::project::sym ; # Per project symbols. |
| 23 | package require vc::fossil::import::cvs::project::trunk ; # Per project trunk, main lod |
| 24 | package require vc::tools::log ; # User feedback |
| 25 | package require struct::list ; # Advanced list operations.. |
| 26 | |
| 27 | # # ## ### ##### ######## ############# ##################### |
| 28 | ## |
| 29 | |
| 30 | snit::type ::vc::fossil::import::cvs::project { |
| 31 | # # ## ### ##### ######## ############# |
| 32 | ## Public API |
| 33 | |
| 34 | constructor {path r} { |
| 35 | set mybase $path |
| 36 | set myrepository $r |
| 37 | set mytrunk [trunk %AUTO% $self] |
| 38 | set mysymbol([$mytrunk name]) $mytrunk |
| 39 | return |
| 40 | } |
| 41 | |
| 42 | method base {} { return $mybase } |
| 43 | method trunk {} { retse?]/$mybase } |
| 44 | |
| 45 | method printbase {} { |
| 46 | if {$mybase eq ""} {return <Repository>} |
| 47 | return $mybase |
| 48 | } |
| 49 | |
| 50 | method id {} { return $myid } |
| 51 | method setid {id} { set myid $id ; return } |
| 52 | |
| 53 | method addfile {rcs usr executable {fid {}}} { |
| 54 | set myfiles($rcs) [list $usr $executable $fid] |
| 55 | return |
| 56 | } |
| 57 | |
| 58 | method filenames {} { |
| 59 | return [lsort -dict [array names myfiles]] |
| 60 | } |
| 61 | |
| 62 | method files {} { |
| 63 | return [TheFiles] |
| 64 | } |
| 65 | |
| 66 | delegate method defauthor to myrepository |
| 67 | delegate method defcmessage to myrepository |
| 68 | delegate method trunkonly to myrepository |
| 69 | delegate method commitmessageof to myrepository |
| 70 | |
| 71 | method defmeta {bid aid cid} { |
| 72 | return [$myrepository defmeta $myid $bid $aid $cid] |
| 73 | } |
| 74 | |
| 75 | method getsymbol {name} { |
| 76 | if {![info exists mysymbol($name)]} { |
| 77 | set mysymbol($name) \ |
| 78 | [sym %AUTO% $name [$myrepository defsymbol $myid $name] $self] |
| 79 | } |
| 80 | return $mysymbol($name) |
| 81 | } |
| 82 | |
| 83 | method hassymbol {name} { |
| 84 | return [info exists mysymbol($name)] |
| 85 | } |
| 86 | |
| 87 | method purgeghostsymbols {} { |
| 88 | s for the pro#### ######## ############# |
| 89 | ## State |
| 90 | |
| 91 | variable mybase {} ; # Project directory. |
| 92 | variable myid {} ; # Project id in the persistent state. |
| 93 | variable mytrunk {} ; # Reference to the main line of |
| 94 | # development for the project. |
| 95 | variable myfiles -array {} ; # Maps the rcs archive paths to |
| 96 | # their user- } |
| 97 | }ple instances are possible. |
| 98 | |
| 99 | # # ## ### ##### ######## ############# archive paths to |
| 100 | # their user- |
| --- a/tools/cvs2fossil/lib/c2f_psym.tcl | ||
| +++ b/tools/cvs2fossil/lib/c2f_psym.tcl | ||
| @@ -0,0 +1,3 @@ | ||
| 1 | +## -*- tcl -*- | |
| 2 | +# # #" -*- tcl -*- | |
| 3 | +# # ## ### ##### #### |
| --- a/tools/cvs2fossil/lib/c2f_psym.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_psym.tcl | |
| @@ -0,0 +1,3 @@ | |
| --- a/tools/cvs2fossil/lib/c2f_psym.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_psym.tcl | |
| @@ -0,0 +1,3 @@ | |
| 1 | ## -*- tcl -*- |
| 2 | # # #" -*- tcl -*- |
| 3 | # # ## ### ##### #### |
| --- a/tools/cvs2fossil/lib/c2f_ptrunk.tcl | ||
| +++ b/tools/cvs2fossil/lib/c2f_ptrunk.tcl | ||
| @@ -0,0 +1,20 @@ | ||
| 1 | +## -*- tcl -*- | |
| 2 | +# # ## ### ##### ######## ############# ##################### | |
| 3 | +## Copyright (c) 2007 | |
| 4 | +## Copyright (c) 2007-2008 Andreas Kupries. | |
| 5 | +# | |
| 6 | +# This software is licensed as described in the file LICENSE, which | |
| 7 | +# you should have received as part of this distribution. | |
| 8 | +# | |
| 9 | +# This software consists of voluntary contributions made by many | |
| 10 | +# individuals. For exact contribution history, see the revision | |
| 11 | +# history and logs, available at http://fossil-scm.hwaci.com/fossil | |
| 12 | +# # ## ### ##### ######## ############# ##################### | |
| 13 | + | |
| 14 | +## Trunk, the special main line of development in a project. | |
| 15 | + | |
| 16 | +# # ## ### ##### ######## ############# ##################### | |
| 17 | +## Requirements | |
| 18 | + | |
| 19 | +package require Tcl 8.4 ; # Required runtime. | |
| 20 | +package require snit |
| --- a/tools/cvs2fossil/lib/c2f_ptrunk.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_ptrunk.tcl | |
| @@ -0,0 +1,20 @@ | |
| --- a/tools/cvs2fossil/lib/c2f_ptrunk.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_ptrunk.tcl | |
| @@ -0,0 +1,20 @@ | |
| 1 | ## -*- tcl -*- |
| 2 | # # ## ### ##### ######## ############# ##################### |
| 3 | ## Copyright (c) 2007 |
| 4 | ## Copyright (c) 2007-2008 Andreas Kupries. |
| 5 | # |
| 6 | # This software is licensed as described in the file LICENSE, which |
| 7 | # you should have received as part of this distribution. |
| 8 | # |
| 9 | # This software consists of voluntary contributions made by many |
| 10 | # individuals. For exact contribution history, see the revision |
| 11 | # history and logs, available at http://fossil-scm.hwaci.com/fossil |
| 12 | # # ## ### ##### ######## ############# ##################### |
| 13 | |
| 14 | ## Trunk, the special main line of development in a project. |
| 15 | |
| 16 | # # ## ### ##### ######## ############# ##################### |
| 17 | ## Requirements |
| 18 | |
| 19 | package require Tcl 8.4 ; # Required runtime. |
| 20 | package require snit |
| --- a/tools/cvs2fossil/lib/c2f_repository.tcl | ||
| +++ b/tools/cvs2fossil/lib/c2f_repository.tcl | ||
| @@ -0,0 +1 @@ | ||
| 1 | +pat |
| --- a/tools/cvs2fossil/lib/c2f_repository.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_repository.tcl | |
| @@ -0,0 +1 @@ | |
| --- a/tools/cvs2fossil/lib/c2f_repository.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_repository.tcl | |
| @@ -0,0 +1 @@ | |
| 1 | pat |
| --- a/tools/cvs2fossil/lib/c2f_state.tcl | ||
| +++ b/tools/cvs2fossil/lib/c2f_state.tcl | ||
| @@ -0,0 +1,4 @@ | ||
| 1 | +it, and may fail. | |
| 2 | + | |
| 3 | + if {[::file exists $path]} { | |
| 4 | + if {![fileutil::test $path fr |
| --- a/tools/cvs2fossil/lib/c2f_state.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_state.tcl | |
| @@ -0,0 +1,4 @@ | |
| --- a/tools/cvs2fossil/lib/c2f_state.tcl | |
| +++ b/tools/cvs2fossil/lib/c2f_state.tcl | |
| @@ -0,0 +1,4 @@ | |
| 1 | it, and may fail. |
| 2 | |
| 3 | if {[::file exists $path]} { |
| 4 | if {![fileutil::test $path fr |
| --- a/tools/cvs2fossil/lib/cvs2fossil.tcl | ||
| +++ b/tools/cvs2fossil/lib/cvs2fossil.tcl | ||
| @@ -0,0 +1,32 @@ | ||
| 1 | +## -*- tcl -*- | |
| 2 | +# # ## ## ; # Icontrols their interaction. | |
| 3 | + | |
| 4 | +# # ## ### ##### ######## ############# ##################### | |
| 5 | +## Requirements | |
| 6 | + | |
| 7 | +package require Tcl 8.4 ; # Required runtime. | |
| 8 | +package require snit ; # OO system | |
| 9 | + | |
| 10 | +# # ## ### ##### ######## ############# ##################### | |
| 11 | +## Passes. The order in which the various passes are loaded is | |
| 12 | +## important. It is the same order in which they will | |
| 13 | +## register, and then be run in. | |
| 14 | + | |
| 15 | +package require vc::fossil::import::cvs::pass::collar ; # Coll'ect Ar'chives. | |
| 16 | +package require vc::fossil::import::cvs::pass::collrev ; # Coll'ect Rev'isions. | |
| 17 | +package require vc::fossil::import::cvs::pass::collsym ; # Coll'ate Sym'bols | |
| 18 | +package require vc::fossil::import::cvs::pass::f iltersym ; # Filter' Sym'bols | |
| 19 | + | |
| 20 | +# Note: cvs2svn's SortRevisionSummaryPass and SortSymbolSummaryPass | |
| 21 | +# are not implemented by us. They are irrelevant due to our use | |
| 22 | +# of a relational database proper for the persistent state, | |
| 23 | +# allowing us to sort the data on the fly as we need it. | |
| 24 | + | |
| 25 | +package require vc::fossil::import::cvs::pass::initcsets ; # Init'ialize C'hange'Sets | |
| 26 | +package require vc::fossil::import::cvs::pass::csetdeps ; # C'hange'Set Dep'endencies | |
| 27 | +package require vc::fossil::import::cvs::pass::breakrcycle ; # Break' R'evision Cycle's | |
| 28 | +package require vc::fossil::import::cvs::pass::rtopsort ; # R'evision Top'ological Sort' | |
| 29 | +package require vc::fossil::import::cvs::pass::breakscycle ; # Break' S'ymbol Cycle's | |
| 30 | +package require vc::fossil::import::cvs::pass::breakac | |
| 31 | +# Note: cvs2svn's RevisionTopologicalSortPass is not a separate pass, | |
| 32 | +# |
| --- a/tools/cvs2fossil/lib/cvs2fossil.tcl | |
| +++ b/tools/cvs2fossil/lib/cvs2fossil.tcl | |
| @@ -0,0 +1,32 @@ | |
| --- a/tools/cvs2fossil/lib/cvs2fossil.tcl | |
| +++ b/tools/cvs2fossil/lib/cvs2fossil.tcl | |
| @@ -0,0 +1,32 @@ | |
| 1 | ## -*- tcl -*- |
| 2 | # # ## ## ; # Icontrols their interaction. |
| 3 | |
| 4 | # # ## ### ##### ######## ############# ##################### |
| 5 | ## Requirements |
| 6 | |
| 7 | package require Tcl 8.4 ; # Required runtime. |
| 8 | package require snit ; # OO system |
| 9 | |
| 10 | # # ## ### ##### ######## ############# ##################### |
| 11 | ## Passes. The order in which the various passes are loaded is |
| 12 | ## important. It is the same order in which they will |
| 13 | ## register, and then be run in. |
| 14 | |
| 15 | package require vc::fossil::import::cvs::pass::collar ; # Coll'ect Ar'chives. |
| 16 | package require vc::fossil::import::cvs::pass::collrev ; # Coll'ect Rev'isions. |
| 17 | package require vc::fossil::import::cvs::pass::collsym ; # Coll'ate Sym'bols |
| 18 | package require vc::fossil::import::cvs::pass::f iltersym ; # Filter' Sym'bols |
| 19 | |
| 20 | # Note: cvs2svn's SortRevisionSummaryPass and SortSymbolSummaryPass |
| 21 | # are not implemented by us. They are irrelevant due to our use |
| 22 | # of a relational database proper for the persistent state, |
| 23 | # allowing us to sort the data on the fly as we need it. |
| 24 | |
| 25 | package require vc::fossil::import::cvs::pass::initcsets ; # Init'ialize C'hange'Sets |
| 26 | package require vc::fossil::import::cvs::pass::csetdeps ; # C'hange'Set Dep'endencies |
| 27 | package require vc::fossil::import::cvs::pass::breakrcycle ; # Break' R'evision Cycle's |
| 28 | package require vc::fossil::import::cvs::pass::rtopsort ; # R'evision Top'ological Sort' |
| 29 | package require vc::fossil::import::cvs::pass::breakscycle ; # Break' S'ymbol Cycle's |
| 30 | package require vc::fossil::import::cvs::pass::breakac |
| 31 | # Note: cvs2svn's RevisionTopologicalSortPass is not a separate pass, |
| 32 | # |
| --- a/tools/cvs2fossil/lib/id.tcl | ||
| +++ b/tools/cvs2fossil/lib/id.tcl | ||
| @@ -0,0 +1,64 @@ | ||
| 1 | +# # ## ### ##### ######## ############# | |
| 2 | + | |
| 3 | +## A simple class for handling an in-memory index mapping from | |
| 4 | +## arbitrary strings to a small numeric id. Can be queried in reverse | |
| 5 | +## too, returning the string for the id. | |
| 6 | + | |
| 7 | +## Id's are starting from 1. | |
| 8 | + | |
| 9 | +# # ## ### ##### ######## ############# | |
| 10 | +## Requirements. | |
| 11 | + | |
| 12 | +package require Tcl ; # Runtime. | |
| 13 | +package require snit ; # OO runtime. | |
| 14 | + | |
| 15 | +# # ## ### ##### ######## ############# | |
| 16 | +## Implementation. | |
| 17 | + | |
| 18 | +snit::type ::vc::tools::id { | |
| 19 | + # # ## ### ##### ######## ############# | |
| 20 | + | |
| 21 | + constructor {} {} | |
| 22 | + | |
| 23 | + # # ## ### ##### ######## ############# | |
| 24 | + ## Public API. | |
| 25 | + ## - Put data into the index, incl. query for id of key. | |
| 26 | + ## - Lookup data for id. | |
| 27 | + | |
| 28 | + method put {key} { | |
| 29 | + if {[info exists mydata($key)]} { return $mydata($key) } | |
| 30 | + incr mycounter | |
| 31 | + | |
| 32 | + set mydata($key) $mycounter | |
| 33 | + set myinvert($mycounter) $key | |
| 34 | + | |
| 35 | + return $mycounter | |
| 36 | + } | |
| 37 | + | |
| 38 | + # Explicitly load the database with a mapping. | |
| 39 | + method map {id key} { | |
| 40 | + set mydata($key) $id | |
| 41 | + set myinvert($id) $key | |
| 42 | + } | |
| 43 | + | |
| 44 | + method keyof {id} { return $myinvert($id) } | |
| 45 | + method get {} { return [array get mydata] } | |
| 46 | + | |
| 47 | + # # ## ### ##### ######## ############# | |
| 48 | + ## Internal. State. | |
| 49 | + | |
| 50 | + variable mydata -array {} ; # Map data -> id | |
| 51 | + variable myinvert -array {} ; # Map id -> data | |
| 52 | + variable mycounter 0 ; # Counter for id generation. | |
| 53 | + | |
| 54 | + # # ## ### ##### ######## ############# | |
| 55 | +} | |
| 56 | + | |
| 57 | +namespace eval ::vc::tools { | |
| 58 | + namespace export id | |
| 59 | +} | |
| 60 | + | |
| 61 | +# # ## ### ##### ######## ############# | |
| 62 | +## Ready. | |
| 63 | + | |
| 64 | +package provide vc::tools::id 1.0 |
| --- a/tools/cvs2fossil/lib/id.tcl | |
| +++ b/tools/cvs2fossil/lib/id.tcl | |
| @@ -0,0 +1,64 @@ | |
| --- a/tools/cvs2fossil/lib/id.tcl | |
| +++ b/tools/cvs2fossil/lib/id.tcl | |
| @@ -0,0 +1,64 @@ | |
| 1 | # # ## ### ##### ######## ############# |
| 2 | |
| 3 | ## A simple class for handling an in-memory index mapping from |
| 4 | ## arbitrary strings to a small numeric id. Can be queried in reverse |
| 5 | ## too, returning the string for the id. |
| 6 | |
| 7 | ## Id's are starting from 1. |
| 8 | |
| 9 | # # ## ### ##### ######## ############# |
| 10 | ## Requirements. |
| 11 | |
| 12 | package require Tcl ; # Runtime. |
| 13 | package require snit ; # OO runtime. |
| 14 | |
| 15 | # # ## ### ##### ######## ############# |
| 16 | ## Implementation. |
| 17 | |
| 18 | snit::type ::vc::tools::id { |
| 19 | # # ## ### ##### ######## ############# |
| 20 | |
| 21 | constructor {} {} |
| 22 | |
| 23 | # # ## ### ##### ######## ############# |
| 24 | ## Public API. |
| 25 | ## - Put data into the index, incl. query for id of key. |
| 26 | ## - Lookup data for id. |
| 27 | |
| 28 | method put {key} { |
| 29 | if {[info exists mydata($key)]} { return $mydata($key) } |
| 30 | incr mycounter |
| 31 | |
| 32 | set mydata($key) $mycounter |
| 33 | set myinvert($mycounter) $key |
| 34 | |
| 35 | return $mycounter |
| 36 | } |
| 37 | |
| 38 | # Explicitly load the database with a mapping. |
| 39 | method map {id key} { |
| 40 | set mydata($key) $id |
| 41 | set myinvert($id) $key |
| 42 | } |
| 43 | |
| 44 | method keyof {id} { return $myinvert($id) } |
| 45 | method get {} { return [array get mydata] } |
| 46 | |
| 47 | # # ## ### ##### ######## ############# |
| 48 | ## Internal. State. |
| 49 | |
| 50 | variable mydata -array {} ; # Map data -> id |
| 51 | variable myinvert -array {} ; # Map id -> data |
| 52 | variable mycounter 0 ; # Counter for id generation. |
| 53 | |
| 54 | # # ## ### ##### ######## ############# |
| 55 | } |
| 56 | |
| 57 | namespace eval ::vc::tools { |
| 58 | namespace export id |
| 59 | } |
| 60 | |
| 61 | # # ## ### ##### ######## ############# |
| 62 | ## Ready. |
| 63 | |
| 64 | package provide vc::tools::id 1.0 |
+112
| --- a/tools/cvs2fossil/lib/log.tcl | ||
| +++ b/tools/cvs2fossil/lib/log.tcl | ||
| @@ -0,0 +1,112 @@ | ||
| 1 | +#$text"## -*- tcl -*- | |
| 2 | +# # ## ### ##### ######## ############# ##################### | |
| 3 | +## Copyright (c) 2007 | |
| 4 | +## Copyright (c) 2007-2008 Andreas Kupries. | |
| 5 | +# | |
| 6 | +# This software is licensed as described in the file LICENSE, which | |
| 7 | +# you should have received as part of this distribution. | |
| 8 | +# | |
| 9 | +# This software consists of voluntary contributions made by many | |
| 10 | +# individuals. For exact contribution history, see the revision | |
| 11 | +# history and logs, available at http://fossil-scm.hwaci.com/fossil | |
| 12 | +# # ## ### ##### ######## ############# ##################### | |
| 13 | + | |
| 14 | +## Utility package, basic user feedback | |
| 15 | + | |
| 16 | +# # ## ### ##### ######## ############# ##################### | |
| 17 | +## Requirements | |
| 18 | + | |
| 19 | +package require Tcl 8.4 ; # Required runti; # OO system. | |
| 20 | +## -*- tcl ####### ############# ##################### | |
| 21 | +## Copyright (c) 2007 | |
| 22 | +## Copyright (c) 2007-2008 Andreas Kupries. | |
| 23 | +# | |
| 24 | +# This software is licensed as described in the file LICENSE, which | |
| 25 | +# you should have received as part of this distribution. | |
| 26 | +# | |
| 27 | +# This software consists of voluntary contributions made by many | |
| 28 | +# individuals. For exact contribution history, see the revision | |
| 29 | +# history and logs, available at http://fossil-scm.hwaci.com/fossil | |
| 30 | +# # ## ### ##### ######## ############# ##################### | |
| 31 | + | |
| 32 | +## Utility package,$text# ### ##### ######## ####################### | |
| 33 | +## Requirements | |
| 34 | + | |
| 35 | +package require Tcl 8.4 ; # Required runti; # OO system. | |
| 36 | +## -*- tcl -*- | |
| 37 | +# # ## ### ##### ######## ############# ##################### | |
| 38 | +## Copyright (c) 2007-2008 Andreas Kupries. | |
| 39 | +# | |
| 40 | +# This software is licensed as described in the file LICENSE, whicis software consists of voluntary contributions made by many | |
| 41 | +# individuals. For exact contribution history, see the revision | |
| 42 | +# history and logs, available at http://fossil-scm.hwaci.com/fossil | |
| 43 | +# # ## ### ##### ######## ############# ##################### | |
| 44 | + | |
| 45 | +## Utility package, basic user feedback | |
| 46 | + | |
| 47 | +# # ## ### ##### ######## ############# ##################### | |
| 48 | +## Requirements | |
| 49 | + | |
| 50 | +package require Tcl 8.4 ; # Required runtime | |
| 51 | +package require snit ; # OO system. | |
| 52 | +package require vc::tools::mem ; # Memory tracking. | |
| 53 | + | |
| 54 | +# # ## ### ##### ######## ############# ##################### # # ## ### ##### ######## ############# | |
| 55 | + ## Public API, Methods | |
| 56 | + | |
| 57 | + # Write the message 'text' to log, for the named 'system'. The | |
| 58 | + # message is written if and only if the message verbosity is less | |
| 59 | + # or equal the chosen verbosity. A message of verbosity 0 cannot | |
| 60 | + # be blocked. | |
| 61 | + | |
| 62 | + typemethod write {verbosity system text} { | |
| 63 | + if {$verbosity > $myloglevel} return | |
| 64 | + uplevel #0 [linsert $mylogcmd end write [System $system] \ | |
| 65 | + [uplevel 1 [list ::subst $text]]] | |
| 66 | + return | |
| 67 | + } | |
| 68 | + | |
| 69 | + # Similar to write, especially in the handling of the verbosity, | |
| 70 | + # to drive progress displays. It signals thaputs "l {[^ ]} $m { } b | |
| 71 | + puts "$m$system system "]"## -*- tcl -*- | |
| 72 | +# # # ### ##### ######## ############# ##################### | |
| 73 | +## Copyright (c) 2007-2008 Andr%s ich | |
| 74 | +# you should have received as part of this distribution. | |
| 75 | +# | |
| 76 | +# This soft0 ## ### ##### ######## ##########$text"## -*- tcl -*- | |
| 77 | +# # ## ### ##fossil | |
| 78 | +# # ## ### ##### ######## ############# ##################### | |
| 79 | + | |
| 80 | +## Utility package, basic user feedback | |
| 81 | + | |
| 82 | +# # ## ### ##### ######## ############# ##################### | |
| 83 | +## Requirements | |
| 84 | + | |
| 85 | +package require Tcl 8.4 ; # Required runtime | |
| 86 | +package require snit ; # OO system. | |
| 87 | +package require vc::tools::mem ; # Memory tracking. | |
| 88 | + | |
| 89 | +# # ## ### ##### ######## ############# ##################### | |
| 90 | +## | |
| 91 | + | |
| 92 | +snit::type ::vc::tools::log { | |
| 93 | + # # ## ### ##### ######## ############# | |
| 94 | + ## Public API, Methods | |
| 95 | + | |
| 96 | + # Write the message 'text' to log, for the named 'system'. The | |
| 97 | + # message is written if and only if the message verbosity is less | |
| 98 | + # or equal the chosen verbosity. A message of verbosity 0 cannot | |
| 99 | + # be blocked. | |
| 100 | + | |
| 101 | + typemethod write {verbosity system text} { | |
| 102 | + if {$verbosity > $myloglevel} return | |
| 103 | + uplevel #0 [linsert $mylogcmd end write [System $system] \ | |
| 104 | + [uplevel 1 [list ::subst $text]]] | |
| 105 | + return | |
| 106 | + } | |
| 107 | + | |
| 108 | + # Similar to write, especially in the handling of the verbosity, | |
| 109 | + # to drive progress displays. It signals thaputs "l {[^ ]} $m { } b | |
| 110 | + puts "$m$system system "]"## -*- tcl -*- | |
| 111 | +# # # ### ##### ######## ############# ##################### | |
| 112 | +## Copyright (c) 2007-2008 Andr |
| --- a/tools/cvs2fossil/lib/log.tcl | |
| +++ b/tools/cvs2fossil/lib/log.tcl | |
| @@ -0,0 +1,112 @@ | |
| --- a/tools/cvs2fossil/lib/log.tcl | |
| +++ b/tools/cvs2fossil/lib/log.tcl | |
| @@ -0,0 +1,112 @@ | |
| 1 | #$text"## -*- tcl -*- |
| 2 | # # ## ### ##### ######## ############# ##################### |
| 3 | ## Copyright (c) 2007 |
| 4 | ## Copyright (c) 2007-2008 Andreas Kupries. |
| 5 | # |
| 6 | # This software is licensed as described in the file LICENSE, which |
| 7 | # you should have received as part of this distribution. |
| 8 | # |
| 9 | # This software consists of voluntary contributions made by many |
| 10 | # individuals. For exact contribution history, see the revision |
| 11 | # history and logs, available at http://fossil-scm.hwaci.com/fossil |
| 12 | # # ## ### ##### ######## ############# ##################### |
| 13 | |
| 14 | ## Utility package, basic user feedback |
| 15 | |
| 16 | # # ## ### ##### ######## ############# ##################### |
| 17 | ## Requirements |
| 18 | |
| 19 | package require Tcl 8.4 ; # Required runti; # OO system. |
| 20 | ## -*- tcl ####### ############# ##################### |
| 21 | ## Copyright (c) 2007 |
| 22 | ## Copyright (c) 2007-2008 Andreas Kupries. |
| 23 | # |
| 24 | # This software is licensed as described in the file LICENSE, which |
| 25 | # you should have received as part of this distribution. |
| 26 | # |
| 27 | # This software consists of voluntary contributions made by many |
| 28 | # individuals. For exact contribution history, see the revision |
| 29 | # history and logs, available at http://fossil-scm.hwaci.com/fossil |
| 30 | # # ## ### ##### ######## ############# ##################### |
| 31 | |
| 32 | ## Utility package,$text# ### ##### ######## ####################### |
| 33 | ## Requirements |
| 34 | |
| 35 | package require Tcl 8.4 ; # Required runti; # OO system. |
| 36 | ## -*- tcl -*- |
| 37 | # # ## ### ##### ######## ############# ##################### |
| 38 | ## Copyright (c) 2007-2008 Andreas Kupries. |
| 39 | # |
| 40 | # This software is licensed as described in the file LICENSE, whicis software consists of voluntary contributions made by many |
| 41 | # individuals. For exact contribution history, see the revision |
| 42 | # history and logs, available at http://fossil-scm.hwaci.com/fossil |
| 43 | # # ## ### ##### ######## ############# ##################### |
| 44 | |
| 45 | ## Utility package, basic user feedback |
| 46 | |
| 47 | # # ## ### ##### ######## ############# ##################### |
| 48 | ## Requirements |
| 49 | |
| 50 | package require Tcl 8.4 ; # Required runtime |
| 51 | package require snit ; # OO system. |
| 52 | package require vc::tools::mem ; # Memory tracking. |
| 53 | |
| 54 | # # ## ### ##### ######## ############# ##################### # # ## ### ##### ######## ############# |
| 55 | ## Public API, Methods |
| 56 | |
| 57 | # Write the message 'text' to log, for the named 'system'. The |
| 58 | # message is written if and only if the message verbosity is less |
| 59 | # or equal the chosen verbosity. A message of verbosity 0 cannot |
| 60 | # be blocked. |
| 61 | |
| 62 | typemethod write {verbosity system text} { |
| 63 | if {$verbosity > $myloglevel} return |
| 64 | uplevel #0 [linsert $mylogcmd end write [System $system] \ |
| 65 | [uplevel 1 [list ::subst $text]]] |
| 66 | return |
| 67 | } |
| 68 | |
| 69 | # Similar to write, especially in the handling of the verbosity, |
| 70 | # to drive progress displays. It signals thaputs "l {[^ ]} $m { } b |
| 71 | puts "$m$system system "]"## -*- tcl -*- |
| 72 | # # # ### ##### ######## ############# ##################### |
| 73 | ## Copyright (c) 2007-2008 Andr%s ich |
| 74 | # you should have received as part of this distribution. |
| 75 | # |
| 76 | # This soft0 ## ### ##### ######## ##########$text"## -*- tcl -*- |
| 77 | # # ## ### ##fossil |
| 78 | # # ## ### ##### ######## ############# ##################### |
| 79 | |
| 80 | ## Utility package, basic user feedback |
| 81 | |
| 82 | # # ## ### ##### ######## ############# ##################### |
| 83 | ## Requirements |
| 84 | |
| 85 | package require Tcl 8.4 ; # Required runtime |
| 86 | package require snit ; # OO system. |
| 87 | package require vc::tools::mem ; # Memory tracking. |
| 88 | |
| 89 | # # ## ### ##### ######## ############# ##################### |
| 90 | ## |
| 91 | |
| 92 | snit::type ::vc::tools::log { |
| 93 | # # ## ### ##### ######## ############# |
| 94 | ## Public API, Methods |
| 95 | |
| 96 | # Write the message 'text' to log, for the named 'system'. The |
| 97 | # message is written if and only if the message verbosity is less |
| 98 | # or equal the chosen verbosity. A message of verbosity 0 cannot |
| 99 | # be blocked. |
| 100 | |
| 101 | typemethod write {verbosity system text} { |
| 102 | if {$verbosity > $myloglevel} return |
| 103 | uplevel #0 [linsert $mylogcmd end write [System $system] \ |
| 104 | [uplevel 1 [list ::subst $text]]] |
| 105 | return |
| 106 | } |
| 107 | |
| 108 | # Similar to write, especially in the handling of the verbosity, |
| 109 | # to drive progress displays. It signals thaputs "l {[^ ]} $m { } b |
| 110 | puts "$m$system system "]"## -*- tcl -*- |
| 111 | # # # ### ##### ######## ############# ##################### |
| 112 | ## Copyright (c) 2007-2008 Andr |
| --- a/tools/cvs2fossil/lib/misc.tcl | ||
| +++ b/tools/cvs2fossil/lib/misc.tcl | ||
| @@ -0,0 +1,97 @@ | ||
| 1 | +## -*- tcl -*- | |
| 2 | +# # ## ### ##### ######## ############# ##################### | |
| 3 | +## Copyright (c) 2007 | |
| 4 | +## Copyright (c) 2007-2008 Andreas Kupries. | |
| 5 | +# | |
| 6 | +# This software is licensed as described in the file LICENSE, which | |
| 7 | +# you should have received as part of this distribution. | |
| 8 | +# | |
| 9 | +# This software consists of voluntary contributions made by many | |
| 10 | +# individuals. For exact contribution history, see the revision | |
| 11 | +# history and logs, available at http://fossil-scm.hwaci.com/fossil | |
| 12 | +# # ## ### ##### ######## ############# ##################### | |
| 13 | + | |
| 14 | +## Utilities for various things: text formatting, max, ... | |
| 15 | + | |
| 16 | +# # ## ### ##### ######## ############# ##################### | |
| 17 | +## Requirements | |
| 18 | + | |
| 19 | +package require Tcl 8.4 ; # Required runtime | |
| 20 | + | |
| 21 | +# # ## ### ##### ######## ############# ##################### | |
| 22 | +## | |
| 23 | + | |
| 24 | +namespace eval ::vc::tools::misc { | |
| 25 | + # # ## ### ##### ######## ############# | |
| 26 | + ## Public API, Methods | |
| 27 | + | |
| 28 | + # Choose singular vs plural forms of a word based on a number. | |
| 29 | + | |
| 30 | + proc sp {n singular {plural {}}} { | |
| 31 | + if {$n == 1} {return $singular} | |
| 32 | + if {$plural eq ""} {set pi $n $singular $plural]" | |
| 33 | + } | |
| 34 | + | |
| 35 | + # Find maximum/minimum in a list. | |
| 36 | + | |
| 37 | + proc max {list} { | |
| 38 | + setset min $e | |
| 39 | + } | |
| 40 | + return $n [sp $n $singular $plural]" | |
| 41 | + i $n $singular $plural]" | |
| 42 | + } | |
| 43 | + | |
| 44 | + # Find maximum/minimum in a list. | |
| 45 | + | |
| 46 | + proc max {list} { | |
| 47 | + set max -1 | |
| 48 | + foreach e $list { | |
| 49 | + if {$e < $max} continue | |
| 50 | + set max $e | |
| 51 | + } | |
| 52 | + return $max | |
| 53 | + } | |
| 54 | + | |
| 55 | + pi $n $singular $plural]" | |
| 56 | + } | |
| 57 | + | |
| 58 | + # Find maximum/minimum in a list. | |
| 59 | + | |
| 60 | + proc max {list} { | |
| 61 | + s {lv item} { | |
| 62 | + upvar 1 $lv lisset min $e | |
| 63 | + } | |
| 64 | + return $min | |
| 65 | + } | |
| 66 | + | |
| 67 | + proc max2 {a b} { | |
| 68 | + if {$a > i $n $singular $plural]" | |
| 69 | + } | |
| 70 | + | |
| 71 | + # Find maximum/minimum in a list. | |
| 72 | + | |
| 73 | + proc max {list} { | |
| 74 | + s {lv item} { | |
| 75 | + upvar 1 $lv list | |
| 76 | + set pos [lsearch -exact $list $item] | |
| 77 | + if {$pos < 0} returi$pos $pos] | |
| 78 | + return | |
| 79 | + } | |
| 80 | + | |
| 81 | + # Dei | |
| 82 | + proc striptrailingslash {path} { | |
| 83 | + # split and rejoin gets rid of a traling / character. | |
| 84 | + return [eval [linsert [file split $path] 0 ::file join]] | |
| 85 | + } | |
| 86 | + | |
| 87 | + # The windows filesystem is sring file-names casei fileisdir_ci | |
| 88 | +} | |
| 89 | + | |
| 90 | +# is a proble ::vc::toolames casei fileisdir_ci | |
| 91 | +} | |
| 92 | + | |
| 93 | +# is a problem as without | |
| 94 | + # precaution the two files Attic/ striptrailingslash | |
| 95 | +} | |
| 96 | + | |
| 97 | +# |
| --- a/tools/cvs2fossil/lib/misc.tcl | |
| +++ b/tools/cvs2fossil/lib/misc.tcl | |
| @@ -0,0 +1,97 @@ | |
| --- a/tools/cvs2fossil/lib/misc.tcl | |
| +++ b/tools/cvs2fossil/lib/misc.tcl | |
| @@ -0,0 +1,97 @@ | |
| 1 | ## -*- tcl -*- |
| 2 | # # ## ### ##### ######## ############# ##################### |
| 3 | ## Copyright (c) 2007 |
| 4 | ## Copyright (c) 2007-2008 Andreas Kupries. |
| 5 | # |
| 6 | # This software is licensed as described in the file LICENSE, which |
| 7 | # you should have received as part of this distribution. |
| 8 | # |
| 9 | # This software consists of voluntary contributions made by many |
| 10 | # individuals. For exact contribution history, see the revision |
| 11 | # history and logs, available at http://fossil-scm.hwaci.com/fossil |
| 12 | # # ## ### ##### ######## ############# ##################### |
| 13 | |
| 14 | ## Utilities for various things: text formatting, max, ... |
| 15 | |
| 16 | # # ## ### ##### ######## ############# ##################### |
| 17 | ## Requirements |
| 18 | |
| 19 | package require Tcl 8.4 ; # Required runtime |
| 20 | |
| 21 | # # ## ### ##### ######## ############# ##################### |
| 22 | ## |
| 23 | |
| 24 | namespace eval ::vc::tools::misc { |
| 25 | # # ## ### ##### ######## ############# |
| 26 | ## Public API, Methods |
| 27 | |
| 28 | # Choose singular vs plural forms of a word based on a number. |
| 29 | |
| 30 | proc sp {n singular {plural {}}} { |
| 31 | if {$n == 1} {return $singular} |
| 32 | if {$plural eq ""} {set pi $n $singular $plural]" |
| 33 | } |
| 34 | |
| 35 | # Find maximum/minimum in a list. |
| 36 | |
| 37 | proc max {list} { |
| 38 | setset min $e |
| 39 | } |
| 40 | return $n [sp $n $singular $plural]" |
| 41 | i $n $singular $plural]" |
| 42 | } |
| 43 | |
| 44 | # Find maximum/minimum in a list. |
| 45 | |
| 46 | proc max {list} { |
| 47 | set max -1 |
| 48 | foreach e $list { |
| 49 | if {$e < $max} continue |
| 50 | set max $e |
| 51 | } |
| 52 | return $max |
| 53 | } |
| 54 | |
| 55 | pi $n $singular $plural]" |
| 56 | } |
| 57 | |
| 58 | # Find maximum/minimum in a list. |
| 59 | |
| 60 | proc max {list} { |
| 61 | s {lv item} { |
| 62 | upvar 1 $lv lisset min $e |
| 63 | } |
| 64 | return $min |
| 65 | } |
| 66 | |
| 67 | proc max2 {a b} { |
| 68 | if {$a > i $n $singular $plural]" |
| 69 | } |
| 70 | |
| 71 | # Find maximum/minimum in a list. |
| 72 | |
| 73 | proc max {list} { |
| 74 | s {lv item} { |
| 75 | upvar 1 $lv list |
| 76 | set pos [lsearch -exact $list $item] |
| 77 | if {$pos < 0} returi$pos $pos] |
| 78 | return |
| 79 | } |
| 80 | |
| 81 | # Dei |
| 82 | proc striptrailingslash {path} { |
| 83 | # split and rejoin gets rid of a traling / character. |
| 84 | return [eval [linsert [file split $path] 0 ::file join]] |
| 85 | } |
| 86 | |
| 87 | # The windows filesystem is sring file-names casei fileisdir_ci |
| 88 | } |
| 89 | |
| 90 | # is a proble ::vc::toolames casei fileisdir_ci |
| 91 | } |
| 92 | |
| 93 | # is a problem as without |
| 94 | # precaution the two files Attic/ striptrailingslash |
| 95 | } |
| 96 | |
| 97 | # |
| --- a/tools/cvs2fossil/lib/pkgIndex.tcl | ||
| +++ b/tools/cvs2fossil/lib/pkgIndex.tcl | ||
| @@ -0,0 +1,2 @@ | ||
| 1 | +# # ## ### ##### ######## ############# ##################### | |
| 2 | +## Packagestatec2f_lodmgrc2f_flodmgrlodmgrplodmgrgtcorebreakrrrtopsortlog |
| --- a/tools/cvs2fossil/lib/pkgIndex.tcl | |
| +++ b/tools/cvs2fossil/lib/pkgIndex.tcl | |
| @@ -0,0 +1,2 @@ | |
| --- a/tools/cvs2fossil/lib/pkgIndex.tcl | |
| +++ b/tools/cvs2fossil/lib/pkgIndex.tcl | |
| @@ -0,0 +1,2 @@ | |
| 1 | # # ## ### ##### ######## ############# ##################### |
| 2 | ## Packagestatec2f_lodmgrc2f_flodmgrlodmgrplodmgrgtcorebreakrrrtopsortlog |
| --- a/tools/cvs2fossil/lib/rcsparser.tcl | ||
| +++ b/tools/cvs2fossil/lib/rcsparser.tcl | ||
| @@ -0,0 +1,393 @@ | ||
| 1 | +## -*- tcl -*- | |
| 2 | +# # ## ### ##### ######## ############# ##################### | |
| 3 | +## Copyright (c) 2007 Andreas Kupries. | |
| 4 | +# | |
| 5 | +# This software is licensed as described in the file LICENSE, which | |
| 6 | +# you should have received as part of this distribution. | |
| 7 | +# | |
| 8 | +# This software consists of voluntary contributions made by many | |
| 9 | +# individuals. For exact contribution history, see the revision | |
| 10 | +# history and logs, available at http://fossil-scm.hwaci.com/fossil | |
| 11 | +# # ## ### ##### ######## ############# ##################### | |
| 12 | + | |
| 13 | +# A tool package, provides a parser for RCS archive files. This parser | |
| 14 | +# is implemented via recursive descent. It is not only given a file to | |
| 15 | +# process, but also a 'sink', an object it calls out to at important | |
| 16 | +# places of the parsing process to either signal an event and/or | |
| 17 | +# convey gathered information to it. The sink is responsible for the | |
| 18 | +# actual processing of the data in whatever way it desires. | |
| 19 | + | |
| 20 | +# # ## ### ##### ######## ############# ##################### | |
| 21 | +## Requirements | |
| 22 | + | |
| 23 | +package require Tcl 8.4 ; # Required runtime. | |
| 24 | +package require snit ; # OO system. | |
| 25 | +package require fileutil ; # File utilities. | |
| 26 | +package require vc::tools::log ; # User feedback. | |
| 27 | +package require struct::list ; # Advanced list ops. | |
| 28 | + | |
| 29 | +# # ## ### ##### ######## ############# ##################### | |
| 30 | +## | |
| 31 | + | |
| 32 | +snit::type ::vc::rcs::parser { | |
| 33 | + # # ## ### ##### ######## ############# | |
| 34 | + ## Public API | |
| 35 | + | |
| 36 | + typemethod process {path sink} { | |
| 37 | + Initialize $path $sink | |
| 38 | + Call begin | |
| 39 | + Admin ; Deltas ; Description ; DeltaTexts | |
| 40 | + Call done | |
| 41 | + return | |
| 42 | + } | |
| 43 | + | |
| 44 | + # # ## ### ##### ######## ############# | |
| 45 | + ## Internal methods, recursive descent, syntactical processing | |
| 46 | + | |
| 47 | + proc Admin {} { | |
| 48 | + Head ; PrincipalBranch ; Access ; Symbols | |
| 49 | + Locks ; Strictness ; FileComment ; Expand | |
| 50 | + Call admindone | |
| 51 | + return | |
| 52 | + } | |
| 53 | + | |
| 54 | + # # ## ### ##### ######## ############# | |
| 55 | + | |
| 56 | + proc Head {} { | |
| 57 | + RequiredLiteral head | |
| 58 | + RequiredNumber -> head | |
| 59 | + Semicolon | |
| 60 | + Call sethead $head | |
| 61 | + return | |
| 62 | + } | |
| 63 | + | |
| 64 | + proc PrincipalBranch {} { | |
| 65 | + if {![OptionalLiteral branch]} return | |
| 66 | + RequiredNumber -> branch | |
| 67 | + Semicolon | |
| 68 | + Call setprincipalbranch $branch | |
| 69 | + return | |
| 70 | + } | |
| 71 | + | |
| 72 | + proc Access {} { | |
| 73 | + RequiredLiteral access ; | |
| 74 | + Semicolon | |
| 75 | + return | |
| 76 | + } | |
| 77 | + | |
| 78 | + proc Symbols {} { | |
| 79 | + RequiredLiteral symbols | |
| 80 | + while {[Ident -> symbol]} { | |
| 81 | + if { | |
| 82 | + *$} $symbol] || | |
| 83 | + [string match */ $symbol] | |
| 84 | + } { | |
| 85 | + Rewind | |
| 86 | + Bad {symbol name} | |
| 87 | + } | |
| 88 | + RequiredNumber -> rev | |
| 89 | + Call deftag $symbol $rev | |
| 90 | + } | |
| 91 | + Semicolon | |
| 92 | + return | |
| 93 | + } | |
| 94 | + | |
| 95 | + proc Locks {} { | |
| 96 | + # Not saving locks. | |
| 97 | + RequiredLiteral locks | |
| 98 | + while {[Ident -> symbol]} { | |
| 99 | + RequiredNumber -> l | |
| 100 | + } | |
| 101 | + Semicolon | |
| 102 | + return | |
| 103 | + } | |
| 104 | + | |
| 105 | + proc Strictness {} { | |
| 106 | + # Not saving strictness | |
| 107 | + if {![OptionalLiteral strict]} return | |
| 108 | + Semicolon | |
| 109 | + return | |
| 110 | + } | |
| 111 | + | |
| 112 | + proc FileComment {} { | |
| 113 | + if {![OptionalLiteral comment]} return | |
| 114 | + if {![OptionalString -> c]} return | |
| 115 | + Semicolon | |
| 116 | + Call setcomment $c | |
| 117 | + return | |
| 118 | + } | |
| 119 | + | |
| 120 | + proc Expand {} { | |
| 121 | + # Not saving expanded keywords | |
| 122 | + if {![OptionalLiteral expand]} return | |
| 123 | + if {![OptionalString -> dummy]} return | |
| 124 | + Semicolon | |
| 125 | + return | |
| 126 | + } | |
| 127 | + | |
| 128 | + # # ## ### ##### ######## ############# | |
| 129 | + | |
| 130 | + proc Deltas {} { | |
| 131 | + set ok [OptionalNumber -> rev] | |
| 132 | + while {$ok} { | |
| 133 | + Date -> d | |
| 134 | + Author -> a | |
| 135 | + State -> s | |
| 136 | + Branches -> b | |
| 137 | + NextRev -> n | |
| 138 | + Call def $rev $d $a $s $n $b | |
| 139 | + | |
| 140 | + # Check if this is followed by a revision number or the | |
| 141 | + # literal 'desc'. If neither we consume whatever is there | |
| 142 | + # until the next semicolon, as it has to be a 'new | |
| 143 | + # phrase'. Otherwise, for a revision number we loop back | |
| 144 | + # and consume that revision, and lastly for 'desc' we stop | |
| 145 | + # completely as this signals the end of the revision tree | |
| 146 | + # and the beginning of the deltas. | |
| 147 | + | |
| 148 | + while {1} { | |
| 149 | + set ok [OptionalNumber -> rev] | |
| 150 | + if {$ok} break | |
| 151 | + | |
| 152 | + if {[LiteralPeek desc]} { | |
| 153 | + set ok 0 | |
| 154 | + break | |
| 155 | + } | |
| 156 | + | |
| 157 | + Anything -> dummy | |
| 158 | + Semicolon | |
| 159 | + } | |
| 160 | + } | |
| 161 | + Call defdone | |
| 162 | + return | |
| 163 | + } | |
| 164 | + | |
| 165 | + # # ## ### ##### ######## ############# | |
| 166 | + | |
| 167 | + proc Date {_ dv} { | |
| 168 | + upvar 1 $dv d | |
| 169 | + RequiredLiteral date | |
| 170 | + RequiredNumber -> d | |
| 171 | + Semicolon | |
| 172 | + | |
| 173 | + struct::list assign [split $d .] year month day hour min sec | |
| 174 | + if {$year < 100} {incr year 1900} | |
| 175 | + set d [clock scan "${year}-${month}-${day} ${hour}:${min}:${sec}"] | |
| 176 | + return | |
| 177 | + } | |
| 178 | + | |
| 179 | + proc Author {_ av} { | |
| 180 | + upvar 1 $av a | |
| 181 | + RequiredLiteral author | |
| 182 | + Anything -> a | |
| 183 | + Semicolon | |
| 184 | + return | |
| 185 | + } | |
| 186 | + | |
| 187 | + proc State {_ sv} { | |
| 188 | + upvar 1 $sv s | |
| 189 | + RequiredLiteral state | |
| 190 | + Anything -> s | |
| 191 | + Semicolon | |
| 192 | + return | |
| 193 | + } | |
| 194 | + | |
| 195 | + proc Branches {_ bv} { | |
| 196 | + upvar 1 $bv b | |
| 197 | + RequiredLiteral branches | |
| 198 | + Anything -> b | |
| 199 | + Semicolon | |
| 200 | + return | |
| 201 | + } | |
| 202 | + | |
| 203 | + proc NextRev {_ nv} { | |
| 204 | + upvar 1 $nv n | |
| 205 | + RequiredLiteral next | |
| 206 | + Anything -> n | |
| 207 | + Semicolon | |
| 208 | + return | |
| 209 | + } | |
| 210 | + | |
| 211 | + # # ## ### ##### ######## ############# | |
| 212 | + | |
| 213 | + proc Description {} { | |
| 214 | + upvar 1 data data res res | |
| 215 | + RequiredLiteral desc | |
| 216 | + RequiredString -> d | |
| 217 | + Call setdesc $d | |
| 218 | + return | |
| 219 | + } | |
| 220 | + | |
| 221 | + # # ## ### ##### ######## ############# | |
| 222 | + | |
| 223 | + proc DeltaTexts {} { | |
| 224 | + while {[OptionalNumber -> rev]} { | |
| 225 | + RequiredLiteral log | |
| 226 | + RequiredString -> cmsg | |
| 227 | + if {[regexp {[\000-\010\013\014\016-\037]} $cmsg]} { | |
| 228 | + #Rewind | |
| 229 | + #Bad "log message for $rev contains at least one control character" | |
| 230 | + } | |
| 231 | + | |
| 232 | + RequiredLiteral text | |
| 233 | + RequiredStringRange -> delta | |
| 234 | + Call extend $rev $cmsg $delta | |
| 235 | + } | |
| 236 | + return | |
| 237 | + } | |
| 238 | + | |
| 239 | + # # ## ### ##### ######## ############# | |
| 240 | + ## Internal methods, lexiographical processing | |
| 241 | + | |
| 242 | + proc Semicolon {} { | |
| 243 | + ::variable mydata | |
| 244 | + ::variable mypos | |
| 245 | + | |
| 246 | + set ok [regexp -start $mypos -indices -- {\A\s*;\s*} $mydata match] | |
| 247 | + if {!$ok} { Expected ';' } | |
| 248 | + | |
| 249 | + SkipOver match | |
| 250 | + return | |
| 251 | + } | |
| 252 | + | |
| 253 | + proc RequiredLiteral {name} { | |
| 254 | + ::variable mydata | |
| 255 | + ::variable mypos | |
| 256 | + | |
| 257 | + set pattern "\\A\\s*$name\\s*" | |
| 258 | + set ok [regexp -start $mypos -indices -- $pattern $mydata match] | |
| 259 | + if {!$ok} { Expected '$name' } | |
| 260 | + | |
| 261 | + SkipOver match | |
| 262 | + return | |
| 263 | + } | |
| 264 | + | |
| 265 | + proc OptionalLiteral {name} { | |
| 266 | + ::variable mydata | |
| 267 | + ::variable mypos | |
| 268 | + | |
| 269 | + set pattern "\\A\\s*$name\\s*" | |
| 270 | + set ok [regexp -start $mypos -indices -- $pattern $mydata match] | |
| 271 | + if {!$ok} { return 0 } | |
| 272 | + | |
| 273 | + SkipOver match | |
| 274 | + return 1 | |
| 275 | + } | |
| 276 | + | |
| 277 | + proc LiteralPeek {name} { | |
| 278 | + ::variable mydata | |
| 279 | + ::variable mypos | |
| 280 | + | |
| 281 | + set pattern "\\A\\s*$name\\s*" | |
| 282 | + set ok [regexp -start $mypos -indices -- $pattern $mydata match] | |
| 283 | + if {!$ok} { return 0 } | |
| 284 | + | |
| 285 | + # NO - SkipOver match - Only looking ahead here. | |
| 286 | + return 1 | |
| 287 | + } | |
| 288 | + | |
| 289 | + proc RequiredNumber {_ v} { | |
| 290 | + upvar 1 $v value | |
| 291 | + ::variable mydata | |
| 292 | + ::variable mypos | |
| 293 | + | |
| 294 | + set pattern {\A\s*((\d|\.)+)\s*} | |
| 295 | + set ok [regexp -start $mypos -indices -- $pattern $mydata match v] | |
| 296 | + if {!$ok} { Expected id } | |
| 297 | + | |
| 298 | + Extract $v -> value | |
| 299 | + SkipOver match | |
| 300 | + return | |
| 301 | + } | |
| 302 | + | |
| 303 | + proc OptionalNumber {_ v} { | |
| 304 | + upvar 1 $v value | |
| 305 | + ::variable mydata | |
| 306 | + ::variable mypos | |
| 307 | + | |
| 308 | + set pattern {\A\s*((\d|\.)+)\s*} | |
| 309 | + set ok [regexp -start $mypos -indices -- $pattern $mydata match v] | |
| 310 | + if {!$ok} { return 0 } | |
| 311 | + | |
| 312 | + Extract $v -> value | |
| 313 | + SkipOver match | |
| 314 | + return 1 | |
| 315 | + } | |
| 316 | + | |
| 317 | + proc RequiredString {_ v} { | |
| 318 | + upvar 1 $v value | |
| 319 | + ::variable mydata | |
| 320 | + ::variable mypos | |
| 321 | + | |
| 322 | + set ok [regexp -start $mypos -indices -- {\A\s*@(([^@]*(@@)*)*)@\s*} $mydata match v] | |
| 323 | + if {!$ok} { Expected string } | |
| 324 | + | |
| 325 | + Extract $v -> value | |
| 326 | + set value [string map {@@ @} $value] | |
| 327 | + SkipOver match | |
| 328 | + return | |
| 329 | + } | |
| 330 | + | |
| 331 | + proc RequiredStringRange {_ v} { | |
| 332 | + upvar 1 $v value | |
| 333 | + ::variable mydata | |
| 334 | + ::variable mypos | |
| 335 | + | |
| 336 | + set ok [regexp -start $mypos -indices -- {\A\s*@(([^@]*(@@)*)*)@\s*} $mydata match value] | |
| 337 | + if {!$ok} { Expected string } | |
| 338 | + | |
| 339 | + } | |
| 340 | + | |
| 341 | + proc Bad {x} { | |
| 342 | + ::variable mydata | |
| 343 | + ::variable mypos | |
| 344 | + set e $mypos ; incr e 30 | |
| 345 | + return -code error -errorcoBad $x @ 're is licensed as descr## -*- tcl -*- | |
| 346 | + | |
| 347 | + } | |
| 348 | + | |
| 349 | + # # ## ### ##### ######## ############# | |
| 350 | + ## Setup, callbacks. | |
| 351 | + | |
| 352 | + proc Initialize {path sink} { | |
| 353 | + ::variable mypos 0 | |
| 354 | + ::variaencoding binary $path] | |
| 355 | + ::variable mysize [file size $path] | |
| 356 | + ::variable mysink $sink | |
| 357 | + return | |
| 358 | + } | |
| 359 | + | |
| 360 | + proc Call {args} { | |
| 361 | + ::variable mysink | |
| 362 | + set cmd $mysink | |
| 363 | + foreach a $args { lappend cmd $a } | |
| 364 | + eval $cmd | |
| 365 | + return | |
| 366 | + } | |
| 367 | + | |
| 368 | + # # ## ### ##### ######## ############# | |
| 369 | + ## Configuration | |
| 370 | + | |
| 371 | + typevariable mydata {} ; # Rcs archive contents to process | |
| 372 | + typevariable mysize 0 ; # Length of contents | |
| 373 | + typevariable mysink {} ; # Sink to report to | |
| 374 | + | |
| 375 | + pragma -hasinstances no ; # singleton | |
| 376 | + pragma -hastypeinfo no ; # no introspection | |
| 377 | + pragma -hastypedestroy no ; # immortal | |
| 378 | + | |
| 379 | + # # ## ### ##### ######## ############# | |
| 380 | +} | |
| 381 | + | |
| 382 | +namespace eval ::vc::rcs { | |
| 383 | + namespace export parser | |
| 384 | + namespace eval parser { | |
| 385 | + namespace import ::vc::tools::log | |
| 386 | + log register rcs | |
| 387 | + } | |
| 388 | +} | |
| 389 | + | |
| 390 | +# # ## ### ##### ######## ############# ##################### | |
| 391 | +## Ready | |
| 392 | + | |
| 393 | +package provide |
| --- a/tools/cvs2fossil/lib/rcsparser.tcl | |
| +++ b/tools/cvs2fossil/lib/rcsparser.tcl | |
| @@ -0,0 +1,393 @@ | |
| --- a/tools/cvs2fossil/lib/rcsparser.tcl | |
| +++ b/tools/cvs2fossil/lib/rcsparser.tcl | |
| @@ -0,0 +1,393 @@ | |
| 1 | ## -*- tcl -*- |
| 2 | # # ## ### ##### ######## ############# ##################### |
| 3 | ## Copyright (c) 2007 Andreas Kupries. |
| 4 | # |
| 5 | # This software is licensed as described in the file LICENSE, which |
| 6 | # you should have received as part of this distribution. |
| 7 | # |
| 8 | # This software consists of voluntary contributions made by many |
| 9 | # individuals. For exact contribution history, see the revision |
| 10 | # history and logs, available at http://fossil-scm.hwaci.com/fossil |
| 11 | # # ## ### ##### ######## ############# ##################### |
| 12 | |
| 13 | # A tool package, provides a parser for RCS archive files. This parser |
| 14 | # is implemented via recursive descent. It is not only given a file to |
| 15 | # process, but also a 'sink', an object it calls out to at important |
| 16 | # places of the parsing process to either signal an event and/or |
| 17 | # convey gathered information to it. The sink is responsible for the |
| 18 | # actual processing of the data in whatever way it desires. |
| 19 | |
| 20 | # # ## ### ##### ######## ############# ##################### |
| 21 | ## Requirements |
| 22 | |
| 23 | package require Tcl 8.4 ; # Required runtime. |
| 24 | package require snit ; # OO system. |
| 25 | package require fileutil ; # File utilities. |
| 26 | package require vc::tools::log ; # User feedback. |
| 27 | package require struct::list ; # Advanced list ops. |
| 28 | |
| 29 | # # ## ### ##### ######## ############# ##################### |
| 30 | ## |
| 31 | |
| 32 | snit::type ::vc::rcs::parser { |
| 33 | # # ## ### ##### ######## ############# |
| 34 | ## Public API |
| 35 | |
| 36 | typemethod process {path sink} { |
| 37 | Initialize $path $sink |
| 38 | Call begin |
| 39 | Admin ; Deltas ; Description ; DeltaTexts |
| 40 | Call done |
| 41 | return |
| 42 | } |
| 43 | |
| 44 | # # ## ### ##### ######## ############# |
| 45 | ## Internal methods, recursive descent, syntactical processing |
| 46 | |
| 47 | proc Admin {} { |
| 48 | Head ; PrincipalBranch ; Access ; Symbols |
| 49 | Locks ; Strictness ; FileComment ; Expand |
| 50 | Call admindone |
| 51 | return |
| 52 | } |
| 53 | |
| 54 | # # ## ### ##### ######## ############# |
| 55 | |
| 56 | proc Head {} { |
| 57 | RequiredLiteral head |
| 58 | RequiredNumber -> head |
| 59 | Semicolon |
| 60 | Call sethead $head |
| 61 | return |
| 62 | } |
| 63 | |
| 64 | proc PrincipalBranch {} { |
| 65 | if {![OptionalLiteral branch]} return |
| 66 | RequiredNumber -> branch |
| 67 | Semicolon |
| 68 | Call setprincipalbranch $branch |
| 69 | return |
| 70 | } |
| 71 | |
| 72 | proc Access {} { |
| 73 | RequiredLiteral access ; |
| 74 | Semicolon |
| 75 | return |
| 76 | } |
| 77 | |
| 78 | proc Symbols {} { |
| 79 | RequiredLiteral symbols |
| 80 | while {[Ident -> symbol]} { |
| 81 | if { |
| 82 | *$} $symbol] || |
| 83 | [string match */ $symbol] |
| 84 | } { |
| 85 | Rewind |
| 86 | Bad {symbol name} |
| 87 | } |
| 88 | RequiredNumber -> rev |
| 89 | Call deftag $symbol $rev |
| 90 | } |
| 91 | Semicolon |
| 92 | return |
| 93 | } |
| 94 | |
| 95 | proc Locks {} { |
| 96 | # Not saving locks. |
| 97 | RequiredLiteral locks |
| 98 | while {[Ident -> symbol]} { |
| 99 | RequiredNumber -> l |
| 100 | } |
| 101 | Semicolon |
| 102 | return |
| 103 | } |
| 104 | |
| 105 | proc Strictness {} { |
| 106 | # Not saving strictness |
| 107 | if {![OptionalLiteral strict]} return |
| 108 | Semicolon |
| 109 | return |
| 110 | } |
| 111 | |
| 112 | proc FileComment {} { |
| 113 | if {![OptionalLiteral comment]} return |
| 114 | if {![OptionalString -> c]} return |
| 115 | Semicolon |
| 116 | Call setcomment $c |
| 117 | return |
| 118 | } |
| 119 | |
| 120 | proc Expand {} { |
| 121 | # Not saving expanded keywords |
| 122 | if {![OptionalLiteral expand]} return |
| 123 | if {![OptionalString -> dummy]} return |
| 124 | Semicolon |
| 125 | return |
| 126 | } |
| 127 | |
| 128 | # # ## ### ##### ######## ############# |
| 129 | |
| 130 | proc Deltas {} { |
| 131 | set ok [OptionalNumber -> rev] |
| 132 | while {$ok} { |
| 133 | Date -> d |
| 134 | Author -> a |
| 135 | State -> s |
| 136 | Branches -> b |
| 137 | NextRev -> n |
| 138 | Call def $rev $d $a $s $n $b |
| 139 | |
| 140 | # Check if this is followed by a revision number or the |
| 141 | # literal 'desc'. If neither we consume whatever is there |
| 142 | # until the next semicolon, as it has to be a 'new |
| 143 | # phrase'. Otherwise, for a revision number we loop back |
| 144 | # and consume that revision, and lastly for 'desc' we stop |
| 145 | # completely as this signals the end of the revision tree |
| 146 | # and the beginning of the deltas. |
| 147 | |
| 148 | while {1} { |
| 149 | set ok [OptionalNumber -> rev] |
| 150 | if {$ok} break |
| 151 | |
| 152 | if {[LiteralPeek desc]} { |
| 153 | set ok 0 |
| 154 | break |
| 155 | } |
| 156 | |
| 157 | Anything -> dummy |
| 158 | Semicolon |
| 159 | } |
| 160 | } |
| 161 | Call defdone |
| 162 | return |
| 163 | } |
| 164 | |
| 165 | # # ## ### ##### ######## ############# |
| 166 | |
| 167 | proc Date {_ dv} { |
| 168 | upvar 1 $dv d |
| 169 | RequiredLiteral date |
| 170 | RequiredNumber -> d |
| 171 | Semicolon |
| 172 | |
| 173 | struct::list assign [split $d .] year month day hour min sec |
| 174 | if {$year < 100} {incr year 1900} |
| 175 | set d [clock scan "${year}-${month}-${day} ${hour}:${min}:${sec}"] |
| 176 | return |
| 177 | } |
| 178 | |
| 179 | proc Author {_ av} { |
| 180 | upvar 1 $av a |
| 181 | RequiredLiteral author |
| 182 | Anything -> a |
| 183 | Semicolon |
| 184 | return |
| 185 | } |
| 186 | |
| 187 | proc State {_ sv} { |
| 188 | upvar 1 $sv s |
| 189 | RequiredLiteral state |
| 190 | Anything -> s |
| 191 | Semicolon |
| 192 | return |
| 193 | } |
| 194 | |
| 195 | proc Branches {_ bv} { |
| 196 | upvar 1 $bv b |
| 197 | RequiredLiteral branches |
| 198 | Anything -> b |
| 199 | Semicolon |
| 200 | return |
| 201 | } |
| 202 | |
| 203 | proc NextRev {_ nv} { |
| 204 | upvar 1 $nv n |
| 205 | RequiredLiteral next |
| 206 | Anything -> n |
| 207 | Semicolon |
| 208 | return |
| 209 | } |
| 210 | |
| 211 | # # ## ### ##### ######## ############# |
| 212 | |
| 213 | proc Description {} { |
| 214 | upvar 1 data data res res |
| 215 | RequiredLiteral desc |
| 216 | RequiredString -> d |
| 217 | Call setdesc $d |
| 218 | return |
| 219 | } |
| 220 | |
| 221 | # # ## ### ##### ######## ############# |
| 222 | |
| 223 | proc DeltaTexts {} { |
| 224 | while {[OptionalNumber -> rev]} { |
| 225 | RequiredLiteral log |
| 226 | RequiredString -> cmsg |
| 227 | if {[regexp {[\000-\010\013\014\016-\037]} $cmsg]} { |
| 228 | #Rewind |
| 229 | #Bad "log message for $rev contains at least one control character" |
| 230 | } |
| 231 | |
| 232 | RequiredLiteral text |
| 233 | RequiredStringRange -> delta |
| 234 | Call extend $rev $cmsg $delta |
| 235 | } |
| 236 | return |
| 237 | } |
| 238 | |
| 239 | # # ## ### ##### ######## ############# |
| 240 | ## Internal methods, lexiographical processing |
| 241 | |
| 242 | proc Semicolon {} { |
| 243 | ::variable mydata |
| 244 | ::variable mypos |
| 245 | |
| 246 | set ok [regexp -start $mypos -indices -- {\A\s*;\s*} $mydata match] |
| 247 | if {!$ok} { Expected ';' } |
| 248 | |
| 249 | SkipOver match |
| 250 | return |
| 251 | } |
| 252 | |
| 253 | proc RequiredLiteral {name} { |
| 254 | ::variable mydata |
| 255 | ::variable mypos |
| 256 | |
| 257 | set pattern "\\A\\s*$name\\s*" |
| 258 | set ok [regexp -start $mypos -indices -- $pattern $mydata match] |
| 259 | if {!$ok} { Expected '$name' } |
| 260 | |
| 261 | SkipOver match |
| 262 | return |
| 263 | } |
| 264 | |
| 265 | proc OptionalLiteral {name} { |
| 266 | ::variable mydata |
| 267 | ::variable mypos |
| 268 | |
| 269 | set pattern "\\A\\s*$name\\s*" |
| 270 | set ok [regexp -start $mypos -indices -- $pattern $mydata match] |
| 271 | if {!$ok} { return 0 } |
| 272 | |
| 273 | SkipOver match |
| 274 | return 1 |
| 275 | } |
| 276 | |
| 277 | proc LiteralPeek {name} { |
| 278 | ::variable mydata |
| 279 | ::variable mypos |
| 280 | |
| 281 | set pattern "\\A\\s*$name\\s*" |
| 282 | set ok [regexp -start $mypos -indices -- $pattern $mydata match] |
| 283 | if {!$ok} { return 0 } |
| 284 | |
| 285 | # NO - SkipOver match - Only looking ahead here. |
| 286 | return 1 |
| 287 | } |
| 288 | |
| 289 | proc RequiredNumber {_ v} { |
| 290 | upvar 1 $v value |
| 291 | ::variable mydata |
| 292 | ::variable mypos |
| 293 | |
| 294 | set pattern {\A\s*((\d|\.)+)\s*} |
| 295 | set ok [regexp -start $mypos -indices -- $pattern $mydata match v] |
| 296 | if {!$ok} { Expected id } |
| 297 | |
| 298 | Extract $v -> value |
| 299 | SkipOver match |
| 300 | return |
| 301 | } |
| 302 | |
| 303 | proc OptionalNumber {_ v} { |
| 304 | upvar 1 $v value |
| 305 | ::variable mydata |
| 306 | ::variable mypos |
| 307 | |
| 308 | set pattern {\A\s*((\d|\.)+)\s*} |
| 309 | set ok [regexp -start $mypos -indices -- $pattern $mydata match v] |
| 310 | if {!$ok} { return 0 } |
| 311 | |
| 312 | Extract $v -> value |
| 313 | SkipOver match |
| 314 | return 1 |
| 315 | } |
| 316 | |
| 317 | proc RequiredString {_ v} { |
| 318 | upvar 1 $v value |
| 319 | ::variable mydata |
| 320 | ::variable mypos |
| 321 | |
| 322 | set ok [regexp -start $mypos -indices -- {\A\s*@(([^@]*(@@)*)*)@\s*} $mydata match v] |
| 323 | if {!$ok} { Expected string } |
| 324 | |
| 325 | Extract $v -> value |
| 326 | set value [string map {@@ @} $value] |
| 327 | SkipOver match |
| 328 | return |
| 329 | } |
| 330 | |
| 331 | proc RequiredStringRange {_ v} { |
| 332 | upvar 1 $v value |
| 333 | ::variable mydata |
| 334 | ::variable mypos |
| 335 | |
| 336 | set ok [regexp -start $mypos -indices -- {\A\s*@(([^@]*(@@)*)*)@\s*} $mydata match value] |
| 337 | if {!$ok} { Expected string } |
| 338 | |
| 339 | } |
| 340 | |
| 341 | proc Bad {x} { |
| 342 | ::variable mydata |
| 343 | ::variable mypos |
| 344 | set e $mypos ; incr e 30 |
| 345 | return -code error -errorcoBad $x @ 're is licensed as descr## -*- tcl -*- |
| 346 | |
| 347 | } |
| 348 | |
| 349 | # # ## ### ##### ######## ############# |
| 350 | ## Setup, callbacks. |
| 351 | |
| 352 | proc Initialize {path sink} { |
| 353 | ::variable mypos 0 |
| 354 | ::variaencoding binary $path] |
| 355 | ::variable mysize [file size $path] |
| 356 | ::variable mysink $sink |
| 357 | return |
| 358 | } |
| 359 | |
| 360 | proc Call {args} { |
| 361 | ::variable mysink |
| 362 | set cmd $mysink |
| 363 | foreach a $args { lappend cmd $a } |
| 364 | eval $cmd |
| 365 | return |
| 366 | } |
| 367 | |
| 368 | # # ## ### ##### ######## ############# |
| 369 | ## Configuration |
| 370 | |
| 371 | typevariable mydata {} ; # Rcs archive contents to process |
| 372 | typevariable mysize 0 ; # Length of contents |
| 373 | typevariable mysink {} ; # Sink to report to |
| 374 | |
| 375 | pragma -hasinstances no ; # singleton |
| 376 | pragma -hastypeinfo no ; # no introspection |
| 377 | pragma -hastypedestroy no ; # immortal |
| 378 | |
| 379 | # # ## ### ##### ######## ############# |
| 380 | } |
| 381 | |
| 382 | namespace eval ::vc::rcs { |
| 383 | namespace export parser |
| 384 | namespace eval parser { |
| 385 | namespace import ::vc::tools::log |
| 386 | log register rcs |
| 387 | } |
| 388 | } |
| 389 | |
| 390 | # # ## ### ##### ######## ############# ##################### |
| 391 | ## Ready |
| 392 | |
| 393 | package provide |
| --- a/tools/cvs2fossil/lib/trouble.tcl | ||
| +++ b/tools/cvs2fossil/lib/trouble.tcl | ||
| @@ -0,0 +1,52 @@ | ||
| 1 | +## -*- tcl -*- | |
| 2 | +# # ## ### ##### ######## ############# ##################### | |
| 3 | +## Copyright (c) 2007 Andreas Kupries. | |
| 4 | +# | |
| 5 | +# This software is licensed as described in the file LICENSE, which | |
| 6 | +# you should have received as part of this distribution. | |
| 7 | +# | |
| 8 | +# This software consists of voluntary contributions made by many | |
| 9 | +# individuals. For exact contribution history, see the revision | |
| 10 | +# history and logs, available at http://fossil-scm.hwaci.com/fossil | |
| 11 | +# # ## ### ##### ######## ############# ##################### | |
| 12 | + | |
| 13 | +## Utility package, error reporting on top of the log package. | |
| 14 | + | |
| 15 | +# # ## ### ##### ######## ############# ##################### | |
| 16 | +## Requirements | |
| 17 | + | |
| 18 | +package require Tcl 8.4 ; # Required runtime. | |
| 19 | +package require vc::tools::log ; # Basic log generation. | |
| 20 | +package require snit ; # OO system. | |
| 21 | + | |
| 22 | +# # ## ### ##### ######## ########### ## ##################### | |
| 23 | +## | |
| 24 | + | |
| 25 | +snit::type ::vc::tools::trouble { | |
| 26 | + # # ## ### ##### ######## ############# | |
| 27 | + ## Public API, Methods | |
| 28 | + | |
| 29 | + typemethod internal {text} { | |
| 30 | + foreach line [split $text \n] { $type fatal "INTERNAL ERROR! $line" } | |
| 31 | + exit 1 | |
| 32 | + } | |
| 33 | + | |
| 34 | + typemethod fatal {text} { | |
| 35 | + lappend myfatal $text | |
| 36 | + return | |
| 37 | + } | |
| 38 | + | |
| 39 | + typemethod warn {text} { | |
| 40 | + lappend mywarn $text | |
| 41 | + log write 0 trouble $text | |
| 42 | + return | |
| 43 | + } | |
| 44 | + | |
| 45 | + typemethod info {text} { | |
| 46 | + lappend myinfo $text | |
| 47 | + return | |
| 48 | + } | |
| 49 | + | |
| 50 | + typemethod show {} { | |
| 51 | + foreach m $myinfo { log write 0 "" $m } | |
| 52 | + foreach m $mywarn { log write 0 warning $m |
| --- a/tools/cvs2fossil/lib/trouble.tcl | |
| +++ b/tools/cvs2fossil/lib/trouble.tcl | |
| @@ -0,0 +1,52 @@ | |
| --- a/tools/cvs2fossil/lib/trouble.tcl | |
| +++ b/tools/cvs2fossil/lib/trouble.tcl | |
| @@ -0,0 +1,52 @@ | |
| 1 | ## -*- tcl -*- |
| 2 | # # ## ### ##### ######## ############# ##################### |
| 3 | ## Copyright (c) 2007 Andreas Kupries. |
| 4 | # |
| 5 | # This software is licensed as described in the file LICENSE, which |
| 6 | # you should have received as part of this distribution. |
| 7 | # |
| 8 | # This software consists of voluntary contributions made by many |
| 9 | # individuals. For exact contribution history, see the revision |
| 10 | # history and logs, available at http://fossil-scm.hwaci.com/fossil |
| 11 | # # ## ### ##### ######## ############# ##################### |
| 12 | |
| 13 | ## Utility package, error reporting on top of the log package. |
| 14 | |
| 15 | # # ## ### ##### ######## ############# ##################### |
| 16 | ## Requirements |
| 17 | |
| 18 | package require Tcl 8.4 ; # Required runtime. |
| 19 | package require vc::tools::log ; # Basic log generation. |
| 20 | package require snit ; # OO system. |
| 21 | |
| 22 | # # ## ### ##### ######## ########### ## ##################### |
| 23 | ## |
| 24 | |
| 25 | snit::type ::vc::tools::trouble { |
| 26 | # # ## ### ##### ######## ############# |
| 27 | ## Public API, Methods |
| 28 | |
| 29 | typemethod internal {text} { |
| 30 | foreach line [split $text \n] { $type fatal "INTERNAL ERROR! $line" } |
| 31 | exit 1 |
| 32 | } |
| 33 | |
| 34 | typemethod fatal {text} { |
| 35 | lappend myfatal $text |
| 36 | return |
| 37 | } |
| 38 | |
| 39 | typemethod warn {text} { |
| 40 | lappend mywarn $text |
| 41 | log write 0 trouble $text |
| 42 | return |
| 43 | } |
| 44 | |
| 45 | typemethod info {text} { |
| 46 | lappend myinfo $text |
| 47 | return |
| 48 | } |
| 49 | |
| 50 | typemethod show {} { |
| 51 | foreach m $myinfo { log write 0 "" $m } |
| 52 | foreach m $mywarn { log write 0 warning $m |
D
tools/import-cvs.tcl
-112
| --- a/tools/import-cvs.tcl | ||
| +++ b/tools/import-cvs.tcl | ||
| @@ -1,112 +0,0 @@ | ||
| 1 | -#!/bin/sh | |
| 2 | -# -*- tcl -*- \ | |
| 3 | -exec tclsh "$0" ${1+"$@"} | |
| 4 | - | |
| 5 | -# ----------------------------------------------------------------------------- | |
| 6 | - | |
| 7 | -# Import the trunk of a CVS repository wholesale into a fossil repository. | |
| 8 | - | |
| 9 | -# Limitations implicitly mentioned: | |
| 10 | -# - No incremental import. | |
| 11 | -# - No import of branches. | |
| 12 | - | |
| 13 | -# WIBNI features (beyond eliminating the limitations): | |
| 14 | -# - Restrict import to specific directory subtrees (SF projects use | |
| 15 | -# one repository for several independent modules. Examples: tcllib | |
| 16 | -# -> tcllib, tklib, tclapps, etc.). The restriction would allow import | |
| 17 | -# of only a specific module. | |
| 18 | -# - Related to the previous, strip elements from the base path to keep | |
| 19 | -# it short. | |
| 20 | -# - Export to CVS, trunk, possibly branches. could be the master repository. | |
| 21 | - | |
| 22 | -# HACKS. I.e. I do not know if the 1 of handling the encountered siurrently I will ignore the | |
| 23 | -# fot know if the 'fixes'[this,v. Currently I will ignore the | |
| 24 | -# file in the Attic. | |
| 25 | -# Examples: sqlite/os_unix.h | |
| 26 | -# | |
| 27 | -# - A specific revision of a file F cannot be checked out (reported | |
| 28 | -# error is 'invalid change text'). This indicates a corrupt RCS | |
| 29 | -# file, one or more delta are bad. We report but ignore the problem | |
| 30 | -# in a best-effort attempt at getting as much history as possible. | |
| 31 | -# Examples: tcllib/tklib/modules/tkpiechart/pie.tcl | |
| 32 | - | |
| 33 | -# ----------------------------------------------------------------------------- | |
| 34 | -# Make private packages accessible. | |
| 35 | - | |
| 36 | -lappend auto_path [file join [file dirname [info script]] lib] | |
| 37 | - | |
| 38 | -# ----------------------------------------------------------------------------- | |
| 39 | -# Requirements | |
| 40 | - | |
| 41 | -package require Tcl 8.4 | |
| 42 | -package require vc::tools::log ; # User Feedback | |
| 43 | -package require vc::fossil::import::cvs ; # Importer Control | |
| 44 | -package require vc::cvs::ws ; # CVS frontend | |
| 45 | - | |
| 46 | -namespace eval ::import { | |
| 47 | -ssil::import::cvs::* | |
| 48 | -} | |
| 49 | - | |
| 50 | -# --------------------------------------------------------------------------- | |
| 51 | - | |
| 52 | -proc main {} { | |
| 53 | - commandline -> cvs fossilproject:--------------------------------- | |
| 54 | - | |
| 55 | -proc commandline {__ cv fv} { | |
| 56 | - global argv | |
| 57 | - var 1 $cv cvs $fv fossil | |
| 58 | - | |
| 59 | - set verbosity 0 | |
| 60 | - | |
| 61 | - clinit | |
| 62 | - while {[string#!/bin/sh | |
| 63 | -# -*- tcl -*- \ | |
| 64 | -exec tclsh "$0" ${1+"$@"} | |
| 65 | - | |
| 66 | -# ----------------------------------------------------------------------------- | |
| 67 | - | |
| 68 | -# Import the trunk of a CVS repository wholesale into a fossil reposi*- tcl -*- \ | |
| 69 | -exec tclsh "$0" ${1+"$@"} | |
| 70 | - | |
| 71 | -# ----------------------------------------------------------------------------- | |
| 72 | - | |
| 73 | -# Import the trunk of a CVS repository wholesale into a fossil repository. | |
| 74 | - | |
| 75 | -# Limitations implicitly mentioned: | |
| 76 | -# - No incremental import. | |
| 77 | -# - No import of branches. | |
| 78 | - | |
| 79 | -# WIBNI features (beyond eliminating the limitations): | |
| 80 | -# - Restrict import to specific directory subtrees (SF projects use | |
| 81 | -# one repository for several independent modules. Examples: tcllib | |
| 82 | -# -> tcllib, tklib, tclapps, etc.). The restriction would allow import | |
| 83 | -# of only a specific module. | |
| 84 | -# - Related to the previous, strip elements from the base path to keep | |
| 85 | -# it short. | |
| 86 | -# - Export to CVS, trunk, possibly branches. I.e. extend the system to be | |
| 87 | -# a full bridge. Either Fossil or CVS could be the master repository. | |
| 88 | - | |
| 89 | -# HACKS. I.e. I do not know if the 'fixes' I use are the correct way | |
| 90 | -# of handling the encountered situations. | |
| 91 | -# | |
| 92 | -# - File F has archives F,v and Attic/F,v. Currently I will ignore the | |
| 93 | -# file in the Attic. | |
| 94 | -# Examples: sqlite/os_unix.h | |
| 95 | -# | |
| 96 | -# - A specific revision of a file F cannot be checked out (reported | |
| 97 | -# error is 'invalid change text'). This indicates a corrupt RCS | |
| 98 | -# file, one or more delta are bad. We report but ignore the problem | |
| 99 | -# in a best-effort attempt at getting as much history as possible. | |
| 100 | -# Examples: tcllib/tklib/modules/tkpiechart/pie.tcl | |
| 101 | - | |
| 102 | -# ----------------------------------------------------------------------------- | |
| 103 | -# Make private packages accessible. | |
| 104 | - | |
| 105 | -lappend auto_path [file join [file dirname [info script]] lib] | |
| 106 | - | |
| 107 | -# ----------------------------------------------------------------------------- | |
| 108 | -# Requirements | |
| 109 | - | |
| 110 | -package require Tcl 8.4 | |
| 111 | -package require vc::tools::log ; # User Feedback | |
| 112 | -package require vc::fossil::impo |
| --- a/tools/import-cvs.tcl | |
| +++ b/tools/import-cvs.tcl | |
| @@ -1,112 +0,0 @@ | |
| 1 | #!/bin/sh |
| 2 | # -*- tcl -*- \ |
| 3 | exec tclsh "$0" ${1+"$@"} |
| 4 | |
| 5 | # ----------------------------------------------------------------------------- |
| 6 | |
| 7 | # Import the trunk of a CVS repository wholesale into a fossil repository. |
| 8 | |
| 9 | # Limitations implicitly mentioned: |
| 10 | # - No incremental import. |
| 11 | # - No import of branches. |
| 12 | |
| 13 | # WIBNI features (beyond eliminating the limitations): |
| 14 | # - Restrict import to specific directory subtrees (SF projects use |
| 15 | # one repository for several independent modules. Examples: tcllib |
| 16 | # -> tcllib, tklib, tclapps, etc.). The restriction would allow import |
| 17 | # of only a specific module. |
| 18 | # - Related to the previous, strip elements from the base path to keep |
| 19 | # it short. |
| 20 | # - Export to CVS, trunk, possibly branches. could be the master repository. |
| 21 | |
| 22 | # HACKS. I.e. I do not know if the 1 of handling the encountered siurrently I will ignore the |
| 23 | # fot know if the 'fixes'[this,v. Currently I will ignore the |
| 24 | # file in the Attic. |
| 25 | # Examples: sqlite/os_unix.h |
| 26 | # |
| 27 | # - A specific revision of a file F cannot be checked out (reported |
| 28 | # error is 'invalid change text'). This indicates a corrupt RCS |
| 29 | # file, one or more delta are bad. We report but ignore the problem |
| 30 | # in a best-effort attempt at getting as much history as possible. |
| 31 | # Examples: tcllib/tklib/modules/tkpiechart/pie.tcl |
| 32 | |
| 33 | # ----------------------------------------------------------------------------- |
| 34 | # Make private packages accessible. |
| 35 | |
| 36 | lappend auto_path [file join [file dirname [info script]] lib] |
| 37 | |
| 38 | # ----------------------------------------------------------------------------- |
| 39 | # Requirements |
| 40 | |
| 41 | package require Tcl 8.4 |
| 42 | package require vc::tools::log ; # User Feedback |
| 43 | package require vc::fossil::import::cvs ; # Importer Control |
| 44 | package require vc::cvs::ws ; # CVS frontend |
| 45 | |
| 46 | namespace eval ::import { |
| 47 | ssil::import::cvs::* |
| 48 | } |
| 49 | |
| 50 | # --------------------------------------------------------------------------- |
| 51 | |
| 52 | proc main {} { |
| 53 | commandline -> cvs fossilproject:--------------------------------- |
| 54 | |
| 55 | proc commandline {__ cv fv} { |
| 56 | global argv |
| 57 | var 1 $cv cvs $fv fossil |
| 58 | |
| 59 | set verbosity 0 |
| 60 | |
| 61 | clinit |
| 62 | while {[string#!/bin/sh |
| 63 | # -*- tcl -*- \ |
| 64 | exec tclsh "$0" ${1+"$@"} |
| 65 | |
| 66 | # ----------------------------------------------------------------------------- |
| 67 | |
| 68 | # Import the trunk of a CVS repository wholesale into a fossil reposi*- tcl -*- \ |
| 69 | exec tclsh "$0" ${1+"$@"} |
| 70 | |
| 71 | # ----------------------------------------------------------------------------- |
| 72 | |
| 73 | # Import the trunk of a CVS repository wholesale into a fossil repository. |
| 74 | |
| 75 | # Limitations implicitly mentioned: |
| 76 | # - No incremental import. |
| 77 | # - No import of branches. |
| 78 | |
| 79 | # WIBNI features (beyond eliminating the limitations): |
| 80 | # - Restrict import to specific directory subtrees (SF projects use |
| 81 | # one repository for several independent modules. Examples: tcllib |
| 82 | # -> tcllib, tklib, tclapps, etc.). The restriction would allow import |
| 83 | # of only a specific module. |
| 84 | # - Related to the previous, strip elements from the base path to keep |
| 85 | # it short. |
| 86 | # - Export to CVS, trunk, possibly branches. I.e. extend the system to be |
| 87 | # a full bridge. Either Fossil or CVS could be the master repository. |
| 88 | |
| 89 | # HACKS. I.e. I do not know if the 'fixes' I use are the correct way |
| 90 | # of handling the encountered situations. |
| 91 | # |
| 92 | # - File F has archives F,v and Attic/F,v. Currently I will ignore the |
| 93 | # file in the Attic. |
| 94 | # Examples: sqlite/os_unix.h |
| 95 | # |
| 96 | # - A specific revision of a file F cannot be checked out (reported |
| 97 | # error is 'invalid change text'). This indicates a corrupt RCS |
| 98 | # file, one or more delta are bad. We report but ignore the problem |
| 99 | # in a best-effort attempt at getting as much history as possible. |
| 100 | # Examples: tcllib/tklib/modules/tkpiechart/pie.tcl |
| 101 | |
| 102 | # ----------------------------------------------------------------------------- |
| 103 | # Make private packages accessible. |
| 104 | |
| 105 | lappend auto_path [file join [file dirname [info script]] lib] |
| 106 | |
| 107 | # ----------------------------------------------------------------------------- |
| 108 | # Requirements |
| 109 | |
| 110 | package require Tcl 8.4 |
| 111 | package require vc::tools::log ; # User Feedback |
| 112 | package require vc::fossil::impo |
| --- a/tools/import-cvs.tcl | |
| +++ b/tools/import-cvs.tcl | |
| @@ -1,112 +0,0 @@ | |
D
tools/lib/cvs.tcl
-449
| --- a/tools/lib/cvs.tcl | ||
| +++ b/tools/lib/cvs.tcl | ||
| @@ -1,449 +0,0 @@ | ||
| 1 | -# ----------------------------------------------------------------------------- | |
| 2 | -# Repository management (CVS) | |
| 3 | - | |
| 4 | -# ----------------------------------------------------------------------------- | |
| 5 | -# Requirements | |
| 6 | - | |
| 7 | -package require Tcl 8.4 | |
| 8 | -package require fileutil ; # Tcllib (traverse directory hierarchy) | |
| 9 | -package require vc::rcs::parser ; # Handling the RCS archive files. | |
| 10 | -package require vc::tools::log ; # User feedback | |
| 11 | -package require vc::tools::trouble ; # Error handling | |
| 12 | -package require vc::cvs::cmd ; # Access to cvs application. | |
| 13 | -package require vc::cvs::ws::files ; # Scan CVS repository for relevant files. | |
| 14 | -package require vc::cvs::ws::timeline ; # Manage timeline of all changes. | |
| 15 | -package require vc::cvs::ws::csets ; # Manage the changengeset file/rev signatures | |
| 16 | - | |
| 17 | -namespace eval ::vc::cvs::ws { | |
| 18 | - vc::tools::log::system cvs | |
| 19 | - namespace import ::vc::tools::log::write | |
| 20 | - namespace import ::vc::rcs::parser::process | |
| 21 | - namespace import ::vc::cvs::cmd::dova | |
| 22 | - | |
| 23 | - namespace eval trouble { namespace import ::vc::tools::trouble::* } | |
| 24 | -} | |
| 25 | - | |
| 26 | -# ----------------------------------------------------------------------------- | |
| 27 | -# API | |
| 28 | - | |
| 29 | -# vc::cvs::ws::configure key value - Configure the subsystem. | |
| 30 | -# vc::cvs::ws::check src mv - Check if src is a CVS repository directory. | |
| 31 | -# vc::cvs::ws::begin src - Start new workspace and return the top- | |
| 32 | -# most directory co'd files are put into. | |
| 33 | -# vc::cvs::ws::ncsets - Retrieve total number of csets | |
| 34 | -# vc::cvs::ws::nimportable - Retrieve number of importable csets | |
| 35 | -# vc::cvs::ws::foreach csvar script - Run the script for each changeset, the | |
| 36 | -# id of the current changeset stored in | |
| 37 | -# the variable named by csvar. | |
| 38 | -# vc::cvs::ws::done - Close workspace and delete it. | |
| 39 | -# vc::cvs::ws::isadmin path - Check if path is an admin file of CVS | |
| 40 | -# vc::cvs::ws::checkout id - Have workspace contain the changeset id. | |
| 41 | -# vc::cvs::ws::get id - Retrieve data of a changeset. | |
| 42 | -# | |
| 43 | -# Configuration keys: | |
| 44 | -# | |
| 45 | -# -project path - Sub directory under 'src' to limit the import to. | |
| 46 | - | |
| 47 | -# ----------------------------------------------------------------------------- | |
| 48 | -# API Implementation | |
| 49 | - | |
| 50 | -proc ::vc::cvs::ws::configure {key value} { | |
| 51 | - variable project | |
| 52 | - | |
| 53 | - switch -exact -- $key { | |
| 54 | - -project { set project $value } | |
| 55 | - default { | |
| 56 | - return -code error "Unknown switch $key, expected \ | |
| 57 | - -project" | |
| 58 | - } | |
| 59 | - } | |
| 60 | - return | |
| 61 | -} | |
| 62 | - | |
| 63 | -proc ::vc::cvs::ws::check {src mv} { | |
| 64 | - variable project | |
| 65 | - upvar 1 $mv msg | |
| 66 | - if { | |
| 67 | - ![fileutil::test $src erd msg "CVS Repository"] || | |
| 68 | - ![fileutil::test $src/CVSROOT erd msg "CVS Admin directory"] || | |
| 69 | - (($project ne "") && | |
| 70 | - ![fileutil::test $src/$project erd msg "Project directory"]) | |
| 71 | - } { | |
| 72 | - return 0 | |
| 73 | - } | |
| 74 | - return 1 | |
| 75 | -} | |
| 76 | - | |
| 77 | -proc ::vc::cvs::ws::begin {src} { | |
| 78 | - if {![check $src msg]} { return -code error $msg } | |
| 79 | - | |
| 80 | - DefBase $src | |
| 81 | - MakeTimeline [ScanArchives [files::find [RootPath]]] | |
| 82 | - MakeChangesets | |
| 83 | - ProcessBranches | |
| 84 | - | |
| 85 | - return [MakeWorkspace] | |
| 86 | -} | |
| 87 | - | |
| 88 | -proc ::vc::cvs::ws::done {} { | |
| 89 | - variable workspace | |
| 90 | - file delete -force $workspace | |
| 91 | - return | |
| 92 | -} | |
| 93 | - | |
| 94 | -proc ::vc::cvs::ws::foreach {cv script} { | |
| 95 | - variable importable | |
| 96 | - upvar 1 $cv c | |
| 97 | - | |
| 98 | - ::foreach c [lsort -integer -increasing $importable] { | |
| 99 | - set code [catch {uplevel 1 $script} res] | |
| 100 | - | |
| 101 | - # 0 - ok, 1 - error, 2 - return, 3 - break, 4 - continue | |
| 102 | - switch -- $code { | |
| 103 | - 0 {} | |
| 104 | - 1 { return -errorcode $::errorCode -errorinfo $::errorInfo -code error $res } | |
| 105 | - 2 {} | |
| 106 | - 3 { return } | |
| 107 | - 4 {} | |
| 108 | - default { return -code $code $result } | |
| 109 | - } | |
| 110 | - } | |
| 111 | - return | |
| 112 | -} | |
| 113 | - | |
| 114 | -proc ::vc::cvs::ws::ncsets {args} { | |
| 115 | - return [csets::num] | |
| 116 | -} | |
| 117 | - | |
| 118 | -proc ::vc::cvs::ws::nimportable {args} { | |
| 119 | - variable importable | |
| 120 | - return [llength $importable] | |
| 121 | -} | |
| 122 | - | |
| 123 | -proc ::vc::cvs::ws::isadmin {path} { | |
| 124 | - # Check if path is a CVS admin file. | |
| 125 | - if {[string match CVS/* $path]} {return 1} | |
| 126 | - if {[string match */CVS/* $path]} {return 1} | |
| 127 | - return 0 | |
| 128 | -} | |
| 129 | - | |
| 130 | -proc ::vc::cvs::ws::parentOf {id} { csets::parentOf $id } | |
| 131 | - | |
| 132 | -proc ::vc::cvs::ws::checkout {id} { | |
| 133 | - variable workspace | |
| 134 | - cd $workspace | |
| 135 | - | |
| 136 | - # TODO: Hide the direct access to the data structures behind | |
| 137 | - # TODO: accessors for date, cmsg, removed, added, changed, and | |
| 138 | - # TODO: author | |
| 139 | - array set cs [csets::get $id] | |
| 140 | - | |
| 141 | - write 1 cvs "@ $cs(date)" | |
| 142 | - ::foreach l [split [string trim $cs(cmsg)] \n] { | |
| 143 | - write 1 cvs "| $l" | |
| 144 | - } | |
| 145 | - | |
| 146 | - ::foreach {f r} $cs(removed) { write 2 cvs "R $f $r" ; Remove $f $r } | |
| 147 | - ::foreach {f r} $cs(added) { write 2 cvs "A $f $r" ; Checkout $f $r } | |
| 148 | - ::foreach {f r} $cs(changed) { write 2 cvs "M $f $r" ; Checkout $f $r } | |
| 149 | - | |
| 150 | - # Provide metadata about the changeset the backend may wish to have | |
| 151 | - return [list $cs(author) $cs(date) $cs(cmsg)] | |
| 152 | -} | |
| 153 | - | |
| 154 | -# ----------------------------------------------------------------------------- | |
| 155 | -# Internals | |
| 156 | - | |
| 157 | -proc ::vc::cvs::ws::DefBase {path} { | |
| 158 | - variable project | |
| 159 | - variable base | |
| 160 | - | |
| 161 | - set base $path | |
| 162 | - | |
| 163 | - write 0 cvs "Base: $base" | |
| 164 | - if {$project eq ""} { | |
| 165 | - write 0 cvs "Project: <ALL>" | |
| 166 | - } else { | |
| 167 | - write 0 cvs "Project: $project" | |
| 168 | - } | |
| 169 | - return | |
| 170 | -} | |
| 171 | - | |
| 172 | -proc ::vc::cvs::ws::RootPath {} { | |
| 173 | - variable project | |
| 174 | - variable base | |
| 175 | - | |
| 176 | - if {$project eq ""} { | |
| 177 | - return $base | |
| 178 | - } else { | |
| 179 | - return $base/$project | |
| 180 | - } | |
| 181 | -} | |
| 182 | - | |
| 183 | -proc ::vc::cvs::ws::ScanArchives {files} { | |
| 184 | - write 0 cvs "Scanning archives ..." | |
| 185 | - | |
| 186 | - set d [RootPath] | |
| 187 | - set r {} | |
| 188 | - set n 0 | |
| 189 | - | |
| 190 | - ::foreach {rcs f} $files { | |
| 191 | - write 1 cvs "Archive $rcs" | |
| 192 | - # Get the meta data we need (revisions, timeline, messages). | |
| 193 | - lappend r $f [process $d/$rcs] | |
| 194 | - incr n | |
| 195 | - } | |
| 196 | - | |
| 197 | - write 0 cvs "Processed [NSIPL $n file]" | |
| 198 | - return $r | |
| 199 | -} | |
| 200 | - | |
| 201 | -proc ::vc::cvs::ws::MakeTimeline {meta} { | |
| 202 | - write 0 cvs "Generating coalesced timeline ..." | |
| 203 | - | |
| 204 | - set n 0 | |
| 205 | - ::foreach {f meta} $meta { | |
| 206 | - array set md $meta | |
| 207 | - array set date $md(date) | |
| 208 | - array set auth $md(author) | |
| 209 | - array set cmsg $md(commit) | |
| 210 | - array set stat $md(state) | |
| 211 | - | |
| 212 | - ::foreach rev [lsort -dict [array names date]] { | |
| 213 | - set operation [Operation $rev $stat($rev)] | |
| 214 | - NoteDeadRoots $f $rev $operation | |
| 215 | - timeline::add $date($rev) $f $rev $operation $auth($rev) #B Extend branch managementve $f $r } | |
| 216 | - ::foreach {f r} $cs(added) { write 2 cvs "A $f $r" ; Checkout $f $r } | |
| 217 | - ::foreach {f r} $cs(changed) { write 2 cvs "M $f $r" ; Checkout $f $r } | |
| 218 | - | |
| 219 | - # Provide metadata about the changeset the backend may wish to have | |
| 220 | - return [list $cs(author) $cs(date) $cs(cmsg)] | |
| 221 | -} | |
| 222 | - | |
| 223 | -# ----------------------------------------------------------------------------- | |
| 224 | -# Internals | |
| 225 | - | |
| 226 | -proc ::vc::cvs::ws::DefBase {path} { | |
| 227 | - variable project | |
| 228 | - variable base | |
| 229 | - | |
| 230 | - set base $path | |
| 231 | - | |
| 232 | - write 0 cvs "Base: $base" | |
| 233 | - if {$project eq ""} { | |
| 234 | - write 0 cvs "Project: <ALL>" | |
| 235 | - } else { | |
| 236 | - write 0 cvs "Project: $project" | |
| 237 | - } | |
| 238 | - return | |
| 239 | -} | |
| 240 | - | |
| 241 | -proc ::vc::cvs::ws::RootPath {vs::ws::RootPath {} { | |
| 242 | - | |
| 243 | - | |
| 244 | - if {$project eq ""} {es} { | |
| 245 | - write 0 cvs "Scanning arc cvs "Scanning archives ..." | |
| 246 | - | |
| 247 | - set d [RootPath] | |
| 248 | - set r {} | |
| 249 | - set n 0 | |
| 250 | - | |
| 251 | - ::foreach {rcs f} $files { | |
| 252 | - write 1 cvs "Archive $rcs" | |
| 253 | - # Get the meta data we need (revisions, timeline, messages). | |
| 254 | - lappend r $f [process $d/$rcs] | |
| 255 | - incr n | |
| 256 | - } | |
| 257 | - | |
| 258 | - write 0 cvs "Processed [NSIPL $n file]" | |
| 259 | - return $r | |
| 260 | -} | |
| 261 | - | |
| 262 | -proc ::vc::cvs::ws::MakeTimeline {meta} { | |
| 263 | - write 0 cvs "Generating coalesced timeline ..." | |
| 264 | - | |
| 265 | - set n 0 | |
| 266 | - ::foreach {f meta} $meta { | |
| 267 | - array set md $meta | |
| 268 | - array set date $md(date) | |
| 269 | - array set auth $md(author) | |
| 270 | - array set cmsg $md(commit) | |
| 271 | - array set stat $md(state) | |
| 272 | - | |
| 273 | - ::foreach rev [lsort -dict [array names date]] { | |
| 274 | - set operation [Operation $rev $stat($rev)] | |
| 275 | - NoteDeadRoots $f $rev $operation | |
| 276 | - timeline::add $date($rev) $f $rev $operation $auth($rev) $cmsg($rev) | |
| 277 | - incr n | |
| 278 | - } | |
| 279 | - | |
| 280 | - if {[info exists md(symbol)]} { | |
| 281 | - branch::def $f date $md(symbol) | |
| 282 | - } | |
| 283 | - | |
| 284 | - unset md | |
| 285 | - unset date | |
| 286 | - unset auth | |
| 287 | - unset cmsg | |
| 288 | - unset stat | |
| 289 | - } | |
| 290 | - | |
| 291 | - write 0 cvs "Timeline has [NSIPL $n entry entries]" | |
| 292 | - return | |
| 293 | -} | |
| 294 | - | |
| 295 | -proc ::vc::cvs::ws::NoteDeadRoots {f rev operation} { | |
| 296 | - # A dead-first revision is rev 1.1 with op R. For an example see | |
| 297 | - # the file memchan/DEPENDENCIES. Such a file seems to exist only! | |
| 298 | - # on its branch. The branches information is set on the revision | |
| 299 | - # (extend rcsparser!), symbols has a tag, refering to a branch, | |
| 300 | - # possibly magic. | |
| 301 | - | |
| 302 | - if {($rev eq "1.1") && ($operation eq "R")} { | |
| 303 | - write 2 cvs "Dead root revision: $f" | |
| 304 | - } | |
| 305 | - return | |
| 306 | -} | |
| 307 | - | |
| 308 | -proc ::vc::cvs::ws::Operation {rev state} { | |
| 309 | - if {$state eq "dead"} {return "R"} ; # Removed | |
| 310 | - if {$rev eq "1.1"} {return "A"} ; # Added | |
| 311 | - if {[string match *.1.1 $rev]} {return "A"} ; # Added on a branch | |
| 312 | - return "M" ; # Modified | |
| 313 | -} | |
| 314 | - | |
| 315 | -proc ::vc::cvs::ws::MakeChangesets {} { | |
| 316 | - write 0 cvs "Generating changesets from timeline" | |
| 317 | - | |
| 318 | - csets::init | |
| 319 | - timeline::foreach date file revision operation author cmsg { | |
| 320 | - csets::add $date $file $revision $operation $author $cmsg | |
| 321 | - } | |
| 322 | - csets::done | |
| 323 | - | |
| 324 | - write 0 cvs "Found [NSIPL [csets::nchangesetsength $cslist] changesets"]" | |
| 325 | - | |
| 326 | - set base [lindex $cslist 0] | |
| 327 | - set cslist [the trunk | |
| 328 | - ### ### ### ######### ######### ######### | |
| 329 | - ## Dump data of the unprocessing changeset | |
| 330 | - | |
| 331 | - puts /${base}/_________________ged, and | |
| 332 | - # TODO: author | |
| 333 | - base] | |
| 334 | - parray cs | |
| 335 | - | |
| 336 | - # Which branch does base belong to? | |
| 337 | - # - It has to be the base of an unprocessed branch! | |
| 338 | - # Otherwise it would have been on either the trunk | |
| 339 | - # or an already processed branch. | |
| 340 | - # Where is its root changeset ? | |
| 341 | - # - The root has to come before the base, it has already | |
| 342 | - # been processed => Smaller id, older in time. | |
| 343 | - # - Based on the files changed/removed by the base, and their | |
| 344 | - # versions we know the root versions of these files, and we | |
| 345 | - # can determine the changesets they are in => Intersection | |
| 346 | - # plus cap from previous contraint gives us the possibl# ### ### ### ######### ######### ######### | |
| 347 | - exit | |
| 348 | - | |
| 349 | - set tag [FindBranch $base ..] | |
| 350 | - set rt n [csets::num]base $root | |
| 351 | - | |
| 352 | - ets" | |
| 353 | - | |
| 354 | - set remaind 0 | |
| 355 | - set n [cse set n [csets::num] | |
| 356 | - set parent {} | |
| 357 | - | |
| 358 | - for {set c 0} {$c < $n} {incr c} { | |
| 359 | - if {[csets::isTrunk $c]} { | |
| 360 | - csets::setParentOf # | |
| 361 | -} | |
| 362 | - | |
| 363 | -proc ::vc::cvs::ws::Ma write 0 cvs "Found [NSIPL $t {trunk changeset}], [NSIPL [llength $remainder] {branch changeset}]#TBD | |
| 364 | -#... FindBranch | |
| 365 | -#. | |
| 366 | - | |
| 367 | -proc ::vc::cvs::ws::ProcessBranch {cslist} { | |
| 368 | - write 0 cvs "Processing the remaining [SIPL [llength $cslist] changeset "[llength $cslist] changesets"]" | |
| 369 | - | |
| 370 | - set base [lindex $cslist 0] | |
| 371 | - set cslist [lrange $cslist 1 end] | |
| 372 | - | |
| 373 | - csets::DUMP $base | |
| 374 | - | |
| 375 | - # Which branch does base belong to? | |
| 376 | - # - It has to be the base of an unprocessed branch! | |
| 377 | - # Otherwise it would have been on either the trunk | |
| 378 | - # or an already processed branch. | |
| 379 | - # Where is its root changeset ? | |
| 380 | - # - The root has to come before the base, it has already | |
| 381 | - # been processed => Smaller id, older in time. | |
| 382 | - # - Based on the files changed/removed by the base, and their | |
| 383 | - # versions we know the root versions of these files, and we | |
| 384 | - # can determine the changesets they are in => Intersection | |
| 385 | - # plus cap from previous contraint gives us the possible | |
| 386 | - # candidates. | |
| 387 | - | |
| 388 | - write 4 cvs "Branch base $base" | |
| 389 | - | |
| 390 | - ::foreach {tag rootsig} [branch::find [csets::get $base]] break | |
| 391 | - | |
| 392 | - write 4 cvs "Branch tag $tag" | |
| 393 | - write 4 cvs "Root sig $rootsig" | |
| 394 | - | |
| 395 | - set root [sig::find $base $rootsig] | |
| 396 | - | |
| 397 | - write 4 cvs "Branch root $root" | |
| 398 | - | |
| 399 | - write 0 cvs "Changeset $base, starting branch \"$tag\", rooted at $root" | |
| 400 | - csets::setParentOf $base $root | |
| 401 | - | |
| 402 | - set remainder {} | |
| 403 | - set t 1 | |
| 404 | - | |
| 405 | - ::foreach c $cslist { | |
| 406 | - #csets::DUMP $c | |
| 407 | - if {[csets::sameBranch $c $base $tag]} { | |
| 408 | - csets::setParentOf $c $base | |
| 409 | - set base $c | |
| 410 | - incr t | |
| 411 | - lappend importable $c | |
| 412 | - } else { | |
| 413 | - lappend remainder $c | |
| 414 | - } | |
| 415 | - } | |
| 416 | - | |
| 417 | - write 0 cvs "Found [NSIPL $t "$tag changeset"], [NSIPL [llength $remainder] changeset] outside" | |
| 418 | - return $remainder | |
| 419 | -} | |
| 420 | - | |
| 421 | -proc ::vc::cvs::ws::Checkout {f r} { | |
| 422 | - variable base | |
| 423 | - variable project | |
| 424 | - | |
| 425 | - # Added or modified, put the requested version of the file into | |
| 426 | - # the workspace. | |
| 427 | - | |
| 428 | - if {$project ne ""} {set f $project/$f} | |
| 429 | - if {[catch { | |
| 430 | - dova -d $base co -r $r $f | |
| 431 | - } msg]} { | |
| 432 | - if {[string match {*invalid change text*} $msg]} { | |
| 433 | - | |
| 434 | - # The archive of the file is corrupted and the chosen | |
| 435 | - # version not accessible due to that. We report the | |
| 436 | - # problem, but otherwise ignore it. As a consequence the | |
| 437 | - # destination repository will not contain the full history | |
| 438 | - # of the named file. By ignoring the problem we however | |
| 439 | - # get as much as is possible. | |
| 440 | - | |
| 441 | - trouble::ad[NSIPL [llength $remainder] {branch changeset}]" | |
| 442 | - return $remainder | |
| 443 | -} | |
| 444 | - | |
| 445 | -proc ::vc::cvs::ws::ProcessBranch {cslist} { | |
| 446 | - write 0 cvs "Processing the remaining [SIPL [llength $cslist] changeset "[llength $cslist] changesets"]" | |
| 447 | - | |
| 448 | - set base [lindex $cslist 0] | |
| 449 | - set cslist [lran |
| --- a/tools/lib/cvs.tcl | |
| +++ b/tools/lib/cvs.tcl | |
| @@ -1,449 +0,0 @@ | |
| 1 | # ----------------------------------------------------------------------------- |
| 2 | # Repository management (CVS) |
| 3 | |
| 4 | # ----------------------------------------------------------------------------- |
| 5 | # Requirements |
| 6 | |
| 7 | package require Tcl 8.4 |
| 8 | package require fileutil ; # Tcllib (traverse directory hierarchy) |
| 9 | package require vc::rcs::parser ; # Handling the RCS archive files. |
| 10 | package require vc::tools::log ; # User feedback |
| 11 | package require vc::tools::trouble ; # Error handling |
| 12 | package require vc::cvs::cmd ; # Access to cvs application. |
| 13 | package require vc::cvs::ws::files ; # Scan CVS repository for relevant files. |
| 14 | package require vc::cvs::ws::timeline ; # Manage timeline of all changes. |
| 15 | package require vc::cvs::ws::csets ; # Manage the changengeset file/rev signatures |
| 16 | |
| 17 | namespace eval ::vc::cvs::ws { |
| 18 | vc::tools::log::system cvs |
| 19 | namespace import ::vc::tools::log::write |
| 20 | namespace import ::vc::rcs::parser::process |
| 21 | namespace import ::vc::cvs::cmd::dova |
| 22 | |
| 23 | namespace eval trouble { namespace import ::vc::tools::trouble::* } |
| 24 | } |
| 25 | |
| 26 | # ----------------------------------------------------------------------------- |
| 27 | # API |
| 28 | |
| 29 | # vc::cvs::ws::configure key value - Configure the subsystem. |
| 30 | # vc::cvs::ws::check src mv - Check if src is a CVS repository directory. |
| 31 | # vc::cvs::ws::begin src - Start new workspace and return the top- |
| 32 | # most directory co'd files are put into. |
| 33 | # vc::cvs::ws::ncsets - Retrieve total number of csets |
| 34 | # vc::cvs::ws::nimportable - Retrieve number of importable csets |
| 35 | # vc::cvs::ws::foreach csvar script - Run the script for each changeset, the |
| 36 | # id of the current changeset stored in |
| 37 | # the variable named by csvar. |
| 38 | # vc::cvs::ws::done - Close workspace and delete it. |
| 39 | # vc::cvs::ws::isadmin path - Check if path is an admin file of CVS |
| 40 | # vc::cvs::ws::checkout id - Have workspace contain the changeset id. |
| 41 | # vc::cvs::ws::get id - Retrieve data of a changeset. |
| 42 | # |
| 43 | # Configuration keys: |
| 44 | # |
| 45 | # -project path - Sub directory under 'src' to limit the import to. |
| 46 | |
| 47 | # ----------------------------------------------------------------------------- |
| 48 | # API Implementation |
| 49 | |
| 50 | proc ::vc::cvs::ws::configure {key value} { |
| 51 | variable project |
| 52 | |
| 53 | switch -exact -- $key { |
| 54 | -project { set project $value } |
| 55 | default { |
| 56 | return -code error "Unknown switch $key, expected \ |
| 57 | -project" |
| 58 | } |
| 59 | } |
| 60 | return |
| 61 | } |
| 62 | |
| 63 | proc ::vc::cvs::ws::check {src mv} { |
| 64 | variable project |
| 65 | upvar 1 $mv msg |
| 66 | if { |
| 67 | ![fileutil::test $src erd msg "CVS Repository"] || |
| 68 | ![fileutil::test $src/CVSROOT erd msg "CVS Admin directory"] || |
| 69 | (($project ne "") && |
| 70 | ![fileutil::test $src/$project erd msg "Project directory"]) |
| 71 | } { |
| 72 | return 0 |
| 73 | } |
| 74 | return 1 |
| 75 | } |
| 76 | |
| 77 | proc ::vc::cvs::ws::begin {src} { |
| 78 | if {![check $src msg]} { return -code error $msg } |
| 79 | |
| 80 | DefBase $src |
| 81 | MakeTimeline [ScanArchives [files::find [RootPath]]] |
| 82 | MakeChangesets |
| 83 | ProcessBranches |
| 84 | |
| 85 | return [MakeWorkspace] |
| 86 | } |
| 87 | |
| 88 | proc ::vc::cvs::ws::done {} { |
| 89 | variable workspace |
| 90 | file delete -force $workspace |
| 91 | return |
| 92 | } |
| 93 | |
| 94 | proc ::vc::cvs::ws::foreach {cv script} { |
| 95 | variable importable |
| 96 | upvar 1 $cv c |
| 97 | |
| 98 | ::foreach c [lsort -integer -increasing $importable] { |
| 99 | set code [catch {uplevel 1 $script} res] |
| 100 | |
| 101 | # 0 - ok, 1 - error, 2 - return, 3 - break, 4 - continue |
| 102 | switch -- $code { |
| 103 | 0 {} |
| 104 | 1 { return -errorcode $::errorCode -errorinfo $::errorInfo -code error $res } |
| 105 | 2 {} |
| 106 | 3 { return } |
| 107 | 4 {} |
| 108 | default { return -code $code $result } |
| 109 | } |
| 110 | } |
| 111 | return |
| 112 | } |
| 113 | |
| 114 | proc ::vc::cvs::ws::ncsets {args} { |
| 115 | return [csets::num] |
| 116 | } |
| 117 | |
| 118 | proc ::vc::cvs::ws::nimportable {args} { |
| 119 | variable importable |
| 120 | return [llength $importable] |
| 121 | } |
| 122 | |
| 123 | proc ::vc::cvs::ws::isadmin {path} { |
| 124 | # Check if path is a CVS admin file. |
| 125 | if {[string match CVS/* $path]} {return 1} |
| 126 | if {[string match */CVS/* $path]} {return 1} |
| 127 | return 0 |
| 128 | } |
| 129 | |
| 130 | proc ::vc::cvs::ws::parentOf {id} { csets::parentOf $id } |
| 131 | |
| 132 | proc ::vc::cvs::ws::checkout {id} { |
| 133 | variable workspace |
| 134 | cd $workspace |
| 135 | |
| 136 | # TODO: Hide the direct access to the data structures behind |
| 137 | # TODO: accessors for date, cmsg, removed, added, changed, and |
| 138 | # TODO: author |
| 139 | array set cs [csets::get $id] |
| 140 | |
| 141 | write 1 cvs "@ $cs(date)" |
| 142 | ::foreach l [split [string trim $cs(cmsg)] \n] { |
| 143 | write 1 cvs "| $l" |
| 144 | } |
| 145 | |
| 146 | ::foreach {f r} $cs(removed) { write 2 cvs "R $f $r" ; Remove $f $r } |
| 147 | ::foreach {f r} $cs(added) { write 2 cvs "A $f $r" ; Checkout $f $r } |
| 148 | ::foreach {f r} $cs(changed) { write 2 cvs "M $f $r" ; Checkout $f $r } |
| 149 | |
| 150 | # Provide metadata about the changeset the backend may wish to have |
| 151 | return [list $cs(author) $cs(date) $cs(cmsg)] |
| 152 | } |
| 153 | |
| 154 | # ----------------------------------------------------------------------------- |
| 155 | # Internals |
| 156 | |
| 157 | proc ::vc::cvs::ws::DefBase {path} { |
| 158 | variable project |
| 159 | variable base |
| 160 | |
| 161 | set base $path |
| 162 | |
| 163 | write 0 cvs "Base: $base" |
| 164 | if {$project eq ""} { |
| 165 | write 0 cvs "Project: <ALL>" |
| 166 | } else { |
| 167 | write 0 cvs "Project: $project" |
| 168 | } |
| 169 | return |
| 170 | } |
| 171 | |
| 172 | proc ::vc::cvs::ws::RootPath {} { |
| 173 | variable project |
| 174 | variable base |
| 175 | |
| 176 | if {$project eq ""} { |
| 177 | return $base |
| 178 | } else { |
| 179 | return $base/$project |
| 180 | } |
| 181 | } |
| 182 | |
| 183 | proc ::vc::cvs::ws::ScanArchives {files} { |
| 184 | write 0 cvs "Scanning archives ..." |
| 185 | |
| 186 | set d [RootPath] |
| 187 | set r {} |
| 188 | set n 0 |
| 189 | |
| 190 | ::foreach {rcs f} $files { |
| 191 | write 1 cvs "Archive $rcs" |
| 192 | # Get the meta data we need (revisions, timeline, messages). |
| 193 | lappend r $f [process $d/$rcs] |
| 194 | incr n |
| 195 | } |
| 196 | |
| 197 | write 0 cvs "Processed [NSIPL $n file]" |
| 198 | return $r |
| 199 | } |
| 200 | |
| 201 | proc ::vc::cvs::ws::MakeTimeline {meta} { |
| 202 | write 0 cvs "Generating coalesced timeline ..." |
| 203 | |
| 204 | set n 0 |
| 205 | ::foreach {f meta} $meta { |
| 206 | array set md $meta |
| 207 | array set date $md(date) |
| 208 | array set auth $md(author) |
| 209 | array set cmsg $md(commit) |
| 210 | array set stat $md(state) |
| 211 | |
| 212 | ::foreach rev [lsort -dict [array names date]] { |
| 213 | set operation [Operation $rev $stat($rev)] |
| 214 | NoteDeadRoots $f $rev $operation |
| 215 | timeline::add $date($rev) $f $rev $operation $auth($rev) #B Extend branch managementve $f $r } |
| 216 | ::foreach {f r} $cs(added) { write 2 cvs "A $f $r" ; Checkout $f $r } |
| 217 | ::foreach {f r} $cs(changed) { write 2 cvs "M $f $r" ; Checkout $f $r } |
| 218 | |
| 219 | # Provide metadata about the changeset the backend may wish to have |
| 220 | return [list $cs(author) $cs(date) $cs(cmsg)] |
| 221 | } |
| 222 | |
| 223 | # ----------------------------------------------------------------------------- |
| 224 | # Internals |
| 225 | |
| 226 | proc ::vc::cvs::ws::DefBase {path} { |
| 227 | variable project |
| 228 | variable base |
| 229 | |
| 230 | set base $path |
| 231 | |
| 232 | write 0 cvs "Base: $base" |
| 233 | if {$project eq ""} { |
| 234 | write 0 cvs "Project: <ALL>" |
| 235 | } else { |
| 236 | write 0 cvs "Project: $project" |
| 237 | } |
| 238 | return |
| 239 | } |
| 240 | |
| 241 | proc ::vc::cvs::ws::RootPath {vs::ws::RootPath {} { |
| 242 | |
| 243 | |
| 244 | if {$project eq ""} {es} { |
| 245 | write 0 cvs "Scanning arc cvs "Scanning archives ..." |
| 246 | |
| 247 | set d [RootPath] |
| 248 | set r {} |
| 249 | set n 0 |
| 250 | |
| 251 | ::foreach {rcs f} $files { |
| 252 | write 1 cvs "Archive $rcs" |
| 253 | # Get the meta data we need (revisions, timeline, messages). |
| 254 | lappend r $f [process $d/$rcs] |
| 255 | incr n |
| 256 | } |
| 257 | |
| 258 | write 0 cvs "Processed [NSIPL $n file]" |
| 259 | return $r |
| 260 | } |
| 261 | |
| 262 | proc ::vc::cvs::ws::MakeTimeline {meta} { |
| 263 | write 0 cvs "Generating coalesced timeline ..." |
| 264 | |
| 265 | set n 0 |
| 266 | ::foreach {f meta} $meta { |
| 267 | array set md $meta |
| 268 | array set date $md(date) |
| 269 | array set auth $md(author) |
| 270 | array set cmsg $md(commit) |
| 271 | array set stat $md(state) |
| 272 | |
| 273 | ::foreach rev [lsort -dict [array names date]] { |
| 274 | set operation [Operation $rev $stat($rev)] |
| 275 | NoteDeadRoots $f $rev $operation |
| 276 | timeline::add $date($rev) $f $rev $operation $auth($rev) $cmsg($rev) |
| 277 | incr n |
| 278 | } |
| 279 | |
| 280 | if {[info exists md(symbol)]} { |
| 281 | branch::def $f date $md(symbol) |
| 282 | } |
| 283 | |
| 284 | unset md |
| 285 | unset date |
| 286 | unset auth |
| 287 | unset cmsg |
| 288 | unset stat |
| 289 | } |
| 290 | |
| 291 | write 0 cvs "Timeline has [NSIPL $n entry entries]" |
| 292 | return |
| 293 | } |
| 294 | |
| 295 | proc ::vc::cvs::ws::NoteDeadRoots {f rev operation} { |
| 296 | # A dead-first revision is rev 1.1 with op R. For an example see |
| 297 | # the file memchan/DEPENDENCIES. Such a file seems to exist only! |
| 298 | # on its branch. The branches information is set on the revision |
| 299 | # (extend rcsparser!), symbols has a tag, refering to a branch, |
| 300 | # possibly magic. |
| 301 | |
| 302 | if {($rev eq "1.1") && ($operation eq "R")} { |
| 303 | write 2 cvs "Dead root revision: $f" |
| 304 | } |
| 305 | return |
| 306 | } |
| 307 | |
| 308 | proc ::vc::cvs::ws::Operation {rev state} { |
| 309 | if {$state eq "dead"} {return "R"} ; # Removed |
| 310 | if {$rev eq "1.1"} {return "A"} ; # Added |
| 311 | if {[string match *.1.1 $rev]} {return "A"} ; # Added on a branch |
| 312 | return "M" ; # Modified |
| 313 | } |
| 314 | |
| 315 | proc ::vc::cvs::ws::MakeChangesets {} { |
| 316 | write 0 cvs "Generating changesets from timeline" |
| 317 | |
| 318 | csets::init |
| 319 | timeline::foreach date file revision operation author cmsg { |
| 320 | csets::add $date $file $revision $operation $author $cmsg |
| 321 | } |
| 322 | csets::done |
| 323 | |
| 324 | write 0 cvs "Found [NSIPL [csets::nchangesetsength $cslist] changesets"]" |
| 325 | |
| 326 | set base [lindex $cslist 0] |
| 327 | set cslist [the trunk |
| 328 | ### ### ### ######### ######### ######### |
| 329 | ## Dump data of the unprocessing changeset |
| 330 | |
| 331 | puts /${base}/_________________ged, and |
| 332 | # TODO: author |
| 333 | base] |
| 334 | parray cs |
| 335 | |
| 336 | # Which branch does base belong to? |
| 337 | # - It has to be the base of an unprocessed branch! |
| 338 | # Otherwise it would have been on either the trunk |
| 339 | # or an already processed branch. |
| 340 | # Where is its root changeset ? |
| 341 | # - The root has to come before the base, it has already |
| 342 | # been processed => Smaller id, older in time. |
| 343 | # - Based on the files changed/removed by the base, and their |
| 344 | # versions we know the root versions of these files, and we |
| 345 | # can determine the changesets they are in => Intersection |
| 346 | # plus cap from previous contraint gives us the possibl# ### ### ### ######### ######### ######### |
| 347 | exit |
| 348 | |
| 349 | set tag [FindBranch $base ..] |
| 350 | set rt n [csets::num]base $root |
| 351 | |
| 352 | ets" |
| 353 | |
| 354 | set remaind 0 |
| 355 | set n [cse set n [csets::num] |
| 356 | set parent {} |
| 357 | |
| 358 | for {set c 0} {$c < $n} {incr c} { |
| 359 | if {[csets::isTrunk $c]} { |
| 360 | csets::setParentOf # |
| 361 | } |
| 362 | |
| 363 | proc ::vc::cvs::ws::Ma write 0 cvs "Found [NSIPL $t {trunk changeset}], [NSIPL [llength $remainder] {branch changeset}]#TBD |
| 364 | #... FindBranch |
| 365 | #. |
| 366 | |
| 367 | proc ::vc::cvs::ws::ProcessBranch {cslist} { |
| 368 | write 0 cvs "Processing the remaining [SIPL [llength $cslist] changeset "[llength $cslist] changesets"]" |
| 369 | |
| 370 | set base [lindex $cslist 0] |
| 371 | set cslist [lrange $cslist 1 end] |
| 372 | |
| 373 | csets::DUMP $base |
| 374 | |
| 375 | # Which branch does base belong to? |
| 376 | # - It has to be the base of an unprocessed branch! |
| 377 | # Otherwise it would have been on either the trunk |
| 378 | # or an already processed branch. |
| 379 | # Where is its root changeset ? |
| 380 | # - The root has to come before the base, it has already |
| 381 | # been processed => Smaller id, older in time. |
| 382 | # - Based on the files changed/removed by the base, and their |
| 383 | # versions we know the root versions of these files, and we |
| 384 | # can determine the changesets they are in => Intersection |
| 385 | # plus cap from previous contraint gives us the possible |
| 386 | # candidates. |
| 387 | |
| 388 | write 4 cvs "Branch base $base" |
| 389 | |
| 390 | ::foreach {tag rootsig} [branch::find [csets::get $base]] break |
| 391 | |
| 392 | write 4 cvs "Branch tag $tag" |
| 393 | write 4 cvs "Root sig $rootsig" |
| 394 | |
| 395 | set root [sig::find $base $rootsig] |
| 396 | |
| 397 | write 4 cvs "Branch root $root" |
| 398 | |
| 399 | write 0 cvs "Changeset $base, starting branch \"$tag\", rooted at $root" |
| 400 | csets::setParentOf $base $root |
| 401 | |
| 402 | set remainder {} |
| 403 | set t 1 |
| 404 | |
| 405 | ::foreach c $cslist { |
| 406 | #csets::DUMP $c |
| 407 | if {[csets::sameBranch $c $base $tag]} { |
| 408 | csets::setParentOf $c $base |
| 409 | set base $c |
| 410 | incr t |
| 411 | lappend importable $c |
| 412 | } else { |
| 413 | lappend remainder $c |
| 414 | } |
| 415 | } |
| 416 | |
| 417 | write 0 cvs "Found [NSIPL $t "$tag changeset"], [NSIPL [llength $remainder] changeset] outside" |
| 418 | return $remainder |
| 419 | } |
| 420 | |
| 421 | proc ::vc::cvs::ws::Checkout {f r} { |
| 422 | variable base |
| 423 | variable project |
| 424 | |
| 425 | # Added or modified, put the requested version of the file into |
| 426 | # the workspace. |
| 427 | |
| 428 | if {$project ne ""} {set f $project/$f} |
| 429 | if {[catch { |
| 430 | dova -d $base co -r $r $f |
| 431 | } msg]} { |
| 432 | if {[string match {*invalid change text*} $msg]} { |
| 433 | |
| 434 | # The archive of the file is corrupted and the chosen |
| 435 | # version not accessible due to that. We report the |
| 436 | # problem, but otherwise ignore it. As a consequence the |
| 437 | # destination repository will not contain the full history |
| 438 | # of the named file. By ignoring the problem we however |
| 439 | # get as much as is possible. |
| 440 | |
| 441 | trouble::ad[NSIPL [llength $remainder] {branch changeset}]" |
| 442 | return $remainder |
| 443 | } |
| 444 | |
| 445 | proc ::vc::cvs::ws::ProcessBranch {cslist} { |
| 446 | write 0 cvs "Processing the remaining [SIPL [llength $cslist] changeset "[llength $cslist] changesets"]" |
| 447 | |
| 448 | set base [lindex $cslist 0] |
| 449 | set cslist [lran |
| --- a/tools/lib/cvs.tcl | |
| +++ b/tools/lib/cvs.tcl | |
| @@ -1,449 +0,0 @@ | |
D
tools/lib/cvs_cmd.tcl
-49
| --- a/tools/lib/cvs_cmd.tcl | ||
| +++ b/tools/lib/cvs_cmd.tcl | ||
| @@ -1,49 +0,0 @@ | ||
| 1 | -# ----------------------------------------------------------------------------- | |
| 2 | -# Access to the external cvs command. | |
| 3 | - | |
| 4 | -# ----------------------------------------------------------------------------- | |
| 5 | -# Requirements | |
| 6 | - | |
| 7 | -package require Tcl 8.4 | |
| 8 | -namespace eval ::vc::cvs::cmd {} | |
| 9 | - | |
| 10 | -# ----------------------------------------------------------------------------- | |
| 11 | -# API | |
| 12 | - | |
| 13 | -# vc::cvs::cmd::dova word... - Run a cvs command specified as var args. | |
| 14 | -# vc::cvs::cmd::do words - Run a cvs command specified as a list. | |
| 15 | - | |
| 16 | -# ----------------------------------------------------------------------------- | |
| 17 | -# API Implementation | |
| 18 | - | |
| 19 | -proc ::vc::cvs::cmd::dova {args} {do $args} | |
| 20 | - | |
| 21 | -proc ::vc::cvs::cmd::do {words} { | |
| 22 | - variable cmd | |
| 23 | - if {![llength $words]} { | |
| 24 | - return -code error "Empty cvs command" | |
| 25 | - } | |
| 26 | - # 8.5: exec $cmd {*}$words | |
| 27 | - return [eval [linsert $words 0 exec $cmd]] | |
| 28 | -} | |
| 29 | - | |
| 30 | -# ----------------------------------------------------------------------------- | |
| 31 | -# Internals. | |
| 32 | - | |
| 33 | -namespace eval ::vc::cvs::cmd { | |
| 34 | - # Locate external cvs application. | |
| 35 | - variable cmd [auto_execok cvs] | |
| 36 | - | |
| 37 | - # Bail out if not found. | |
| 38 | - if {![llength $::vc::cvs::cmd::cmd]} { | |
| 39 | - return -code error "Cvs application not found." | |
| 40 | - } | |
| 41 | - | |
| 42 | - namespace export do dova | |
| 43 | -} | |
| 44 | - | |
| 45 | -# ----------------------------------------------------------------------------- | |
| 46 | -# Ready | |
| 47 | - | |
| 48 | -package provide vc::cvs::cmd 1.0 | |
| 49 | -return |
| --- a/tools/lib/cvs_cmd.tcl | |
| +++ b/tools/lib/cvs_cmd.tcl | |
| @@ -1,49 +0,0 @@ | |
| 1 | # ----------------------------------------------------------------------------- |
| 2 | # Access to the external cvs command. |
| 3 | |
| 4 | # ----------------------------------------------------------------------------- |
| 5 | # Requirements |
| 6 | |
| 7 | package require Tcl 8.4 |
| 8 | namespace eval ::vc::cvs::cmd {} |
| 9 | |
| 10 | # ----------------------------------------------------------------------------- |
| 11 | # API |
| 12 | |
| 13 | # vc::cvs::cmd::dova word... - Run a cvs command specified as var args. |
| 14 | # vc::cvs::cmd::do words - Run a cvs command specified as a list. |
| 15 | |
| 16 | # ----------------------------------------------------------------------------- |
| 17 | # API Implementation |
| 18 | |
| 19 | proc ::vc::cvs::cmd::dova {args} {do $args} |
| 20 | |
| 21 | proc ::vc::cvs::cmd::do {words} { |
| 22 | variable cmd |
| 23 | if {![llength $words]} { |
| 24 | return -code error "Empty cvs command" |
| 25 | } |
| 26 | # 8.5: exec $cmd {*}$words |
| 27 | return [eval [linsert $words 0 exec $cmd]] |
| 28 | } |
| 29 | |
| 30 | # ----------------------------------------------------------------------------- |
| 31 | # Internals. |
| 32 | |
| 33 | namespace eval ::vc::cvs::cmd { |
| 34 | # Locate external cvs application. |
| 35 | variable cmd [auto_execok cvs] |
| 36 | |
| 37 | # Bail out if not found. |
| 38 | if {![llength $::vc::cvs::cmd::cmd]} { |
| 39 | return -code error "Cvs application not found." |
| 40 | } |
| 41 | |
| 42 | namespace export do dova |
| 43 | } |
| 44 | |
| 45 | # ----------------------------------------------------------------------------- |
| 46 | # Ready |
| 47 | |
| 48 | package provide vc::cvs::cmd 1.0 |
| 49 | return |
| --- a/tools/lib/cvs_cmd.tcl | |
| +++ b/tools/lib/cvs_cmd.tcl | |
| @@ -1,49 +0,0 @@ | |
D
tools/lib/cvs_csets.tcl
-159
| --- a/tools/lib/cvs_csets.tcl | ||
| +++ b/tools/lib/cvs_csets.tcl | ||
| @@ -1,159 +0,0 @@ | ||
| 1 | -# ----------------------------------------------------------------------------- | |
| 2 | -# Repository management (CVS), Changeset grouping and storage. | |
| 3 | - | |
| 4 | -# ----------------------------------------------------------------------------- | |
| 5 | -# Requirements | |
| 6 | - | |
| 7 | -package require Tcl 8.4 | |
| 8 | - | |
| 9 | -namespace eval ::vc:: | |
| 10 | -# ----------------------------------------------------------------------------- | |
| 11 | -# API--------------------- | |
| 12 | -# API | |
| 13 | - | |
| 14 | -# vc::cvs::ws::csets::init - Initialize accumulator | |
| 15 | -# vc::cvs::ws::csets::add - Add timeline entry to accumulor, may generate new cset | |
| 16 | -# vc::cvs::ws::csets::done - Complete cset generation. | |
| 17 | -# | |
| 18 | -# vc::cvs::ws::csets::get id - Get data of a cset. | |
| 19 | -# vc::cvs::ws::csets::num - Get number of csets. | |
| 20 | - | |
| 21 | -# ----------------------------------------------------------------------------- | |
| 22 | -# API Implementation | |
| 23 | - | |
| 24 | -proc ::vc::cvs::ws::csets::init {} { | |
| 25 | - variable ncs 0 | |
| 26 | - Current::Clear | |
| 27 | - return | |
| 28 | -} | |
| 29 | - | |
| 30 | -proc ::vc::cvs::ws::csets::add {date file revision operation author cmsg} { | |
| 31 | - if {![Current::Empty] && [Current::New $file $revision $author $cmsg]} { | |
| 32 | - Save [Current::Complete] | |
| 33 | - } | |
| 34 | - Current::Add $date $file $revision $operation $author $cmsg | |
| 35 | - return | |
| 36 | -} | |
| 37 | - | |
| 38 | -proc ::vc::cvs::ws::csets::done {} { | |
| 39 | - if {![Current::Empty]} { | |
| 40 | - Save [Current::Complete] | |
| 41 | - } | |
| 42 | - return | |
| 43 | -} | |
| 44 | - | |
| 45 | -proc ::vc::cvs::ws::csets::getproc ::vc::cvs::ws::csets::num {# -------------------------} { | |
| 46 | - variable csets | |
| 47 | - return [array size csets] | |
| 48 | -} | |
| 49 | - | |
| 50 | -proc ::vc::cvs::ws::csets::isTrunk {id} { | |
| 51 | - variable csets | |
| 52 | - array set cs $csets($id) | |
| 53 | - return [expr {$cs(lastd) == 2}] | |
| 54 | -} | |
| 55 | - | |
| 56 | -proc ::vc::cvs::ws::csets::setParentOf {id parent} { | |
| 57 | - variable csets | |
| 58 | - lappend --------------parentOf {id# --------------- csets | |
| 59 | - array set cs $csets($id) | |
| 60 | - return $cs(parent) | |
| 61 | -} | |
| 62 | - | |
| 63 | - Clear | |
| 64 | - return $res | |
| 65 | -} | |
| 66 | - | |
| 67 | -# -------------------------------------------------------------::ws::csets::get id - Get data of a cset. | |
| 68 | -# vc::cvs::ws::csets::num - Get number of csets. | |
| 69 | - | |
| 70 | -# ----------------------------------------------------------------------------- | |
| 71 | -# API Implementation | |
| 72 | - | |
| 73 | -proc ::vc::cvs::ws::csets::init {} { | |
| 74 | - variable ncs 0 | |
| 75 | - Current::Clear | |
| 76 | - return | |
| 77 | -} | |
| 78 | - | |
| 79 | -proc ::vc::cvs::ws::csets::add {date file revision operation author cmsg} { | |
| 80 | - if {![Current::Empty] && [Current::New $file $revision $author $cmsg]} { | |
| 81 | - Save [Current::Complete] | |
| 82 | - } | |
| 83 | - Current::Add $date $file $revision $operation $author $cmsg | |
| 84 | - return | |
| 85 | -} | |
| 86 | - | |
| 87 | -proc ::vc::cvs::ws::csets::done {} { | |
| 88 | - if {![Current::Empty]} { | |
| 89 | - Save [Current::Complete] | |
| 90 | - } | |
| 91 | - return | |
| 92 | -} | |
| 93 | - | |
| 94 | -proc ::vc::cvs::ws::csets::get {id} { | |
| 95 | - variable csets | |
| 96 | - return $csets($id) | |
| 97 | -} | |
| 98 | - | |
| 99 | - | |
| 100 | -proc ::vc::cvs::ws::csets::DUMP {id} { | |
| 101 | - puts /${id}/_________________ | |
| 102 | - array set cs [get $id] | |
| 103 | - parray cs | |
| 104 | - return | |
| 105 | -} | |
| 106 | - | |
| 107 | -proc ::vc::cvs::ws::csets::num {} { | |
| 108 | - variable csets | |
| 109 | - return [array size csets] | |
| 110 | -} | |
| 111 | - | |
| 112 | -proc ::vc::cvs::ws::csets::isTrunk {id} { | |
| 113 | - variable csets | |
| 114 | - array set cs $csets($id) | |
| 115 | - return [expr {$cs(lastd) == 2}] | |
| 116 | -} | |
| 117 | - | |
| 118 | -proc ::vc::cvs::ws::csets::setParentOf {id parent} { | |
| 119 | - variable csets | |
| 120 | - lappend csets($id) parent $parent | |
| 121 | - | |
| 122 | - array set cs $csets($id) | |
| 123 | - sig::def $id $parent $cs(added) $cs(changed) $cs(removed) | |
| 124 | - return | |
| 125 | -} | |
| 126 | - | |
| 127 | -proc ::vc::cvs::ws::csets::parentOf {id} { | |
| 128 | - variable csets | |
| 129 | - array set cs $csets($id) | |
| 130 | - return $cs(parent) | |
| 131 | -} | |
| 132 | - | |
| 133 | -proc ::vc::cvs::ws::csets::sameBranch {id parent tag} { | |
| 134 | - variable csets | |
| 135 | - array set cs $csets($id) | |
| 136 | - return [sig::next $parent $cs(added) $cs(changed) $cs(removed) $tag $cs(date)] | |
| 137 | -} | |
| 138 | - | |
| 139 | -# ----------------------------------------------------------------------------- | |
| 140 | -# Internal helper commands: Changeset inspection and construction. | |
| 141 | - | |
| 142 | -proc ::vc::cvs::ws::csets::Save {data} { | |
| 143 | - variable csets | |
| 144 | - variable ncs | |
| 145 | - | |
| 146 | - set csets($ncs) $data | |
| 147 | - incr ncs | |
| 148 | - return | |
| 149 | -} | |
| 150 | - | |
| 151 | -proc ::vc::cvs::ws::csets::Current::Clear {} { | |
| 152 | - variable start {} ; # date | |
| 153 | -} | |
| 154 | - | |
| 155 | -# ----------------------------------------------------------------------------- | |
| 156 | -# Ready | |
| 157 | - | |
| 158 | -package provide vc::cvs::ws::csets 1.0 | |
| 159 | -return |
| --- a/tools/lib/cvs_csets.tcl | |
| +++ b/tools/lib/cvs_csets.tcl | |
| @@ -1,159 +0,0 @@ | |
| 1 | # ----------------------------------------------------------------------------- |
| 2 | # Repository management (CVS), Changeset grouping and storage. |
| 3 | |
| 4 | # ----------------------------------------------------------------------------- |
| 5 | # Requirements |
| 6 | |
| 7 | package require Tcl 8.4 |
| 8 | |
| 9 | namespace eval ::vc:: |
| 10 | # ----------------------------------------------------------------------------- |
| 11 | # API--------------------- |
| 12 | # API |
| 13 | |
| 14 | # vc::cvs::ws::csets::init - Initialize accumulator |
| 15 | # vc::cvs::ws::csets::add - Add timeline entry to accumulor, may generate new cset |
| 16 | # vc::cvs::ws::csets::done - Complete cset generation. |
| 17 | # |
| 18 | # vc::cvs::ws::csets::get id - Get data of a cset. |
| 19 | # vc::cvs::ws::csets::num - Get number of csets. |
| 20 | |
| 21 | # ----------------------------------------------------------------------------- |
| 22 | # API Implementation |
| 23 | |
| 24 | proc ::vc::cvs::ws::csets::init {} { |
| 25 | variable ncs 0 |
| 26 | Current::Clear |
| 27 | return |
| 28 | } |
| 29 | |
| 30 | proc ::vc::cvs::ws::csets::add {date file revision operation author cmsg} { |
| 31 | if {![Current::Empty] && [Current::New $file $revision $author $cmsg]} { |
| 32 | Save [Current::Complete] |
| 33 | } |
| 34 | Current::Add $date $file $revision $operation $author $cmsg |
| 35 | return |
| 36 | } |
| 37 | |
| 38 | proc ::vc::cvs::ws::csets::done {} { |
| 39 | if {![Current::Empty]} { |
| 40 | Save [Current::Complete] |
| 41 | } |
| 42 | return |
| 43 | } |
| 44 | |
| 45 | proc ::vc::cvs::ws::csets::getproc ::vc::cvs::ws::csets::num {# -------------------------} { |
| 46 | variable csets |
| 47 | return [array size csets] |
| 48 | } |
| 49 | |
| 50 | proc ::vc::cvs::ws::csets::isTrunk {id} { |
| 51 | variable csets |
| 52 | array set cs $csets($id) |
| 53 | return [expr {$cs(lastd) == 2}] |
| 54 | } |
| 55 | |
| 56 | proc ::vc::cvs::ws::csets::setParentOf {id parent} { |
| 57 | variable csets |
| 58 | lappend --------------parentOf {id# --------------- csets |
| 59 | array set cs $csets($id) |
| 60 | return $cs(parent) |
| 61 | } |
| 62 | |
| 63 | Clear |
| 64 | return $res |
| 65 | } |
| 66 | |
| 67 | # -------------------------------------------------------------::ws::csets::get id - Get data of a cset. |
| 68 | # vc::cvs::ws::csets::num - Get number of csets. |
| 69 | |
| 70 | # ----------------------------------------------------------------------------- |
| 71 | # API Implementation |
| 72 | |
| 73 | proc ::vc::cvs::ws::csets::init {} { |
| 74 | variable ncs 0 |
| 75 | Current::Clear |
| 76 | return |
| 77 | } |
| 78 | |
| 79 | proc ::vc::cvs::ws::csets::add {date file revision operation author cmsg} { |
| 80 | if {![Current::Empty] && [Current::New $file $revision $author $cmsg]} { |
| 81 | Save [Current::Complete] |
| 82 | } |
| 83 | Current::Add $date $file $revision $operation $author $cmsg |
| 84 | return |
| 85 | } |
| 86 | |
| 87 | proc ::vc::cvs::ws::csets::done {} { |
| 88 | if {![Current::Empty]} { |
| 89 | Save [Current::Complete] |
| 90 | } |
| 91 | return |
| 92 | } |
| 93 | |
| 94 | proc ::vc::cvs::ws::csets::get {id} { |
| 95 | variable csets |
| 96 | return $csets($id) |
| 97 | } |
| 98 | |
| 99 | |
| 100 | proc ::vc::cvs::ws::csets::DUMP {id} { |
| 101 | puts /${id}/_________________ |
| 102 | array set cs [get $id] |
| 103 | parray cs |
| 104 | return |
| 105 | } |
| 106 | |
| 107 | proc ::vc::cvs::ws::csets::num {} { |
| 108 | variable csets |
| 109 | return [array size csets] |
| 110 | } |
| 111 | |
| 112 | proc ::vc::cvs::ws::csets::isTrunk {id} { |
| 113 | variable csets |
| 114 | array set cs $csets($id) |
| 115 | return [expr {$cs(lastd) == 2}] |
| 116 | } |
| 117 | |
| 118 | proc ::vc::cvs::ws::csets::setParentOf {id parent} { |
| 119 | variable csets |
| 120 | lappend csets($id) parent $parent |
| 121 | |
| 122 | array set cs $csets($id) |
| 123 | sig::def $id $parent $cs(added) $cs(changed) $cs(removed) |
| 124 | return |
| 125 | } |
| 126 | |
| 127 | proc ::vc::cvs::ws::csets::parentOf {id} { |
| 128 | variable csets |
| 129 | array set cs $csets($id) |
| 130 | return $cs(parent) |
| 131 | } |
| 132 | |
| 133 | proc ::vc::cvs::ws::csets::sameBranch {id parent tag} { |
| 134 | variable csets |
| 135 | array set cs $csets($id) |
| 136 | return [sig::next $parent $cs(added) $cs(changed) $cs(removed) $tag $cs(date)] |
| 137 | } |
| 138 | |
| 139 | # ----------------------------------------------------------------------------- |
| 140 | # Internal helper commands: Changeset inspection and construction. |
| 141 | |
| 142 | proc ::vc::cvs::ws::csets::Save {data} { |
| 143 | variable csets |
| 144 | variable ncs |
| 145 | |
| 146 | set csets($ncs) $data |
| 147 | incr ncs |
| 148 | return |
| 149 | } |
| 150 | |
| 151 | proc ::vc::cvs::ws::csets::Current::Clear {} { |
| 152 | variable start {} ; # date |
| 153 | } |
| 154 | |
| 155 | # ----------------------------------------------------------------------------- |
| 156 | # Ready |
| 157 | |
| 158 | package provide vc::cvs::ws::csets 1.0 |
| 159 | return |
| --- a/tools/lib/cvs_csets.tcl | |
| +++ b/tools/lib/cvs_csets.tcl | |
| @@ -1,159 +0,0 @@ | |
D
tools/lib/cvs_files.tcl
-113
| --- a/tools/lib/cvs_files.tcl | ||
| +++ b/tools/lib/cvs_files.tcl | ||
| @@ -1,113 +0,0 @@ | ||
| 1 | -# ----------------------------------------------------------------------------- | |
| 2 | -# Repository management (CVS), archive files | |
| 3 | - | |
| 4 | -# ----------------------------------------------------------------------------- | |
| 5 | -# Requirements | |
| 6 | - | |
| 7 | -package require Tcl 8.4 | |
| 8 | -package require fileutil::traverse ; # Tcllib (traverse directory hierarchy) | |
| 9 | -package require vc::tools::log ; # User feedback | |
| 10 | - | |
| 11 | -namespace eval ::vc::cvs::ws::files { | |
| 12 | - namespace import ::vc::tools::log::write | |
| 13 | - namespace import ::vc::tools::log::progress | |
| 14 | -} | |
| 15 | - | |
| 16 | -# ----------------------------------------------------------------------------- | |
| 17 | -# API | |
| 18 | - | |
| 19 | -# vc::cvs::ws::files::find path - Find all RCS archives under the path. | |
| 20 | - | |
| 21 | -# ----------------------------------------------------------------------------- | |
| 22 | -# API Implementation | |
| 23 | - | |
| 24 | -proc ::vc::cvs::ws::files::find {path} { | |
| 25 | - | |
| 26 | - write 0 cvs "Scanning directory hierarchy $path ..." | |
| 27 | - | |
| 28 | - set t [fileutil::traverse %AUTO% $path] | |
| 29 | - set n 0 | |
| 30 | - set r {} | |
| 31 | - | |
| 32 | - $t foreach rcs { | |
| 33 | - if {![string match *,v $rcs]} continue | |
| 34 | - | |
| 35 | - # Now make rcs is relative to the base/project | |
| 36 | - set rcs [fileutil::stripPath $path $rcs] | |
| 37 | - | |
| 38 | - if {[string match CVSROOT/* $rcs]} { | |
| 39 | - write 2 cvs "Ignoring administrative file: $rcs" | |
| 40 | - continue | |
| 41 | - } | |
| 42 | - | |
| 43 | - set f [UserFile $rcs isattic] | |
| 44 | - | |
| 45 | - if {$isattic && [file exists $path/$f,v]} { | |
| 46 | - # We have a regular archive and an Attic archive refering | |
| 47 | - # to the same user visible file. Ignore the file in the | |
| 48 | - # Attic. | |
| 49 | - | |
| 50 | - write 2 cvs "Ignoring superceded attic: $rcs" | |
| 51 | - | |
| 52 | - # TODO/CHECK. My method of co'ing exact file revisions per | |
| 53 | - # the info in the collected csets has the flaw that I may | |
| 54 | - # have to know exactly when what archive file to use, see | |
| 55 | - # above. It might be better to use the info only to gather | |
| 56 | - # when csets begin and end, and then to co complete slices | |
| 57 | - # per exact timestamp (-D) instead of file revisions | |
| 58 | - # (-r). The flaw in that is that csets can occur in the | |
| 59 | - # same second (trf, memchan - check for examples). For | |
| 60 | - # that exact checkout may be needed to recreate exact | |
| 61 | - # sequence of changes. Grr. Six of one ... | |
| 62 | - | |
| 63 | - continue | |
| 64 | - } | |
| 65 | - | |
| 66 | - lappend r $rcs $f | |
| 67 | - incr n | |
| 68 | - progress 0 cvs $n {} | |
| 69 | - } | |
| 70 | - | |
| 71 | - $t destroy | |
| 72 | - return $r | |
| 73 | -} | |
| 74 | - | |
| 75 | -# ----------------------------------------------------------------------------- | |
| 76 | -# Internals | |
| 77 | - | |
| 78 | -proc ::vc::cvs::ws::files::UserFile {rcs iav} { | |
| 79 | - upvar 1 $iav isattic | |
| 80 | - | |
| 81 | - # Derive the regular path from the rcs path. Meaning: Chop of the | |
| 82 | - # ",v" suffix, and remove a possible "Attic". | |
| 83 | - | |
| 84 | - set f [string range $rcs 0 end-2] | |
| 85 | - | |
| 86 | - if {"Attic" eq [lindex [file split $rcs] end-1]} { | |
| 87 | - | |
| 88 | - # The construction below ensures that Attic/X maps to X | |
| 89 | - # instead of ./X. Otherwise, Y/Attic/X maps to Y/X. | |
| 90 | - | |
| 91 | - set fx [file dirname [file dirname $f]] | |
| 92 | - set f [file tail $f] | |
| 93 | - if {$fx ne "."} { set f [file join $fx $f] } | |
| 94 | - | |
| 95 | - set isattic 1 | |
| 96 | - } else { | |
| 97 | - set isattic 0 | |
| 98 | - } | |
| 99 | - | |
| 100 | - return $f | |
| 101 | -} | |
| 102 | - | |
| 103 | -# ----------------------------------------------------------------------------- | |
| 104 | - | |
| 105 | -namespace eval ::vc::cvs::ws::files { | |
| 106 | - namespace export find | |
| 107 | -} | |
| 108 | - | |
| 109 | -# ----------------------------------------------------------------------------- | |
| 110 | -# Ready | |
| 111 | - | |
| 112 | -package provide vc::cvs::ws::files 1.0 | |
| 113 | -return |
| --- a/tools/lib/cvs_files.tcl | |
| +++ b/tools/lib/cvs_files.tcl | |
| @@ -1,113 +0,0 @@ | |
| 1 | # ----------------------------------------------------------------------------- |
| 2 | # Repository management (CVS), archive files |
| 3 | |
| 4 | # ----------------------------------------------------------------------------- |
| 5 | # Requirements |
| 6 | |
| 7 | package require Tcl 8.4 |
| 8 | package require fileutil::traverse ; # Tcllib (traverse directory hierarchy) |
| 9 | package require vc::tools::log ; # User feedback |
| 10 | |
| 11 | namespace eval ::vc::cvs::ws::files { |
| 12 | namespace import ::vc::tools::log::write |
| 13 | namespace import ::vc::tools::log::progress |
| 14 | } |
| 15 | |
| 16 | # ----------------------------------------------------------------------------- |
| 17 | # API |
| 18 | |
| 19 | # vc::cvs::ws::files::find path - Find all RCS archives under the path. |
| 20 | |
| 21 | # ----------------------------------------------------------------------------- |
| 22 | # API Implementation |
| 23 | |
| 24 | proc ::vc::cvs::ws::files::find {path} { |
| 25 | |
| 26 | write 0 cvs "Scanning directory hierarchy $path ..." |
| 27 | |
| 28 | set t [fileutil::traverse %AUTO% $path] |
| 29 | set n 0 |
| 30 | set r {} |
| 31 | |
| 32 | $t foreach rcs { |
| 33 | if {![string match *,v $rcs]} continue |
| 34 | |
| 35 | # Now make rcs is relative to the base/project |
| 36 | set rcs [fileutil::stripPath $path $rcs] |
| 37 | |
| 38 | if {[string match CVSROOT/* $rcs]} { |
| 39 | write 2 cvs "Ignoring administrative file: $rcs" |
| 40 | continue |
| 41 | } |
| 42 | |
| 43 | set f [UserFile $rcs isattic] |
| 44 | |
| 45 | if {$isattic && [file exists $path/$f,v]} { |
| 46 | # We have a regular archive and an Attic archive refering |
| 47 | # to the same user visible file. Ignore the file in the |
| 48 | # Attic. |
| 49 | |
| 50 | write 2 cvs "Ignoring superceded attic: $rcs" |
| 51 | |
| 52 | # TODO/CHECK. My method of co'ing exact file revisions per |
| 53 | # the info in the collected csets has the flaw that I may |
| 54 | # have to know exactly when what archive file to use, see |
| 55 | # above. It might be better to use the info only to gather |
| 56 | # when csets begin and end, and then to co complete slices |
| 57 | # per exact timestamp (-D) instead of file revisions |
| 58 | # (-r). The flaw in that is that csets can occur in the |
| 59 | # same second (trf, memchan - check for examples). For |
| 60 | # that exact checkout may be needed to recreate exact |
| 61 | # sequence of changes. Grr. Six of one ... |
| 62 | |
| 63 | continue |
| 64 | } |
| 65 | |
| 66 | lappend r $rcs $f |
| 67 | incr n |
| 68 | progress 0 cvs $n {} |
| 69 | } |
| 70 | |
| 71 | $t destroy |
| 72 | return $r |
| 73 | } |
| 74 | |
| 75 | # ----------------------------------------------------------------------------- |
| 76 | # Internals |
| 77 | |
| 78 | proc ::vc::cvs::ws::files::UserFile {rcs iav} { |
| 79 | upvar 1 $iav isattic |
| 80 | |
| 81 | # Derive the regular path from the rcs path. Meaning: Chop of the |
| 82 | # ",v" suffix, and remove a possible "Attic". |
| 83 | |
| 84 | set f [string range $rcs 0 end-2] |
| 85 | |
| 86 | if {"Attic" eq [lindex [file split $rcs] end-1]} { |
| 87 | |
| 88 | # The construction below ensures that Attic/X maps to X |
| 89 | # instead of ./X. Otherwise, Y/Attic/X maps to Y/X. |
| 90 | |
| 91 | set fx [file dirname [file dirname $f]] |
| 92 | set f [file tail $f] |
| 93 | if {$fx ne "."} { set f [file join $fx $f] } |
| 94 | |
| 95 | set isattic 1 |
| 96 | } else { |
| 97 | set isattic 0 |
| 98 | } |
| 99 | |
| 100 | return $f |
| 101 | } |
| 102 | |
| 103 | # ----------------------------------------------------------------------------- |
| 104 | |
| 105 | namespace eval ::vc::cvs::ws::files { |
| 106 | namespace export find |
| 107 | } |
| 108 | |
| 109 | # ----------------------------------------------------------------------------- |
| 110 | # Ready |
| 111 | |
| 112 | package provide vc::cvs::ws::files 1.0 |
| 113 | return |
| --- a/tools/lib/cvs_files.tcl | |
| +++ b/tools/lib/cvs_files.tcl | |
| @@ -1,113 +0,0 @@ | |
D
tools/lib/cvs_timeline.tcl
-87
| --- a/tools/lib/cvs_timeline.tcl | ||
| +++ b/tools/lib/cvs_timeline.tcl | ||
| @@ -1,87 +0,0 @@ | ||
| 1 | -# ----------------------------------------------------------------------------- | |
| 2 | -# Repository management (CVS), timeline of events. | |
| 3 | - | |
| 4 | -# ----------------------------------------------------------------------------- | |
| 5 | -# Requirements | |
| 6 | - | |
| 7 | -package require Tcl 8.4 | |
| 8 | - | |
| 9 | -namespace eval ::vc::cvs::ws::timeline {} | |
| 10 | - | |
| 11 | -# ----------------------------------------------------------------------------- | |
| 12 | -# API | |
| 13 | - | |
| 14 | -# vc::cvs::ws::timeline::add date file revision operation author commit-msg | |
| 15 | -# vc::cvs::ws::timeline::foreach date file revision operation author commit-msg script | |
| 16 | - | |
| 17 | -# Add entries to the timeline, and iterate over the timeline in proper order. | |
| 18 | - | |
| 19 | -# ----------------------------------------------------------------------------- | |
| 20 | -# API Implementation | |
| 21 | - | |
| 22 | -proc ::vc::cvs::ws::timeline::add {date file revision operation author cmsg} { | |
| 23 | - variable timeline | |
| 24 | - lappend timeline($date) [list $file $revision $operation $author $cmsg] | |
| 25 | - return | |
| 26 | -} | |
| 27 | - | |
| 28 | -proc ::vc::cvs::ws::timeline::foreach {dv fv rv ov av cv script} { | |
| 29 | - upvar 1 $dv date $fv file $rv revision $ov operation $av author $cv cmsg | |
| 30 | - variable timeline | |
| 31 | - | |
| 32 | - ::foreach date [lsort -dict [array names timeline]] { | |
| 33 | - # file revision operation author commitmsg | |
| 34 | - # 0 1 2 3 4/end | |
| 35 | - # d e b c a | |
| 36 | - | |
| 37 | - set entries [lsort -index 1 \ | |
| 38 | - [lsort -index 0 \ | |
| 39 | - [lsort -index 3 \ | |
| 40 | - [lsort -index 2 \ | |
| 41 | - [lsort -index end \ | |
| 42 | - $timeline($date)]]]]] | |
| 43 | - #puts [join $entries \n] | |
| 44 | - | |
| 45 | - ::foreach entry $entries { | |
| 46 | - lassign $entry file revision operation author cmsg | |
| 47 | - set code [catch {uplevel 1 $script} res] | |
| 48 | - | |
| 49 | - # 0 - ok, 1 - error, 2 - return, 3 - break, 4 - continue | |
| 50 | - switch -- $code { | |
| 51 | - 0 {} | |
| 52 | - 1 { return -errorcode $::errorCode -errorinfo $::errorInfo -code error $res } | |
| 53 | - 2 {} | |
| 54 | - 3 { return } | |
| 55 | - 4 {} | |
| 56 | - default { | |
| 57 | - return -code $code $result | |
| 58 | - } | |
| 59 | - } | |
| 60 | - } | |
| 61 | - } | |
| 62 | - return | |
| 63 | -} | |
| 64 | - | |
| 65 | -# ----------------------------------------------------------------------------- | |
| 66 | -# Internals | |
| 67 | - | |
| 68 | -proc ::vc::cvs::ws::timeline::lassign {l args} { | |
| 69 | - ::foreach v $args {upvar 1 $v $v} | |
| 70 | - ::foreach $args $l break | |
| 71 | - return | |
| 72 | -} | |
| 73 | - | |
| 74 | -namespace eval ::vc::cvs::ws::timeline { | |
| 75 | - # Timeline: map (date -> list (file revision operation author commitmsg)) | |
| 76 | - | |
| 77 | - variable timeline | |
| 78 | - array set timeline {} | |
| 79 | - | |
| 80 | - namespace export add | |
| 81 | -} | |
| 82 | - | |
| 83 | -# ----------------------------------------------------------------------------- | |
| 84 | -# Ready | |
| 85 | - | |
| 86 | -package provide vc::cvs::ws::timeline 1.0 | |
| 87 | -return |
| --- a/tools/lib/cvs_timeline.tcl | |
| +++ b/tools/lib/cvs_timeline.tcl | |
| @@ -1,87 +0,0 @@ | |
| 1 | # ----------------------------------------------------------------------------- |
| 2 | # Repository management (CVS), timeline of events. |
| 3 | |
| 4 | # ----------------------------------------------------------------------------- |
| 5 | # Requirements |
| 6 | |
| 7 | package require Tcl 8.4 |
| 8 | |
| 9 | namespace eval ::vc::cvs::ws::timeline {} |
| 10 | |
| 11 | # ----------------------------------------------------------------------------- |
| 12 | # API |
| 13 | |
| 14 | # vc::cvs::ws::timeline::add date file revision operation author commit-msg |
| 15 | # vc::cvs::ws::timeline::foreach date file revision operation author commit-msg script |
| 16 | |
| 17 | # Add entries to the timeline, and iterate over the timeline in proper order. |
| 18 | |
| 19 | # ----------------------------------------------------------------------------- |
| 20 | # API Implementation |
| 21 | |
| 22 | proc ::vc::cvs::ws::timeline::add {date file revision operation author cmsg} { |
| 23 | variable timeline |
| 24 | lappend timeline($date) [list $file $revision $operation $author $cmsg] |
| 25 | return |
| 26 | } |
| 27 | |
| 28 | proc ::vc::cvs::ws::timeline::foreach {dv fv rv ov av cv script} { |
| 29 | upvar 1 $dv date $fv file $rv revision $ov operation $av author $cv cmsg |
| 30 | variable timeline |
| 31 | |
| 32 | ::foreach date [lsort -dict [array names timeline]] { |
| 33 | # file revision operation author commitmsg |
| 34 | # 0 1 2 3 4/end |
| 35 | # d e b c a |
| 36 | |
| 37 | set entries [lsort -index 1 \ |
| 38 | [lsort -index 0 \ |
| 39 | [lsort -index 3 \ |
| 40 | [lsort -index 2 \ |
| 41 | [lsort -index end \ |
| 42 | $timeline($date)]]]]] |
| 43 | #puts [join $entries \n] |
| 44 | |
| 45 | ::foreach entry $entries { |
| 46 | lassign $entry file revision operation author cmsg |
| 47 | set code [catch {uplevel 1 $script} res] |
| 48 | |
| 49 | # 0 - ok, 1 - error, 2 - return, 3 - break, 4 - continue |
| 50 | switch -- $code { |
| 51 | 0 {} |
| 52 | 1 { return -errorcode $::errorCode -errorinfo $::errorInfo -code error $res } |
| 53 | 2 {} |
| 54 | 3 { return } |
| 55 | 4 {} |
| 56 | default { |
| 57 | return -code $code $result |
| 58 | } |
| 59 | } |
| 60 | } |
| 61 | } |
| 62 | return |
| 63 | } |
| 64 | |
| 65 | # ----------------------------------------------------------------------------- |
| 66 | # Internals |
| 67 | |
| 68 | proc ::vc::cvs::ws::timeline::lassign {l args} { |
| 69 | ::foreach v $args {upvar 1 $v $v} |
| 70 | ::foreach $args $l break |
| 71 | return |
| 72 | } |
| 73 | |
| 74 | namespace eval ::vc::cvs::ws::timeline { |
| 75 | # Timeline: map (date -> list (file revision operation author commitmsg)) |
| 76 | |
| 77 | variable timeline |
| 78 | array set timeline {} |
| 79 | |
| 80 | namespace export add |
| 81 | } |
| 82 | |
| 83 | # ----------------------------------------------------------------------------- |
| 84 | # Ready |
| 85 | |
| 86 | package provide vc::cvs::ws::timeline 1.0 |
| 87 | return |
| --- a/tools/lib/cvs_timeline.tcl | |
| +++ b/tools/lib/cvs_timeline.tcl | |
| @@ -1,87 +0,0 @@ | |
D
tools/lib/fossil.tcl
-231
| --- a/tools/lib/fossil.tcl | ||
| +++ b/tools/lib/fossil.tcl | ||
| @@ -1,231 +0,0 @@ | ||
| 1 | -# ----------------------------------------------------------------------------- | |
| 2 | -# Repository management (FOSSIL) | |
| 3 | - | |
| 4 | -# ----------------------------------------------------------------------------- | |
| 5 | -# Requirements | |
| 6 | - | |
| 7 | -package require Tcl 8.4 | |
| 8 | -package require vc::tools::log ; # User feedback | |
| 9 | -package require vc::fossil::cmd ; # Access to fossil application. | |
| 10 | - | |
| 11 | -namespace eval ::vc::fossil::ws { | |
| 12 | - vc::tools::log::system fossil | |
| 13 | - namespace import ::vc::tools::log::write | |
| 14 | - namespace import ::vc::fossil::cmd::do | |
| 15 | - namespace import ::vc::fossil::cmd::dova | |
| 16 | -} | |
| 17 | - | |
| 18 | -# ----------------------------------------------------------------------------- | |
| 19 | -# API | |
| 20 | - | |
| 21 | -# vc::fossil::ws::configure key value - Configure the subsystem. | |
| 22 | -# vc::fossil::ws::begin src - Start new workspace for directory | |
| 23 | -# vc::fossil::ws::done dst - Close workspace and copy to destination. | |
| 24 | -# vc::fossil::ws::setup uuid - Move workspace to an older revision. | |
| 25 | -# vc::fossil::ws::commit cset usr time msg - Look for changes and commit as new revision. | |
| 26 | - | |
| 27 | -# Configuration keys: | |
| 28 | -# | |
| 29 | -# -nosign bool default 0 (= sign imported changesets) | |
| 30 | -# -breakat num default empty, no breakpoint. | |
| 31 | -# Otherwise stop before committing the identified changeset. | |
| 32 | -# -saveto path default empty, no saving. | |
| 33 | -# Otherwise save the commit command to a file. | |
| 34 | -# -appname string Default empty. Text to add to all commit messages. | |
| 35 | -# -ignore cmdprefix Command to check if a file is relevant to the commit or not. | |
| 36 | -# Signature: cmdprefix path -> bool; true => ignore. | |
| 37 | - | |
| 38 | -# ----------------------------------------------------------------------------- | |
| 39 | -# API Implementation | |
| 40 | - | |
| 41 | -proc ::vc::fossil::ws::configure {key value} { | |
| 42 | - variable nosign | |
| 43 | - variable breakat | |
| 44 | - variable saveto | |
| 45 | - variable appname | |
| 46 | - variable ignore | |
| 47 | - | |
| 48 | - switch -exact -- $key { | |
| 49 | - -appname { set appname $value } | |
| 50 | - -breakat { set breakat $value } | |
| 51 | - -ignore { set ignore $value } | |
| 52 | - -nosign { | |
| 53 | - if {![string is boolean -strict $value]} { | |
| 54 | - return -code error "Expected boolean, got \"$value\"" | |
| 55 | - } | |
| 56 | - set nosign $value | |
| 57 | - } | |
| 58 | - -saveto { set saveto $value } | |
| 59 | - default { | |
| 60 | - return -code error "Unknown switch $key, expected one of \ | |
| 61 | - -appname, -breakat, -ignore, -nosign, or -saveto" | |
| 62 | - } | |
| 63 | - } | |
| 64 | - return | |
| 65 | -} | |
| 66 | - | |
| 67 | -proc ::vc::fossil::ws::begin {origin} { | |
| 68 | - variable base [file normalize $origin] | |
| 69 | - variable rp [file normalize [fileutil::tempfile import2_fsl_rp_]] | |
| 70 | - | |
| 71 | - cd $origin | |
| 72 | - | |
| 73 | - dova new $rp ; # create and ... | |
| 74 | - dova open $rp ; # ... connect | |
| 75 | - | |
| 76 | - write 0 fossil "Repository: $rp" | |
| 77 | - return | |
| 78 | -} | |
| 79 | - | |
| 80 | -proc ::vc::fossil::ws::done {destination} { | |
| 81 | - variable rp | |
| 82 | - file rename -force $rp $destination | |
| 83 | - set rp {} | |
| 84 | - return | |
| 85 | -} | |
| 86 | - | |
| 87 | -proc ::vc::fossil::ws::setup {uuid} { | |
| 88 | - variable lastuuid | |
| 89 | - if {$uuid eq $lastuuid} return | |
| 90 | - write 1 fossil "=> goto $uuid" | |
| 91 | - dova update $uuid | |
| 92 | - set lastuuid $uuid | |
| 93 | - return | |
| 94 | -} | |
| 95 | - | |
| 96 | -proc ::vc::fossil::ws::commit {cset user timestamp message} { | |
| 97 | - variable lastuuid | |
| 98 | - variable base | |
| 99 | - | |
| 100 | - cd $base | |
| 101 | - | |
| 102 | - # Commit the current state of the workspace. Scan for new and | |
| 103 | - # removed files and issue the appropriate fossil add/rm commands | |
| 104 | - # before actually comitting. | |
| 105 | - | |
| 106 | - HandleChanges added removed changed | |
| 107 | - | |
| 108 | - # Now commit, using the provided meta data, and capture the uuid | |
| 109 | - # of the new baseline. | |
| 110 | - | |
| 111 | - set cmd [Command $cset [Message $user $timestamp $message]] | |
| 112 | - | |
| 113 | - if {[catch { | |
| 114 | - do $cmd | |
| 115 | - } line]} { | |
| 116 | - if {![string match "*nothing has changed*" $line]} { | |
| 117 | - return -code error $line | |
| 118 | - } | |
| 119 | - | |
| 120 | - # 'Nothing changed' can happen for changesets containing only | |
| 121 | - # dead-first revisions of one or more files. For fossil we | |
| 122 | - # re-use the last baseline. TODO: Mark them as branchpoint, | |
| 123 | - # and for what file. | |
| 124 | - | |
| 125 | - write 1 fossil "UNCHANGED, keeping last" | |
| 126 | - | |
| 127 | - return [list $lastuuid 0 0 0] | |
| 128 | - } | |
| 129 | - | |
| 130 | - # Extract the uuid of the new revision. | |
| 131 | - regsub -nocase -- {^\s*New_Version:\s*} [string trim $line] {} uuid | |
| 132 | - | |
| 133 | - set lastuuid $uuid | |
| 134 | - return [list $uuid $added $removed $changed] | |
| 135 | -} | |
| 136 | - | |
| 137 | -# ----------------------------------------------------------------------------- | |
| 138 | -# Internal helper commands, and data structures. | |
| 139 | - | |
| 140 | -proc ::vc::fossil::ws::HandleChanges {av rv cv} { | |
| 141 | - upvar 1 $av added $rv removed $cv changed | |
| 142 | - | |
| 143 | - set added 0 | |
| 144 | - set removed 0 | |
| 145 | - set changed 0 | |
| 146 | - | |
| 147 | - # Look for modified/removed files first, that way there won't be | |
| 148 | - # any ADDED indicators. Nor REMOVED, only EDITED. Removed files | |
| 149 | - # show up as EDITED while they are not registered as removed. | |
| 150 | - | |
| 151 | - foreach line [split [do changes] \n] { | |
| 152 | - regsub {^\s*EDITED\s*} $line {} path | |
| 153 | - if {[Ignore $path]} continue | |
| 154 | - | |
| 155 | - if {![file exists $path]} { | |
| 156 | - dova rm $path | |
| 157 | - incr removed | |
| 158 | - write 2 fossil "- $path" | |
| 159 | - } else { | |
| 160 | - incr changed | |
| 161 | - write 2 fossil "* $path" | |
| 162 | - } | |
| 163 | - } | |
| 164 | - | |
| 165 | - # Now look for unregistered added files. | |
| 166 | - | |
| 167 | - foreach path [split [do extra] \n] { | |
| 168 | - if {[Ignore $path]} continue | |
| 169 | - dova add $path | |
| 170 | - incr added | |
| 171 | - write 2 fossil "+ $path" | |
| 172 | - } | |
| 173 | - | |
| 174 | - return | |
| 175 | -} | |
| 176 | - | |
| 177 | -proc ::vc::fossil::ws::Message {user timestamp message} { | |
| 178 | - variable appname | |
| 179 | - set lines {} | |
| 180 | - lappend lines "-- Originally by $user @ $timestamp" | |
| 181 | - if {$appname ne ""} { | |
| 182 | - lappend lines "-- Imported by $appname" | |
| 183 | - } | |
| 184 | - lappend lines [string trim $message] | |
| 185 | - return [join $lines \n] | |
| 186 | -} | |
| 187 | - | |
| 188 | -proc ::vc::fossil::ws::Command {cset message} { | |
| 189 | - variable nosign | |
| 190 | - variable saveto | |
| 191 | - variable breakat | |
| 192 | - | |
| 193 | - set cmd [list commit -m $message] | |
| 194 | - | |
| 195 | - if {$nosign} { lappend cmd --nosign } | |
| 196 | - if {$saveto ne ""} { fileutil::writeFile $saveto "$cmd\n" } | |
| 197 | - | |
| 198 | - if {$breakat eq $cset} { | |
| 199 | - write 0 fossil Stopped. | |
| 200 | - exit 0 | |
| 201 | - } | |
| 202 | - | |
| 203 | - return $cmd | |
| 204 | -} | |
| 205 | - | |
| 206 | -proc ::vc::fossil::ws::Ignore {path} { | |
| 207 | - variable ignore | |
| 208 | - if {![llength $ignore]} {return 0} | |
| 209 | - return [uplevel #0 [linsert $ignore end $path]] | |
| 210 | -} | |
| 211 | - | |
| 212 | -namespace eval ::vc::fossil::ws { | |
| 213 | - # Configuration settings. | |
| 214 | - variable nosign 0 ; # Sign imported changesets | |
| 215 | - variable breakat {} ; # Do not stop | |
| 216 | - variable saveto {} ; # Do not save commit message | |
| 217 | - variable appname {} ; # Name of importer application using the package. | |
| 218 | - variable ignore {} ; # No files to ignore. | |
| 219 | - | |
| 220 | - variable base {} ; # Workspace directory | |
| 221 | - variable rp {} ; # Repository the package works on. | |
| 222 | - variable lastuuid {} ; # Uuid of last imported changeset. | |
| 223 | - | |
| 224 | - namespace export configure begin done setup commit | |
| 225 | -} | |
| 226 | - | |
| 227 | -# ----------------------------------------------------------------------------- | |
| 228 | -# Ready | |
| 229 | - | |
| 230 | -package provide vc::fossil::ws 1.0 | |
| 231 | -return |
| --- a/tools/lib/fossil.tcl | |
| +++ b/tools/lib/fossil.tcl | |
| @@ -1,231 +0,0 @@ | |
| 1 | # ----------------------------------------------------------------------------- |
| 2 | # Repository management (FOSSIL) |
| 3 | |
| 4 | # ----------------------------------------------------------------------------- |
| 5 | # Requirements |
| 6 | |
| 7 | package require Tcl 8.4 |
| 8 | package require vc::tools::log ; # User feedback |
| 9 | package require vc::fossil::cmd ; # Access to fossil application. |
| 10 | |
| 11 | namespace eval ::vc::fossil::ws { |
| 12 | vc::tools::log::system fossil |
| 13 | namespace import ::vc::tools::log::write |
| 14 | namespace import ::vc::fossil::cmd::do |
| 15 | namespace import ::vc::fossil::cmd::dova |
| 16 | } |
| 17 | |
| 18 | # ----------------------------------------------------------------------------- |
| 19 | # API |
| 20 | |
| 21 | # vc::fossil::ws::configure key value - Configure the subsystem. |
| 22 | # vc::fossil::ws::begin src - Start new workspace for directory |
| 23 | # vc::fossil::ws::done dst - Close workspace and copy to destination. |
| 24 | # vc::fossil::ws::setup uuid - Move workspace to an older revision. |
| 25 | # vc::fossil::ws::commit cset usr time msg - Look for changes and commit as new revision. |
| 26 | |
| 27 | # Configuration keys: |
| 28 | # |
| 29 | # -nosign bool default 0 (= sign imported changesets) |
| 30 | # -breakat num default empty, no breakpoint. |
| 31 | # Otherwise stop before committing the identified changeset. |
| 32 | # -saveto path default empty, no saving. |
| 33 | # Otherwise save the commit command to a file. |
| 34 | # -appname string Default empty. Text to add to all commit messages. |
| 35 | # -ignore cmdprefix Command to check if a file is relevant to the commit or not. |
| 36 | # Signature: cmdprefix path -> bool; true => ignore. |
| 37 | |
| 38 | # ----------------------------------------------------------------------------- |
| 39 | # API Implementation |
| 40 | |
| 41 | proc ::vc::fossil::ws::configure {key value} { |
| 42 | variable nosign |
| 43 | variable breakat |
| 44 | variable saveto |
| 45 | variable appname |
| 46 | variable ignore |
| 47 | |
| 48 | switch -exact -- $key { |
| 49 | -appname { set appname $value } |
| 50 | -breakat { set breakat $value } |
| 51 | -ignore { set ignore $value } |
| 52 | -nosign { |
| 53 | if {![string is boolean -strict $value]} { |
| 54 | return -code error "Expected boolean, got \"$value\"" |
| 55 | } |
| 56 | set nosign $value |
| 57 | } |
| 58 | -saveto { set saveto $value } |
| 59 | default { |
| 60 | return -code error "Unknown switch $key, expected one of \ |
| 61 | -appname, -breakat, -ignore, -nosign, or -saveto" |
| 62 | } |
| 63 | } |
| 64 | return |
| 65 | } |
| 66 | |
| 67 | proc ::vc::fossil::ws::begin {origin} { |
| 68 | variable base [file normalize $origin] |
| 69 | variable rp [file normalize [fileutil::tempfile import2_fsl_rp_]] |
| 70 | |
| 71 | cd $origin |
| 72 | |
| 73 | dova new $rp ; # create and ... |
| 74 | dova open $rp ; # ... connect |
| 75 | |
| 76 | write 0 fossil "Repository: $rp" |
| 77 | return |
| 78 | } |
| 79 | |
| 80 | proc ::vc::fossil::ws::done {destination} { |
| 81 | variable rp |
| 82 | file rename -force $rp $destination |
| 83 | set rp {} |
| 84 | return |
| 85 | } |
| 86 | |
| 87 | proc ::vc::fossil::ws::setup {uuid} { |
| 88 | variable lastuuid |
| 89 | if {$uuid eq $lastuuid} return |
| 90 | write 1 fossil "=> goto $uuid" |
| 91 | dova update $uuid |
| 92 | set lastuuid $uuid |
| 93 | return |
| 94 | } |
| 95 | |
| 96 | proc ::vc::fossil::ws::commit {cset user timestamp message} { |
| 97 | variable lastuuid |
| 98 | variable base |
| 99 | |
| 100 | cd $base |
| 101 | |
| 102 | # Commit the current state of the workspace. Scan for new and |
| 103 | # removed files and issue the appropriate fossil add/rm commands |
| 104 | # before actually comitting. |
| 105 | |
| 106 | HandleChanges added removed changed |
| 107 | |
| 108 | # Now commit, using the provided meta data, and capture the uuid |
| 109 | # of the new baseline. |
| 110 | |
| 111 | set cmd [Command $cset [Message $user $timestamp $message]] |
| 112 | |
| 113 | if {[catch { |
| 114 | do $cmd |
| 115 | } line]} { |
| 116 | if {![string match "*nothing has changed*" $line]} { |
| 117 | return -code error $line |
| 118 | } |
| 119 | |
| 120 | # 'Nothing changed' can happen for changesets containing only |
| 121 | # dead-first revisions of one or more files. For fossil we |
| 122 | # re-use the last baseline. TODO: Mark them as branchpoint, |
| 123 | # and for what file. |
| 124 | |
| 125 | write 1 fossil "UNCHANGED, keeping last" |
| 126 | |
| 127 | return [list $lastuuid 0 0 0] |
| 128 | } |
| 129 | |
| 130 | # Extract the uuid of the new revision. |
| 131 | regsub -nocase -- {^\s*New_Version:\s*} [string trim $line] {} uuid |
| 132 | |
| 133 | set lastuuid $uuid |
| 134 | return [list $uuid $added $removed $changed] |
| 135 | } |
| 136 | |
| 137 | # ----------------------------------------------------------------------------- |
| 138 | # Internal helper commands, and data structures. |
| 139 | |
| 140 | proc ::vc::fossil::ws::HandleChanges {av rv cv} { |
| 141 | upvar 1 $av added $rv removed $cv changed |
| 142 | |
| 143 | set added 0 |
| 144 | set removed 0 |
| 145 | set changed 0 |
| 146 | |
| 147 | # Look for modified/removed files first, that way there won't be |
| 148 | # any ADDED indicators. Nor REMOVED, only EDITED. Removed files |
| 149 | # show up as EDITED while they are not registered as removed. |
| 150 | |
| 151 | foreach line [split [do changes] \n] { |
| 152 | regsub {^\s*EDITED\s*} $line {} path |
| 153 | if {[Ignore $path]} continue |
| 154 | |
| 155 | if {![file exists $path]} { |
| 156 | dova rm $path |
| 157 | incr removed |
| 158 | write 2 fossil "- $path" |
| 159 | } else { |
| 160 | incr changed |
| 161 | write 2 fossil "* $path" |
| 162 | } |
| 163 | } |
| 164 | |
| 165 | # Now look for unregistered added files. |
| 166 | |
| 167 | foreach path [split [do extra] \n] { |
| 168 | if {[Ignore $path]} continue |
| 169 | dova add $path |
| 170 | incr added |
| 171 | write 2 fossil "+ $path" |
| 172 | } |
| 173 | |
| 174 | return |
| 175 | } |
| 176 | |
| 177 | proc ::vc::fossil::ws::Message {user timestamp message} { |
| 178 | variable appname |
| 179 | set lines {} |
| 180 | lappend lines "-- Originally by $user @ $timestamp" |
| 181 | if {$appname ne ""} { |
| 182 | lappend lines "-- Imported by $appname" |
| 183 | } |
| 184 | lappend lines [string trim $message] |
| 185 | return [join $lines \n] |
| 186 | } |
| 187 | |
| 188 | proc ::vc::fossil::ws::Command {cset message} { |
| 189 | variable nosign |
| 190 | variable saveto |
| 191 | variable breakat |
| 192 | |
| 193 | set cmd [list commit -m $message] |
| 194 | |
| 195 | if {$nosign} { lappend cmd --nosign } |
| 196 | if {$saveto ne ""} { fileutil::writeFile $saveto "$cmd\n" } |
| 197 | |
| 198 | if {$breakat eq $cset} { |
| 199 | write 0 fossil Stopped. |
| 200 | exit 0 |
| 201 | } |
| 202 | |
| 203 | return $cmd |
| 204 | } |
| 205 | |
| 206 | proc ::vc::fossil::ws::Ignore {path} { |
| 207 | variable ignore |
| 208 | if {![llength $ignore]} {return 0} |
| 209 | return [uplevel #0 [linsert $ignore end $path]] |
| 210 | } |
| 211 | |
| 212 | namespace eval ::vc::fossil::ws { |
| 213 | # Configuration settings. |
| 214 | variable nosign 0 ; # Sign imported changesets |
| 215 | variable breakat {} ; # Do not stop |
| 216 | variable saveto {} ; # Do not save commit message |
| 217 | variable appname {} ; # Name of importer application using the package. |
| 218 | variable ignore {} ; # No files to ignore. |
| 219 | |
| 220 | variable base {} ; # Workspace directory |
| 221 | variable rp {} ; # Repository the package works on. |
| 222 | variable lastuuid {} ; # Uuid of last imported changeset. |
| 223 | |
| 224 | namespace export configure begin done setup commit |
| 225 | } |
| 226 | |
| 227 | # ----------------------------------------------------------------------------- |
| 228 | # Ready |
| 229 | |
| 230 | package provide vc::fossil::ws 1.0 |
| 231 | return |
| --- a/tools/lib/fossil.tcl | |
| +++ b/tools/lib/fossil.tcl | |
| @@ -1,231 +0,0 @@ | |
D
tools/lib/fossil_cmd.tcl
-49
| --- a/tools/lib/fossil_cmd.tcl | ||
| +++ b/tools/lib/fossil_cmd.tcl | ||
| @@ -1,49 +0,0 @@ | ||
| 1 | -# ----------------------------------------------------------------------------- | |
| 2 | -# Access to the external fossil command. | |
| 3 | - | |
| 4 | -# ----------------------------------------------------------------------------- | |
| 5 | -# Requirements | |
| 6 | - | |
| 7 | -package require Tcl 8.4 | |
| 8 | -namespace eval ::vc::fossil::cmd {} | |
| 9 | - | |
| 10 | -# ----------------------------------------------------------------------------- | |
| 11 | -# API | |
| 12 | - | |
| 13 | -# vc::fossil::cmd::dova word... - Run a fossil command specified as var args | |
| 14 | -# vc::fossil::cmd::do words - Run a fossil command specified in a list. | |
| 15 | - | |
| 16 | -# ----------------------------------------------------------------------------- | |
| 17 | -# API Implementation | |
| 18 | - | |
| 19 | -proc ::vc::fossil::cmd::dova {args} {do $args} | |
| 20 | - | |
| 21 | -proc ::vc::fossil::cmd::do {words} { | |
| 22 | - variable cmd | |
| 23 | - if {![llength $words]} { | |
| 24 | - return -code error "Empty fossil command" | |
| 25 | - } | |
| 26 | - # 8.5: exec $cmd {*}$words | |
| 27 | - return [eval [linsert $words 0 exec $cmd]] | |
| 28 | -} | |
| 29 | - | |
| 30 | -# ----------------------------------------------------------------------------- | |
| 31 | -# Internals. | |
| 32 | - | |
| 33 | -namespace eval ::vc::fossil::cmd { | |
| 34 | - # Locate external fossil application. | |
| 35 | - variable cmd [auto_execok fossil] | |
| 36 | - | |
| 37 | - # Bail out if not found. | |
| 38 | - if {![llength $::vc::fossil::cmd::cmd]} { | |
| 39 | - return -code error "Fossil application not found." | |
| 40 | - } | |
| 41 | - | |
| 42 | - namespace export do dova | |
| 43 | -} | |
| 44 | - | |
| 45 | -# ----------------------------------------------------------------------------- | |
| 46 | -# Ready | |
| 47 | - | |
| 48 | -package provide vc::fossil::cmd 1.0 | |
| 49 | -return |
| --- a/tools/lib/fossil_cmd.tcl | |
| +++ b/tools/lib/fossil_cmd.tcl | |
| @@ -1,49 +0,0 @@ | |
| 1 | # ----------------------------------------------------------------------------- |
| 2 | # Access to the external fossil command. |
| 3 | |
| 4 | # ----------------------------------------------------------------------------- |
| 5 | # Requirements |
| 6 | |
| 7 | package require Tcl 8.4 |
| 8 | namespace eval ::vc::fossil::cmd {} |
| 9 | |
| 10 | # ----------------------------------------------------------------------------- |
| 11 | # API |
| 12 | |
| 13 | # vc::fossil::cmd::dova word... - Run a fossil command specified as var args |
| 14 | # vc::fossil::cmd::do words - Run a fossil command specified in a list. |
| 15 | |
| 16 | # ----------------------------------------------------------------------------- |
| 17 | # API Implementation |
| 18 | |
| 19 | proc ::vc::fossil::cmd::dova {args} {do $args} |
| 20 | |
| 21 | proc ::vc::fossil::cmd::do {words} { |
| 22 | variable cmd |
| 23 | if {![llength $words]} { |
| 24 | return -code error "Empty fossil command" |
| 25 | } |
| 26 | # 8.5: exec $cmd {*}$words |
| 27 | return [eval [linsert $words 0 exec $cmd]] |
| 28 | } |
| 29 | |
| 30 | # ----------------------------------------------------------------------------- |
| 31 | # Internals. |
| 32 | |
| 33 | namespace eval ::vc::fossil::cmd { |
| 34 | # Locate external fossil application. |
| 35 | variable cmd [auto_execok fossil] |
| 36 | |
| 37 | # Bail out if not found. |
| 38 | if {![llength $::vc::fossil::cmd::cmd]} { |
| 39 | return -code error "Fossil application not found." |
| 40 | } |
| 41 | |
| 42 | namespace export do dova |
| 43 | } |
| 44 | |
| 45 | # ----------------------------------------------------------------------------- |
| 46 | # Ready |
| 47 | |
| 48 | package provide vc::fossil::cmd 1.0 |
| 49 | return |
| --- a/tools/lib/fossil_cmd.tcl | |
| +++ b/tools/lib/fossil_cmd.tcl | |
| @@ -1,49 +0,0 @@ | |
D
tools/lib/import_map.tcl
-50
| --- a/tools/lib/import_map.tcl | ||
| +++ b/tools/lib/import_map.tcl | ||
| @@ -1,50 +0,0 @@ | ||
| 1 | -# ----------------------------------------------------------------------------- | |
| 2 | -# Management of the mapping between cvs changesets and fossil uuids. | |
| 3 | - | |
| 4 | -# ----------------------------------------------------------------------------- | |
| 5 | -# Requirements | |
| 6 | - | |
| 7 | -package require Tcl 8.4 | |
| 8 | -package require vc::tools::log ; # User feedback | |
| 9 | - | |
| 10 | -namespace eval ::vc::fossil::import::map { | |
| 11 | - vc::tools::log::system map | |
| 12 | - namespace import ::vc::tools::log::write | |
| 13 | -} | |
| 14 | - | |
| 15 | -# ----------------------------------------------------------------------------- | |
| 16 | -# API | |
| 17 | - | |
| 18 | -# vc::fossil::import::map | |
| 19 | -# set cset uuid - Associate changeset with uuid | |
| 20 | -# get cset -> uuid - Retrieve uuid for changeset. | |
| 21 | - | |
| 22 | -# ----------------------------------------------------------------------------- | |
| 23 | -# API Implementation - Functionality | |
| 24 | - | |
| 25 | -proc ::vc::fossil::import::map::set {cset uuid} { | |
| 26 | - variable map | |
| 27 | - ::set map($cset) $uuid | |
| 28 | - write 2 map "== $uuid" | |
| 29 | - return | |
| 30 | -} | |
| 31 | - | |
| 32 | -proc ::vc::fossil::import::map::get {cset} { | |
| 33 | - variable map | |
| 34 | - return $map($cset) | |
| 35 | -} | |
| 36 | - | |
| 37 | -# ----------------------------------------------------------------------------- | |
| 38 | - | |
| 39 | -namespace eval ::vc::fossil::import::map { | |
| 40 | - variable map ; # Map from csets to uuids | |
| 41 | - array set map {} ; # | |
| 42 | - | |
| 43 | - namespace export get set | |
| 44 | -} | |
| 45 | - | |
| 46 | -# ----------------------------------------------------------------------------- | |
| 47 | -# Ready | |
| 48 | - | |
| 49 | -package provide vc::fossil::import::map 1.0 | |
| 50 | -return |
| --- a/tools/lib/import_map.tcl | |
| +++ b/tools/lib/import_map.tcl | |
| @@ -1,50 +0,0 @@ | |
| 1 | # ----------------------------------------------------------------------------- |
| 2 | # Management of the mapping between cvs changesets and fossil uuids. |
| 3 | |
| 4 | # ----------------------------------------------------------------------------- |
| 5 | # Requirements |
| 6 | |
| 7 | package require Tcl 8.4 |
| 8 | package require vc::tools::log ; # User feedback |
| 9 | |
| 10 | namespace eval ::vc::fossil::import::map { |
| 11 | vc::tools::log::system map |
| 12 | namespace import ::vc::tools::log::write |
| 13 | } |
| 14 | |
| 15 | # ----------------------------------------------------------------------------- |
| 16 | # API |
| 17 | |
| 18 | # vc::fossil::import::map |
| 19 | # set cset uuid - Associate changeset with uuid |
| 20 | # get cset -> uuid - Retrieve uuid for changeset. |
| 21 | |
| 22 | # ----------------------------------------------------------------------------- |
| 23 | # API Implementation - Functionality |
| 24 | |
| 25 | proc ::vc::fossil::import::map::set {cset uuid} { |
| 26 | variable map |
| 27 | ::set map($cset) $uuid |
| 28 | write 2 map "== $uuid" |
| 29 | return |
| 30 | } |
| 31 | |
| 32 | proc ::vc::fossil::import::map::get {cset} { |
| 33 | variable map |
| 34 | return $map($cset) |
| 35 | } |
| 36 | |
| 37 | # ----------------------------------------------------------------------------- |
| 38 | |
| 39 | namespace eval ::vc::fossil::import::map { |
| 40 | variable map ; # Map from csets to uuids |
| 41 | array set map {} ; # |
| 42 | |
| 43 | namespace export get set |
| 44 | } |
| 45 | |
| 46 | # ----------------------------------------------------------------------------- |
| 47 | # Ready |
| 48 | |
| 49 | package provide vc::fossil::import::map 1.0 |
| 50 | return |
| --- a/tools/lib/import_map.tcl | |
| +++ b/tools/lib/import_map.tcl | |
| @@ -1,50 +0,0 @@ | |
D
tools/lib/import_statistics.tcl
-116
| --- a/tools/lib/import_statistics.tcl | ||
| +++ b/tools/lib/import_statistics.tcl | ||
| @@ -1,116 +0,0 @@ | ||
| 1 | -# ----------------------------------------------------------------------------- | |
| 2 | -# Management of statistics for an import run. | |
| 3 | - | |
| 4 | -# ----------------------------------------------------------------------------- | |
| 5 | -# Requirements | |
| 6 | - | |
| 7 | -package require Tcl 8.4 | |
| 8 | -package require vc::tools::log ; # User feedback | |
| 9 | - | |
| 10 | -namespace eval ::vc::fossil::import::stats { | |
| 11 | - vc::tools::log::system stats | |
| 12 | - namespace import ::vc::tools::log::write | |
| 13 | -} | |
| 14 | - | |
| 15 | -# ----------------------------------------------------------------------------- | |
| 16 | -# API | |
| 17 | - | |
| 18 | -# vc::fossil::import::stats | |
| 19 | -# setup n m - Initialize module, expect n changesets, of m. | |
| 20 | -# done - Write final statistics. | |
| 21 | -# csbegin id - Import of identified changeset begins. | |
| 22 | -# csend x - It took x seconds to import the changeset. | |
| 23 | -# | |
| 24 | - | |
| 25 | -# ----------------------------------------------------------------------------- | |
| 26 | -# API Implementation - Functionality | |
| 27 | - | |
| 28 | -proc ::vc::fossil::import::stats::setup {n m} { | |
| 29 | - variable run_format %[string length $n]s | |
| 30 | - variable max_format %[string length $m]s | |
| 31 | - variable total_csets $n | |
| 32 | - variable total_running 0 | |
| 33 | - variable total_seconds 0.0 | |
| 34 | - return | |
| 35 | -} | |
| 36 | - | |
| 37 | -proc ::vc::fossil::import::stats::done {} { | |
| 38 | - variable total_csets | |
| 39 | - variable total_seconds | |
| 40 | - | |
| 41 | - write 0 stats "========= [string repeat = 61]" | |
| 42 | - write 0 stats "Imported $total_csets [expr {($total_csets == 1) ? "changeset" : "changesets"}]" | |
| 43 | - write 0 stats "Within [F $total_seconds] seconds (avg [F [Avg]] seconds/changeset)" | |
| 44 | - return | |
| 45 | -} | |
| 46 | - | |
| 47 | -proc ::vc::fossil::import::stats::csbegin {cset} { | |
| 48 | - variable max_format | |
| 49 | - variable run_format | |
| 50 | - variable total_running | |
| 51 | - variable total_csets | |
| 52 | - | |
| 53 | - incr total_running | |
| 54 | - | |
| 55 | - write 0 stats "ChangeSet [format $max_format $cset] @ [format $run_format $total_running]/$total_csets ([F6 [expr {$total_running*100.0/$total_csets}]]%)" | |
| 56 | - return | |
| 57 | -} | |
| 58 | - | |
| 59 | -proc ::vc::fossil::import::stats::csend {seconds} { | |
| 60 | - variable total_csets | |
| 61 | - variable total_seconds | |
| 62 | - variable total_running | |
| 63 | - | |
| 64 | - set total_seconds [expr {$total_seconds + $seconds}] | |
| 65 | - | |
| 66 | - set avg [Avg] | |
| 67 | - set end [expr {$total_csets * $avg}] | |
| 68 | - set rem [expr {$end - $total_seconds}] | |
| 69 | - | |
| 70 | - write 2 stats "Imported in [F7 $seconds] seconds" | |
| 71 | - write 3 stats "Average Time/Cset [F7 $avg] seconds" | |
| 72 | - write 3 stats "Current Runtime [FTime $total_seconds]" | |
| 73 | - write 3 stats "Total Runtime (E) [FTime $end]" | |
| 74 | - write 3 stats "Remaining Time (E) [FTime $rem]" | |
| 75 | - # (E) for Estimated. | |
| 76 | - | |
| 77 | - return | |
| 78 | -} | |
| 79 | - | |
| 80 | -# ----------------------------------------------------------------------------- | |
| 81 | -# Internal helper commands. | |
| 82 | - | |
| 83 | -proc ::vc::fossil::import::stats::FTime {s} { | |
| 84 | - set m [expr {$s / 60}] | |
| 85 | - set h [expr {$s / 3600}] | |
| 86 | - return "[F7 $s] sec [F6 $m] min [F5 $h] hr" | |
| 87 | -} | |
| 88 | - | |
| 89 | -proc ::vc::fossil::import::stats::F {x} { format %.2f $x } | |
| 90 | -proc ::vc::fossil::import::stats::F5 {x} { format %5.2f $x } | |
| 91 | -proc ::vc::fossil::import::stats::F6 {x} { format %6.2f $x } | |
| 92 | -proc ::vc::fossil::import::stats::F7 {x} { format %7.2f $x } | |
| 93 | - | |
| 94 | -proc ::vc::fossil::import::stats::Avg {} { | |
| 95 | - variable total_seconds | |
| 96 | - variable total_running | |
| 97 | - return [expr {$total_seconds/$total_running}] | |
| 98 | -} | |
| 99 | - | |
| 100 | -# ----------------------------------------------------------------------------- | |
| 101 | - | |
| 102 | -namespace eval ::vc::fossil::import::stats { | |
| 103 | - variable total_csets 0 ; # Number of changesets to expect to be imported | |
| 104 | - variable total_running 0 ; # Number of changesets which have been imported so far | |
| 105 | - variable total_seconds 0 ; # Current runtime in seconds | |
| 106 | - variable max_format %s ; # Format to print changeset id, based on the largest id. | |
| 107 | - variable run_format %s ; # Format to print the number of imported csets. | |
| 108 | - | |
| 109 | - namespace export setup done csbegin csend | |
| 110 | -} | |
| 111 | - | |
| 112 | -# ----------------------------------------------------------------------------- | |
| 113 | -# Ready | |
| 114 | - | |
| 115 | -package provide vc::fossil::import::stats 1.0 | |
| 116 | -return |
| --- a/tools/lib/import_statistics.tcl | |
| +++ b/tools/lib/import_statistics.tcl | |
| @@ -1,116 +0,0 @@ | |
| 1 | # ----------------------------------------------------------------------------- |
| 2 | # Management of statistics for an import run. |
| 3 | |
| 4 | # ----------------------------------------------------------------------------- |
| 5 | # Requirements |
| 6 | |
| 7 | package require Tcl 8.4 |
| 8 | package require vc::tools::log ; # User feedback |
| 9 | |
| 10 | namespace eval ::vc::fossil::import::stats { |
| 11 | vc::tools::log::system stats |
| 12 | namespace import ::vc::tools::log::write |
| 13 | } |
| 14 | |
| 15 | # ----------------------------------------------------------------------------- |
| 16 | # API |
| 17 | |
| 18 | # vc::fossil::import::stats |
| 19 | # setup n m - Initialize module, expect n changesets, of m. |
| 20 | # done - Write final statistics. |
| 21 | # csbegin id - Import of identified changeset begins. |
| 22 | # csend x - It took x seconds to import the changeset. |
| 23 | # |
| 24 | |
| 25 | # ----------------------------------------------------------------------------- |
| 26 | # API Implementation - Functionality |
| 27 | |
| 28 | proc ::vc::fossil::import::stats::setup {n m} { |
| 29 | variable run_format %[string length $n]s |
| 30 | variable max_format %[string length $m]s |
| 31 | variable total_csets $n |
| 32 | variable total_running 0 |
| 33 | variable total_seconds 0.0 |
| 34 | return |
| 35 | } |
| 36 | |
| 37 | proc ::vc::fossil::import::stats::done {} { |
| 38 | variable total_csets |
| 39 | variable total_seconds |
| 40 | |
| 41 | write 0 stats "========= [string repeat = 61]" |
| 42 | write 0 stats "Imported $total_csets [expr {($total_csets == 1) ? "changeset" : "changesets"}]" |
| 43 | write 0 stats "Within [F $total_seconds] seconds (avg [F [Avg]] seconds/changeset)" |
| 44 | return |
| 45 | } |
| 46 | |
| 47 | proc ::vc::fossil::import::stats::csbegin {cset} { |
| 48 | variable max_format |
| 49 | variable run_format |
| 50 | variable total_running |
| 51 | variable total_csets |
| 52 | |
| 53 | incr total_running |
| 54 | |
| 55 | write 0 stats "ChangeSet [format $max_format $cset] @ [format $run_format $total_running]/$total_csets ([F6 [expr {$total_running*100.0/$total_csets}]]%)" |
| 56 | return |
| 57 | } |
| 58 | |
| 59 | proc ::vc::fossil::import::stats::csend {seconds} { |
| 60 | variable total_csets |
| 61 | variable total_seconds |
| 62 | variable total_running |
| 63 | |
| 64 | set total_seconds [expr {$total_seconds + $seconds}] |
| 65 | |
| 66 | set avg [Avg] |
| 67 | set end [expr {$total_csets * $avg}] |
| 68 | set rem [expr {$end - $total_seconds}] |
| 69 | |
| 70 | write 2 stats "Imported in [F7 $seconds] seconds" |
| 71 | write 3 stats "Average Time/Cset [F7 $avg] seconds" |
| 72 | write 3 stats "Current Runtime [FTime $total_seconds]" |
| 73 | write 3 stats "Total Runtime (E) [FTime $end]" |
| 74 | write 3 stats "Remaining Time (E) [FTime $rem]" |
| 75 | # (E) for Estimated. |
| 76 | |
| 77 | return |
| 78 | } |
| 79 | |
| 80 | # ----------------------------------------------------------------------------- |
| 81 | # Internal helper commands. |
| 82 | |
| 83 | proc ::vc::fossil::import::stats::FTime {s} { |
| 84 | set m [expr {$s / 60}] |
| 85 | set h [expr {$s / 3600}] |
| 86 | return "[F7 $s] sec [F6 $m] min [F5 $h] hr" |
| 87 | } |
| 88 | |
| 89 | proc ::vc::fossil::import::stats::F {x} { format %.2f $x } |
| 90 | proc ::vc::fossil::import::stats::F5 {x} { format %5.2f $x } |
| 91 | proc ::vc::fossil::import::stats::F6 {x} { format %6.2f $x } |
| 92 | proc ::vc::fossil::import::stats::F7 {x} { format %7.2f $x } |
| 93 | |
| 94 | proc ::vc::fossil::import::stats::Avg {} { |
| 95 | variable total_seconds |
| 96 | variable total_running |
| 97 | return [expr {$total_seconds/$total_running}] |
| 98 | } |
| 99 | |
| 100 | # ----------------------------------------------------------------------------- |
| 101 | |
| 102 | namespace eval ::vc::fossil::import::stats { |
| 103 | variable total_csets 0 ; # Number of changesets to expect to be imported |
| 104 | variable total_running 0 ; # Number of changesets which have been imported so far |
| 105 | variable total_seconds 0 ; # Current runtime in seconds |
| 106 | variable max_format %s ; # Format to print changeset id, based on the largest id. |
| 107 | variable run_format %s ; # Format to print the number of imported csets. |
| 108 | |
| 109 | namespace export setup done csbegin csend |
| 110 | } |
| 111 | |
| 112 | # ----------------------------------------------------------------------------- |
| 113 | # Ready |
| 114 | |
| 115 | package provide vc::fossil::import::stats 1.0 |
| 116 | return |
| --- a/tools/lib/import_statistics.tcl | |
| +++ b/tools/lib/import_statistics.tcl | |
| @@ -1,116 +0,0 @@ | |
D
tools/lib/importcvs.tcl
-49
| --- a/tools/lib/importcvs.tcl | ||
| +++ b/tools/lib/importcvs.tcl | ||
| @@ -1,49 +0,0 @@ | ||
| 1 | -# ----------------------------------------------------------------------------- | |
| 2 | -# Tool packages. Main control module for importing from a CVS repository. | |
| 3 | - | |
| 4 | -# ----------------------------------------------------------------------------- | |
| 5 | -# Requirements | |
| 6 | - | |
| 7 | -package require Tcl 8.4 | |
| 8 | -package require vc::cvs::ws ; # Frontend, reading from source repository | |
| 9 | -package require vc::fossil::ws ; # Backend, writing to destination repository. | |
| 10 | -package require vc::tools::log ; # User feedback. | |
| 11 | -package require vc::fossil::import::stats ; # Management for the Import Statistics. | |
| 12 | -package require vc::fossil::import::map ; # Management of ; # Parser configuration | |
| 13 | - | |
| 14 | -namespace eval ::vc::fossil::import::cvs { | |
| 15 | - vc::tools::log::system import | |
| 16 | - namespace import ::vc::tools::log::write | |
| 17 | - namespace eval cvs { namespace import ::vc::cvs::ws::* } | |
| 18 | - namespace eval fossil { namespace import ::vc::fossil::ws::* } | |
| 19 | - namespace eval stats { namespace import ::vc::fossil::import::stats::* } | |
| 20 | - namespace eval map { namespace import ::vc | |
| 21 | - fossil::configure -appname cvs2fossil | |
| 22 | - fossil::configure -ignore ::vc::cvs::ws::isadmin | |
| 23 | -} | |
| 24 | - | |
| 25 | -# ----------------------------------------------------------------------------- | |
| 26 | -# API | |
| 27 | - | |
| 28 | -# Configuration | |
| 29 | -# | |
| 30 | -# vc::fossil::import::cvs::configure key value - Set configuration | |
| 31 | -# | |
| 32 | -# Legal keys: -nosign <bool>, default false | |
| 33 | -# -breakat <int>, default :none: | |
| 34 | -# -saveto <path>, default :none: | |
| 35 | -# -limit <path>, default :none: | |
| 36 | -# | |
| 37 | -# Functionality | |
| 38 | -# | |
| 39 | -# vc::fossil::import::cvs::run src dst - Perform an import. | |
| 40 | - | |
| 41 | -# ----------------------------------------------------------------------------- | |
| 42 | -# API Implementation - Functionality | |
| 43 | - | |
| 44 | -proc ::vc::fossil::import::cvs::configure {key value} { | |
| 45 | - # The options are simply passed through to the fossil importer | |
| 46 | - # backend. | |
| 47 | - switch { fossil::configure -breakat $value } | |
| 48 | - -nosign { fossil::configure -gn { fossil::configure -{ cvs::configure -{ fossil::configure -# ----------------------------------------------------------------------------- | |
| 49 | -# |
| --- a/tools/lib/importcvs.tcl | |
| +++ b/tools/lib/importcvs.tcl | |
| @@ -1,49 +0,0 @@ | |
| 1 | # ----------------------------------------------------------------------------- |
| 2 | # Tool packages. Main control module for importing from a CVS repository. |
| 3 | |
| 4 | # ----------------------------------------------------------------------------- |
| 5 | # Requirements |
| 6 | |
| 7 | package require Tcl 8.4 |
| 8 | package require vc::cvs::ws ; # Frontend, reading from source repository |
| 9 | package require vc::fossil::ws ; # Backend, writing to destination repository. |
| 10 | package require vc::tools::log ; # User feedback. |
| 11 | package require vc::fossil::import::stats ; # Management for the Import Statistics. |
| 12 | package require vc::fossil::import::map ; # Management of ; # Parser configuration |
| 13 | |
| 14 | namespace eval ::vc::fossil::import::cvs { |
| 15 | vc::tools::log::system import |
| 16 | namespace import ::vc::tools::log::write |
| 17 | namespace eval cvs { namespace import ::vc::cvs::ws::* } |
| 18 | namespace eval fossil { namespace import ::vc::fossil::ws::* } |
| 19 | namespace eval stats { namespace import ::vc::fossil::import::stats::* } |
| 20 | namespace eval map { namespace import ::vc |
| 21 | fossil::configure -appname cvs2fossil |
| 22 | fossil::configure -ignore ::vc::cvs::ws::isadmin |
| 23 | } |
| 24 | |
| 25 | # ----------------------------------------------------------------------------- |
| 26 | # API |
| 27 | |
| 28 | # Configuration |
| 29 | # |
| 30 | # vc::fossil::import::cvs::configure key value - Set configuration |
| 31 | # |
| 32 | # Legal keys: -nosign <bool>, default false |
| 33 | # -breakat <int>, default :none: |
| 34 | # -saveto <path>, default :none: |
| 35 | # -limit <path>, default :none: |
| 36 | # |
| 37 | # Functionality |
| 38 | # |
| 39 | # vc::fossil::import::cvs::run src dst - Perform an import. |
| 40 | |
| 41 | # ----------------------------------------------------------------------------- |
| 42 | # API Implementation - Functionality |
| 43 | |
| 44 | proc ::vc::fossil::import::cvs::configure {key value} { |
| 45 | # The options are simply passed through to the fossil importer |
| 46 | # backend. |
| 47 | switch { fossil::configure -breakat $value } |
| 48 | -nosign { fossil::configure -gn { fossil::configure -{ cvs::configure -{ fossil::configure -# ----------------------------------------------------------------------------- |
| 49 | # |
| --- a/tools/lib/importcvs.tcl | |
| +++ b/tools/lib/importcvs.tcl | |
| @@ -1,49 +0,0 @@ | |
D
tools/lib/log.tcl
-153
| --- a/tools/lib/log.tcl | ||
| +++ b/tools/lib/log.tcl | ||
| @@ -1,153 +0,0 @@ | ||
| 1 | -# ----------------------------------------------------------------------------- | |
| 2 | -# Tool packages. Logging (aka User feedback). | |
| 3 | - | |
| 4 | -# ----------------------------------------------------------------------------- | |
| 5 | -# Requirements | |
| 6 | - | |
| 7 | -package require Tcl 8.4 | |
| 8 | -namespace eval ::vc::tools::log {} | |
| 9 | - | |
| 10 | -# ----------------------------------------------------------------------------- | |
| 11 | -# API | |
| 12 | - | |
| 13 | -# Feedback generation. | |
| 14 | -# | |
| 15 | -# vc::tools::log::write verbosity system text - Write message to the log. | |
| 16 | -# vc::tools::log::progress verbosity system n max - Drive a progress display. | |
| 17 | -# | |
| 18 | -# Note: max empty => infinite progress display, otherwise a finite display. | |
| 19 | - | |
| 20 | -# Administrative operations. | |
| 21 | -# | |
| 22 | -# vc::tools::log::verbosity level - Set the verbosity level of the application. | |
| 23 | -# vc::tools::log::verbosity? - Query the verbosity level of the application. | |
| 24 | -# vc::tools::log::setCmd cmdprefix - Set callback for output | |
| 25 | -# vc::tools::log::system name - Register a system (enables tabular log formatting). | |
| 26 | - | |
| 27 | -# Callback API ( Executed at the global level). | |
| 28 | -# | |
| 29 | -# cmdprefix 'write' system text | |
| 30 | -# cmdprefix 'progress' system n max | |
| 31 | - | |
| 32 | -# Standard callbacks defined by the package itself write to stdout. | |
| 33 | - | |
| 34 | -# ----------------------------------------------------------------------------- | |
| 35 | -# API Implementation - Feedback generation. | |
| 36 | - | |
| 37 | -# Write the message 'text' to log, for the named 'system'. The message | |
| 38 | -# is written if and only if the message verbosity is less or equal the | |
| 39 | -# chosen verbosity. A message of verbosity 0 cannot be blocked. | |
| 40 | - | |
| 41 | -proc ::vc::tools::log::write {verbosity system text} { | |
| 42 | - variable loglevel | |
| 43 | - variable logcmd | |
| 44 | - variable sysfmt | |
| 45 | - if {$verbosity > $loglevel} return | |
| 46 | - uplevel #0 [linsert $logcmd end write [format $sysfmt $system] $text] | |
| 47 | - return | |
| 48 | -} | |
| 49 | - | |
| 50 | -# Similar to write, especially in the handling of the verbosity, to | |
| 51 | -# drive progress displays. It signals that for some long running | |
| 52 | -# operation we are at tick 'n' of at most 'max' ticks. | |
| 53 | - | |
| 54 | -proc ::vc::tools::log::progress {verbosity system n max} { | |
| 55 | - variable loglevel | |
| 56 | - variable logcmd | |
| 57 | - variable sysfmt | |
| 58 | - if {$verbosity > $loglevel} return | |
| 59 | - uplevel #0 [linsert $logcmd end progress [format $sysfmt $system] $n $max] | |
| 60 | - return | |
| 61 | -} | |
| 62 | - | |
| 63 | -# ----------------------------------------------------------------------------- | |
| 64 | -# API Implementation - Administrative operations. | |
| 65 | - | |
| 66 | -# Set verbosity to the chosen 'level'. Only messages with a level less | |
| 67 | -# or equal to this one will be shown. | |
| 68 | - | |
| 69 | -proc ::vc::tools::log::verbosity {level} { | |
| 70 | - variable loglevel | |
| 71 | - if {$level < 1} {set level 0} | |
| 72 | - set loglevel $level | |
| 73 | - return | |
| 74 | -} | |
| 75 | - | |
| 76 | -# Query the currently set verbosity. | |
| 77 | - | |
| 78 | -proc ::vc::tools::log::verbosity? {} { | |
| 79 | - variable loglevel | |
| 80 | - return $loglevel | |
| 81 | -} | |
| 82 | - | |
| 83 | -# Set the log callback handling the actual output of messages going | |
| 84 | -# through the package. | |
| 85 | - | |
| 86 | -proc ::vc::tools::log::setCmd {cmdprefix} { | |
| 87 | - variable logcmd $cmdprefix | |
| 88 | - return | |
| 89 | -} | |
| 90 | - | |
| 91 | -# Register a system name, to enable tabular formatting. This is done | |
| 92 | -# by setting up a format specifier with a proper width. This is | |
| 93 | -# handled in the generation command, before the output callback is | |
| 94 | -# invoked. | |
| 95 | - | |
| 96 | -proc ::vc::tools::log::system {name} { | |
| 97 | - variable sysfmt | |
| 98 | - variable syslen | |
| 99 | - | |
| 100 | - set nlen [string length $name] | |
| 101 | - if {$nlen < $syslen} return | |
| 102 | - | |
| 103 | - set syslen $nlen | |
| 104 | - set sysfmt %-${syslen}s | |
| 105 | - return | |
| 106 | -} | |
| 107 | - | |
| 108 | -# ----------------------------------------------------------------------------- | |
| 109 | -# Internal operations - Standard output operation | |
| 110 | - | |
| 111 | -# Dispatch to the handlers of the possible operations. | |
| 112 | - | |
| 113 | -proc ::vc::tools::log::OUT {op args} { | |
| 114 | - eval [linsert $args 0 ::vc::tools::log::OUT/$op] | |
| 115 | - return | |
| 116 | -} | |
| 117 | - | |
| 118 | -# Write handler. Each message is a line. | |
| 119 | - | |
| 120 | -proc ::vc::tools::log::OUT/write {system text} { | |
| 121 | - puts "$system $text" | |
| 122 | - return | |
| 123 | -} | |
| 124 | - | |
| 125 | -# Progress handler. Uses \r to return to the beginning of the current | |
| 126 | -# line without advancing. | |
| 127 | - | |
| 128 | -proc ::vc::tools::log::OUT/progress {system n max} { | |
| 129 | - if {$max eq {}} { | |
| 130 | - puts -nonewline "$system $n\r" | |
| 131 | - } else { | |
| 132 | - puts -nonewline "$system [format %[string length $max]s $n]/$max\r" | |
| 133 | - } | |
| 134 | - flush stdout | |
| 135 | - return | |
| 136 | -} | |
| 137 | - | |
| 138 | -# ----------------------------------------------------------------------------- | |
| 139 | - | |
| 140 | -namespace eval ::vc::tools::log { | |
| 141 | - variable loglevel 0 ; # Allow only uninteruptible messages. | |
| 142 | - variable logcmd ::vc::tools::log::OUT ; # Standard output to stdout. | |
| 143 | - variable sysfmt %s ; # Non-tabular formatting. | |
| 144 | - variable syslen 0 ; # Ditto. | |
| 145 | - | |
| 146 | - namespace export write progress | |
| 147 | -} | |
| 148 | - | |
| 149 | -# ----------------------------------------------------------------------------- | |
| 150 | -# Ready | |
| 151 | - | |
| 152 | -package provide vc::tools::log 1.0 | |
| 153 | -return |
| --- a/tools/lib/log.tcl | |
| +++ b/tools/lib/log.tcl | |
| @@ -1,153 +0,0 @@ | |
| 1 | # ----------------------------------------------------------------------------- |
| 2 | # Tool packages. Logging (aka User feedback). |
| 3 | |
| 4 | # ----------------------------------------------------------------------------- |
| 5 | # Requirements |
| 6 | |
| 7 | package require Tcl 8.4 |
| 8 | namespace eval ::vc::tools::log {} |
| 9 | |
| 10 | # ----------------------------------------------------------------------------- |
| 11 | # API |
| 12 | |
| 13 | # Feedback generation. |
| 14 | # |
| 15 | # vc::tools::log::write verbosity system text - Write message to the log. |
| 16 | # vc::tools::log::progress verbosity system n max - Drive a progress display. |
| 17 | # |
| 18 | # Note: max empty => infinite progress display, otherwise a finite display. |
| 19 | |
| 20 | # Administrative operations. |
| 21 | # |
| 22 | # vc::tools::log::verbosity level - Set the verbosity level of the application. |
| 23 | # vc::tools::log::verbosity? - Query the verbosity level of the application. |
| 24 | # vc::tools::log::setCmd cmdprefix - Set callback for output |
| 25 | # vc::tools::log::system name - Register a system (enables tabular log formatting). |
| 26 | |
| 27 | # Callback API ( Executed at the global level). |
| 28 | # |
| 29 | # cmdprefix 'write' system text |
| 30 | # cmdprefix 'progress' system n max |
| 31 | |
| 32 | # Standard callbacks defined by the package itself write to stdout. |
| 33 | |
| 34 | # ----------------------------------------------------------------------------- |
| 35 | # API Implementation - Feedback generation. |
| 36 | |
| 37 | # Write the message 'text' to log, for the named 'system'. The message |
| 38 | # is written if and only if the message verbosity is less or equal the |
| 39 | # chosen verbosity. A message of verbosity 0 cannot be blocked. |
| 40 | |
| 41 | proc ::vc::tools::log::write {verbosity system text} { |
| 42 | variable loglevel |
| 43 | variable logcmd |
| 44 | variable sysfmt |
| 45 | if {$verbosity > $loglevel} return |
| 46 | uplevel #0 [linsert $logcmd end write [format $sysfmt $system] $text] |
| 47 | return |
| 48 | } |
| 49 | |
| 50 | # Similar to write, especially in the handling of the verbosity, to |
| 51 | # drive progress displays. It signals that for some long running |
| 52 | # operation we are at tick 'n' of at most 'max' ticks. |
| 53 | |
| 54 | proc ::vc::tools::log::progress {verbosity system n max} { |
| 55 | variable loglevel |
| 56 | variable logcmd |
| 57 | variable sysfmt |
| 58 | if {$verbosity > $loglevel} return |
| 59 | uplevel #0 [linsert $logcmd end progress [format $sysfmt $system] $n $max] |
| 60 | return |
| 61 | } |
| 62 | |
| 63 | # ----------------------------------------------------------------------------- |
| 64 | # API Implementation - Administrative operations. |
| 65 | |
| 66 | # Set verbosity to the chosen 'level'. Only messages with a level less |
| 67 | # or equal to this one will be shown. |
| 68 | |
| 69 | proc ::vc::tools::log::verbosity {level} { |
| 70 | variable loglevel |
| 71 | if {$level < 1} {set level 0} |
| 72 | set loglevel $level |
| 73 | return |
| 74 | } |
| 75 | |
| 76 | # Query the currently set verbosity. |
| 77 | |
| 78 | proc ::vc::tools::log::verbosity? {} { |
| 79 | variable loglevel |
| 80 | return $loglevel |
| 81 | } |
| 82 | |
| 83 | # Set the log callback handling the actual output of messages going |
| 84 | # through the package. |
| 85 | |
| 86 | proc ::vc::tools::log::setCmd {cmdprefix} { |
| 87 | variable logcmd $cmdprefix |
| 88 | return |
| 89 | } |
| 90 | |
| 91 | # Register a system name, to enable tabular formatting. This is done |
| 92 | # by setting up a format specifier with a proper width. This is |
| 93 | # handled in the generation command, before the output callback is |
| 94 | # invoked. |
| 95 | |
| 96 | proc ::vc::tools::log::system {name} { |
| 97 | variable sysfmt |
| 98 | variable syslen |
| 99 | |
| 100 | set nlen [string length $name] |
| 101 | if {$nlen < $syslen} return |
| 102 | |
| 103 | set syslen $nlen |
| 104 | set sysfmt %-${syslen}s |
| 105 | return |
| 106 | } |
| 107 | |
| 108 | # ----------------------------------------------------------------------------- |
| 109 | # Internal operations - Standard output operation |
| 110 | |
| 111 | # Dispatch to the handlers of the possible operations. |
| 112 | |
| 113 | proc ::vc::tools::log::OUT {op args} { |
| 114 | eval [linsert $args 0 ::vc::tools::log::OUT/$op] |
| 115 | return |
| 116 | } |
| 117 | |
| 118 | # Write handler. Each message is a line. |
| 119 | |
| 120 | proc ::vc::tools::log::OUT/write {system text} { |
| 121 | puts "$system $text" |
| 122 | return |
| 123 | } |
| 124 | |
| 125 | # Progress handler. Uses \r to return to the beginning of the current |
| 126 | # line without advancing. |
| 127 | |
| 128 | proc ::vc::tools::log::OUT/progress {system n max} { |
| 129 | if {$max eq {}} { |
| 130 | puts -nonewline "$system $n\r" |
| 131 | } else { |
| 132 | puts -nonewline "$system [format %[string length $max]s $n]/$max\r" |
| 133 | } |
| 134 | flush stdout |
| 135 | return |
| 136 | } |
| 137 | |
| 138 | # ----------------------------------------------------------------------------- |
| 139 | |
| 140 | namespace eval ::vc::tools::log { |
| 141 | variable loglevel 0 ; # Allow only uninteruptible messages. |
| 142 | variable logcmd ::vc::tools::log::OUT ; # Standard output to stdout. |
| 143 | variable sysfmt %s ; # Non-tabular formatting. |
| 144 | variable syslen 0 ; # Ditto. |
| 145 | |
| 146 | namespace export write progress |
| 147 | } |
| 148 | |
| 149 | # ----------------------------------------------------------------------------- |
| 150 | # Ready |
| 151 | |
| 152 | package provide vc::tools::log 1.0 |
| 153 | return |
| --- a/tools/lib/log.tcl | |
| +++ b/tools/lib/log.tcl | |
| @@ -1,153 +0,0 @@ | |
D
tools/lib/pkgIndex.tcl
-14
| --- a/tools/lib/pkgIndex.tcl | ||
| +++ b/tools/lib/pkgIndex.tcl | ||
| @@ -1,14 +0,0 @@ | ||
| 1 | -if {![package vsatisfies [package require Tcl] 8.4]} return | |
| 2 | -package ifneeded vc::rcs::parser 1.0 [list source [file join $dir rcsparser.tcl]] | |
| 3 | -package ifneeded vc::cvs::cmd 1.0 [list source [file join $dir cvs_cmd.tcl]] | |
| 4 | -package ifneeded vc::cvs::ws 1.0 [list source [file join $dir cvs.tcl]] | |
| 5 | -package ifneeded vc::cvs::ws::files 1.0 [list source [file join $dir cvs_files.tcl]] | |
| 6 | -package ifneeded vc::cvs::ws::timeline 1.0 [list source [file join $dir cvs_timeline.tcl]] | |
| 7 | -package ifneeded vc::cvs::ws::csets 1.0 [list source [file join $dir cvs_csets.tcl]] | |
| 8 | -package ifneeded vc::fossil::cmd 1.0 [list source [file join $dir fossil_cmd.tcl]] | |
| 9 | -package ifneeded vc::fossil::ws 1.0 [list source [file join $dir fossil.tcl]] | |
| 10 | -package ifneeded vc::fossil::import::cvs 1.0 [list source [file join $dir importcvs.tcl]] | |
| 11 | -package ifneeded vc::fossil::import::stats 1.0 [list source [file join $dir import_statistics.tcl]] | |
| 12 | -package ifneeded vc::fossil::import::map 1.0 [list source [file join $dir import_map.tcl]] | |
| 13 | -package ifneeded vc::tools::log 1.0 [list source [file join $dir log.tcl]] | |
| 14 | -package ifneeded vc::tools::trouble |
| --- a/tools/lib/pkgIndex.tcl | |
| +++ b/tools/lib/pkgIndex.tcl | |
| @@ -1,14 +0,0 @@ | |
| 1 | if {![package vsatisfies [package require Tcl] 8.4]} return |
| 2 | package ifneeded vc::rcs::parser 1.0 [list source [file join $dir rcsparser.tcl]] |
| 3 | package ifneeded vc::cvs::cmd 1.0 [list source [file join $dir cvs_cmd.tcl]] |
| 4 | package ifneeded vc::cvs::ws 1.0 [list source [file join $dir cvs.tcl]] |
| 5 | package ifneeded vc::cvs::ws::files 1.0 [list source [file join $dir cvs_files.tcl]] |
| 6 | package ifneeded vc::cvs::ws::timeline 1.0 [list source [file join $dir cvs_timeline.tcl]] |
| 7 | package ifneeded vc::cvs::ws::csets 1.0 [list source [file join $dir cvs_csets.tcl]] |
| 8 | package ifneeded vc::fossil::cmd 1.0 [list source [file join $dir fossil_cmd.tcl]] |
| 9 | package ifneeded vc::fossil::ws 1.0 [list source [file join $dir fossil.tcl]] |
| 10 | package ifneeded vc::fossil::import::cvs 1.0 [list source [file join $dir importcvs.tcl]] |
| 11 | package ifneeded vc::fossil::import::stats 1.0 [list source [file join $dir import_statistics.tcl]] |
| 12 | package ifneeded vc::fossil::import::map 1.0 [list source [file join $dir import_map.tcl]] |
| 13 | package ifneeded vc::tools::log 1.0 [list source [file join $dir log.tcl]] |
| 14 | package ifneeded vc::tools::trouble |
| --- a/tools/lib/pkgIndex.tcl | |
| +++ b/tools/lib/pkgIndex.tcl | |
| @@ -1,14 +0,0 @@ | |
D
tools/lib/rcsparser.tcl
-228
| --- a/tools/lib/rcsparser.tcl | ||
| +++ b/tools/lib/rcsparser.tcl | ||
| @@ -1,228 +0,0 @@ | ||
| 1 | -# ----------------------------------------------------------------------------- | |
| 2 | -# Tool packages. Parsing RCS files. | |
| 3 | -# | |
| 4 | -# Some of the information in RCS files is skipped over, most | |
| 5 | -# importantly the actual delta texts. The users of this parser need | |
| 6 | -# only the meta-data about when revisions were added, the tree | |
| 7 | -# (branching) structure, commit messages. | |
| 8 | -# | |
| 9 | -# The parser is based on Recursive Descent. | |
| 10 | - | |
| 11 | -# ----------------------------------------------------------------------------- | |
| 12 | -# Requirements | |
| 13 | - | |
| 14 | -package require Tcl 8.4 | |
| 15 | -package require fileutil ; # Tcllib (cat) | |
| 16 | -package require vc::tools::log ; # User feedback | |
| 17 | - | |
| 18 | -namespace eval ::vc::rcs::parser { | |
| 19 | - vc::tools::log::system rcs | |
| 20 | - namesp::* return | |
| 21 | -} | |
| 22 | - | |
| 23 | -proc ::vc::rcprogressAPI | |
| 24 | - | |
| 25 | -# vc::rcs::parser::process file | |
| 26 | -# | |
| 27 | -# Parses the rcs file and returns a dictionary containing the meta | |
| 28 | -# data. The following keys are used | |
| 29 | -# | |
| 30 | -# Key Meaning | |
| 31 | -# --- ------- | |
| 32 | -# 'head' head revision | |
| 33 | -# 'branch' ? | |
| 34 | -# 'symbol' dict (symbol -> revision) | |
| 35 | -# 'lock' dict (symbol -> revision) | |
| 36 | -# 'comment' file comment | |
| 37 | -# 'expand' ? | |
| 38 | -# 'date' dict (revision -> date) | |
| 39 | -# 'author' dict (revision -> author) | |
| 40 | -# 'state' dict (revision -> state) | |
| 41 | -# 'parent' dict (revision -> parent revision) | |
| 42 | -# 'commit' dict (revision -> commit message) | |
| 43 | -# | |
| 44 | -# The state 'dead' has special meaning, the user should know that. | |
| 45 | - | |
| 46 | -# ----------------------------------------------------------------------------- | |
| 47 | -# API Implementation | |
| 48 | - | |
| 49 | -proc ::vc::rcs::parser::chfile exists $cache] && | |
| 50 | -# ----------------------------------------------------------------------------- | |
| 51 | -# Tool packages. Parsing RCS files. | |
| 52 | -# | |
| 53 | -# Some of the information in RCS files is skipped over, most | |
| 54 | -# importantly the actual delta texts. The users of this parser need | |
| 55 | -# only the meta-data about when revisions were added, the tree | |
| 56 | -# (branching) structure, commit messages. | |
| 57 | -# | |
| 58 | -# The parser is based on Recursive Descent-------------------------------------------------------------- | |
| 59 | -# Tool packages. Parsing RCS files. | |
| 60 | -# | |
| 61 | -# Some of the information in RCS files is skipped over, most | |
| 62 | -# importantly the actual delta texts. The users of this parser need | |
| 63 | -# only the meta-data about when revisions were added, the tree | |
| 64 | -# (branching) structure, commit messages. | |
| 65 | -# | |
| 66 | -# The parser is based on Recursive Descent. | |
| 67 | - | |
| 68 | -# ----------------------------------------------------------------------------- | |
| 69 | -# Requirements | |
| 70 | - | |
| 71 | -package require Tcl 8.4 | |
| 72 | -package require fileutil ; # Tcllib (cat) | |
| 73 | -package require vc::tools::log ; # User feedback | |
| 74 | - | |
| 75 | -namespace eval ::vc::rcs::parser { | |
| 76 | - vc::tools::log::system rcs | |
| 77 | - namesp::* return | |
| 78 | -} | |
| 79 | - | |
| 80 | -proc ::vc::rcs::parser::Log {} { | |
| 81 | - upvar 1 data data res res | |
| 82 | - LiteraAPI | |
| 83 | - | |
| 84 | -# vc::rcs::parser::process file | |
| 85 | -# | |
| 86 | -# Parses the rcs file and returns a dictionary containing the meta | |
| 87 | -# data. The following keys are used | |
| 88 | -# | |
| 89 | -# Key Meaning | |
| 90 | -# --- ------- | |
| 91 | -# 'head' head revision | |
| 92 | -# 'branch' ? | |
| 93 | -# 'symbol' dict (symbol -> revision) | |
| 94 | -# 'lock' dict (symbol -> revision) | |
| 95 | -# 'comment' file comment | |
| 96 | -# 'expand' ? | |
| 97 | -# 'date' dict (revision -> date) | |
| 98 | -# 'author' dict (revision -> author) | |
| 99 | -# 'state' dict (revision -> state) | |
| 100 | -# 'parent' dict (revision -> parent revision) | |
| 101 | -# 'commit' dict (revision -> commit message) | |
| 102 | -# | |
| 103 | -# The state 'dead' has special meaning, the user should know that. | |
| 104 | - | |
| 105 | -# ----------------------------------------------------------------------------- | |
| 106 | -# API Implementation | |
| 107 | - | |
| 108 | -proc ::vc::rcs::parser::configure {key value} { | |
| 109 | - variable cache | |
| 110 | - switch -exact -- $key { | |
| 111 | - -cache { | |
| 112 | - set cache $value | |
| 113 | - } | |
| 114 | - default { | |
| 115 | - return -code error "Unknown switch $key, expected one of -cache" | |
| 116 | - } | |
| 117 | - } | |
| 118 | - return | |
| 119 | -} | |
| 120 | - | |
| 121 | -proc ::vc::rcs::parser::process {path} { | |
| 122 | - set cachfile exists $cache] && | |
| 123 | - ([file mtime $cach } { | |
| 124 | - # Use preparsed data if not invalidated by changes to the | |
| 125 | - # archive they are derived from. | |
| 126 | - write 4 rcs {Load preparsed data block} | |
| 127 | - return [fileutil::cat -encoding binary $cachefile] | |
| 128 | - } | |
| 129 | - | |
| 130 | - set res [P] | |
| 131 | - } | |
| 132 | - | |
| 133 | - set res [Process $path] | |
| 134 | - | |
| 135 | - # Save parse result for quick pickup by future runs. | |
| 136 | - $res | |
| 137 | - | |
| 138 | - return $res | |
| 139 | -} | |
| 140 | - | |
| 141 | -# ----------------------------------------------------------------------------- | |
| 142 | - | |
| 143 | -proc ::vc::rcs::parser::Process {path} { | |
| 144 | - set data [fileutil::cat -encoding binary $path] | |
| 145 | - array set res {} | |
| 146 | - set res(size) [file size $path] | |
| 147 | - set res(done) 0 | |
| 148 | - set res(nsize) [string length $res(size)] | |
| 149 | - | |
| 150 | - Admin | |
| 151 | - Deltas | |
| 152 | - Description | |
| 153 | - DeltaTexts | |
| 154 | - | |
| 155 | - # Remove parser state | |
| 156 | - catch {unset res(id)} | |
| 157 | - catch {unset res(lastval)} | |
| 158 | - unset res(size) | |
| 159 | - unset res(nsize) | |
| 160 | - unset res(done) | |
| 161 | - | |
| 162 | - return [array get res] | |
| 163 | -} | |
| 164 | - | |
| 165 | -proc ::vc::rcs::parser::Cache {path} { | |
| 166 | - return ${path},,preparsed | |
| 167 | -} | |
| 168 | - | |
| 169 | -# ----------------------------------------------------------------------------- | |
| 170 | -# Internal - Recursive Descent functions implementing the syntax. | |
| 171 | - | |
| 172 | -proc ::vc::rcs::parser::Admin {} { | |
| 173 | - upvar 1 data data res res | |
| 174 | - Head ; Branch ; Access ; Symbols ; Locks ; Strict ; Comment ; Expand | |
| 175 | - return | |
| 176 | -} | |
| 177 | - | |
| 178 | -proc ::vc::rcs::parser::Deltas {} { | |
| 179 | - upvar 1 data data res res | |
| 180 | - while {[Num 0]} { IsIdent ; Date ; Author ; State ; Branches ; NextRev } | |
| 181 | - return | |
| 182 | -} | |
| 183 | - | |
| 184 | -proc ::vc::rcs::parser::Description {} { | |
| 185 | - upvar 1 data data res res | |
| 186 | - Literal desc | |
| 187 | - String 1 | |
| 188 | - Def desc | |
| 189 | - return | |
| 190 | -} | |
| 191 | - | |
| 192 | -proc ::vc::rcs::parser::DeltaTexts {} { | |
| 193 | - upvar 1 data data res res | |
| 194 | - while {[Num 0]} { IsIdent ; Log ; Text } | |
| 195 | - return | |
| 196 | -} | |
| 197 | - | |
| 198 | -proc ::vc::rcs::parser::Head {} { | |
| 199 | - upvar 1 data data res res | |
| 200 | - Literal head ; Num 1 ; Literal \; | |
| 201 | - Def head | |
| 202 | - return | |
| 203 | -} | |
| 204 | - | |
| 205 | -proc ::vc::rcs::parser::Branch {} { | |
| 206 | - upvar 1 data data res res | |
| 207 | - if {![Literal branch 0]} return ; Num 1 ; Literal \; | |
| 208 | - Def branch | |
| 209 | - return | |
| 210 | -} | |
| 211 | - | |
| 212 | -proc ::vc::rcs::parser::Access {} { | |
| 213 | - upvar 1 data data res res | |
| 214 | - Literal access ; Literal \; | |
| 215 | - return | |
| 216 | -} | |
| 217 | - | |
| 218 | -proc ::vc::rcs::parser::Symbols {} { | |
| 219 | - upvar 1 data data res res | |
| 220 | - Literal symbols | |
| 221 | - while {[Ident]} { Num 1 ; Map symbol } | |
| 222 | - Literal \; | |
| 223 | - return | |
| 224 | -} | |
| 225 | - | |
| 226 | -proc ::vc::rcs::parser::Locks {} { | |
| 227 | - upvar 1 data data res res | |
| 228 | - Lite |
| --- a/tools/lib/rcsparser.tcl | |
| +++ b/tools/lib/rcsparser.tcl | |
| @@ -1,228 +0,0 @@ | |
| 1 | # ----------------------------------------------------------------------------- |
| 2 | # Tool packages. Parsing RCS files. |
| 3 | # |
| 4 | # Some of the information in RCS files is skipped over, most |
| 5 | # importantly the actual delta texts. The users of this parser need |
| 6 | # only the meta-data about when revisions were added, the tree |
| 7 | # (branching) structure, commit messages. |
| 8 | # |
| 9 | # The parser is based on Recursive Descent. |
| 10 | |
| 11 | # ----------------------------------------------------------------------------- |
| 12 | # Requirements |
| 13 | |
| 14 | package require Tcl 8.4 |
| 15 | package require fileutil ; # Tcllib (cat) |
| 16 | package require vc::tools::log ; # User feedback |
| 17 | |
| 18 | namespace eval ::vc::rcs::parser { |
| 19 | vc::tools::log::system rcs |
| 20 | namesp::* return |
| 21 | } |
| 22 | |
| 23 | proc ::vc::rcprogressAPI |
| 24 | |
| 25 | # vc::rcs::parser::process file |
| 26 | # |
| 27 | # Parses the rcs file and returns a dictionary containing the meta |
| 28 | # data. The following keys are used |
| 29 | # |
| 30 | # Key Meaning |
| 31 | # --- ------- |
| 32 | # 'head' head revision |
| 33 | # 'branch' ? |
| 34 | # 'symbol' dict (symbol -> revision) |
| 35 | # 'lock' dict (symbol -> revision) |
| 36 | # 'comment' file comment |
| 37 | # 'expand' ? |
| 38 | # 'date' dict (revision -> date) |
| 39 | # 'author' dict (revision -> author) |
| 40 | # 'state' dict (revision -> state) |
| 41 | # 'parent' dict (revision -> parent revision) |
| 42 | # 'commit' dict (revision -> commit message) |
| 43 | # |
| 44 | # The state 'dead' has special meaning, the user should know that. |
| 45 | |
| 46 | # ----------------------------------------------------------------------------- |
| 47 | # API Implementation |
| 48 | |
| 49 | proc ::vc::rcs::parser::chfile exists $cache] && |
| 50 | # ----------------------------------------------------------------------------- |
| 51 | # Tool packages. Parsing RCS files. |
| 52 | # |
| 53 | # Some of the information in RCS files is skipped over, most |
| 54 | # importantly the actual delta texts. The users of this parser need |
| 55 | # only the meta-data about when revisions were added, the tree |
| 56 | # (branching) structure, commit messages. |
| 57 | # |
| 58 | # The parser is based on Recursive Descent-------------------------------------------------------------- |
| 59 | # Tool packages. Parsing RCS files. |
| 60 | # |
| 61 | # Some of the information in RCS files is skipped over, most |
| 62 | # importantly the actual delta texts. The users of this parser need |
| 63 | # only the meta-data about when revisions were added, the tree |
| 64 | # (branching) structure, commit messages. |
| 65 | # |
| 66 | # The parser is based on Recursive Descent. |
| 67 | |
| 68 | # ----------------------------------------------------------------------------- |
| 69 | # Requirements |
| 70 | |
| 71 | package require Tcl 8.4 |
| 72 | package require fileutil ; # Tcllib (cat) |
| 73 | package require vc::tools::log ; # User feedback |
| 74 | |
| 75 | namespace eval ::vc::rcs::parser { |
| 76 | vc::tools::log::system rcs |
| 77 | namesp::* return |
| 78 | } |
| 79 | |
| 80 | proc ::vc::rcs::parser::Log {} { |
| 81 | upvar 1 data data res res |
| 82 | LiteraAPI |
| 83 | |
| 84 | # vc::rcs::parser::process file |
| 85 | # |
| 86 | # Parses the rcs file and returns a dictionary containing the meta |
| 87 | # data. The following keys are used |
| 88 | # |
| 89 | # Key Meaning |
| 90 | # --- ------- |
| 91 | # 'head' head revision |
| 92 | # 'branch' ? |
| 93 | # 'symbol' dict (symbol -> revision) |
| 94 | # 'lock' dict (symbol -> revision) |
| 95 | # 'comment' file comment |
| 96 | # 'expand' ? |
| 97 | # 'date' dict (revision -> date) |
| 98 | # 'author' dict (revision -> author) |
| 99 | # 'state' dict (revision -> state) |
| 100 | # 'parent' dict (revision -> parent revision) |
| 101 | # 'commit' dict (revision -> commit message) |
| 102 | # |
| 103 | # The state 'dead' has special meaning, the user should know that. |
| 104 | |
| 105 | # ----------------------------------------------------------------------------- |
| 106 | # API Implementation |
| 107 | |
| 108 | proc ::vc::rcs::parser::configure {key value} { |
| 109 | variable cache |
| 110 | switch -exact -- $key { |
| 111 | -cache { |
| 112 | set cache $value |
| 113 | } |
| 114 | default { |
| 115 | return -code error "Unknown switch $key, expected one of -cache" |
| 116 | } |
| 117 | } |
| 118 | return |
| 119 | } |
| 120 | |
| 121 | proc ::vc::rcs::parser::process {path} { |
| 122 | set cachfile exists $cache] && |
| 123 | ([file mtime $cach } { |
| 124 | # Use preparsed data if not invalidated by changes to the |
| 125 | # archive they are derived from. |
| 126 | write 4 rcs {Load preparsed data block} |
| 127 | return [fileutil::cat -encoding binary $cachefile] |
| 128 | } |
| 129 | |
| 130 | set res [P] |
| 131 | } |
| 132 | |
| 133 | set res [Process $path] |
| 134 | |
| 135 | # Save parse result for quick pickup by future runs. |
| 136 | $res |
| 137 | |
| 138 | return $res |
| 139 | } |
| 140 | |
| 141 | # ----------------------------------------------------------------------------- |
| 142 | |
| 143 | proc ::vc::rcs::parser::Process {path} { |
| 144 | set data [fileutil::cat -encoding binary $path] |
| 145 | array set res {} |
| 146 | set res(size) [file size $path] |
| 147 | set res(done) 0 |
| 148 | set res(nsize) [string length $res(size)] |
| 149 | |
| 150 | Admin |
| 151 | Deltas |
| 152 | Description |
| 153 | DeltaTexts |
| 154 | |
| 155 | # Remove parser state |
| 156 | catch {unset res(id)} |
| 157 | catch {unset res(lastval)} |
| 158 | unset res(size) |
| 159 | unset res(nsize) |
| 160 | unset res(done) |
| 161 | |
| 162 | return [array get res] |
| 163 | } |
| 164 | |
| 165 | proc ::vc::rcs::parser::Cache {path} { |
| 166 | return ${path},,preparsed |
| 167 | } |
| 168 | |
| 169 | # ----------------------------------------------------------------------------- |
| 170 | # Internal - Recursive Descent functions implementing the syntax. |
| 171 | |
| 172 | proc ::vc::rcs::parser::Admin {} { |
| 173 | upvar 1 data data res res |
| 174 | Head ; Branch ; Access ; Symbols ; Locks ; Strict ; Comment ; Expand |
| 175 | return |
| 176 | } |
| 177 | |
| 178 | proc ::vc::rcs::parser::Deltas {} { |
| 179 | upvar 1 data data res res |
| 180 | while {[Num 0]} { IsIdent ; Date ; Author ; State ; Branches ; NextRev } |
| 181 | return |
| 182 | } |
| 183 | |
| 184 | proc ::vc::rcs::parser::Description {} { |
| 185 | upvar 1 data data res res |
| 186 | Literal desc |
| 187 | String 1 |
| 188 | Def desc |
| 189 | return |
| 190 | } |
| 191 | |
| 192 | proc ::vc::rcs::parser::DeltaTexts {} { |
| 193 | upvar 1 data data res res |
| 194 | while {[Num 0]} { IsIdent ; Log ; Text } |
| 195 | return |
| 196 | } |
| 197 | |
| 198 | proc ::vc::rcs::parser::Head {} { |
| 199 | upvar 1 data data res res |
| 200 | Literal head ; Num 1 ; Literal \; |
| 201 | Def head |
| 202 | return |
| 203 | } |
| 204 | |
| 205 | proc ::vc::rcs::parser::Branch {} { |
| 206 | upvar 1 data data res res |
| 207 | if {![Literal branch 0]} return ; Num 1 ; Literal \; |
| 208 | Def branch |
| 209 | return |
| 210 | } |
| 211 | |
| 212 | proc ::vc::rcs::parser::Access {} { |
| 213 | upvar 1 data data res res |
| 214 | Literal access ; Literal \; |
| 215 | return |
| 216 | } |
| 217 | |
| 218 | proc ::vc::rcs::parser::Symbols {} { |
| 219 | upvar 1 data data res res |
| 220 | Literal symbols |
| 221 | while {[Ident]} { Num 1 ; Map symbol } |
| 222 | Literal \; |
| 223 | return |
| 224 | } |
| 225 | |
| 226 | proc ::vc::rcs::parser::Locks {} { |
| 227 | upvar 1 data data res res |
| 228 | Lite |
| --- a/tools/lib/rcsparser.tcl | |
| +++ b/tools/lib/rcsparser.tcl | |
| @@ -1,228 +0,0 @@ | |
D
tools/lib/trouble.tcl
-57
| --- a/tools/lib/trouble.tcl | ||
| +++ b/tools/lib/trouble.tcl | ||
| @@ -1,57 +0,0 @@ | ||
| 1 | -# ----------------------------------------------------------------------------- | |
| 2 | -# Tool packages. Error reporting. | |
| 3 | - | |
| 4 | -# ----------------------------------------------------------------------------- | |
| 5 | -# Requirements | |
| 6 | - | |
| 7 | -package require Tcl 8.4 | |
| 8 | -package require vc::tools::log | |
| 9 | - | |
| 10 | -namespace eval ::vc::tools::trouble { | |
| 11 | - ::vc::tools::log::system trouble | |
| 12 | - namespace import ::vc::tools::log::write | |
| 13 | -} | |
| 14 | - | |
| 15 | -# ----------------------------------------------------------------------------- | |
| 16 | -# API | |
| 17 | - | |
| 18 | -# vc::tools::trouble::add message - Report error (shown in general | |
| 19 | -# log), and remember for re-display at exit. | |
| 20 | - | |
| 21 | -# ----------------------------------------------------------------------------- | |
| 22 | -# API Implementation | |
| 23 | - | |
| 24 | -proc ::vc::tools::trouble::add {text} { | |
| 25 | - variable messages | |
| 26 | - lappend messages $text | |
| 27 | - write trouble 0 $text | |
| 28 | - return | |
| 29 | -} | |
| 30 | - | |
| 31 | -# ----------------------------------------------------------------------------- | |
| 32 | -# Internals. Hook into the application exit, show the remembered messages, then | |
| 33 | -# pass through the regular command. | |
| 34 | - | |
| 35 | -rename ::exit vc::tools::trouble::EXIT | |
| 36 | -proc ::exit {{status 0}} { | |
| 37 | - variable ::vc::tools::trouble::messages | |
| 38 | - foreach m $messages { | |
| 39 | - write trouble 0 $m | |
| 40 | - } | |
| 41 | - ::vc::tools::trouble::EXIT $status | |
| 42 | - # Not reached. | |
| 43 | - return | |
| 44 | -} | |
| 45 | - | |
| 46 | -namespace eval ::vc::tools::trouble { | |
| 47 | - # List of the remembered error messages to be shown at exit | |
| 48 | - variable messages {} | |
| 49 | - | |
| 50 | - namespace export add | |
| 51 | -} | |
| 52 | - | |
| 53 | -# ----------------------------------------------------------------------------- | |
| 54 | -# Ready | |
| 55 | - | |
| 56 | -package provide vc::tools::trouble 1.0 | |
| 57 | -return |
| --- a/tools/lib/trouble.tcl | |
| +++ b/tools/lib/trouble.tcl | |
| @@ -1,57 +0,0 @@ | |
| 1 | # ----------------------------------------------------------------------------- |
| 2 | # Tool packages. Error reporting. |
| 3 | |
| 4 | # ----------------------------------------------------------------------------- |
| 5 | # Requirements |
| 6 | |
| 7 | package require Tcl 8.4 |
| 8 | package require vc::tools::log |
| 9 | |
| 10 | namespace eval ::vc::tools::trouble { |
| 11 | ::vc::tools::log::system trouble |
| 12 | namespace import ::vc::tools::log::write |
| 13 | } |
| 14 | |
| 15 | # ----------------------------------------------------------------------------- |
| 16 | # API |
| 17 | |
| 18 | # vc::tools::trouble::add message - Report error (shown in general |
| 19 | # log), and remember for re-display at exit. |
| 20 | |
| 21 | # ----------------------------------------------------------------------------- |
| 22 | # API Implementation |
| 23 | |
| 24 | proc ::vc::tools::trouble::add {text} { |
| 25 | variable messages |
| 26 | lappend messages $text |
| 27 | write trouble 0 $text |
| 28 | return |
| 29 | } |
| 30 | |
| 31 | # ----------------------------------------------------------------------------- |
| 32 | # Internals. Hook into the application exit, show the remembered messages, then |
| 33 | # pass through the regular command. |
| 34 | |
| 35 | rename ::exit vc::tools::trouble::EXIT |
| 36 | proc ::exit {{status 0}} { |
| 37 | variable ::vc::tools::trouble::messages |
| 38 | foreach m $messages { |
| 39 | write trouble 0 $m |
| 40 | } |
| 41 | ::vc::tools::trouble::EXIT $status |
| 42 | # Not reached. |
| 43 | return |
| 44 | } |
| 45 | |
| 46 | namespace eval ::vc::tools::trouble { |
| 47 | # List of the remembered error messages to be shown at exit |
| 48 | variable messages {} |
| 49 | |
| 50 | namespace export add |
| 51 | } |
| 52 | |
| 53 | # ----------------------------------------------------------------------------- |
| 54 | # Ready |
| 55 | |
| 56 | package provide vc::tools::trouble 1.0 |
| 57 | return |
| --- a/tools/lib/trouble.tcl | |
| +++ b/tools/lib/trouble.tcl | |
| @@ -1,57 +0,0 @@ | |
Binary file
Binary file
Binary file
Binary file