/usr/share/tkcvs/modules.tcl is in tkcvs 8.2.1-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | #
# Tcl Library for TkCVS
#
#
# Procedures to parse the CVS modules file and store whatever is
# read into various associative arrays, sorted, and unsorted lists.
#
#
# Global variables:
#
# modval
# The string that specifies or defines the module.
# modtitle
# The descriptive title of the module. If not specified, modval is used.
# cvscfg
# General configuration variables (array)
# filenames
# For each module, the list of files that it contains.
proc gather_mod_index {} {
#
# Creates a new global list called modlist for the report printouts
#
global cvscfg
global modtitle
global dcontents
global dparent
global modlist
global modlist_sorted
#gen_log:log T "ENTER ()"
set modlist {}
set dlist {}
if {! [info exists modtitle]} {
gen_log:log T "LEAVE (no modtitle array)"
return
}
foreach d [array names dcontents] {
#gen_log:log D "dcontents($d) is $dcontents($d)"
foreach i $dcontents($d) {
lappend dlist $i
set path [file join $d $i]
set dparent($path) $d
#gen_log:log D "dparent($path) is $d"
}
}
foreach mcode [array names modtitle] {
# Skip aliases
if {[string match "-a *" $modtitle($mcode)]} {
continue
}
# Dont add subdirs to the list
set match 0
foreach i $dlist {
if {$i == $mcode} {
set match 1
}
}
if {! $match} {
lappend modlist "$mcode\t$modtitle($mcode)"
}
}
set modlist_sorted [lsort $modlist]
if {$cvscfg(logging) && [regexp -nocase {d} $cvscfg(log_classes)]} {
foreach idx $modlist_sorted {
#gen_log:log D "$idx"
set dname [lindex $idx 0]
if {[info exists dparent($dname)]} {
#gen_log:log D " PARENT: $dparent($dname)"
}
if {[info exists dcontents($dname)]} {
#gen_log:log D " CHILDREN: $dcontents($dname)"
}
set desc [find_subdirs $dname 0]
if {$desc != ""} {
#gen_log:log D " SUBDIRS: $desc"
}
}
}
#gen_log:log T "LEAVE"
}
proc find_filenames {mcode} {
#
# This does the work of setting up the filenames array for a module,
# containing the list of file names within it.
#
global filenames
global cwd
global cvs
global cvsglb
global cvscfg
global checkout_version
global feedback
gen_log:log T "ENTER ($mcode)"
if {[info exists filenames($mcode)]} {
set filenames($mcode) ""
}
# Trick of using rdiff to list files without checking them out
# derived from "cvsls" by Eugene Kramer
# cvs 1.9:
# Need to use -f with pserver, or it skips files that havent
# changed. With local repository, it reports them as new.
# But without pserver, it skips them with -f but not without!
# cvs 1.10.8:
# Both pserver and local act like 1.9 local, that is, -f makes
# it skip new files.
set commandline \
"$cvs -d $cvscfg(cvsroot) rdiff -s -D 01/01/1971 $mcode"
gen_log:log C $commandline
catch {eval "exec $commandline"} view_this
set view_lines [split $view_this "\n"]
foreach line $view_lines {
#gen_log:log D "$line"
if {[string match "File *" $line]} {
set lst [split $line]
set cut [expr {[llength $lst] - 6}]
set dname [join [lrange $lst 1 $cut]]
#gen_log:log D "$dname"
lappend filenames($mcode) $dname
}
}
gen_log:log T "LEAVE"
}
proc find_subdirs {mname level} {
global dcontents
global subdirs
#gen_log:log T "ENTER ($mname $level)"
if {$level == 0} {
set subdirs {}
}
if {[info exists dcontents($mname)]} {
#gen_log:log D "$mname contents: {$dcontents($mname)}"
foreach d $dcontents($mname) {
set path [file join $mname $d]
if {[info exists dcontents($path)]} {
lappend subdirs $path
}
find_subdirs $path 1
}
}
#gen_log:log T "LEAVE ($subdirs)"
return $subdirs
}
|