Artifact d837793c993226d30d8c8b46e945ba77c8e47da9
File
tools/cvs2fossil/lib/misc.tcl
part of check-in
[38b967dcf5]
- Merge aku's CVS import changes into the main line. Fix a small bug in diff.c.
by
drh on
2007-11-17 00:29:42.
Also file
tools/cvs2fossil/lib/misc.tcl
part of check-in
[94c39d6375]
- Completed pass 6, wrote the code performing the breaking of cycles. Done by analysing each triple of changesets in the cycle at the file dependency level to see which revisions can be sorted apart. Added some additional utility routines. Extended the changeset class with the accessors required by the cycle breaker.
by
aku on
2007-11-14 05:11:56.
## -*- tcl -*-
# # ## ### ##### ######## ############# #####################
## Copyright (c) 2007 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
# # ## ### ##### ######## ############# #####################
## Utilities for various things: text formatting, max, ...
# # ## ### ##### ######## ############# #####################
## Requirements
package require Tcl 8.4 ; # Required runtime
# # ## ### ##### ######## ############# #####################
##
namespace eval ::vc::tools::misc {
# # ## ### ##### ######## #############
## Public API, Methods
# Choose singular vs plural forms of a word based on a number.
proc sp {n singular {plural {}}} {
if {$n == 1} {return $singular}
if {$plural eq ""} {set plural ${singular}s}
return $plural
}
# As above, with the number automatically put in front of the
# string.
proc nsp {n singular {plural {}}} {
return "$n [sp $n $singular $plural]"
}
# Find maximum/minimum in a list.
proc max {list} {
set max -1
foreach e $list {
if {$e < $max} continue
set max $e
}
return $max
}
proc min {list} {
set min {}
foreach e $list {
if {$min == {}} {
set min $e
} elseif {$e > $min} continue
set min $e
}
return $min
}
proc max2 {a b} {
if {$a > $b} { return $a }
return $b
}
proc min2 {a b} {
if {$a < $b} { return $a }
return $b
}
proc ldelete {lv item} {
upvar 1 $lv list
set pos [lsearch -exact $list $item]
if {$pos < 0} return
set list [lreplace $list $pos $pos]
return
}
# Delete item from list by name
proc striptrailingslash {path} {
# split and rejoin gets rid of a traling / character.
return [eval [linsert [file split $path] 0 file join]]
}
# # ## ### ##### ######## #############
}
namespace eval ::vc::tools::misc {
namespace export sp nsp max min max2 min2 ldelete striptrailingslash
}
# -----------------------------------------------------------------------------
# Ready
package provide vc::tools::misc 1.0
return