Eskil

Check-in [b0d3145067]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Refactored revision file code.
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: b0d31450675bff0b34b5cb781c04a7103a154a12
User & Date: peter 2004-06-24 15:40:04.000
Context
2004-06-24
16:08
Clip Diff window existance did not stop Eskil from exiting. Refactored all CVS/RCS/CT handling to common procs. Some file dialog procs did not track current directory correctly. check-in: 3a57f4d664 user: peter tags: trunk
15:40
Refactored revision file code. check-in: b0d3145067 user: peter tags: trunk
15:08
Bugfix in nocase. Added -r support to ClearCase diff. check-in: d883625aa5 user: peter tags: trunk
Changes
Unified Diff Ignore Whitespace Patch
Changes to src/eskil.tcl.
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120

1121

1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132















1133
1134
1135
1136
1137
1138
1139
        displayOnePatch $top $leftLines $rightLines $leftLine $rightLine
    }

    close $ch
}

# Get a CVS revision
proc execCvsUpdate {filename outfile args} {
    set old ""
    set dir [file dirname $filename]
    if {$dir != "."} {
        set old [pwd]
        set outfile [file join [pwd] $outfile]
        cd $dir
        set filename [file tail $filename]
    }

    set cmd $args

    set cmd [linsert $args 0 exec cvs -z3 update -p]

    lappend cmd [file nativename $filename] > $outfile
    if {[catch {eval $cmd} res]} {
        if {![string match "*Checking out*" $res]} {
            tk_messageBox -icon error -title "CVS error" -message $res
        }
    }

    if {$old != ""} {
        cd $old
    }
}
















# Prepare for RCS/CVS diff. Checkout copies of the versions needed.
proc prepareRCS {top} {
    global Pref

    set revs {}








|









|
>
|
>











>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
        displayOnePatch $top $leftLines $rightLines $leftLine $rightLine
    }

    close $ch
}

# Get a CVS revision
proc getCvsRev {filename outfile {rev {}}} {
    set old ""
    set dir [file dirname $filename]
    if {$dir != "."} {
        set old [pwd]
        set outfile [file join [pwd] $outfile]
        cd $dir
        set filename [file tail $filename]
    }

    set cmd [list exec cvs -z3 update -p]
    if {$rev != ""} {
        lappend cmd -r $rev
    }
    lappend cmd [file nativename $filename] > $outfile
    if {[catch {eval $cmd} res]} {
        if {![string match "*Checking out*" $res]} {
            tk_messageBox -icon error -title "CVS error" -message $res
        }
    }

    if {$old != ""} {
        cd $old
    }
}

# Get an RCS revision
proc getRcsRev {filename outfile {rev {}}} {
    catch {exec co -p$rev [file nativename $filename] \
            > $outfile}
}

# Get a ClearCase revision
proc getCtRev {filename outfile stream rev} {
    set filerev [file nativename $filename@@[file join $stream $rev]]
    if {[catch {exec cleartool get -to $outfile $filerev} msg]} {
        tk_messageBox -icon error -title "Cleartool error" -message $msg
        return
    }
}

