2a98ac44bd 2007-10-02 aku: ## -*- tcl -*- 2a98ac44bd 2007-10-02 aku: # # ## ### ##### ######## ############# ##################### 2a98ac44bd 2007-10-02 aku: ## Copyright (c) 2007 Andreas Kupries. 2a98ac44bd 2007-10-02 aku: # 2a98ac44bd 2007-10-02 aku: # This software is licensed as described in the file LICENSE, which 2a98ac44bd 2007-10-02 aku: # you should have received as part of this distribution. 2a98ac44bd 2007-10-02 aku: # 2a98ac44bd 2007-10-02 aku: # This software consists of voluntary contributions made by many 2a98ac44bd 2007-10-02 aku: # individuals. For exact contribution history, see the revision 2a98ac44bd 2007-10-02 aku: # history and logs, available at http://fossil-scm.hwaci.com/fossil 2a98ac44bd 2007-10-02 aku: # # ## ### ##### ######## ############# ##################### 2a98ac44bd 2007-10-02 aku: 2a98ac44bd 2007-10-02 aku: ## Option database, processes the command line. Note that not all of 2a98ac44bd 2007-10-02 aku: ## the option information is stored here. Parts are propagated to 2a98ac44bd 2007-10-02 aku: ## other pieces of the system and handled there, via option 2a98ac44bd 2007-10-02 aku: ## delegation 2a98ac44bd 2007-10-02 aku: 2a98ac44bd 2007-10-02 aku: # # ## ### ##### ######## ############# ##################### 2a98ac44bd 2007-10-02 aku: ## Requirements 2a98ac44bd 2007-10-02 aku: 47740cc1f6 2007-10-03 aku: package require Tcl 8.4 ; # Required runtime. 47740cc1f6 2007-10-03 aku: package require snit ; # OO system. 47740cc1f6 2007-10-03 aku: package require vc::tools::trouble ; # Error reporting. 2929a438ef 2007-10-04 aku: package require vc::tools::log ; # User feedback. 47740cc1f6 2007-10-03 aku: package require vc::fossil::import::cvs::pass ; # Pass management 47740cc1f6 2007-10-03 aku: package require vc::fossil::import::cvs::pass::collar ; # Pass I. 47740cc1f6 2007-10-03 aku: package require vc::fossil::import::cvs::repository ; # Repository management eb656de7d9 2007-10-05 aku: package require vc::fossil::import::cvs::state ; # State storage 2a98ac44bd 2007-10-02 aku: 2a98ac44bd 2007-10-02 aku: # # ## ### ##### ######## ############# ##################### 2a98ac44bd 2007-10-02 aku: ## 2a98ac44bd 2007-10-02 aku: 2a98ac44bd 2007-10-02 aku: snit::type ::vc::fossil::import::cvs::option { 2a98ac44bd 2007-10-02 aku: # # ## ### ##### ######## ############# 2a98ac44bd 2007-10-02 aku: ## Public API, Options. 2a98ac44bd 2007-10-02 aku: 2a98ac44bd 2007-10-02 aku: # --help, --help-passes, -h 2a98ac44bd 2007-10-02 aku: # --version 5911515322 2007-10-02 aku: # -p, --pass, --passes 47740cc1f6 2007-10-03 aku: # --ignore-conflicting-attics 2a98ac44bd 2007-10-02 aku: # --project 2929a438ef 2007-10-04 aku: # -v, --verbose 2929a438ef 2007-10-04 aku: # -q, --quiet eb656de7d9 2007-10-05 aku: # --state (conversion status, ala config.cache) 2a98ac44bd 2007-10-02 aku: 2a98ac44bd 2007-10-02 aku: # -o, --output 2a98ac44bd 2007-10-02 aku: # --dry-run 2a98ac44bd 2007-10-02 aku: # --trunk-only 2a98ac44bd 2007-10-02 aku: # --force-branch RE 2a98ac44bd 2007-10-02 aku: # --force-tag RE 2a98ac44bd 2007-10-02 aku: # --symbol-transform RE:XX 2a98ac44bd 2007-10-02 aku: # --exclude 2a98ac44bd 2007-10-02 aku: 2a98ac44bd 2007-10-02 aku: # # ## ### ##### ######## ############# 2a98ac44bd 2007-10-02 aku: ## Public API, Methods 2a98ac44bd 2007-10-02 aku: 2a98ac44bd 2007-10-02 aku: typemethod process {arguments} { 2a98ac44bd 2007-10-02 aku: # Syntax of arguments: ?option ?value?...? /path/to/cvs/repository 2a98ac44bd 2007-10-02 aku: 2a98ac44bd 2007-10-02 aku: while {[IsOption arguments -> option]} { 2a98ac44bd 2007-10-02 aku: switch -exact -- $option { eb656de7d9 2007-10-05 aku: -h - eb656de7d9 2007-10-05 aku: --help { PrintHelp ; exit 0 } eb656de7d9 2007-10-05 aku: --help-passes { pass help ; exit 0 } eb656de7d9 2007-10-05 aku: --version { PrintVersion ; exit 0 } 2929a438ef 2007-10-04 aku: -p - 2929a438ef 2007-10-04 aku: --pass - 2929a438ef 2007-10-04 aku: --passes { pass select [Value arguments] } 2929a438ef 2007-10-04 aku: --ignore-conflicting-attics { collar ignore_conflicting_attics } eb656de7d9 2007-10-05 aku: --project { repository add [Value arguments] } eb656de7d9 2007-10-05 aku: -v - eb656de7d9 2007-10-05 aku: --verbose { log verbose } eb656de7d9 2007-10-05 aku: -q - eb656de7d9 2007-10-05 aku: --quiet { log quiet } eb656de7d9 2007-10-05 aku: --state { state use [Value arguments] } 2a98ac44bd 2007-10-02 aku: default { 2a98ac44bd 2007-10-02 aku: Usage $badoption$option\n$gethelp 2a98ac44bd 2007-10-02 aku: } 2a98ac44bd 2007-10-02 aku: } 2a98ac44bd 2007-10-02 aku: } 2a98ac44bd 2007-10-02 aku: 2a98ac44bd 2007-10-02 aku: if {[llength $arguments] > 1} Usage 2a98ac44bd 2007-10-02 aku: if {[llength $arguments] < 1} { Usage $nocvs } 47740cc1f6 2007-10-03 aku: repository base [lindex $arguments 0] 2a98ac44bd 2007-10-02 aku: 2a98ac44bd 2007-10-02 aku: Validate 2a98ac44bd 2007-10-02 aku: return 2a98ac44bd 2007-10-02 aku: } 2a98ac44bd 2007-10-02 aku: 2a98ac44bd 2007-10-02 aku: # # ## ### ##### ######## ############# d57b7b4a05 2007-10-02 aku: ## Internal methods, printing information. d57b7b4a05 2007-10-02 aku: d57b7b4a05 2007-10-02 aku: proc PrintHelp {} { d57b7b4a05 2007-10-02 aku: global argv0 d57b7b4a05 2007-10-02 aku: trouble info "Usage: $argv0 $usage" d57b7b4a05 2007-10-02 aku: trouble info "" d57b7b4a05 2007-10-02 aku: trouble info " Information options" d57b7b4a05 2007-10-02 aku: trouble info "" d57b7b4a05 2007-10-02 aku: trouble info " -h, --help Print this message and exit with success" d57b7b4a05 2007-10-02 aku: trouble info " --help-passes Print list of passes and exit with success" d57b7b4a05 2007-10-02 aku: trouble info " --version Print version number of $argv0" eb656de7d9 2007-10-05 aku: trouble info " -v, --verbose Increase application's verbosity" eb656de7d9 2007-10-05 aku: trouble info " -q, --quiet Decrease application's verbosity" 5911515322 2007-10-02 aku: trouble info "" 5911515322 2007-10-02 aku: trouble info " Conversion control options" 5911515322 2007-10-02 aku: trouble info "" 5911515322 2007-10-02 aku: trouble info " -p, --pass PASS Run only the specified conversion pass" 5911515322 2007-10-02 aku: trouble info " -p, --passes ?START?:?END? Run only the passes START through END," 5911515322 2007-10-02 aku: trouble info " inclusive." 5911515322 2007-10-02 aku: trouble info "" 5911515322 2007-10-02 aku: trouble info " Passes are specified by name." 5911515322 2007-10-02 aku: trouble info "" 47740cc1f6 2007-10-03 aku: trouble info " --ignore-conflicting-attics" 47740cc1f6 2007-10-03 aku: trouble info " Prevent abort when conflicting archives" 47740cc1f6 2007-10-03 aku: trouble info " were found in both regular and Attic." eb656de7d9 2007-10-05 aku: trouble info "" eb656de7d9 2007-10-05 aku: trouble info " --state PATH Save state to the specified file, and" eb656de7d9 2007-10-05 aku: trouble info " load state of previous runs from it too." d57b7b4a05 2007-10-02 aku: trouble info "" 47740cc1f6 2007-10-03 aku: d57b7b4a05 2007-10-02 aku: # --project, --cache d57b7b4a05 2007-10-02 aku: # ... 5911515322 2007-10-02 aku: return d57b7b4a05 2007-10-02 aku: } d57b7b4a05 2007-10-02 aku: d57b7b4a05 2007-10-02 aku: proc PrintVersion {} { d57b7b4a05 2007-10-02 aku: global argv0 d57b7b4a05 2007-10-02 aku: set v [package require vc::fossil::import::cvs] d57b7b4a05 2007-10-02 aku: trouble info "$argv0 v$v" 5911515322 2007-10-02 aku: return d57b7b4a05 2007-10-02 aku: } d57b7b4a05 2007-10-02 aku: d57b7b4a05 2007-10-02 aku: proc Usage {{text {}}} { d57b7b4a05 2007-10-02 aku: global argv0 5911515322 2007-10-02 aku: trouble fatal "Usage: $argv0 $usage" 5911515322 2007-10-02 aku: if {$text ne ""} { trouble fatal "$text" } 5911515322 2007-10-02 aku: exit 1 d57b7b4a05 2007-10-02 aku: } d57b7b4a05 2007-10-02 aku: d57b7b4a05 2007-10-02 aku: # # ## ### ##### ######## ############# d57b7b4a05 2007-10-02 aku: ## Internal methods, command line processing d57b7b4a05 2007-10-02 aku: d57b7b4a05 2007-10-02 aku: typevariable usage "?option ?value?...? cvs-repository-path" 2a98ac44bd 2007-10-02 aku: typevariable nocvs " The cvs-repository-path is missing." 2a98ac44bd 2007-10-02 aku: typevariable badoption " Bad option " 2a98ac44bd 2007-10-02 aku: typevariable gethelp " Use --help to get help." 2a98ac44bd 2007-10-02 aku: 2a98ac44bd 2007-10-02 aku: proc IsOption {av _ ov} { 2a98ac44bd 2007-10-02 aku: upvar 1 $av arguments $ov option 2a98ac44bd 2007-10-02 aku: set candidate [lindex $arguments 0] 2a98ac44bd 2007-10-02 aku: if {![string match -* $candidate]} {return 0} 2a98ac44bd 2007-10-02 aku: set option $candidate 2a98ac44bd 2007-10-02 aku: set arguments [lrange $arguments 1 end] 2a98ac44bd 2007-10-02 aku: return 1 2a98ac44bd 2007-10-02 aku: } 2a98ac44bd 2007-10-02 aku: 2a98ac44bd 2007-10-02 aku: proc Value {av} { 2a98ac44bd 2007-10-02 aku: upvar 1 $av arguments 2a98ac44bd 2007-10-02 aku: set v [lindex $arguments 0] 2a98ac44bd 2007-10-02 aku: set arguments [lrange $arguments 1 end] 2a98ac44bd 2007-10-02 aku: return $v 2a98ac44bd 2007-10-02 aku: } 2a98ac44bd 2007-10-02 aku: d57b7b4a05 2007-10-02 aku: # # ## ### ##### ######## ############# d57b7b4a05 2007-10-02 aku: ## Internal methods, state validation d57b7b4a05 2007-10-02 aku: 2a98ac44bd 2007-10-02 aku: proc Validate {} { 5911515322 2007-10-02 aku: # Prevent in-depth validation if the options were already bad. 5911515322 2007-10-02 aku: trouble abort? 5911515322 2007-10-02 aku: 47740cc1f6 2007-10-03 aku: repository validate eb656de7d9 2007-10-05 aku: state setup 2a98ac44bd 2007-10-02 aku: 5911515322 2007-10-02 aku: trouble abort? d57b7b4a05 2007-10-02 aku: return 2a98ac44bd 2007-10-02 aku: } 2a98ac44bd 2007-10-02 aku: 2a98ac44bd 2007-10-02 aku: # # ## ### ##### ######## ############# 2a98ac44bd 2007-10-02 aku: ## Configuration 2a98ac44bd 2007-10-02 aku: 2a98ac44bd 2007-10-02 aku: pragma -hasinstances no ; # singleton 2a98ac44bd 2007-10-02 aku: pragma -hastypeinfo no ; # no introspection 2a98ac44bd 2007-10-02 aku: pragma -hastypedestroy no ; # immortal 2a98ac44bd 2007-10-02 aku: 2a98ac44bd 2007-10-02 aku: # # ## ### ##### ######## ############# d57b7b4a05 2007-10-02 aku: } d57b7b4a05 2007-10-02 aku: 47740cc1f6 2007-10-03 aku: namespace eval ::vc::fossil::import::cvs { 47740cc1f6 2007-10-03 aku: namespace export option 47740cc1f6 2007-10-03 aku: namespace eval option { 47740cc1f6 2007-10-03 aku: namespace import ::vc::tools::trouble 2929a438ef 2007-10-04 aku: namespace import ::vc::tools::log 47740cc1f6 2007-10-03 aku: namespace import ::vc::fossil::import::cvs::pass 47740cc1f6 2007-10-03 aku: namespace import ::vc::fossil::import::cvs::pass::collar 47740cc1f6 2007-10-03 aku: namespace import ::vc::fossil::import::cvs::repository eb656de7d9 2007-10-05 aku: namespace import ::vc::fossil::import::cvs::state 47740cc1f6 2007-10-03 aku: } 2a98ac44bd 2007-10-02 aku: } 2a98ac44bd 2007-10-02 aku: 2a98ac44bd 2007-10-02 aku: # # ## ### ##### ######## ############# ##################### 2a98ac44bd 2007-10-02 aku: ## Ready 2a98ac44bd 2007-10-02 aku: 2a98ac44bd 2007-10-02 aku: package provide vc::fossil::import::cvs::option 1.0 2a98ac44bd 2007-10-02 aku: return