︙ | | | ︙ | |
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
namespace eval eskil::rev::CVS {}
namespace eval eskil::rev::RCS {}
namespace eval eskil::rev::CT {}
namespace eval eskil::rev::GIT {}
namespace eval eskil::rev::SVN {}
namespace eval eskil::rev::HG {}
namespace eval eskil::rev::BZR {}
proc eskil::rev::CVS::detect {file} {
if {$file eq ""} {
set dir [pwd]
} else {
set dir [file dirname $file]
}
|
>
|
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
namespace eval eskil::rev::CVS {}
namespace eval eskil::rev::RCS {}
namespace eval eskil::rev::CT {}
namespace eval eskil::rev::GIT {}
namespace eval eskil::rev::SVN {}
namespace eval eskil::rev::HG {}
namespace eval eskil::rev::BZR {}
namespace eval eskil::rev::P4 {}
proc eskil::rev::CVS::detect {file} {
if {$file eq ""} {
set dir [pwd]
} else {
set dir [file dirname $file]
}
|
︙ | | | ︙ | |
173
174
175
176
177
178
179
180
181
182
183
184
185
186
|
[file isdirectory [file join $dir .. .. .git]]} {
if {[auto_execok git] ne ""} {
return 1
}
}
return 0
}
# Get a CVS revision
proc eskil::rev::CVS::get {filename outfile rev} {
set old ""
set dir [file dirname $filename]
if {$dir != "."} {
set old [pwd]
|
>
>
>
>
>
>
>
>
|
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
|
[file isdirectory [file join $dir .. .. .git]]} {
if {[auto_execok git] ne ""} {
return 1
}
}
return 0
}
proc eskil::rev::P4::detect {file} {
if {[auto_execok icmp4] != ""} {
if {[catch {exec csh -c "icmp4 have $file"} p4have]} { return 0 }
if {[lindex $p4have 1] eq "-"} { return 1 }
}
return 0
}
# Get a CVS revision
proc eskil::rev::CVS::get {filename outfile rev} {
set old ""
set dir [file dirname $filename]
if {$dir != "."} {
set old [pwd]
|
︙ | | | ︙ | |
405
406
407
408
409
410
411
412
413
414
415
416
417
418
|
}
# Get a CT patch
proc eskil::rev::CT::getPatch {revs} {
# Not supported yet
return ""
}
# Return current revision of a CVS file
proc eskil::rev::CVS::GetCurrent {filename} {
set old ""
set dir [file dirname $filename]
if {$dir != "."} {
set old [pwd]
|
>
>
>
>
>
>
>
>
>
|
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
|
}
# Get a CT patch
proc eskil::rev::CT::getPatch {revs} {
# Not supported yet
return ""
}
# Get a P4 revision
proc eskil::rev::P4::get {filename outfile rev} {
set dir [file dirname $filename]
if {[catch {exec csh -c "icmp4 print -q $filename\\#$rev" > $outfile} msg]} {
tk_messageBox -icon error -title "P4 error" -message $msg
return
}
}
# Return current revision of a CVS file
proc eskil::rev::CVS::GetCurrent {filename} {
set old ""
set dir [file dirname $filename]
if {$dir != "."} {
set old [pwd]
|
︙ | | | ︙ | |
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
|
# Figure out ClearCase revision from arguments
proc eskil::rev::CT::ParseRevs {filename revs} {
if {$filename eq ""} {
# CT does not support tree versions
return {}
}
set tmp [eskil::rev::CT::current $filename]
lassign $tmp stream latest
if {[llength $revs] == 0} {
return [list [file join $stream $latest]]
}
set result {}
foreach rev $revs {
# A negative version number is offset from latest.
set offset 0
set tail [file tail $rev]
if {[string is integer -strict $tail] && $tail < 0} {
set offset $tail
set rev [file dirname $rev]
}
# If the argument is of the form "name/rev", look for a fitting one
if {![string is integer $rev] && [regexp {^[^/.]+(/\d+)?$} $rev]} {
if {[catch {exec cleartool lshistory -short $filename} allrevs]} {#
tk_messageBox -icon error -title "Cleartool error" \
-message $allrevs
|
|
<
>
>
>
|
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
|
# Figure out ClearCase revision from arguments
proc eskil::rev::CT::ParseRevs {filename revs} {
if {$filename eq ""} {
# CT does not support tree versions
return {}
}
lassign [eskil::rev::CT::current $filename] stream latest
if {[llength $revs] == 0} {
return [list [file join $stream $latest]]
}
set result {}
foreach rev $revs {
# A negative version number is offset from latest.
set offset 0
set tail [file tail $rev]
if {[string is integer -strict $tail] && $tail < 0} {
set offset $tail
if {$offset == -1} { # Predecessor
return [exec cleartool describe -fmt %PSn $filename]
}
set rev [file dirname $rev]
}
# If the argument is of the form "name/rev", look for a fitting one
if {![string is integer $rev] && [regexp {^[^/.]+(/\d+)?$} $rev]} {
if {[catch {exec cleartool lshistory -short $filename} allrevs]} {#
tk_messageBox -icon error -title "Cleartool error" \
-message $allrevs
|
︙ | | | ︙ | |
639
640
641
642
643
644
645
646
647
648
649
650
651
652
|
if {[string is integer -strict $tail] && $offset < 0} {
set path [file dirname $rev]
set tail [expr {$tail + $offset}]
if {$tail < 0} {set tail 0}
set rev [file join $path $tail]
}
lappend result $rev
}
return $result
}
# Check in CVS controlled file
proc eskil::rev::CVS::commitFile {top filename} {
set logmsg [LogDialog $top $filename]
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
|
if {[string is integer -strict $tail] && $offset < 0} {
set path [file dirname $rev]
set tail [expr {$tail + $offset}]
if {$tail < 0} {set tail 0}
set rev [file join $path $tail]
}
lappend result $rev
}
return $result
}
proc eskil::rev::P4::ParseRevs {filename revs} {
if {$revs == ""} { set revs -1 }
foreach rev $revs {
if {[string is digit $rev]} {
lappend result $rev
} else {
if {[catch {exec csh -c "icmp4 files $filename"} res]} {
tk_messageBox -icon error \
-message "Failed p4 files filename: $thisrev"
exit
}
regexp {\#(\d+)} [file tail $res] -> res
if {$rev != ""} { incr res $rev }
lappend result $res
}
}
return $result
}
# Check in CVS controlled file
proc eskil::rev::CVS::commitFile {top filename} {
set logmsg [LogDialog $top $filename]
|
︙ | | | ︙ | |
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
|
if {![file exists $file]} { return "" }
if {[info exists cache($file)]} {
return $cache($file)
}
}
set searchlist [list $preference GIT HG BZR]
foreach ns [namespace children eskil::rev] {
lappend searchlist [namespace tail $ns]
}
foreach rev $searchlist {
set result [eskil::rev::${rev}::detect $file]
if {$result} {
set cache($file) $rev
|
|
|
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
|
if {![file exists $file]} { return "" }
if {[info exists cache($file)]} {
return $cache($file)
}
}
set searchlist [list $preference GIT HG BZR P4]
foreach ns [namespace children eskil::rev] {
lappend searchlist [namespace tail $ns]
}
foreach rev $searchlist {
set result [eskil::rev::${rev}::detect $file]
if {$result} {
set cache($file) $rev
|
︙ | | | ︙ | |