# Prepare for RCS/CVS diff. Checkout copies of the versions needed.
proc prepareRCS {top} {
    global Pref

    set revs {}

1148
1149
1150
1151
1152
1153
1154
1155
1156

1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172

1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189

1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
    switch [llength $revs] {
        0 {
            # Compare local file with latest version.
            set ::diff($top,leftFile) [tmpFile]
            set ::diff($top,rightLabel) $::diff($top,RevFile)
            set ::diff($top,rightFile)  $::diff($top,RevFile)

            if {$::diff($top,mode) eq "CVS"} {
                set ::diff($top,leftLabel) "$::diff($top,RevFile) (CVS)"

                execCvsUpdate $::diff($top,RevFile) $::diff($top,leftFile)
            } else {
                set ::diff($top,leftLabel) "$::diff($top,RevFile) (RCS)"
                catch {exec co -p [file nativename $::diff($top,RevFile)] \
                        > $::diff($top,leftFile)}
            }
        }
        1 {
            # Compare local file with specified version.
            set r [lindex $revs 0]
            set ::diff($top,leftFile) [tmpFile]
            set ::diff($top,rightLabel) $::diff($top,RevFile)
            set ::diff($top,rightFile) $::diff($top,RevFile)

            if {$::diff($top,mode) eq "CVS"} {
                set ::diff($top,leftLabel) "$::diff($top,RevFile) (CVS $r)"

                execCvsUpdate $::diff($top,RevFile) $::diff($top,leftFile) -r $r
            } else {
                set ::diff($top,leftLabel) "$::diff($top,RevFile) (RCS $r)"
                catch {exec co -p$r [file nativename $::diff($top,RevFile)] \
                        > $::diff($top,leftFile)}
            }
        }
        default {
            # Compare the two specified versions.
            set r1 [lindex $revs 0]
            set r2 [lindex $revs 1]
            set ::diff($top,leftFile) [tmpFile]
            set ::diff($top,rightFile) [tmpFile]

            if {$::diff($top,mode) eq "CVS"} {
                set ::diff($top,leftLabel) "$::diff($top,RevFile) (CVS $r1)"
                set ::diff($top,rightLabel) "$::diff($top,RevFile) (CVS $r2)"

                execCvsUpdate $::diff($top,RevFile) $::diff($top,leftFile) -r $r1
                execCvsUpdate $::diff($top,RevFile) $::diff($top,rightFile) -r $r2
            } else {
                set ::diff($top,leftLabel) "$::diff($top,RevFile) (RCS $r1)"
                set ::diff($top,rightLabel) "$::diff($top,RevFile) (RCS $r2)"
                catch {exec co -p$r1 [file nativename $::diff($top,RevFile)] \
                        > $::diff($top,leftFile)}
                catch {exec co -p$r2 [file nativename $::diff($top,RevFile)] \
                        > $::diff($top,rightFile)}
            }
        }
    }
    # Make sure labels are updated before processing starts
    update idletasks
}

# Clean up after a RCS/CVS/CT diff.
proc cleanupRCS {top} {
    global Pref

    clearTmp $::diff($top,rightFile) $::diff($top,leftFile)
    set ::diff($top,rightFile) $::diff($top,RevFile)
    set ::diff($top,leftFile) $::diff($top,RevFile)
}








|
|
>
|

<
<
|









|
|
>
|

<
<
|









|
|
|
>
|
|

<
<
<
|
<
|








|







1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176


1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191


1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208



1209

1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
    switch [llength $revs] {
        0 {
            # Compare local file with latest version.
            set ::diff($top,leftFile) [tmpFile]
            set ::diff($top,rightLabel) $::diff($top,RevFile)
            set ::diff($top,rightFile)  $::diff($top,RevFile)

            set type $::diff($top,modetype)
            set ::diff($top,leftLabel) "$::diff($top,RevFile) ($type)"
            if {$type eq "CVS"} {
                getCvsRev $::diff($top,RevFile) $::diff($top,leftFile)
            } else {


                getRcsRev $::diff($top,RevFile) $::diff($top,leftFile)
            }
        }
        1 {
            # Compare local file with specified version.
            set r [lindex $revs 0]
            set ::diff($top,leftFile) [tmpFile]
            set ::diff($top,rightLabel) $::diff($top,RevFile)
            set ::diff($top,rightFile) $::diff($top,RevFile)

            set type $::diff($top,modetype)
            set ::diff($top,leftLabel) "$::diff($top,RevFile) ($type $r)"
            if {$type eq "CVS"} {
                getCvsRev $::diff($top,RevFile) $::diff($top,leftFile) $r
            } else {


                getRcsRev $::diff($top,RevFile) $::diff($top,leftFile) $r
            }
        }
        default {
            # Compare the two specified versions.
            set r1 [lindex $revs 0]
            set r2 [lindex $revs 1]
            set ::diff($top,leftFile) [tmpFile]
            set ::diff($top,rightFile) [tmpFile]

            set type $::diff($top,modetype)
            set ::diff($top,leftLabel) "$::diff($top,RevFile) ($type $r1)"
            set ::diff($top,rightLabel) "$::diff($top,RevFile) ($type $r2)"
            if {$type eq "CVS"} {
                getCvsRev $::diff($top,RevFile) $::diff($top,leftFile) $r1
                getCvsRev $::diff($top,RevFile) $::diff($top,rightFile) $r2
            } else {



                getRcsRev $::diff($top,RevFile) $::diff($top,leftFile) $r1

                getRcsRev $::diff($top,RevFile) $::diff($top,rightFile) $r2
            }
        }
    }
    # Make sure labels are updated before processing starts
    update idletasks
}

