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