Diff3.st
author Claus Gittinger <cg@exept.de>
Fri, 15 Jun 2018 04:00:37 +0200
changeset 18220 d1ebaddf1100
parent 16950 e5ac47568b86
child 17134 c4cce8b7a95d
permissions -rw-r--r--
#UI_ENHANCEMENT by cg class: Tools::CheckinInfoDialog class changed: #windowSpec
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13872
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
 Copyright (c) 2007-2012 Tony Garnock-Jones
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
 This code is based on Squeak's DiffMerge package
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
 written by Tony Garnock-Jones. Original project's web site:
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
 http://www.squeaksource.com/DiffMerge
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
 Permission is hereby granted, free of charge, to any person
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
 obtaining a copy of this software and associated documentation
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
 files (the 'Software'), to deal in the Software without
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
 restriction, including without limitation the rights to use,
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
 copy, modify, merge, publish, distribute, sublicense, and/or sell
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
 copies of the Software, and to permit persons to whom the
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
 Software is furnished to do so, subject to the following
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
 conditions:
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
 The above copyright notice and this permission notice shall be
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
 included in all copies or substantial portions of the Software.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
 THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
 OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
 HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
 WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
 OTHER DEALINGS IN THE SOFTWARE.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
"{ Package: 'stx:libtool' }"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
16950
e5ac47568b86 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 14006
diff changeset
    32
"{ NameSpace: Smalltalk }"
e5ac47568b86 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 14006
diff changeset
    33
13872
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
Object subclass:#Diff3
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
	instanceVariableNames:'file1 file0 file2 diffClass'
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
	classVariableNames:''
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
	poolDictionaries:''
14006
5fb4c6157f41 documentation
Claus Gittinger <cg@exept.de>
parents: 13884
diff changeset
    38
	category:'Collections-Sequenceable-Diff'
13872
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
Object subclass:#Chunk
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
	instanceVariableNames:'offset length side'
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
	classVariableNames:''
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
	poolDictionaries:''
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
	privateIn:Diff3
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
Object subclass:#Conflict
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
	instanceVariableNames:'left original right'
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
	classVariableNames:''
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
	poolDictionaries:''
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
	privateIn:Diff3
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
Diff3 comment:'Diff3 provides a three-way-merge algorithm suitable for performing textual merges, such as are often required as part of source-code version control systems.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
Instance Variables
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
	diffClass:	<Class> Should be a subclass of GenericDiff. Used to resolve changes.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
	file0:		<SequenceableCollection> The ancestral file.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
	file1:		<SequenceableCollection> The left branch.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
	file2:		<SequenceableCollection> The right branch.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
-- 
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
Copyright (c) 2008 Tony Garnock-Jones <tonyg@lshift.net>
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
Copyright (c) 2008 LShift Ltd. <query@lshift.net>
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction,including without limitation the rights to use, copy, modify, merge,publish, distribute, sublicense, and/or sell copies of the Software,and to permit persons to whom the Software is furnished to do so,subject to the following conditions:
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
'
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
!Diff3 class methodsFor:'documentation'!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
copyright
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
 Copyright (c) 2007-2012 Tony Garnock-Jones
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
 This code is based on Squeak's DiffMerge package
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
 written by Tony Garnock-Jones. Original project's web site:
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
 http://www.squeaksource.com/DiffMerge
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
 Permission is hereby granted, free of charge, to any person
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
 obtaining a copy of this software and associated documentation
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
 files (the 'Software'), to deal in the Software without
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
 restriction, including without limitation the rights to use,
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
 copy, modify, merge, publish, distribute, sublicense, and/or sell
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
 copies of the Software, and to permit persons to whom the
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
 Software is furnished to do so, subject to the following
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
 conditions:
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
 The above copyright notice and this permission notice shall be
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
 included in all copies or substantial portions of the Software.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
 THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
 OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
 HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
 WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
 OTHER DEALINGS IN THE SOFTWARE.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
documentation
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
"
16950
e5ac47568b86 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 14006
diff changeset
   107
    Diff3 provides a three-way-merge algorithm suitable for performing textual merges, 
e5ac47568b86 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 14006
diff changeset
   108
    such as are often required as part of source-code version control systems.
13872
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
14006
5fb4c6157f41 documentation
Claus Gittinger <cg@exept.de>
parents: 13884
diff changeset
   110
    Instance Variables