# Clean up after a RCS/CVS/CT diff.
proc cleanupRev {top} {
    global Pref

    clearTmp $::diff($top,rightFile) $::diff($top,leftFile)
    set ::diff($top,rightFile) $::diff($top,RevFile)
    set ::diff($top,leftFile) $::diff($top,RevFile)
}

1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284

1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297

1298
1299
1300
1301
1302

1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
            set r [lindex $revs 0]
            set ::diff($top,leftFile) [tmpFile]
            set ::diff($top,rightLabel) $::diff($top,RevFile)
            set ::diff($top,rightFile) $::diff($top,RevFile)

            set ::diff($top,leftLabel) "$::diff($top,RevFile) (CT $r)"

            set filerev [file nativename \
                                 $::diff($top,RevFile)@@[file join $stream $r]]
            if {[catch {exec cleartool get -to $::diff($top,leftFile) \
                                $filerev} msg]} {
                puts "Cleartool error: $msg"
                return
            }
        }
        default {
            # Compare the two specified versions.
            set r1 [lindex $revs 0]
            set r2 [lindex $revs 1]
            set ::diff($top,leftFile) [tmpFile]
            set ::diff($top,rightFile) [tmpFile]

            set ::diff($top,leftLabel) "$::diff($top,RevFile) (CT $r1)"
            set ::diff($top,rightLabel) "$::diff($top,RevFile) (CT $r2)"
            set filerev1 [file nativename \
                                 $::diff($top,RevFile)@@[file join $stream $r1]]
            set filerev2 [file nativename \
                                 $::diff($top,RevFile)@@[file join $stream $r2]]
            if {[catch {exec cleartool get -to $::diff($top,leftFile) \
                                $filerev1} msg]} {
                puts "Cleartool error: $msg"
                return
            }

            if {[catch {exec cleartool get -to $::diff($top,rightFile) \
                                $filerev2} msg]} {
                puts "Cleartool error: $msg"
                return
            }
        }
    }
}

# Prepare for a diff by creating needed temporary files
proc prepareFiles {top} {
    set ::diff($top,cleanup) ""
    if {$::diff($top,mode) eq "RCS" || $::diff($top,mode) eq "CVS"} {

        prepareRCS $top
        set ::diff($top,cleanup) "RCS"
    } elseif {$::diff($top,mode) eq "CT"} {
        prepareClearCase $top
        set ::diff($top,cleanup) "CT"

    } elseif {[string match "conflict*" $::diff($top,mode)]} {
        prepareConflict $top
        set ::diff($top,cleanup) "conflict"
    }
}

# Clean up after a diff
proc cleanupFiles {top} {
    switch $::diff($top,cleanup) {
        "RCS" - "CT" {cleanupRCS      $top}
        "conflict"   {cleanupConflict $top}
    }
}

# Main diff function.
proc doDiff {top} {
    global Pref
    global doingLine1 doingLine2







<
<
|
<
<
<
<










<
<
<
<
<
<
<
<
|
>
|
<
<
<
<







|
>
|
|
|
|
|
>
|








|
|







1264
1265
1266
1267
1268
1269
1270


1271




1272
1273
1274
1275
1276
1277
1278
1279
1280
1281








1282
1283
1284




1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
            set r [lindex $revs 0]
            set ::diff($top,leftFile) [tmpFile]
            set ::diff($top,rightLabel) $::diff($top,RevFile)
            set ::diff($top,rightFile) $::diff($top,RevFile)

            set ::diff($top,leftLabel) "$::diff($top,RevFile) (CT $r)"



            getCtRev $::diff($top,RevFile) $::diff($top,leftFile) $stream $r




        }
        default {
            # Compare the two specified versions.
            set r1 [lindex $revs 0]
            set r2 [lindex $revs 1]
            set ::diff($top,leftFile) [tmpFile]
            set ::diff($top,rightFile) [tmpFile]

            set ::diff($top,leftLabel) "$::diff($top,RevFile) (CT $r1)"
            set ::diff($top,rightLabel) "$::diff($top,RevFile) (CT $r2)"









            getCtRev $::diff($top,RevFile) $::diff($top,leftFile) $stream $r1
            getCtRev $::diff($top,RevFile) $::diff($top,rightFile) $stream $r2




        }
    }
}

