Hex Artifact Content
Not logged in

Artifact f9e326862fd16c3bc92bb6b4c1259dcf2573648f:


0000: 23 0a 23 20 43 6f 70 79 72 69 67 68 74 20 28 63  #.# Copyright (c
0010: 29 20 32 30 30 39 20 44 2e 20 52 69 63 68 61 72  ) 2009 D. Richar
0020: 64 20 48 69 70 70 0a 23 0a 23 20 54 68 69 73 20  d Hipp.#.# This 
0030: 70 72 6f 67 72 61 6d 20 69 73 20 66 72 65 65 20  program is free 
0040: 73 6f 66 74 77 61 72 65 3b 20 79 6f 75 20 63 61  software; you ca
0050: 6e 20 72 65 64 69 73 74 72 69 62 75 74 65 20 69  n redistribute i
0060: 74 20 61 6e 64 2f 6f 72 0a 23 20 6d 6f 64 69 66  t and/or.# modif
0070: 79 20 69 74 20 75 6e 64 65 72 20 74 68 65 20 74  y it under the t
0080: 65 72 6d 73 20 6f 66 20 74 68 65 20 53 69 6d 70  erms of the Simp
0090: 6c 69 66 69 65 64 20 42 53 44 20 4c 69 63 65 6e  lified BSD Licen
00a0: 73 65 20 28 61 6c 73 6f 0a 23 20 6b 6e 6f 77 6e  se (also.# known
00b0: 20 61 73 20 74 68 65 20 22 32 2d 43 6c 61 75 73   as the "2-Claus
00c0: 65 20 4c 69 63 65 6e 73 65 22 20 6f 72 20 22 46  e License" or "F
00d0: 72 65 65 42 53 44 20 4c 69 63 65 6e 73 65 22 2e  reeBSD License".
00e0: 29 0a 23 0a 23 20 54 68 69 73 20 70 72 6f 67 72  ).#.# This progr
00f0: 61 6d 20 69 73 20 64 69 73 74 72 69 62 75 74 65  am is distribute
0100: 64 20 69 6e 20 74 68 65 20 68 6f 70 65 20 74 68  d in the hope th
0110: 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20 75 73  at it will be us
0120: 65 66 75 6c 2c 0a 23 20 62 75 74 20 77 69 74 68  eful,.# but with
0130: 6f 75 74 20 61 6e 79 20 77 61 72 72 61 6e 74 79  out any warranty
0140: 3b 20 77 69 74 68 6f 75 74 20 65 76 65 6e 20 74  ; without even t
0150: 68 65 20 69 6d 70 6c 69 65 64 20 77 61 72 72 61  he implied warra
0160: 6e 74 79 20 6f 66 0a 23 20 6d 65 72 63 68 61 6e  nty of.# merchan
0170: 74 61 62 69 6c 69 74 79 20 6f 72 20 66 69 74 6e  tability or fitn
0180: 65 73 73 20 66 6f 72 20 61 20 70 61 72 74 69 63  ess for a partic
0190: 75 6c 61 72 20 70 75 72 70 6f 73 65 2e 0a 23 0a  ular purpose..#.
01a0: 23 20 41 75 74 68 6f 72 20 63 6f 6e 74 61 63 74  # Author contact
01b0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 3a 0a 23 20   information:.# 
01c0: 20 20 64 72 68 40 68 77 61 63 69 2e 63 6f 6d 0a    drh@hwaci.com.
01d0: 23 20 20 20 68 74 74 70 3a 2f 2f 77 77 77 2e 68  #   http://www.h
01e0: 77 61 63 69 2e 63 6f 6d 2f 64 72 68 2f 0a 23 0a  waci.com/drh/.#.
01f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0200: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0210: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0220: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0230: 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 0a 23  ############.#.#
0240: 20 54 65 73 74 73 20 6f 66 20 74 68 65 20 33 2d   Tests of the 3-
0250: 77 61 79 20 6d 65 72 67 65 0a 23 0a 0a 70 72 6f  way merge.#..pro
0260: 63 20 6d 65 72 67 65 2d 74 65 73 74 20 7b 74 65  c merge-test {te
0270: 73 74 69 64 20 62 61 73 69 73 20 76 31 20 76 32  stid basis v1 v2
0280: 20 72 65 73 75 6c 74 31 20 72 65 73 75 6c 74 32   result1 result2
0290: 7d 20 7b 0a 20 20 77 72 69 74 65 5f 66 69 6c 65  } {.  write_file
02a0: 20 74 31 20 5b 6a 6f 69 6e 20 5b 73 74 72 69 6e   t1 [join [strin
02b0: 67 20 74 72 69 6d 20 24 62 61 73 69 73 5d 20 5c  g trim $basis] \
02c0: 6e 5d 5c 6e 0a 20 20 77 72 69 74 65 5f 66 69 6c  n]\n.  write_fil
02d0: 65 20 74 32 20 5b 6a 6f 69 6e 20 5b 73 74 72 69  e t2 [join [stri
02e0: 6e 67 20 74 72 69 6d 20 24 76 31 5d 20 5c 6e 5d  ng trim $v1] \n]
02f0: 5c 6e 0a 20 20 77 72 69 74 65 5f 66 69 6c 65 20  \n.  write_file 
0300: 74 33 20 5b 6a 6f 69 6e 20 5b 73 74 72 69 6e 67  t3 [join [string
0310: 20 74 72 69 6d 20 24 76 32 5d 20 5c 6e 5d 5c 6e   trim $v2] \n]\n
0320: 0a 20 20 66 6f 73 73 69 6c 20 74 65 73 74 2d 33  .  fossil test-3
0330: 2d 77 61 79 2d 6d 65 72 67 65 20 74 31 20 74 32  -way-merge t1 t2
0340: 20 74 33 20 74 34 0a 20 20 66 6f 73 73 69 6c 20   t3 t4.  fossil 
0350: 74 65 73 74 2d 33 2d 77 61 79 2d 6d 65 72 67 65  test-3-way-merge
0360: 20 74 31 20 74 33 20 74 32 20 74 35 0a 20 20 73   t1 t3 t2 t5.  s
0370: 65 74 20 78 20 5b 72 65 61 64 5f 66 69 6c 65 20  et x [read_file 
0380: 74 34 5d 0a 20 20 72 65 67 73 75 62 20 2d 61 6c  t4].  regsub -al
0390: 6c 20 7b 3c 3c 3c 3c 3c 3c 3c 20 42 45 47 49 4e  l {<<<<<<< BEGIN
03a0: 20 4d 45 52 47 45 20 43 4f 4e 46 4c 49 43 54 2e   MERGE CONFLICT.
03b0: 2a 3c 3c 7d 20 24 78 20 7b 3e 7d 20 78 0a 20 20  *<<} $x {>} x.  
03c0: 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 3d 3d 3d  regsub -all {===
03d0: 3d 3d 3d 3d 2e 2a 3d 3d 3d 3d 3d 3d 3d 7d 20 24  ====.*=======} $
03e0: 78 20 7b 3d 7d 20 78 0a 20 20 72 65 67 73 75 62  x {=} x.  regsub
03f0: 20 2d 61 6c 6c 20 7b 3e 3e 3e 3e 3e 3e 3e 20 45   -all {>>>>>>> E
0400: 4e 44 20 4d 45 52 47 45 20 43 4f 4e 46 4c 49 43  ND MERGE CONFLIC
0410: 54 2e 2a 3e 3e 3e 3e 7d 20 24 78 20 7b 3c 7d 20  T.*>>>>} $x {<} 
0420: 78 0a 20 20 73 65 74 20 78 20 5b 73 70 6c 69 74  x.  set x [split
0430: 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 78   [string trim $x
0440: 5d 20 5c 6e 5d 0a 20 20 73 65 74 20 79 20 5b 72  ] \n].  set y [r
0450: 65 61 64 5f 66 69 6c 65 20 74 35 5d 0a 20 20 72  ead_file t5].  r
0460: 65 67 73 75 62 20 2d 61 6c 6c 20 7b 3c 3c 3c 3c  egsub -all {<<<<
0470: 3c 3c 3c 20 42 45 47 49 4e 20 4d 45 52 47 45 20  <<< BEGIN MERGE 
0480: 43 4f 4e 46 4c 49 43 54 2e 2a 3c 3c 7d 20 24 79  CONFLICT.*<<} $y
0490: 20 7b 3e 7d 20 79 0a 20 20 72 65 67 73 75 62 20   {>} y.  regsub 
04a0: 2d 61 6c 6c 20 7b 3d 3d 3d 3d 3d 3d 3d 2e 2a 3d  -all {=======.*=
04b0: 3d 3d 3d 3d 3d 3d 7d 20 24 79 20 7b 3d 7d 20 79  ======} $y {=} y
04c0: 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b  .  regsub -all {
04d0: 3e 3e 3e 3e 3e 3e 3e 20 45 4e 44 20 4d 45 52 47  >>>>>>> END MERG
04e0: 45 20 43 4f 4e 46 4c 49 43 54 2e 2a 3e 3e 3e 3e  E CONFLICT.*>>>>
04f0: 7d 20 24 79 20 7b 3c 7d 20 79 0a 20 20 73 65 74  } $y {<} y.  set
0500: 20 79 20 5b 73 70 6c 69 74 20 5b 73 74 72 69 6e   y [split [strin
0510: 67 20 74 72 69 6d 20 24 79 5d 20 5c 6e 5d 0a 20  g trim $y] \n]. 
0520: 20 73 65 74 20 72 65 73 75 6c 74 31 20 5b 73 74   set result1 [st
0530: 72 69 6e 67 20 74 72 69 6d 20 24 72 65 73 75 6c  ring trim $resul
0540: 74 31 5d 0a 20 20 69 66 20 7b 24 78 21 3d 24 72  t1].  if {$x!=$r
0550: 65 73 75 6c 74 31 7d 20 7b 0a 20 20 20 20 70 72  esult1} {.    pr
0560: 6f 74 4f 75 74 20 22 20 20 45 78 70 65 63 74 65  otOut "  Expecte
0570: 64 20 5c 5b 24 72 65 73 75 6c 74 31 5c 5d 22 0a  d \[$result1\]".
0580: 20 20 20 20 70 72 6f 74 4f 75 74 20 22 20 20 20      protOut "   
0590: 20 20 20 20 47 6f 74 20 5c 5b 24 78 5c 5d 22 0a      Got \[$x\]".
05a0: 20 20 20 20 74 65 73 74 20 6d 65 72 67 65 33 2d      test merge3-
05b0: 24 74 65 73 74 69 64 20 30 0a 20 20 7d 20 65 6c  $testid 0.  } el
05c0: 73 65 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73  se {.    set res
05d0: 75 6c 74 32 20 5b 73 74 72 69 6e 67 20 74 72 69  ult2 [string tri
05e0: 6d 20 24 72 65 73 75 6c 74 32 5d 0a 20 20 20 20  m $result2].    
05f0: 69 66 20 7b 24 79 21 3d 24 72 65 73 75 6c 74 32  if {$y!=$result2
0600: 7d 20 7b 0a 20 20 20 20 20 20 70 72 6f 74 4f 75  } {.      protOu
0610: 74 20 22 20 20 45 78 70 65 63 74 65 64 20 5c 5b  t "  Expected \[
0620: 24 72 65 73 75 6c 74 32 5c 5d 22 0a 20 20 20 20  $result2\]".    
0630: 20 20 70 72 6f 74 4f 75 74 20 22 20 20 20 20 20    protOut "     
0640: 20 20 47 6f 74 20 5c 5b 24 79 5c 5d 22 0a 20 20    Got \[$y\]".  
0650: 20 20 20 20 74 65 73 74 20 6d 65 72 67 65 33 2d      test merge3-
0660: 24 74 65 73 74 69 64 20 30 0a 20 20 20 20 7d 20  $testid 0.    } 
0670: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 74 65 73  else {.      tes
0680: 74 20 6d 65 72 67 65 33 2d 24 74 65 73 74 69 64  t merge3-$testid
0690: 20 31 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a   1.    }.  }.}..
06a0: 6d 65 72 67 65 2d 74 65 73 74 20 31 30 30 30 20  merge-test 1000 
06b0: 7b 0a 20 20 31 20 32 20 33 20 34 20 35 20 36 20  {.  1 2 3 4 5 6 
06c0: 37 20 38 20 39 0a 7d 20 7b 0a 20 20 31 20 32 62  7 8 9.} {.  1 2b
06d0: 20 33 62 20 34 62 20 35 20 36 62 20 37 62 20 38   3b 4b 5 6b 7b 8
06e0: 62 20 39 0a 7d 20 7b 0a 20 20 31 20 32 20 33 20  b 9.} {.  1 2 3 
06f0: 34 63 20 35 63 20 36 63 20 37 20 38 20 39 0a 7d  4c 5c 6c 7 8 9.}
0700: 20 7b 0a 20 20 31 20 3e 20 32 62 20 33 62 20 34   {.  1 > 2b 3b 4
0710: 62 20 35 20 36 62 20 37 62 20 38 62 20 3d 20 32  b 5 6b 7b 8b = 2
0720: 20 33 20 34 63 20 35 63 20 36 63 20 37 20 38 20   3 4c 5c 6c 7 8 
0730: 3c 20 39 0a 7d 20 7b 0a 20 20 31 20 3e 20 32 20  < 9.} {.  1 > 2 
0740: 33 20 34 63 20 35 63 20 36 63 20 37 20 38 20 3d  3 4c 5c 6c 7 8 =
0750: 20 32 62 20 33 62 20 34 62 20 35 20 36 62 20 37   2b 3b 4b 5 6b 7
0760: 62 20 38 62 20 3c 20 39 0a 7d 0a 6d 65 72 67 65  b 8b < 9.}.merge
0770: 2d 74 65 73 74 20 31 30 30 31 20 7b 0a 20 20 31  -test 1001 {.  1
0780: 20 32 20 33 20 34 20 35 20 36 20 37 20 38 20 39   2 3 4 5 6 7 8 9
0790: 0a 7d 20 7b 0a 20 20 31 20 32 62 20 33 62 20 34  .} {.  1 2b 3b 4
07a0: 20 35 20 36 20 37 62 20 38 62 20 39 0a 7d 20 7b   5 6 7b 8b 9.} {
07b0: 0a 20 20 31 20 32 20 33 20 34 63 20 35 63 20 36  .  1 2 3 4c 5c 6
07c0: 63 20 37 20 38 20 39 0a 7d 20 7b 0a 20 20 31 20  c 7 8 9.} {.  1 
07d0: 32 62 20 33 62 20 34 63 20 35 63 20 36 63 20 37  2b 3b 4c 5c 6c 7
07e0: 62 20 38 62 20 39 0a 7d 20 7b 0a 20 20 31 20 32  b 8b 9.} {.  1 2
07f0: 62 20 33 62 20 34 63 20 35 63 20 36 63 20 37 62  b 3b 4c 5c 6c 7b
0800: 20 38 62 20 39 0a 7d 0a 6d 65 72 67 65 2d 74 65   8b 9.}.merge-te
0810: 73 74 20 31 30 30 32 20 7b 0a 20 20 32 20 33 20  st 1002 {.  2 3 
0820: 34 20 35 20 36 20 37 20 38 0a 7d 20 7b 0a 20 20  4 5 6 7 8.} {.  
0830: 32 62 20 33 62 20 34 62 20 35 20 36 62 20 37 62  2b 3b 4b 5 6b 7b
0840: 20 38 62 0a 7d 20 7b 0a 20 20 32 20 33 20 34 63   8b.} {.  2 3 4c
0850: 20 35 63 20 36 63 20 37 20 38 0a 7d 20 7b 0a 20   5c 6c 7 8.} {. 
0860: 20 3e 20 32 62 20 33 62 20 34 62 20 35 20 36 62   > 2b 3b 4b 5 6b
0870: 20 37 62 20 38 62 20 3d 20 32 20 33 20 34 63 20   7b 8b = 2 3 4c 
0880: 35 63 20 36 63 20 37 20 38 20 3c 0a 7d 20 7b 0a  5c 6c 7 8 <.} {.
0890: 20 20 3e 20 32 20 33 20 34 63 20 35 63 20 36 63    > 2 3 4c 5c 6c
08a0: 20 37 20 38 20 3d 20 32 62 20 33 62 20 34 62 20   7 8 = 2b 3b 4b 
08b0: 35 20 36 62 20 37 62 20 38 62 20 3c 0a 7d 0a 6d  5 6b 7b 8b <.}.m
08c0: 65 72 67 65 2d 74 65 73 74 20 31 30 30 33 20 7b  erge-test 1003 {
08d0: 0a 20 20 32 20 33 20 34 20 35 20 36 20 37 20 38  .  2 3 4 5 6 7 8
08e0: 0a 7d 20 7b 0a 20 20 32 62 20 33 62 20 34 20 35  .} {.  2b 3b 4 5
08f0: 20 36 20 37 62 20 38 62 0a 7d 20 7b 0a 20 20 32   6 7b 8b.} {.  2
0900: 20 33 20 34 63 20 35 63 20 36 63 20 37 20 38 0a   3 4c 5c 6c 7 8.
0910: 7d 20 7b 0a 20 20 32 62 20 33 62 20 34 63 20 35  } {.  2b 3b 4c 5
0920: 63 20 36 63 20 37 62 20 38 62 0a 7d 20 7b 0a 20  c 6c 7b 8b.} {. 
0930: 20 32 62 20 33 62 20 34 63 20 35 63 20 36 63 20   2b 3b 4c 5c 6c 
0940: 37 62 20 38 62 0a 7d 0a                          7b 8b.}.