13872
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
        diffClass:      <Class> Should be a subclass of GenericDiff. Used to resolve changes.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
        file0:          <SequenceableCollection> The ancestral file.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
        file1:          <SequenceableCollection> The left branch.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
        file2:          <SequenceableCollection> The right branch.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
    [author:]
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
        Tony Garnock-Jones <tonyg@lshift.com>
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
    [instance variables:]
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
    [class variables:]
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
    [see also:]
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
! !
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
!Diff3 methodsFor:'accessing'!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
diffClass
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
    ^ diffClass ? Diff2::HuntMcilroy
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
    "Modified (format): / 16-03-2012 / 20:27:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
diffClass: anObject
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
	diffClass := anObject
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
file0
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
	^ file0
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
file0: anObject
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
	file0 := anObject
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
file1
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
	^ file1
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
file1: anObject
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
	file1 := anObject
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
file2
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
	^ file2
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
file2: anObject
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
	file2 := anObject
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
fileAt: side
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
    "Given a side (#left, #original or #right), returns the
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
    corresponding file"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
    side == #left       ifTrue:[ ^ file1 ].
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
    side == #original   ifTrue:[ ^ file0 ].
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
    side == #right      ifTrue:[ ^ file2 ].
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
    self error:'Invalid parameter, must be one of #left, #original or #right'.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
    "Created: / 03-04-2012 / 23:30:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
! !
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
!Diff3 methodsFor:'merging'!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
diffIndices
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
    "Returns an Array of Diff3Chunks (representing clean merges) or Diff3Conflicts 
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
     (containing DiffChunks, representing conflicts), together representing the 
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
     results of a three-way merge between file1/file0/file2. Does not detect 
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
     'false conflicts', and can return two Diff3Chunks next to each other in 
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   184
     the result."
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   185
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
    | result commonOffset hunks lastOverlapHunkIndex hunk firstHunkIndex |
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
    hunks := self computeHunks.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
    result := OrderedCollection new.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   190
    commonOffset := 1.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   191
    firstHunkIndex := 1.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   192
    [firstHunkIndex <= hunks size] whileTrue: [
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   193
        | conflict |
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   194
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   195
        hunk := hunks at: firstHunkIndex.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   196
        self addCommonChunkTo: result between: commonOffset and: hunk oldChunk offset.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   197
        lastOverlapHunkIndex := self findOverlapStartingAt: firstHunkIndex in: hunks.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   198
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   199
        (firstHunkIndex = lastOverlapHunkIndex)"false" ifTrue: [
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   200
            conflict := self computeConflictFromCleanMerge: hunk.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
            result add: conflict.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
            commonOffset := (hunks at: lastOverlapHunkIndex) oldChunk lastIndex + 1.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
        ] ifFalse: [ 
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
            conflict := self computeConflictFrom: firstHunkIndex
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
                                            to: lastOverlapHunkIndex
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
                                            hunks: hunks.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   208
            result add: conflict.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   209
            commonOffset := conflict original lastIndex + 1.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   210
        ].
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   211
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
        firstHunkIndex := lastOverlapHunkIndex + 1
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
    ].
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   214
    self addCommonChunkTo: result between: commonOffset and: file0 size + 1.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   215
    ^ result asArray
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   216
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   217
    "Created: / 20-03-2012 / 18:27:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   218
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   219
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   220
merge
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   221
    "Returns an Array of (#ok -> {...}) or (#conflict -> Diff3Conflict 
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   222
     of collections) instances representing the results of a three-way 
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   223
     merge between file1/file0/file2. Does not optimistically treat 
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   224
     'false conflicts' as clean merges (see the class comment for 
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   225
     Diff3InclusiveVisitor)."
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   226
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   227
    ^ self merge: false
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   228
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   229
    "Modified (comment): / 16-03-2012 / 20:26:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   230
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   231
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   232
mergeClean
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   233
    "Returns an Array of (#ok -> {...}) or (#conflict -> Diff3Conflict of 
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   234
     collections) instances representing the results of a three-way merge 
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   235
     between file1/file0/file2. Optimistically treats 'false conflicts' 
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   236
     as clean merges (see the class comment for Diff3ExclusiveVisitor)."
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   237
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   238
    ^ self merge: true
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   239
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   240
    "Modified (format): / 16-03-2012 / 20:26:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   241
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   242
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   243
mergeIndices
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   244
    "Returns an Array of Diff3Chunks (representing clean merges) or Diff3Conflicts 
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   245
     (containing DiffChunks, representing conflicts), together representing the 
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   246
     results of a three-way merge between file1/file0/file2. Does not detect 
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   247
     'false conflicts', and can return two Diff3Chunks next to each other in 
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   248
     the result."
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   249
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   250
    ^self mergeIndicesDiscardEmpty: true
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   251
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   252
    "Modified: / 09-04-2012 / 16:26:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   253
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   254
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   255
mergeIndicesDiscardEmpty: discardEmpty
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   256
    "Returns an Array of Diff3Chunks (representing clean merges) or Diff3Conflicts 
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   257
     (containing DiffChunks, representing conflicts), together representing the 
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   258
     results of a three-way merge between file1/file0/file2. Does not detect 
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   259
     'false conflicts', and can return two Diff3Chunks next to each other in 
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   260
     the result.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   261
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   262
    If discard empty is true, empty clean merge chunks are not included
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   263
     "
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   264
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   265
    | result commonOffset hunks lastOverlapHunkIndex hunk firstHunkIndex |
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   266
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   267
    hunks := self computeHunks.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   268
    result := OrderedCollection new.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   269
    commonOffset := 1.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   270
    firstHunkIndex := 1.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   271
    [firstHunkIndex <= hunks size] whileTrue: [
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   272
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   273
        hunk := hunks at: firstHunkIndex.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   274
        self addCommonChunkTo: result between: commonOffset and: hunk oldChunk offset.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   275
        lastOverlapHunkIndex := self findOverlapStartingAt: firstHunkIndex in: hunks.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   276
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   277
        (firstHunkIndex = lastOverlapHunkIndex) ifTrue: [
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   278
            (discardEmpty and:[hunk newChunk length == 0]) ifTrue:[
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   279
                "/Empty chunk...
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   280
            ] ifFalse:[
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   281
                result add: (Diff3::Chunk side: hunk side chunk: hunk newChunk)
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   282
            ].
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   283
            commonOffset := (hunks at: lastOverlapHunkIndex) oldChunk lastIndex + 1.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   284
        ] ifFalse: [ 
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   285
            | conflict |
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   286
            conflict := self computeConflictFrom: firstHunkIndex
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   287
                                            to: lastOverlapHunkIndex
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   288
                                            hunks: hunks.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   289
            result add: conflict.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   290
            commonOffset := conflict original lastIndex + 1.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   291
        ].
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   292
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   293
        firstHunkIndex := lastOverlapHunkIndex + 1
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   294
    ].
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   295
    self addCommonChunkTo: result between: commonOffset and: file0 size + 1.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   296
    ^ result asArray
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   297
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   298
    "Created: / 09-04-2012 / 16:25:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   299