# Prepare for a diff by creating needed temporary files
proc prepareFiles {top} {
    set ::diff($top,cleanup) ""
    if {$::diff($top,mode) eq "rev"} {
        if {$::diff($top,modetype) eq "RCS" || $::diff($top,modetype) eq "CVS"} {
            prepareRCS $top
            set ::diff($top,cleanup) "rev"
        } elseif {$::diff($top,modetype) eq "CT"} {
            prepareClearCase $top
            set ::diff($top,cleanup) "rev"
        }
    } elseif {"conflict" eq $::diff($top,mode)} {
        prepareConflict $top
        set ::diff($top,cleanup) "conflict"
    }
}

# Clean up after a diff
proc cleanupFiles {top} {
    switch $::diff($top,cleanup) {
        "rev"       {cleanupRev      $top}
        "conflict"  {cleanupConflict $top}
    }
}

# Main diff function.
proc doDiff {top} {
    global Pref
    global doingLine1 doingLine2
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388

    set differr [catch {eval DiffUtil::diffFiles $opts \
            \$::diff($top,leftFile) \$::diff($top,rightFile)} diffres]

    # In conflict mode we can use the diff information collected when
    # parsing the conflict file. This makes sure the blocks in the conflict
    # file become change-blocks during merge.
    if {$::diff($top,mode) eq "conflictPure"} {
        set diffres $::diff($top,conflictDiff)
    }

    if {$differr != 0} {
        $::widgets($top,wDiff1) insert end $diffres
        normalCursor $top
        return







|







1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385

    set differr [catch {eval DiffUtil::diffFiles $opts \
            \$::diff($top,leftFile) \$::diff($top,rightFile)} diffres]

    # In conflict mode we can use the diff information collected when
    # parsing the conflict file. This makes sure the blocks in the conflict
    # file become change-blocks during merge.
    if {$::diff($top,mode) eq "conflict" && $::diff($top,modetype) eq "Pure"} {
        set diffres $::diff($top,conflictDiff)
    }

    if {$differr != 0} {
        $::widgets($top,wDiff1) insert end $diffres
        normalCursor $top
        return
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
    normalCursor $top
    showDiff $top 0
    if {$::widgets($top,eqLabel) eq "!"} {
        set ::widgets($top,eqLabel) " "
    }

    cleanupFiles $top
    if {[string match "conflict*" $::diff($top,mode)]} {
        if {$::widgets($top,eqLabel) != "="} {
            makeMergeWin $top
        }
    }
    if {$::diff($top,printFile) != ""} {
        after idle "doPrint $top 1 ; cleanupAndExit all"
    }







|







1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
    normalCursor $top
    showDiff $top 0
    if {$::widgets($top,eqLabel) eq "!"} {
        set ::widgets($top,eqLabel) " "
    }

    cleanupFiles $top
    if {"conflict" eq $::diff($top,mode)} {
        if {$::widgets($top,eqLabel) != "="} {
            makeMergeWin $top
        }
    }
    if {$::diff($top,printFile) != ""} {
        after idle "doPrint $top 1 ; cleanupAndExit all"
    }
1666
1667
1668
1669
1670
1671
1672

1673
1674
1675
1676
1677
1678
1679
    }
}

proc openConflict {top} {
    global Pref
    if {[doOpenRight $top]} {
        set ::diff($top,mode) "conflict"

        set Pref(ignore) " "
        set Pref(nocase) 0
        set ::diff($top,conflictFile) $::diff($top,rightFile)
        set ::diff($top,mergeFile) ""
        doDiff $top
    }
}







>







1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
    }
}

proc openConflict {top} {
    global Pref
    if {[doOpenRight $top]} {
        set ::diff($top,mode) "conflict"
        set ::diff($top,modetype) ""
        set Pref(ignore) " "
        set Pref(nocase) 0
        set ::diff($top,conflictFile) $::diff($top,rightFile)
        set ::diff($top,mergeFile) ""
        doDiff $top
    }
}
1687
1688
1689
1690
1691
1692
1693

1694
1695
1696
1697
1698
1699
1700
1701
1702
1703

