Fossil

Hex Artifact Content
Login

Artifact e9b9b3826dc271ae75523a5fa0a08fe17b0cd722:


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 33 2d 77 61 79 2d  .  fossil 3-way-
0330: 6d 65 72 67 65 20 74 31 20 74 32 20 74 33 20 74  merge t1 t2 t3 t
0340: 34 0a 20 20 66 6f 73 73 69 6c 20 33 2d 77 61 79  4.  fossil 3-way
0350: 2d 6d 65 72 67 65 20 74 31 20 74 33 20 74 32 20  -merge t1 t3 t2 
0360: 74 35 0a 20 20 73 65 74 20 78 20 5b 72 65 61 64  t5.  set x [read
0370: 5f 66 69 6c 65 20 74 34 5d 0a 20 20 72 65 67 73  _file t4].  regs
0380: 75 62 20 2d 61 6c 6c 20 7b 3c 3c 3c 3c 3c 3c 3c  ub -all {<<<<<<<
0390: 20 42 45 47 49 4e 20 4d 45 52 47 45 20 43 4f 4e   BEGIN MERGE CON
03a0: 46 4c 49 43 54 2e 2a 3c 3c 7d 20 24 78 20 7b 3e  FLICT.*<<} $x {>
03b0: 7d 20 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c  } x.  regsub -al
03c0: 6c 20 7b 3d 3d 3d 3d 3d 3d 3d 2e 2a 3d 3d 3d 3d  l {=======.*====
03d0: 3d 3d 3d 7d 20 24 78 20 7b 3d 7d 20 78 0a 20 20  ===} $x {=} x.  
03e0: 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 3e 3e 3e  regsub -all {>>>
03f0: 3e 3e 3e 3e 20 45 4e 44 20 4d 45 52 47 45 20 43  >>>> END MERGE C
0400: 4f 4e 46 4c 49 43 54 2e 2a 3e 3e 3e 3e 7d 20 24  ONFLICT.*>>>>} $
0410: 78 20 7b 3c 7d 20 78 0a 20 20 73 65 74 20 78 20  x {<} x.  set x 
0420: 5b 73 70 6c 69 74 20 5b 73 74 72 69 6e 67 20 74  [split [string t
0430: 72 69 6d 20 24 78 5d 20 5c 6e 5d 0a 20 20 73 65  rim $x] \n].  se
0440: 74 20 79 20 5b 72 65 61 64 5f 66 69 6c 65 20 74  t y [read_file t
0450: 35 5d 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c  5].  regsub -all
0460: 20 7b 3c 3c 3c 3c 3c 3c 3c 20 42 45 47 49 4e 20   {<<<<<<< BEGIN 
0470: 4d 45 52 47 45 20 43 4f 4e 46 4c 49 43 54 2e 2a  MERGE CONFLICT.*
0480: 3c 3c 7d 20 24 79 20 7b 3e 7d 20 79 0a 20 20 72  <<} $y {>} y.  r
0490: 65 67 73 75 62 20 2d 61 6c 6c 20 7b 3d 3d 3d 3d  egsub -all {====
04a0: 3d 3d 3d 2e 2a 3d 3d 3d 3d 3d 3d 3d 7d 20 24 79  ===.*=======} $y
04b0: 20 7b 3d 7d 20 79 0a 20 20 72 65 67 73 75 62 20   {=} y.  regsub 
04c0: 2d 61 6c 6c 20 7b 3e 3e 3e 3e 3e 3e 3e 20 45 4e  -all {>>>>>>> EN
04d0: 44 20 4d 45 52 47 45 20 43 4f 4e 46 4c 49 43 54  D MERGE CONFLICT
04e0: 2e 2a 3e 3e 3e 3e 7d 20 24 79 20 7b 3c 7d 20 79  .*>>>>} $y {<} y
04f0: 0a 20 20 73 65 74 20 79 20 5b 73 70 6c 69 74 20  .  set y [split 
0500: 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 79 5d  [string trim $y]
0510: 20 5c 6e 5d 0a 20 20 73 65 74 20 72 65 73 75 6c   \n].  set resul
0520: 74 31 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20  t1 [string trim 
0530: 24 72 65 73 75 6c 74 31 5d 0a 20 20 69 66 20 7b  $result1].  if {
0540: 24 78 21 3d 24 72 65 73 75 6c 74 31 7d 20 7b 0a  $x!=$result1} {.
0550: 20 20 20 20 70 72 6f 74 4f 75 74 20 22 20 20 45      protOut "  E
0560: 78 70 65 63 74 65 64 20 5c 5b 24 72 65 73 75 6c  xpected \[$resul
0570: 74 31 5c 5d 22 0a 20 20 20 20 70 72 6f 74 4f 75  t1\]".    protOu
0580: 74 20 22 20 20 20 20 20 20 20 47 6f 74 20 5c 5b  t "       Got \[
0590: 24 78 5c 5d 22 0a 20 20 20 20 74 65 73 74 20 6d  $x\]".    test m
05a0: 65 72 67 65 33 2d 24 74 65 73 74 69 64 20 30 0a  erge3-$testid 0.
05b0: 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 73    } else {.    s
05c0: 65 74 20 72 65 73 75 6c 74 32 20 5b 73 74 72 69  et result2 [stri
05d0: 6e 67 20 74 72 69 6d 20 24 72 65 73 75 6c 74 32  ng trim $result2
05e0: 5d 0a 20 20 20 20 69 66 20 7b 24 79 21 3d 24 72  ].    if {$y!=$r
05f0: 65 73 75 6c 74 32 7d 20 7b 0a 20 20 20 20 20 20  esult2} {.      
0600: 70 72 6f 74 4f 75 74 20 22 20 20 45 78 70 65 63  protOut "  Expec
0610: 74 65 64 20 5c 5b 24 72 65 73 75 6c 74 32 5c 5d  ted \[$result2\]
0620: 22 0a 20 20 20 20 20 20 70 72 6f 74 4f 75 74 20  ".      protOut 
0630: 22 20 20 20 20 20 20 20 47 6f 74 20 5c 5b 24 79  "       Got \[$y
0640: 5c 5d 22 0a 20 20 20 20 20 20 74 65 73 74 20 6d  \]".      test m
0650: 65 72 67 65 33 2d 24 74 65 73 74 69 64 20 30 0a  erge3-$testid 0.
0660: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20      } else {.   
0670: 20 20 20 74 65 73 74 20 6d 65 72 67 65 33 2d 24     test merge3-$
0680: 74 65 73 74 69 64 20 31 0a 20 20 20 20 7d 0a 20  testid 1.    }. 
0690: 20 7d 0a 7d 0a 0a 6d 65 72 67 65 2d 74 65 73 74   }.}..merge-test
06a0: 20 31 30 30 30 20 7b 0a 20 20 31 20 32 20 33 20   1000 {.  1 2 3 
06b0: 34 20 35 20 36 20 37 20 38 20 39 0a 7d 20 7b 0a  4 5 6 7 8 9.} {.
06c0: 20 20 31 20 32 62 20 33 62 20 34 62 20 35 20 36    1 2b 3b 4b 5 6
06d0: 62 20 37 62 20 38 62 20 39 0a 7d 20 7b 0a 20 20  b 7b 8b 9.} {.  
06e0: 31 20 32 20 33 20 34 63 20 35 63 20 36 63 20 37  1 2 3 4c 5c 6c 7
06f0: 20 38 20 39 0a 7d 20 7b 0a 20 20 31 20 3e 20 32   8 9.} {.  1 > 2
0700: 62 20 33 62 20 34 62 20 35 20 36 62 20 37 62 20  b 3b 4b 5 6b 7b 
0710: 38 62 20 3d 20 32 20 33 20 34 63 20 35 63 20 36  8b = 2 3 4c 5c 6
0720: 63 20 37 20 38 20 3c 20 39 0a 7d 20 7b 0a 20 20  c 7 8 < 9.} {.  
0730: 31 20 3e 20 32 20 33 20 34 63 20 35 63 20 36 63  1 > 2 3 4c 5c 6c
0740: 20 37 20 38 20 3d 20 32 62 20 33 62 20 34 62 20   7 8 = 2b 3b 4b 
0750: 35 20 36 62 20 37 62 20 38 62 20 3c 20 39 0a 7d  5 6b 7b 8b < 9.}
0760: 0a 6d 65 72 67 65 2d 74 65 73 74 20 31 30 30 31  .merge-test 1001
0770: 20 7b 0a 20 20 31 20 32 20 33 20 34 20 35 20 36   {.  1 2 3 4 5 6
0780: 20 37 20 38 20 39 0a 7d 20 7b 0a 20 20 31 20 32   7 8 9.} {.  1 2
0790: 62 20 33 62 20 34 20 35 20 36 20 37 62 20 38 62  b 3b 4 5 6 7b 8b
07a0: 20 39 0a 7d 20 7b 0a 20 20 31 20 32 20 33 20 34   9.} {.  1 2 3 4
07b0: 63 20 35 63 20 36 63 20 37 20 38 20 39 0a 7d 20  c 5c 6c 7 8 9.} 
07c0: 7b 0a 20 20 31 20 32 62 20 33 62 20 34 63 20 35  {.  1 2b 3b 4c 5
07d0: 63 20 36 63 20 37 62 20 38 62 20 39 0a 7d 20 7b  c 6c 7b 8b 9.} {
07e0: 0a 20 20 31 20 32 62 20 33 62 20 34 63 20 35 63  .  1 2b 3b 4c 5c
07f0: 20 36 63 20 37 62 20 38 62 20 39 0a 7d 0a 6d 65   6c 7b 8b 9.}.me
0800: 72 67 65 2d 74 65 73 74 20 31 30 30 32 20 7b 0a  rge-test 1002 {.
0810: 20 20 32 20 33 20 34 20 35 20 36 20 37 20 38 0a    2 3 4 5 6 7 8.
0820: 7d 20 7b 0a 20 20 32 62 20 33 62 20 34 62 20 35  } {.  2b 3b 4b 5
0830: 20 36 62 20 37 62 20 38 62 0a 7d 20 7b 0a 20 20   6b 7b 8b.} {.  
0840: 32 20 33 20 34 63 20 35 63 20 36 63 20 37 20 38  2 3 4c 5c 6c 7 8
0850: 0a 7d 20 7b 0a 20 20 3e 20 32 62 20 33 62 20 34  .} {.  > 2b 3b 4
0860: 62 20 35 20 36 62 20 37 62 20 38 62 20 3d 20 32  b 5 6b 7b 8b = 2
0870: 20 33 20 34 63 20 35 63 20 36 63 20 37 20 38 20   3 4c 5c 6c 7 8 
0880: 3c 0a 7d 20 7b 0a 20 20 3e 20 32 20 33 20 34 63  <.} {.  > 2 3 4c
0890: 20 35 63 20 36 63 20 37 20 38 20 3d 20 32 62 20   5c 6c 7 8 = 2b 
08a0: 33 62 20 34 62 20 35 20 36 62 20 37 62 20 38 62  3b 4b 5 6b 7b 8b
08b0: 20 3c 0a 7d 0a 6d 65 72 67 65 2d 74 65 73 74 20   <.}.merge-test 
08c0: 31 30 30 33 20 7b 0a 20 20 32 20 33 20 34 20 35  1003 {.  2 3 4 5
08d0: 20 36 20 37 20 38 0a 7d 20 7b 0a 20 20 32 62 20   6 7 8.} {.  2b 
08e0: 33 62 20 34 20 35 20 36 20 37 62 20 38 62 0a 7d  3b 4 5 6 7b 8b.}
08f0: 20 7b 0a 20 20 32 20 33 20 34 63 20 35 63 20 36   {.  2 3 4c 5c 6
0900: 63 20 37 20 38 0a 7d 20 7b 0a 20 20 32 62 20 33  c 7 8.} {.  2b 3
0910: 62 20 34 63 20 35 63 20 36 63 20 37 62 20 38 62  b 4c 5c 6c 7b 8b
0920: 0a 7d 20 7b 0a 20 20 32 62 20 33 62 20 34 63 20  .} {.  2b 3b 4c 
0930: 35 63 20 36 63 20 37 62 20 38 62 0a 7d 0a        5c 6c 7b 8b.}.