! !
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   300
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   301
!Diff3 methodsFor:'private'!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   302
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   303
addCommonChunkTo: result between: commonOffset and: targetOffset
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   304
        targetOffset > commonOffset ifTrue: [
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   305
                result add: (Diff3::Chunk new
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   306
                                                side: #original;
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   307
                                                offset: commonOffset;
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   308
                                                length: targetOffset - commonOffset)].
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   309
        ^ targetOffset
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   310
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   311
    "Modified: / 16-03-2012 / 19:20:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   312
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   313
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   314
computeConflictChunk: side fromCleanMerge: hunk old: old new: new into: conflict
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   315
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   316
    side == hunk side ifTrue:[
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   317
        conflict at: side put: hunk newChunk.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   318
        ^self
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   319
    ].
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   320
    "Hmm....we have to compare"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   321
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   322
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   323
    (hunk newChunk extractSafeFrom: (self fileAt: side)) = new ifTrue:[
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   324
        conflict at: side put: hunk newChunk.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   325
    ] ifFalse:[
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   326
        conflict at: side put: hunk oldChunk.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   327
    ]
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   328
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   329
    "Created: / 06-04-2012 / 12:31:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   330
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   331
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   332
computeConflictFrom: i1 to: i2 hunks: hunks
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   333
        | hunk conflict l o r lo ro chunk chunkOrig |
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   334
        conflict := Diff3::Conflict new.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   335
        conflict left: (l := Diff2::Chunk negativeSize: file1 size).
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   336
        conflict original: (o := Diff2::Chunk negativeSize: file0 size).
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   337
        conflict right: (r := Diff2::Chunk negativeSize: file2 size).
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   338
        lo := o copy.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   339
        ro := o copy.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   340
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   341
        i1 to: i2 do: [:index |
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   342
                hunk := hunks at: index.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   343
                (hunk side = #left)
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   344
                        ifTrue: [chunk := l. chunkOrig := lo.]
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   345
                        ifFalse: [chunk := r. chunkOrig := ro.].
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   346
                o destructiveMergeWith: hunk oldChunk.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   347
                chunk destructiveMergeWith: hunk newChunk.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   348
                chunkOrig destructiveMergeWith: hunk oldChunk].
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   349
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   350
        l correctForSkewFrom: lo to: o.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   351
        r correctForSkewFrom: ro to: o.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   352
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   353
        ^ conflict
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   354
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   355
    "Modified: / 16-03-2012 / 19:20:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   356
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   357
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   358
computeConflictFromCleanMerge: hunk
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   359
    | conflict old new |
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   360
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   361
    conflict := Conflict new.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   362
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   363
    old := hunk oldChunk extractFrom: file0.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   364
    new := hunk newChunk extractFrom: (self fileAt: hunk side).
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   365
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   366
    conflict left: old.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   367
    conflict original: old.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   368
    conflict right: old.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   369
    conflict instVarNamed:hunk side put: hunk newChunk.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   370
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   371
    ^conflict.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   372
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   373
    "Created: / 06-04-2012 / 12:13:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   374
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   375
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   376
computeHunks
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   377
        | diff2 diff1 hunks |
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   378
        diff1 := self diffClass new file1: file0; file2: file1; diffIndices.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   379
        diff2 := self diffClass new file1: file0; file2: file2; diffIndices.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   380
        hunks := OrderedCollection new.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   381
        diff1 do: [ :entry | hunks add: (Diff3Hunk side: #left entry: entry) ].
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   382
        diff2 do: [ :entry | hunks add: (Diff3Hunk side: #right entry: entry) ].
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   383
        ^ hunks asSortedCollection:[:a :b|a <= b].
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   384
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   385
    "Modified: / 16-03-2012 / 20:29:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   386
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   387
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   388
fileMap
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   389
	| files |
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   390
	files := Dictionary new.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   391
	files at: #left put: file1.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   392
	files at: #original put: file0.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   393
	files at: #right put: file2.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   394
	^ files
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   395
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   396
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   397
findOverlapStartingAt: startIndex in: hunks
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   398
        | nextRegionLhs hunk |
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   399
        nextRegionLhs := (hunks at: startIndex) oldChunk lastIndex + 1.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   400
        startIndex + 1 to: hunks size do: [:index |
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   401
                hunk := hunks at: index.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   402
                hunk oldChunk offset > nextRegionLhs ifTrue: [ 
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   403
                    ^ index - 1
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   404
                ].
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   405
                nextRegionLhs := nextRegionLhs max: hunk oldChunk lastIndex + 1
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   406
        ].
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   407
        ^ hunks size.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   408
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   409
    "Modified (format): / 20-03-2012 / 18:04:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   410
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   411
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   412
merge: excludeFalseConflicts
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   413
	| visitor |
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   414
	visitor := excludeFalseConflicts
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   415
		ifTrue: [Diff3ExclusiveVisitor new]
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   416
		ifFalse: [Diff3InclusiveVisitor new].
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   417
	visitor files: self fileMap.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   418
	self mergeIndices do: [:each | each accept: visitor].
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   419
	^ visitor result
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   420
! !
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   421
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   422
!Diff3::Chunk class methodsFor:'as yet unclassified'!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   423
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   424
negativeSize: s
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   425
	"Returns a pseudo-chunk with *negative* length, useful as a kind of zero for destructiveMergeWith: operations intended to build up coverage over some set of chunks."
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   426
	^ self new offset: s + 1; length: s negated
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   427
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   428
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   429
offset: o length: l
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   430
	^ self new offset: o; length: l
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   431
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   432
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   433
side: aSelector chunk: aChunk
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   434
	^ self new side: aSelector; offset: aChunk offset; length: aChunk length
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   435
! !
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   436
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   437
!Diff3::Chunk class methodsFor:'documentation'!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   438
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   439
copyright
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   440
"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   441
 Copyright (c) 2007-2012 Tony Garnock-Jones
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   442
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   443
 This code is based on Squeak's DiffMerge package
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   444
 written by Tony Garnock-Jones. Original project's web site:
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   445
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   446
 http://www.squeaksource.com/DiffMerge
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   447
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   448
 Permission is hereby granted, free of charge, to any person
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   449
 obtaining a copy of this software and associated documentation
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   450
 files (the 'Software'), to deal in the Software without
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   451
 restriction, including without limitation the rights to use,
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   452
 copy, modify, merge, publish, distribute, sublicense, and/or sell
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   453
 copies of the Software, and to permit persons to whom the
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   454
 Software is furnished to do so, subject to the following
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   455
 conditions:
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   456
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   457
 The above copyright notice and this permission notice shall be
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   458
 included in all copies or substantial portions of the Software.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   459
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   460
 THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   461
 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   462
 OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   463
 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   464
 HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   465
 WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   466
 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   467
 OTHER DEALINGS IN THE SOFTWARE.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   468
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   469
"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   470
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   471
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   472
documentation
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   473
"
14006
5fb4c6157f41 documentation
Claus Gittinger <cg@exept.de>
parents: 13884
diff changeset
   474
    A Diff3Chunk is a subclass of DiffChunk that also knows which side of a three-way merge it represents.
13872
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   475
14006
5fb4c6157f41 documentation
Claus Gittinger <cg@exept.de>
parents: 13884
diff changeset
   476
    Instance Variables
13872
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   477
        side:           <Symbol> One of #left, #original or #right
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   478
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   479
    [author:]
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   480
        Tony Garnock-Jones <tonyg@lshift.com>
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   481
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   482
    [instance variables:]
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   483
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   484
    [class variables:]
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   485
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   486
    [see also:]
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   487
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   488
"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   489
! !
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   490
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   491
!Diff3::Chunk methodsFor:'accessing'!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   492
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   493
correctForSkewFrom: smallerChunk to: biggerChunk
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   494
	"Given a biggerChunk that definitely contains smallerChunk but might have an extra head or tail, updates the receiver to include such an extra head or tail."
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   495
	| headSize tailSize |
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   496
	headSize := smallerChunk offset - biggerChunk offset.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   497
	tailSize := biggerChunk lastIndex - smallerChunk lastIndex.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   498
	offset := offset - headSize.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   499
	length := length + headSize + tailSize.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   500
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   501
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   502
destructiveMergeWith: aChunk
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   503
	| newLastIndex |
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   504
	newLastIndex := self lastIndex max: aChunk lastIndex.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   505
	offset := offset min: aChunk offset.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   506
	length := newLastIndex - offset + 1.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   507
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   508
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   509
lastIndex
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   510
	"Returns the rightmost index contained in my range. (Offset is the leftmost index.) If my length is zero, will return an index lower than my offset."
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   511
	^ offset + length - 1
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   512
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   513
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   514
length
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   515
	^ length
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   516
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   517
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   518
length: anObject
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   519
	length := anObject
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   520
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   521
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   522
offset
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   523
	^ offset
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   524
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   525
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   526
offset: anObject
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   527
	offset := anObject
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   528
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   529
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   530
side
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   531
	^ side
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   532
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   533
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   534
side: anObject
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   535
	side := anObject
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   536
! !
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   537
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   538
!Diff3::Chunk methodsFor:'as yet unclassified'!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   539
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   540
= otherChunk
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   541
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   542
        ^ (otherChunk isKindOf: self class) and:
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   543
        [(self offset = otherChunk offset) and:
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   544
        [(self length = otherChunk length)]]
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   545
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   546
    "Modified: / 16-03-2012 / 19:25:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   547
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   548
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   549
accept: aVisitor
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   550
	^ aVisitor side: side chunk: self
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   551
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   552
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   553
extractFrom: aCollection
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   554
	"Extracts a subcollection from aCollection corresponding to my offset and length."
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   555
	^ aCollection copyFrom: offset to: offset + length - 1.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   556
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   557
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   558
extractFrom: aCollection offset: lineOffset
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   559
    "Given a text and lineOffset withing a chunk, return the line"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   560
    ^ aCollection at: offset + lineOffset - 1
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   561
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   562
    "Created: / 04-04-2012 / 00:46:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   563
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   564
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   565
extractFromDiff: diff
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   566
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   567
    ^self extractFrom: (diff fileAt: side)
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   568
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   569
    "Created: / 03-04-2012 / 23:33:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   570
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   571
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   572
extractResolution
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   573
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   574
    side == #left     ifTrue:[ ^ #MergedUsingA ].
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   575
    side == #original ifTrue:[ ^ #MergedUsingBase ].
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   576
    side == #right    ifTrue:[ ^ #MergedUsingB ].
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   577
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   578
    self error:'Should not be reached'
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   579
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   580
    "Created: / 04-04-2012 / 00:26:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   581
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   582
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   583
printOn: aStream
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   584
        aStream nextPut: $(.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   585
        super printOn: aStream.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   586
        aStream
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   587
                nextPutAll: ' side: ';
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   588
                nextPutAll: side printString;
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   589
                nextPutAll: ' off: ';
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   590
                nextPutAll: offset printString;
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   591
                nextPutAll: ' len: ';
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   592
                nextPutAll: length printString;
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   593
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   594
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   595
                nextPut: $).
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   596
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   597
    "Modified: / 20-03-2012 / 17:08:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   598
! !
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   599
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   600
!Diff3::Chunk methodsFor:'comparing'!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   601
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   602
< aDiffChunk
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   603
	"Used to sort changed chunks during three-way merge; see Diff3"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   604
	^ self offset < aDiffChunk offset
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   605
! !
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   606
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   607
!Diff3::Chunk methodsFor:'testing'!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   608
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   609
isChunk
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   610
    ^true
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   611
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   612
    "Created: / 16-03-2012 / 22:02:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   613
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   614
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   615
isConflict
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   616
    ^false
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   617
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   618
    "Created: / 16-03-2012 / 22:02:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   619
! !
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   620
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   621
!Diff3::Conflict class methodsFor:'documentation'!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   622
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   623
copyright
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   624
"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   625
 Copyright (c) 2007-2012 Tony Garnock-Jones
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   626
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   627
 This code is based on Squeak's DiffMerge package
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   628
 written by Tony Garnock-Jones. Original project's web site:
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   629
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   630
 http://www.squeaksource.com/DiffMerge
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   631
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   632
 Permission is hereby granted, free of charge, to any person
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   633
 obtaining a copy of this software and associated documentation
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   634
 files (the 'Software'), to deal in the Software without
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   635
 restriction, including without limitation the rights to use,
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   636
 copy, modify, merge, publish, distribute, sublicense, and/or sell
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   637
 copies of the Software, and to permit persons to whom the
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   638
 Software is furnished to do so, subject to the following
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   639
 conditions:
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   640
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   641
 The above copyright notice and this permission notice shall be
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   642
 included in all copies or substantial portions of the Software.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   643
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   644
 THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   645
 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   646
 OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   647
 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   648
 HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   649
 WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   650
 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   651
 OTHER DEALINGS IN THE SOFTWARE.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   652
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   653
"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   654
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   655
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   656
documentation
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   657
"
14006
5fb4c6157f41 documentation
Claus Gittinger <cg@exept.de>
parents: 13884
diff changeset
   658
    A Diff3Conflict represents a merge conflict.
13872
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   659
14006
5fb4c6157f41 documentation
Claus Gittinger <cg@exept.de>
parents: 13884
diff changeset
   660
    Instance Variables
13872
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   661
        left:           Either a SequenceableCollection or a Diff3Chunk representing the left variant.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   662
        original:       Either a SequenceableCollection or a Diff3Chunk representing the original variant.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   663
        right:          Either a SequenceableCollection or a Diff3Chunk representing the right variant.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   664
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   665
    [author:]
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   666
        Tony Garnock-Jones <tonyg@lshift.com>
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   667
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   668
    [instance variables:]
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   669
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   670
    [class variables:]
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   671
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   672
    [see also:]
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   673
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   674
"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   675
! !
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   676
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   677
!Diff3::Conflict methodsFor:'accessing'!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   678
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   679
at: side
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   680
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   681
    "Given a side (#left, #original or #right), returns the
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   682
    corresponding chunk"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   683
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   684
    side == #left       ifTrue:[ ^ left ].
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   685
    side == #original   ifTrue:[ ^ original ].
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   686
    side == #right      ifTrue:[ ^ right ].
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   687
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   688
    self error:'Invalid parameter, must be one of #left, #original or #right'.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   689
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   690
    "Created: / 06-04-2012 / 12:26:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   691
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   692
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   693
at: side put: chunk
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   694
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   695
    "Given a side (#left, #original or #right), sets the
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   696
    corresponding chunk"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   697
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   698
    side == #left       ifTrue:[ left := chunk. ^ self].
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   699
    side == #original   ifTrue:[ original := chunk. ^ self ].
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   700
    side == #right      ifTrue:[ right := chunk. ^ self ].
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   701
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   702
    self error:'Invalid parameter, must be one of #left, #original or #right'.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   703
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   704
    "Created: / 06-04-2012 / 12:26:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   705
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   706
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   707
left
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   708
	^ left
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   709
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   710
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   711
left: anObject
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   712
	left := anObject
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   713
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   714
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   715
leftAt: index
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   716
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   717
    ^(index between: 1 and: left size) ifTrue:[
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   718
        left at: index
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   719
    ] ifFalse:[
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   720
        nil
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   721
    ]
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   722
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   723
    "Created: / 20-03-2012 / 20:48:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   724
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   725
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   726
length
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   727
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   728
    ^left length max: (original length max: right length)
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   729
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   730
    "Created: / 16-03-2012 / 22:02:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   731
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   732
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   733
original
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   734
	^ original
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   735
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   736
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   737
original: anObject
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   738
	original := anObject
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   739
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   740
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   741
originalAt: index
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   742
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   743
    ^(index between: 1 and: original size) ifTrue:[
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   744
        original at: index
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   745
    ] ifFalse:[
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   746
        nil
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   747
    ]
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   748
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   749
    "Created: / 20-03-2012 / 20:49:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   750
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   751
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   752
right
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   753
	^ right
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   754
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   755
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   756
right: anObject
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   757
	right := anObject
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   758
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   759
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   760
rightAt: index
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   761
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   762
    ^(index between: 1 and: right size) ifTrue:[
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   763
        right at: index
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   764
    ] ifFalse:[
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   765
        nil
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   766
    ]
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   767
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   768
    "Created: / 20-03-2012 / 20:48:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   769
! !
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   770
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   771
!Diff3::Conflict methodsFor:'as yet unclassified'!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   772
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   773
= otherConflict
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   774
        ^ (otherConflict isKindOf: Diff3::Conflict) and:
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   775
                [(left = otherConflict left) and:
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   776
                [(original = otherConflict original) and:
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   777
                [(right = otherConflict right)]]]
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   778
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   779
    "Modified: / 16-03-2012 / 19:20:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   780
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   781
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   782
accept: aVisitor
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   783
	^ aVisitor left: left original: original right: right.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   784
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   785
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   786
printOn: aStream
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   787
	aStream
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   788
		nextPut: $(;
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   789
		nextPutAll: self class name;
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   790
		nextPutAll: ' new left: '.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   791
	left printOn: aStream.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   792
	aStream nextPutAll: '; original: '.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   793
	original printOn: aStream.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   794
	aStream nextPutAll: '; right: '.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   795
	right printOn: aStream.
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   796
	aStream nextPut: $).
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   797
! !
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   798
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   799
!Diff3::Conflict methodsFor:'testing'!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   800
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   801
isChunk
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   802
    ^false
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   803
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   804
    "Created: / 16-03-2012 / 22:03:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   805
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   806
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   807
isConflict
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   808
    ^true
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   809
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   810
    "Created: / 16-03-2012 / 22:03:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   811
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   812
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   813
isInsertionInLeft
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   814
    ^left length > 0
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   815
        and:[original length <= 0
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   816
            and:[right length <= 0]]
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   817
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   818
    "Created: / 20-03-2012 / 18:37:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   819
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   820
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   821
isInsertionInOriginal
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   822
    ^original length > 0
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   823
        and:[left length <= 0
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   824
            and:[right length <= 0]]
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   825
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   826
    "Created: / 20-03-2012 / 18:36:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   827
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   828
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   829
isInsertionInRight
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   830
    ^right length > 0
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   831
        and:[original length <= 0
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   832
            and:[left length <= 0]]
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   833
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   834
    "Created: / 20-03-2012 / 18:37:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   835
! !
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   836
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   837
!Diff3 class methodsFor:'documentation'!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   838
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   839
version
16950
e5ac47568b86 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 14006
diff changeset
   840
    ^ '$Header$'
13872
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   841
!
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   842
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   843
version_CVS
16950
e5ac47568b86 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 14006
diff changeset
   844
    ^ '$Header$'
13872
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   845
! !
b4275a908b62 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   846