1704
1705
1706
1707
1708
1709
1710
1711
        set ::diff($top,patchFile) $::diff($top,leftFile)
        doDiff $top
    }
}

proc openRCS {top} {
    if {[doOpenRight $top]} {

        set ::diff($top,mode) "RCS"
        set ::diff($top,RevFile) $::diff($top,rightFile)
        set ::diff($top,leftLabel) "RCS"
        set ::diff($top,leftOK) 0
        doDiff $top
    }
}

proc openCVS {top} {
    if {[doOpenRight $top]} {

        set ::diff($top,mode) "CVS"
        set ::diff($top,RevFile) $::diff($top,rightFile)
        set ::diff($top,leftLabel) "CVS"
        set ::diff($top,leftOK) 0
        doDiff $top
    }
}








>
|









>
|







1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
        set ::diff($top,patchFile) $::diff($top,leftFile)
        doDiff $top
    }
}

proc openRCS {top} {
    if {[doOpenRight $top]} {
        set ::diff($top,mode) "rev"
        set ::diff($top,modetype) "RCS"
        set ::diff($top,RevFile) $::diff($top,rightFile)
        set ::diff($top,leftLabel) "RCS"
        set ::diff($top,leftOK) 0
        doDiff $top
    }
}

proc openCVS {top} {
    if {[doOpenRight $top]} {
        set ::diff($top,mode) "rev"
        set ::diff($top,modetype) "CVS"
        set ::diff($top,RevFile) $::diff($top,rightFile)
        set ::diff($top,leftLabel) "CVS"
        set ::diff($top,leftOK) 0
        doDiff $top
    }
}

1782
1783
1784
1785
1786
1787
1788
1789

1790

1791
1792
1793
1794
1795
1796
1797
1798
    set leftMergeData {}
    set rightMergeData {}

    if {![info exists ::diff($top,changes)]} {
        set ::diff($top,changes) {}
    }

    if {$::diff($top,mode) eq "RCS" || $::diff($top,mode) eq "CVS"} {

        prepareRCS $top

    } elseif {[string match "conflict*" $::diff($top,mode)]} {
        prepareConflict $top
    }

    set ch1 [open $::diff($top,leftFile) r]
    set ch2 [open $::diff($top,rightFile) r]
    set doingLine1 1
    set doingLine2 1







|
>
|
>
|







1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
    set leftMergeData {}
    set rightMergeData {}

    if {![info exists ::diff($top,changes)]} {
        set ::diff($top,changes) {}
    }

    if {$::diff($top,mode) eq "rev"} {
        if {$::diff($top,modetype) eq "RCS" || $::diff($top,modetype) eq "CVS"} {
            prepareRCS $top
        }
    } elseif {"conflict" eq $::diff($top,mode)} {
        prepareConflict $top
    }

    set ch1 [open $::diff($top,leftFile) r]
    set ch2 [open $::diff($top,rightFile) r]
    set doingLine1 1
    set doingLine2 1
1843
1844
1845
1846
1847
1848
1849
1850

1851

1852
1853
1854
1855
1856
1857
1858
1859
    }
    lappend leftMergeData $data1
    lappend rightMergeData $data2

    close $ch1
    close $ch2

    if {$::diff($top,mode) eq "RCS" || $::diff($top,mode) eq "CVS"} {

        cleanupRCS $top

    } elseif {[string match "conflict*" $::diff($top,mode)]} {
        cleanupConflict $top
    }
}

# Fill up the merge window with the initial version of merged files.
proc fillMergeWindow {top} {
    global mergeSelection leftMergeData rightMergeData curMergeSel curMerge







|
>
|
>
|







1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
    }
    lappend leftMergeData $data1
    lappend rightMergeData $data2

    close $ch1
    close $ch2

    if {$::diff($top,mode) eq "rev"} {
        if {$::diff($top,modetype) eq "RCS" || $::diff($top,modetype) eq "CVS"} {
            cleanupRev $top
        }
    } elseif {"conflict" eq $::diff($top,mode)} {
        cleanupConflict $top
    }
}

