21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
#----------------------------------------------------------------------
# $Revision$
#----------------------------------------------------------------------
##############################################################################
# Revision Control System specific procedures
##############################################################################
namespace eval eskil::rev::CVS {}
namespace eval eskil::rev::RCS {}
namespace eval eskil::rev::CT {}
namespace eval eskil::rev::GIT {}
proc eskil::rev::CVS::detect {file} {
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
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
|
#----------------------------------------------------------------------
# $Revision$
#----------------------------------------------------------------------
##############################################################################
# Revision Control System specific procedures
##############################################################################
# eskil::rev::XXX::detect {file}
#
# Detect if a file is revision controlled under this system.
#
# Returns true if controlled or false if not.
# eskil::rev::XXX::ParseRevs {filename revs}
#
# Figure out revision from a list given by user
#
# Returns a list of revisions to display.
# eskil::rev::XXX::get {filename outfile rev}
#
# Get a revision of a file and place it in outfile.
# rev is in any format understood by this system, and
# should be retrieved from ParseRevs
namespace eval eskil::rev::CVS {}
namespace eval eskil::rev::RCS {}
namespace eval eskil::rev::CT {}
namespace eval eskil::rev::GIT {}
proc eskil::rev::CVS::detect {file} {
|
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
proc eskil::rev::RCS::get {filename outfile {rev {}}} {
catch {exec co -p$rev [file nativename $filename] \
> $outfile}
}
# Get a GIT revision
# No support for revisions yet
proc eskil::rev::GIT::get {filename outfile {rev {}}} {
# Dummy copy for now FIXA
file copy $filename $outfile
}
# Get a ClearCase revision
proc eskil::rev::CT::get {filename outfile rev} {
set filerev [file nativename $filename@@$rev]
if {[catch {exec cleartool get -to $outfile $filerev} msg]} {
tk_messageBox -icon error -title "Cleartool error" -message $msg
|
|
>
>
>
>
>
>
>
>
>
>
>
>
|
|
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
154
155
156
|
proc eskil::rev::RCS::get {filename outfile {rev {}}} {
catch {exec co -p$rev [file nativename $filename] \
> $outfile}
}
# Get a GIT revision
# No support for revisions yet
proc eskil::rev::GIT::get {filename outfile rev} {
set old [pwd]
set dir [file dirname $filename]
set tail [file tail $filename]
# Locate the top directory
while {![file isdirectory $dir/.git]} {
set thisdir [file tail $dir]
set dir [file dirname $dir]
set tail [file join $thisdir $tail]
}
cd $dir
catch {exec git show $rev:$tail > $outfile}
cd $old
# Dummy copy for now FIXA
#file copy $filename $outfile
}
# Get a ClearCase revision
proc eskil::rev::CT::get {filename outfile rev} {
set filerev [file nativename $filename@@$rev]
if {[catch {exec cleartool get -to $outfile $filerev} msg]} {
tk_messageBox -icon error -title "Cleartool error" -message $msg
|
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
|
# Figure out RCS revision from arguments
proc eskil::rev::RCS::ParseRevs {filename revs} {
return $revs
}
# Figure out GIT revision from arguments
proc eskil::rev::GIT::ParseRevs {filename revs} {
return [list HEAD]
}
# Figure out CVS revision from arguments
proc eskil::rev::CVS::ParseRevs {filename revs} {
set result {}
foreach rev $revs {
# An integer rev is a relative rev
|
>
>
>
>
>
>
>
>
>
|
>
>
|
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
|
# Figure out RCS revision from arguments
proc eskil::rev::RCS::ParseRevs {filename revs} {
return $revs
}
# Figure out GIT revision from arguments
proc eskil::rev::GIT::ParseRevs {filename revs} {
set result ""
foreach rev $revs {
switch -glob -- $rev {
HEAD - master {
lappend result $rev
}
}
}
if {[llength $result] == 0} {
set result [list HEAD]
}
return $result
}
# Figure out CVS revision from arguments
proc eskil::rev::CVS::ParseRevs {filename revs} {
set result {}
foreach rev $revs {
# An integer rev is a relative rev
|