summaryrefslogtreecommitdiff
path: root/tools/cvs2fossil/lib/c2f_pimportfiles.tcl
diff options
context:
space:
mode:
authorcashmere <cashmere@autistici.org>2026-09-04 09:05:24 +0200
committercashmere <cashmere@autistici.org>2026-09-04 09:05:24 +0200
commit4f49b16079b27d7ce633619e4cddfdf2bffbc952 (patch)
treec296c1e7f3c3e2f6859c6d3a1b1b208779b89679 /tools/cvs2fossil/lib/c2f_pimportfiles.tcl
downloadrelic-master.tar.gz
initial commitHEADmaster
Diffstat (limited to 'tools/cvs2fossil/lib/c2f_pimportfiles.tcl')
-rw-r--r--tools/cvs2fossil/lib/c2f_pimportfiles.tcl151
1 files changed, 151 insertions, 0 deletions
diff --git a/tools/cvs2fossil/lib/c2f_pimportfiles.tcl b/tools/cvs2fossil/lib/c2f_pimportfiles.tcl
new file mode 100644
index 0000000..90e8d8a
--- /dev/null
+++ b/tools/cvs2fossil/lib/c2f_pimportfiles.tcl
@@ -0,0 +1,151 @@
+## -*- tcl -*-
+# # ## ### ##### ######## ############# #####################
+## Copyright (c) 2007-2008 Andreas Kupries.
+#
+# This software is licensed as described in the file LICENSE, which
+# you should have received as part of this distribution.
+#
+# This software consists of voluntary contributions made by many
+# individuals. For exact contribution history, see the revision
+# history and logs, available at http://fossil-scm.hwaci.com/fossil
+# # ## ### ##### ######## ############# #####################
+
+## Pass XII. This is the first of the backend passes. It imports the
+## revisions of all files into one or more fossil repositories, one
+## per project.
+
+# # ## ### ##### ######## ############# #####################
+## Requirements
+
+package require Tcl 8.4 ; # Required runtime.
+package require snit ; # OO system.
+package require vc::tools::log ; # User feedback.
+package require vc::fossil::import::cvs::repository ; # Repository management.
+package require vc::fossil::import::cvs::state ; # State storage.
+package require vc::fossil::import::cvs::fossil ; # Access to fossil repositories.
+
+# # ## ### ##### ######## ############# #####################
+## Register the pass with the management
+
+vc::fossil::import::cvs::pass define \
+ ImportFiles \
+ {Import the file revisions into fossil repositories} \
+ ::vc::fossil::import::cvs::pass::importfiles
+
+# # ## ### ##### ######## ############# #####################
+##
+
+snit::type ::vc::fossil::import::cvs::pass::importfiles {
+ # # ## ### ##### ######## #############
+ ## Public API
+
+ typemethod setup {} {
+ # Define the names and structure of the persistent state of
+ # this pass.
+
+ state use project
+ state use file
+ state use revision
+ state use meta
+ state use author
+ state use cmessage
+ state use symbol
+
+ # Discard on setup. Do not discard on deferal.
+ state discard revuuid
+ state extend revuuid {
+ rid INTEGER NOT NULL REFERENCES revision UNIQUE,
+ uuid INTEGER NOT NULL -- fossil id of the revision
+ -- unique within the project
+ }
+
+ # Remember the locations of the scratch data createdby this
+ # pass, for use by the next (importing changesets).
+ state discard space
+ state extend space {
+ pid INTEGER NOT NULL REFERENCES project,
+ repository TEXT NOT NULL,
+ workspace TEXT NOT NULL
+ }
+ return
+ }
+
+ typemethod load {} {
+ # Pass manager interface. Executed to load data computed by
+ # this pass into memory when this pass is skipped instead of
+ # executed.
+ return
+ }
+
+ typemethod run {} {
+ # Pass manager interface. Executed to perform the
+ # functionality of the pass.
+
+ foreach project [repository projects] {
+ log write 1 importfiles {Importing project "[$project base]"}
+
+ set pid [$project id]
+ set fossil [fossil %AUTO%]
+ $fossil initialize
+
+ state transaction {
+ # Layer I: Files and their revisions
+ foreach file [$project files] {
+ $file pushto $fossil
+ }
+
+ # Save the scratch locations, needed by the next pass.
+ struct::list assign [$fossil space] r w
+ state run {
+ DELETE FROM space
+ WHERE pid = $pid
+ ;
+ INSERT INTO space (pid, repository, workspace)
+ VALUES ($pid, $r, $w);
+ }
+ }
+
+ $fossil destroy
+ }
+ return
+ }
+
+ typemethod discard {} {
+ # Pass manager interface. Executed for all passes after the
+ # run passes, to remove all data of this pass from the state,
+ # as being out of date.
+
+ # Not discarding revuuid/space here, allow us to keep the info
+ # for the next pass even if the revisions are recomputed.
+ return
+ }
+
+ # # ## ### ##### ######## #############
+ ## Internal methods
+
+ # # ## ### ##### ######## #############
+ ## Configuration
+
+ pragma -hasinstances no ; # singleton
+ pragma -hastypeinfo no ; # no introspection
+ pragma -hastypedestroy no ; # immortal
+
+ # # ## ### ##### ######## #############
+}
+
+namespace eval ::vc::fossil::import::cvs::pass {
+ namespace export importfiles
+ namespace eval importfiles {
+ namespace import ::vc::fossil::import::cvs::repository
+ namespace import ::vc::fossil::import::cvs::state
+ namespace import ::vc::fossil::import::cvs::fossil
+ namespace import ::vc::tools::log
+ log register importfiles
+ }
+}
+
+# # ## ### ##### ######## ############# #####################
+## Ready
+
+package provide vc::fossil::import::cvs::pass::importfiles 1.0
+return