# Fill up the merge window with the initial version of merged files.
proc fillMergeWindow {top} {
    global mergeSelection leftMergeData rightMergeData curMergeSel curMerge
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965

# Save the merge result.
proc saveMerge {top} {
    set w $top.merge.t

    if {$::diff($top,mergeFile) eq ""} {
        set apa no
        if {[string match "conflict*" $::diff($top,mode)]} {
            set apa [tk_messageBox -parent $top.merge -icon question \
                    -title "Save merge file" -type yesno -message \
                    "Do you want to overwrite the original conflict file?"]
        }
        if {$apa == "yes"} {
            set ::diff($top,mergeFile) $::diff($top,conflictFile)
        } else {







|







1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969

# Save the merge result.
proc saveMerge {top} {
    set w $top.merge.t

    if {$::diff($top,mergeFile) eq ""} {
        set apa no
        if {"conflict" eq $::diff($top,mode)} {
            set apa [tk_messageBox -parent $top.merge -icon question \
                    -title "Save merge file" -type yesno -message \
                    "Do you want to overwrite the original conflict file?"]
        }
        if {$apa == "yes"} {
            set ::diff($top,mergeFile) $::diff($top,conflictFile)
        } else {
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
    wm protocol $w WM_DELETE_WINDOW "closeMerge $top"

    grid $w.f.rb1 $w.f.rb2 $w.f.rb3 $w.f.rb4 x $w.f.b1 $w.f.b2 x \
            $w.f.bl $w.f.br x x x $w.f.bs $w.f.bq
    grid columnconfigure $w.f {4 7 10 12} -minsize 10
    grid columnconfigure $w.f 10 -weight 1

    if {[string match conflict* $::diff($top,mode)]} {
        checkbutton $w.f.bm -text "Pure" -variable diff($top,mode) \
                -onvalue "conflictPure" -offvalue "conflict" -command {doDiff}
        grid $w.f.bm -row 0 -column 11
    }

    text $w.t -width 80 -height 20 -xscrollcommand "$w.sbx set" \
            -yscrollcommand "$w.sby set" -font myfont
    scrollbar $w.sbx -orient horizontal -command "$w.t xview"
    scrollbar $w.sby -orient vertical   -command "$w.t yview"







|
|
|







2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
    wm protocol $w WM_DELETE_WINDOW "closeMerge $top"

    grid $w.f.rb1 $w.f.rb2 $w.f.rb3 $w.f.rb4 x $w.f.b1 $w.f.b2 x \
            $w.f.bl $w.f.br x x x $w.f.bs $w.f.bq
    grid columnconfigure $w.f {4 7 10 12} -minsize 10
    grid columnconfigure $w.f 10 -weight 1

    if {"conflict" eq $::diff($top,mode)} {
        checkbutton $w.f.bm -text "Pure" -variable diff($top,modetype) \
                -onvalue "Pure" -offvalue "" -command {doDiff}
        grid $w.f.bm -row 0 -column 11
    }

    text $w.t -width 80 -height 20 -xscrollcommand "$w.sbx set" \
            -yscrollcommand "$w.sby set" -font myfont
    scrollbar $w.sbx -orient horizontal -command "$w.t xview"
    scrollbar $w.sby -orient vertical   -command "$w.t yview"
4628
4629
4630
4631
4632
4633
4634

4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650

4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668

4669
4670
4671
4672
4673
4674
4675
4676
            after idle [list doDiff $top]
            return
        }
        if {!$autobrowse} {
            # Check for revision control
            # RCS
            if {[llength [glob -nocomplain [file join $fulldir RCS]]]} {

                set ::diff($top,mode) "RCS"
                set ::diff($top,rightDir) $fulldir
                set ::diff($top,RevFile) $fullname
                set ::diff($top,rightLabel) $fullname
                set ::diff($top,rightFile) $fullname
                set ::diff($top,rightOK) 1
                set ::diff($top,leftLabel) "RCS"
                if {$noautodiff} {
                    enableRedo $top
                } else {
                    after idle [list doDiff $top]
                }
                return
            }
            # CVS
            if {[llength [glob -nocomplain [file join $fulldir CVS]]]} {

                set ::diff($top,mode) "CVS"
                set ::diff($top,rightDir) $fulldir
                set ::diff($top,RevFile) $fullname
                set ::diff($top,rightLabel) $fullname
                set ::diff($top,rightFile) $fullname
                set ::diff($top,rightOK) 1
                set ::diff($top,leftLabel) "CVS"
                if {$noautodiff} {
                    enableRedo $top
                } else {
                    after idle [list doDiff $top]
                }
                return
            }
            # ClearCase
            if {[auto_execok cleartool] != ""} {
                if {![catch {exec cleartool pwv -s} view] && \
                            $view != "** NONE **"} {

                    set ::diff($top,mode) "CT"
                    set ::diff($top,rightDir) $fulldir
                    set ::diff($top,RevFile) $fullname
                    set ::diff($top,rightLabel) $fullname
                    set ::diff($top,rightFile) $fullname
                    set ::diff($top,rightOK) 1
                    set ::diff($top,leftLabel) "CT"
                    if {$noautodiff} {







>
|















>
|

















>
|







4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
            after idle [list doDiff $top]
            return
        }
        if {!$autobrowse} {
            # Check for revision control
            # RCS
            if {[llength [glob -nocomplain [file join $fulldir RCS]]]} {
                set ::diff($top,mode) "rev"
                set ::diff($top,modetype) "RCS"
                set ::diff($top,rightDir) $fulldir
                set ::diff($top,RevFile) $fullname
                set ::diff($top,rightLabel) $fullname
                set ::diff($top,rightFile) $fullname
                set ::diff($top,rightOK) 1
                set ::diff($top,leftLabel) "RCS"
                if {$noautodiff} {
                    enableRedo $top
                } else {
                    after idle [list doDiff $top]
                }
                return
            }
            # CVS
            if {[llength [glob -nocomplain [file join $fulldir CVS]]]} {
                set ::diff($top,mode) "rev"
                set ::diff($top,modetype) "CVS"
                set ::diff($top,rightDir) $fulldir
                set ::diff($top,RevFile) $fullname
                set ::diff($top,rightLabel) $fullname
                set ::diff($top,rightFile) $fullname
                set ::diff($top,rightOK) 1
                set ::diff($top,leftLabel) "CVS"
                if {$noautodiff} {
                    enableRedo $top
                } else {
                    after idle [list doDiff $top]
                }
                return
            }
            # ClearCase
            if {[auto_execok cleartool] != ""} {
                if {![catch {exec cleartool pwv -s} view] && \
                            $view != "** NONE **"} {
                    set ::diff($top,mode) "rev"
                    set ::diff($top,modetype) "CT"
                    set ::diff($top,rightDir) $fulldir
                    set ::diff($top,RevFile) $fullname
                    set ::diff($top,rightLabel) $fullname
                    set ::diff($top,rightFile) $fullname
                    set ::diff($top,rightOK) 1
                    set ::diff($top,leftLabel) "CT"
                    if {$noautodiff} {
4730
4731
4732
4733
4734
4735
4736

4737
4738
4739
4740
4741
4742
4743
4744
                [llength [glob -nocomplain [file join $fulldir CVS]]]} {

            if {[tk_messageBox -title Diff -icon question \
                    -message "Do CVS diff?" -type yesno] eq "yes"} {
                set fulldir $::diff($top,leftDir)
                set fullname $::diff($top,leftFile)
                set ::diff($top,leftOK) 0

                set ::diff($top,mode) "CVS"
                set ::diff($top,rightDir) $fulldir
                set ::diff($top,RevFile) $fullname
                set ::diff($top,rightLabel) $fullname
                set ::diff($top,rightFile) $fullname
                set ::diff($top,rightOK) 1
                set ::diff($top,leftLabel) "CVS"
                after idle [list doDiff $top]







>
|







4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
                [llength [glob -nocomplain [file join $fulldir CVS]]]} {

            if {[tk_messageBox -title Diff -icon question \
                    -message "Do CVS diff?" -type yesno] eq "yes"} {
                set fulldir $::diff($top,leftDir)
                set fullname $::diff($top,leftFile)
                set ::diff($top,leftOK) 0
                set ::diff($top,mode) "rev"
                set ::diff($top,modetype) "CVS"
                set ::diff($top,rightDir) $fulldir
                set ::diff($top,RevFile) $fullname
                set ::diff($top,rightLabel) $fullname
                set ::diff($top,rightFile) $fullname
                set ::diff($top,rightOK) 1
                set ::diff($top,leftLabel) "CVS"
                after idle [list doDiff $top]