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: 2a98ac44bd 2007-10-02 aku: package require Tcl 8.4 ; # Required runtime. d57b7b4a05 2007-10-02 aku: package require snit ; # OO system. d57b7b4a05 2007-10-02 aku: package require vc::tools::trouble ; # Error reporting. 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 2a98ac44bd 2007-10-02 aku: # --project 2a98ac44bd 2007-10-02 aku: # --cache (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: # -p, --passes 2a98ac44bd 2007-10-02 aku: # -v, --verbose 2a98ac44bd 2007-10-02 aku: # -q, --quiet 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 { 2a98ac44bd 2007-10-02 aku: -h - 2a98ac44bd 2007-10-02 aku: --help PrintHelp 2a98ac44bd 2007-10-02 aku: --help-passes PrintHelpPasses 2a98ac44bd 2007-10-02 aku: --version PrintVersion 2a98ac44bd 2007-10-02 aku: --project { 2a98ac44bd 2007-10-02 aku: #cvs::repository addproject [Value arguments] 2a98ac44bd 2007-10-02 aku: } 2a98ac44bd 2007-10-02 aku: --cache { 2a98ac44bd 2007-10-02 aku: # [Value arguments] 2a98ac44bd 2007-10-02 aku: } 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 } 2a98ac44bd 2007-10-02 aku: #cvs::repository setbase [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" d57b7b4a05 2007-10-02 aku: trouble info "" d57b7b4a05 2007-10-02 aku: # --project, --cache d57b7b4a05 2007-10-02 aku: # ... d57b7b4a05 2007-10-02 aku: exit 0 d57b7b4a05 2007-10-02 aku: } d57b7b4a05 2007-10-02 aku: d57b7b4a05 2007-10-02 aku: proc PrintHelpPasses {} { d57b7b4a05 2007-10-02 aku: trouble info "" d57b7b4a05 2007-10-02 aku: trouble info "Conversion passes:" d57b7b4a05 2007-10-02 aku: trouble info "" d57b7b4a05 2007-10-02 aku: set n 0 d57b7b4a05 2007-10-02 aku: foreach {p desc} { d57b7b4a05 2007-10-02 aku: CollectAr {Collect archives} d57b7b4a05 2007-10-02 aku: CollectRev {Collect revisions} d57b7b4a05 2007-10-02 aku: } { trouble info " [format %2d $n]: $p $desc" ; incr n } d57b7b4a05 2007-10-02 aku: trouble info "" d57b7b4a05 2007-10-02 aku: exit 0 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" d57b7b4a05 2007-10-02 aku: exit 0 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 d57b7b4a05 2007-10-02 aku: if {$text ne ""} {set text \n$text} d57b7b4a05 2007-10-02 aku: trouble fatal "Usage: $argv0 $usage$text" d57b7b4a05 2007-10-02 aku: # Not reached d57b7b4a05 2007-10-02 aku: return 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 2a98ac44bd 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 {} { 2a98ac44bd 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: d57b7b4a05 2007-10-02 aku: namespace eval ::vc::fossil::import::cvs::option { d57b7b4a05 2007-10-02 aku: namespace import ::vc::tools::trouble 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