Hex Artifact Content
Not logged in

Artifact c72ee75675029fff6efae39b723dcd9884adf9f5:

Attachment "patch" to ticket [aee1b21fef] added by anonymous 2010-08-26 09:23:46.
0000: 2d 2d 2d 20 73 72 63 5c 64 69 66 66 63 6d 64 2e  --- src\diffcmd.
0010: 63 0d 0a 2b 2b 2b 20 73 72 63 5c 64 69 66 66 63  c..+++ src\diffc
0020: 6d 64 2e 63 0d 0a 40 40 20 2d 31 37 39 2c 33 36  md.c..@@ -179,36
0030: 20 2b 31 37 39 2c 35 37 20 40 40 0d 0a 20 20 20   +179,57 @@..   
0040: 20 20 62 6c 6f 62 5f 72 65 73 65 74 28 26 63 6d    blob_reset(&cm
0050: 64 29 3b 0d 0a 20 20 20 7d 0d 0a 20 7d 0d 0a 20  d);..   }.. }.. 
0060: 0d 0a 20 2f 2a 0d 0a 2d 2a 2a 20 44 6f 20 61 20  .. /*..-** Do a 
0070: 64 69 66 66 20 61 67 61 69 6e 73 74 20 61 20 73  diff against a s
0080: 69 6e 67 6c 65 20 66 69 6c 65 20 6e 61 6d 65 64  ingle file named
0090: 20 69 6e 20 67 2e 61 72 67 76 5b 32 5d 20 66 72   in g.argv[2] fr
00a0: 6f 6d 20 76 65 72 73 69 6f 6e 20 7a 46 72 6f 6d  om version zFrom
00b0: 0d 0a 2b 2a 2a 20 44 6f 20 61 20 64 69 66 66 20  ..+** Do a diff 
00c0: 61 67 61 69 6e 73 74 20 61 20 73 70 65 63 69 66  against a specif
00d0: 69 65 64 20 66 69 6c 65 20 66 72 6f 6d 20 76 65  ied file from ve
00e0: 72 73 69 6f 6e 20 7a 46 72 6f 6d 0d 0a 20 2a 2a  rsion zFrom.. **
00f0: 20 61 67 61 69 6e 73 74 20 74 68 65 20 73 61 6d   against the sam
0100: 65 20 66 69 6c 65 20 6f 6e 20 64 69 73 6b 2e 0d  e file on disk..
0110: 0a 20 2a 2f 0d 0a 20 73 74 61 74 69 63 20 76 6f  . */.. static vo
0120: 69 64 20 64 69 66 66 5f 6f 6e 65 5f 61 67 61 69  id diff_one_agai
0130: 6e 73 74 5f 64 69 73 6b 28 0d 0a 2b 20 20 63 6f  nst_disk(..+  co
0140: 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 2c  nst char *zFile,
0150: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69 73 70           /* Disp
0160: 6c 61 79 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  lay name of the 
0170: 66 69 6c 65 20 2a 2f 0d 0a 20 20 20 63 6f 6e 73  file */..   cons
0180: 74 20 63 68 61 72 20 2a 7a 46 72 6f 6d 2c 20 20  t char *zFrom,  
0190: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
01a0: 20 66 69 6c 65 20 2a 2f 0d 0a 2d 20 20 63 6f 6e   file */..-  con
01b0: 73 74 20 63 68 61 72 20 2a 7a 44 69 66 66 43 6d  st char *zDiffCm
01c0: 64 2c 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68  d,     /* Use th
01d0: 69 73 20 22 64 69 66 66 22 20 63 6f 6d 6d 61 6e  is "diff" comman
01e0: 64 20 2a 2f 0d 0a 2d 20 20 69 6e 74 20 69 67 6e  d */..-  int ign
01f0: 6f 72 65 45 6f 6c 57 73 20 20 20 20 20 20 20 20  oreEolWs        
0200: 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 77 68 69     /* Ignore whi
0210: 74 65 73 70 61 63 65 20 63 68 61 6e 67 65 73 20  tespace changes 
0220: 61 74 20 65 6e 64 20 6f 66 20 6c 69 6e 65 73 20  at end of lines 
0230: 2a 2f 0d 0a 2b 20 20 63 6f 6e 73 74 20 63 68 61  */..+  const cha
0240: 72 20 2a 7a 44 69 66 66 43 6d 64 20 20 20 20 20  r *zDiffCmd     
0250: 20 2f 2a 20 55 73 65 20 74 68 69 73 20 22 64 69   /* Use this "di
0260: 66 66 22 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0d 0a  ff" command */..
0270: 20 29 7b 0d 0a 2b 0d 0a 20 20 20 42 6c 6f 62 20   ){..+..   Blob 
0280: 66 6e 61 6d 65 3b 0d 0a 20 20 20 42 6c 6f 62 20  fname;..   Blob 
0290: 63 6f 6e 74 65 6e 74 3b 0d 0a 2d 20 20 66 69 6c  content;..-  fil
02a0: 65 5f 74 72 65 65 5f 6e 61 6d 65 28 67 2e 61 72  e_tree_name(g.ar
02b0: 67 76 5b 32 5d 2c 20 26 66 6e 61 6d 65 2c 20 31  gv[2], &fname, 1
02c0: 29 3b 0d 0a 2b 20 20 66 69 6c 65 5f 74 72 65 65  );..+  file_tree
02d0: 5f 6e 61 6d 65 28 7a 46 69 6c 65 2c 20 26 66 6e  _name(zFile, &fn
02e0: 61 6d 65 2c 20 31 29 3b 0d 0a 20 20 20 68 69 73  ame, 1);..   his
02f0: 74 6f 72 69 63 61 6c 5f 76 65 72 73 69 6f 6e 5f  torical_version_
0300: 6f 66 5f 66 69 6c 65 28 7a 46 72 6f 6d 2c 20 62  of_file(zFrom, b
0310: 6c 6f 62 5f 73 74 72 28 26 66 6e 61 6d 65 29 2c  lob_str(&fname),
0320: 20 26 63 6f 6e 74 65 6e 74 2c 20 30 29 3b 0d 0a   &content, 0);..
0330: 2d 20 20 64 69 66 66 5f 66 69 6c 65 28 26 63 6f  -  diff_file(&co
0340: 6e 74 65 6e 74 2c 20 67 2e 61 72 67 76 5b 32 5d  ntent, g.argv[2]
0350: 2c 20 67 2e 61 72 67 76 5b 32 5d 2c 20 7a 44 69  , g.argv[2], zDi
0360: 66 66 43 6d 64 2c 20 69 67 6e 6f 72 65 45 6f 6c  ffCmd, ignoreEol
0370: 57 73 29 3b 0d 0a 2b 20 20 64 69 66 66 5f 66 69  Ws);..+  diff_fi
0380: 6c 65 28 26 63 6f 6e 74 65 6e 74 2c 20 7a 46 69  le(&content, zFi
0390: 6c 65 2c 20 7a 46 69 6c 65 2c 20 7a 44 69 66 66  le, zFile, zDiff
03a0: 43 6d 64 2c 20 30 29 3b 0d 0a 20 20 20 62 6c 6f  Cmd, 0);..   blo
03b0: 62 5f 72 65 73 65 74 28 26 63 6f 6e 74 65 6e 74  b_reset(&content
03c0: 29 3b 0d 0a 20 20 20 62 6c 6f 62 5f 72 65 73 65  );..   blob_rese
03d0: 74 28 26 66 6e 61 6d 65 29 3b 0d 0a 2b 7d 0d 0a  t(&fname);..+}..
03e0: 2b 0d 0a 2b 2f 2a 0d 0a 2b 2a 2a 20 44 6f 20 61  +..+/*..+** Do a
03f0: 20 64 69 66 66 20 61 67 61 69 6e 73 74 20 73 6f   diff against so
0400: 6d 65 20 73 70 65 63 69 66 69 65 64 20 66 69 6c  me specified fil
0410: 65 73 20 66 72 6f 6d 20 76 65 72 73 69 6f 6e 20  es from version 
0420: 7a 46 72 6f 6d 0d 0a 2b 2a 2a 20 61 67 61 69 6e  zFrom..+** again
0430: 73 74 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65  st the same file
0440: 20 6f 6e 20 64 69 73 6b 2e 0d 0a 2b 2a 2a 0d 0a   on disk...+**..
0450: 2b 2a 2a 20 4e 6f 74 69 63 65 3a 20 54 68 65 20  +** Notice: The 
0460: 61 72 72 61 79 20 61 7a 46 69 6c 65 20 69 73 20  array azFile is 
0470: 4e 55 4c 4c 20 74 65 6d 69 6e 61 74 65 64 2e 0d  NULL teminated..
0480: 0a 2b 2a 2f 0d 0a 2b 73 74 61 74 69 63 20 76 6f  .+*/..+static vo
0490: 69 64 20 64 69 66 66 5f 73 6f 6d 65 5f 61 67 61  id diff_some_aga
04a0: 69 6e 73 74 5f 64 69 73 6b 28 0d 0a 2b 20 20 20  inst_disk(..+   
04b0: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
04c0: 2a 2a 61 7a 46 69 6c 65 2c 20 20 20 20 20 20 20  **azFile,       
04d0: 2f 2a 20 44 69 73 70 6c 61 79 20 6e 61 6d 65 20  /* Display name 
04e0: 6f 66 20 74 68 65 73 65 20 66 69 6c 65 73 20 2a  of these files *
04f0: 2f 0d 0a 2b 20 20 20 20 20 20 20 20 69 6e 74 20  /..+        int 
0500: 6e 46 69 6c 65 2c 20 20 20 20 20 20 20 20 20 20  nFile,          
0510: 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 6e 75         /* Max nu
0520: 6d 62 65 72 20 6f 66 20 66 69 6c 65 73 20 74 6f  mber of files to
0530: 20 62 65 20 63 6f 6d 70 61 72 65 64 20 2a 2f 0d   be compared */.
0540: 0a 2b 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20  .+        const 
0550: 63 68 61 72 20 2a 7a 46 72 6f 6d 2c 20 20 20 20  char *zFrom,    
0560: 20 20 20 20 20 2f 2a 20 77 68 69 63 68 20 76 65       /* which ve
0570: 72 73 69 6f 6e 20 2a 2f 0d 0a 2b 20 20 20 20 20  rsion */..+     
0580: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
0590: 44 69 66 66 43 6d 64 20 20 20 20 20 20 20 2f 2a  DiffCmd       /*
05a0: 20 43 6f 6d 6d 61 6e 64 20 66 6f 72 20 63 6f 6d   Command for com
05b0: 70 61 72 69 73 6f 6e 20 2a 2f 0d 0a 2b 29 7b 0d  parison */..+){.
05c0: 0a 2b 20 20 77 68 69 6c 65 28 20 61 7a 46 69 6c  .+  while( azFil
05d0: 65 20 26 26 20 2a 61 7a 46 69 6c 65 20 26 26 20  e && *azFile && 
05e0: 6e 46 69 6c 65 3e 30 20 29 7b 0d 0a 2b 20 20 20  nFile>0 ){..+   
05f0: 20 64 69 66 66 5f 6f 6e 65 5f 61 67 61 69 6e 73   diff_one_agains
0600: 74 5f 64 69 73 6b 28 2a 61 7a 46 69 6c 65 2c 20  t_disk(*azFile, 
0610: 7a 46 72 6f 6d 2c 20 7a 44 69 66 66 43 6d 64 29  zFrom, zDiffCmd)
0620: 3b 0d 0a 2b 0d 0a 2b 20 20 20 20 2b 2b 61 7a 46  ;..+..+    ++azF
0630: 69 6c 65 3b 0d 0a 2b 20 20 20 20 2d 2d 6e 46 69  ile;..+    --nFi
0640: 6c 65 3b 0d 0a 2b 20 20 7d 0d 0a 20 7d 0d 0a 20  le;..+  }.. }.. 
0650: 0d 0a 20 2f 2a 0d 0a 20 2a 2a 20 52 75 6e 20 61  .. /*.. ** Run a
0660: 20 64 69 66 66 20 62 65 74 77 65 65 6e 20 74 68   diff between th
0670: 65 20 76 65 72 73 69 6f 6e 20 7a 46 72 6f 6d 20  e version zFrom 
0680: 61 6e 64 20 66 69 6c 65 73 20 6f 6e 20 64 69 73  and files on dis
0690: 6b 2e 20 20 7a 46 72 6f 6d 20 6d 69 67 68 74 0d  k.  zFrom might.
06a0: 0a 20 2a 2a 20 62 65 20 4e 55 4c 4c 20 77 68 69  . ** be NULL whi
06b0: 63 68 20 6d 65 61 6e 73 20 74 6f 20 73 69 6d 70  ch means to simp
06c0: 6c 79 20 73 68 6f 77 20 74 68 65 20 64 69 66 66  ly show the diff
06d0: 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74  erence between t
06e0: 68 65 20 65 64 69 74 65 64 0d 0a 20 2a 2a 20 66  he edited.. ** f
06f0: 69 6c 65 73 20 6f 6e 20 64 69 73 6b 20 61 6e 64  iles on disk and
0700: 20 74 68 65 20 63 68 65 63 6b 2d 6f 75 74 20 6f   the check-out o
0710: 6e 20 77 68 69 63 68 20 74 68 65 79 20 61 72 65  n which they are
0720: 20 62 61 73 65 64 2e 0d 0a 20 2a 2f 0d 0a 20 73   based... */.. s
0730: 74 61 74 69 63 20 76 6f 69 64 20 64 69 66 66 5f  tatic void diff_
0740: 61 6c 6c 5f 61 67 61 69 6e 73 74 5f 64 69 73 6b  all_against_disk
0750: 28 0d 0a 20 20 20 63 6f 6e 73 74 20 63 68 61 72  (..   const char
0760: 20 2a 7a 46 72 6f 6d 2c 20 20 20 20 20 20 20 20   *zFrom,        
0770: 2f 2a 20 56 65 72 73 69 6f 6e 20 74 6f 20 64 69  /* Version to di
0780: 66 66 65 72 65 6e 63 65 20 66 72 6f 6d 20 2a 2f  fference from */
0790: 0d 0a 2d 20 20 63 6f 6e 73 74 20 63 68 61 72 20  ..-  const char 
07a0: 2a 7a 44 69 66 66 43 6d 64 2c 20 20 20 20 20 2f  *zDiffCmd,     /
07b0: 2a 20 55 73 65 20 74 68 69 73 20 64 69 66 66 20  * Use this diff 
07c0: 63 6f 6d 6d 61 6e 64 2e 20 20 4e 55 4c 4c 20 66  command.  NULL f
07d0: 6f 72 20 62 75 69 6c 74 2d 69 6e 20 2a 2f 0d 0a  or built-in */..
07e0: 2d 20 20 69 6e 74 20 69 67 6e 6f 72 65 45 6f 6c  -  int ignoreEol
07f0: 57 73 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  Ws           /* 
0800: 49 67 6e 6f 72 65 20 65 6e 64 2d 6f 66 2d 6c 69  Ignore end-of-li
0810: 6e 65 20 77 68 69 74 65 73 70 61 63 65 20 2a 2f  ne whitespace */
0820: 0d 0a 2b 20 20 63 6f 6e 73 74 20 63 68 61 72 20  ..+  const char 
0830: 2a 7a 44 69 66 66 43 6d 64 20 20 20 20 20 20 2f  *zDiffCmd      /
0840: 2a 20 55 73 65 20 74 68 69 73 20 64 69 66 66 20  * Use this diff 
0850: 63 6f 6d 6d 61 6e 64 2e 20 20 4e 55 4c 4c 20 66  command.  NULL f
0860: 6f 72 20 62 75 69 6c 74 2d 69 6e 20 2a 2f 0d 0a  or built-in */..
0870: 2b 0d 0a 20 29 7b 0d 0a 20 20 20 69 6e 74 20 76  +.. ){..   int v
0880: 69 64 3b 0d 0a 20 20 20 42 6c 6f 62 20 73 71 6c  id;..   Blob sql
0890: 3b 0d 0a 20 20 20 53 74 6d 74 20 71 3b 0d 0a 20  ;..   Stmt q;.. 
08a0: 0d 0a 40 40 20 2d 32 37 35 2c 35 31 20 2b 32 39  ..@@ -275,51 +29
08b0: 36 2c 37 31 20 40 40 0d 0a 20 20 20 20 20 20 20  6,71 @@..       
08c0: 63 6f 6e 74 65 6e 74 5f 67 65 74 28 73 72 63 69  content_get(srci
08d0: 64 2c 20 26 63 6f 6e 74 65 6e 74 29 3b 0d 0a 20  d, &content);.. 
08e0: 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 49 6e        printf("In
08f0: 64 65 78 3a 20 25 73 5c 6e 3d 3d 3d 3d 3d 3d 3d  dex: %s\n=======
0900: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0910: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0920: 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  "..             
0930: 20 22 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d   "==============
0940: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 5c 6e  ==============\n
0950: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
0960: 20 20 7a 50 61 74 68 6e 61 6d 65 0d 0a 20 20 20    zPathname..   
0970: 20 20 20 20 29 3b 0d 0a 2d 20 20 20 20 20 20 64      );..-      d
0980: 69 66 66 5f 66 69 6c 65 28 26 63 6f 6e 74 65 6e  iff_file(&conten
0990: 74 2c 20 7a 46 75 6c 6c 4e 61 6d 65 2c 20 7a 50  t, zFullName, zP
09a0: 61 74 68 6e 61 6d 65 2c 20 7a 44 69 66 66 43 6d  athname, zDiffCm
09b0: 64 2c 20 69 67 6e 6f 72 65 45 6f 6c 57 73 29 3b  d, ignoreEolWs);
09c0: 0d 0a 2b 20 20 20 20 20 20 64 69 66 66 5f 66 69  ..+      diff_fi
09d0: 6c 65 28 26 63 6f 6e 74 65 6e 74 2c 20 7a 46 75  le(&content, zFu
09e0: 6c 6c 4e 61 6d 65 2c 20 7a 50 61 74 68 6e 61 6d  llName, zPathnam
09f0: 65 2c 20 7a 44 69 66 66 43 6d 64 2c 20 30 29 3b  e, zDiffCmd, 0);
0a00: 0d 0a 20 20 20 20 20 20 20 62 6c 6f 62 5f 72 65  ..       blob_re
0a10: 73 65 74 28 26 63 6f 6e 74 65 6e 74 29 3b 0d 0a  set(&content);..
0a20: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 66 72 65       }..     fre
0a30: 65 28 7a 46 75 6c 6c 4e 61 6d 65 29 3b 0d 0a 20  e(zFullName);.. 
0a40: 20 20 7d 0d 0a 20 20 20 64 62 5f 66 69 6e 61 6c    }..   db_final
0a50: 69 7a 65 28 26 71 29 3b 0d 0a 20 20 20 64 62 5f  ize(&q);..   db_
0a60: 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28  end_transaction(
0a70: 31 29 3b 20 20 2f 2a 20 52 4f 4c 4c 42 41 43 4b  1);  /* ROLLBACK
0a80: 20 2a 2f 0d 0a 20 7d 0d 0a 20 0d 0a 20 2f 2a 0d   */.. }.. .. /*.
0a90: 0a 2d 2a 2a 20 4f 75 74 70 75 74 20 74 68 65 20  .-** Output the 
0aa0: 64 69 66 66 65 72 65 6e 63 65 73 20 62 65 74 77  differences betw
0ab0: 65 65 6e 20 74 77 6f 20 76 65 72 73 69 6f 6e 73  een two versions
0ac0: 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 66 69 6c   of a single fil
0ad0: 65 2e 0d 0a 2d 2a 2a 20 7a 46 72 6f 6d 20 61 6e  e...-** zFrom an
0ae0: 64 20 7a 54 6f 20 61 72 65 20 74 68 65 20 63 68  d zTo are the ch
0af0: 65 63 6b 2d 69 6e 73 20 63 6f 6e 74 61 69 6e 69  eck-ins containi
0b00: 6e 67 20 74 68 65 20 74 77 6f 20 66 69 6c 65 20  ng the two file 
0b10: 76 65 72 73 69 6f 6e 73 2e 0d 0a 2d 2a 2a 20 54  versions...-** T
0b20: 68 65 20 66 69 6c 65 6e 61 6d 65 20 69 73 20 63  he filename is c
0b30: 6f 6e 74 61 69 6e 65 64 20 69 6e 20 67 2e 61 72  ontained in g.ar
0b40: 67 76 5b 32 5d 2e 0d 0a 2b 2a 2a 20 4f 75 74 70  gv[2]...+** Outp
0b50: 75 74 20 74 68 65 20 64 69 66 66 65 72 65 6e 63  ut the differenc
0b60: 65 73 20 62 65 74 77 65 65 6e 20 74 77 6f 20 76  es between two v
0b70: 65 72 73 69 6f 6e 73 20 6f 66 20 61 20 73 70 65  ersions of a spe
0b80: 63 69 66 69 65 64 20 66 69 6c 65 2e 0d 0a 2b 2a  cified file...+*
0b90: 2a 20 7a 46 72 6f 6d 20 61 6e 64 20 7a 54 6f 20  * zFrom and zTo 
0ba0: 61 72 65 20 74 68 65 20 63 68 65 63 6b 2d 69 6e  are the check-in
0bb0: 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  s containing the
0bc0: 20 74 77 6f 20 66 69 6c 65 20 76 65 72 73 69 6f   two file versio
0bd0: 6e 73 2e 0d 0a 20 2a 2f 0d 0a 20 73 74 61 74 69  ns... */.. stati
0be0: 63 20 76 6f 69 64 20 64 69 66 66 5f 6f 6e 65 5f  c void diff_one_
0bf0: 74 77 6f 5f 76 65 72 73 69 6f 6e 73 28 0d 0a 2b  two_versions(..+
0c00: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46    const char *zF
0c10: 69 6c 65 2c 0d 0a 20 20 20 63 6f 6e 73 74 20 63  ile,..   const c
0c20: 68 61 72 20 2a 7a 46 72 6f 6d 2c 0d 0a 20 20 20  har *zFrom,..   
0c30: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 6f 2c  const char *zTo,
0c40: 0d 0a 2d 20 20 63 6f 6e 73 74 20 63 68 61 72 20  ..-  const char 
0c50: 2a 7a 44 69 66 66 43 6d 64 2c 0d 0a 2d 20 20 69  *zDiffCmd,..-  i
0c60: 6e 74 20 69 67 6e 6f 72 65 45 6f 6c 57 73 0d 0a  nt ignoreEolWs..
0c70: 2b 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  +  const char *z
0c80: 44 69 66 66 43 6d 64 0d 0a 20 29 7b 0d 0a 20 20  DiffCmd.. ){..  
0c90: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0d 0a 20   char *zName;.. 
0ca0: 20 20 42 6c 6f 62 20 66 6e 61 6d 65 3b 0d 0a 20    Blob fname;.. 
0cb0: 20 20 42 6c 6f 62 20 76 31 2c 20 76 32 3b 0d 0a    Blob v1, v2;..
0cc0: 2d 20 20 66 69 6c 65 5f 74 72 65 65 5f 6e 61 6d  -  file_tree_nam
0cd0: 65 28 67 2e 61 72 67 76 5b 32 5d 2c 20 26 66 6e  e(g.argv[2], &fn
0ce0: 61 6d 65 2c 20 31 29 3b 0d 0a 2b 20 20 66 69 6c  ame, 1);..+  fil
0cf0: 65 5f 74 72 65 65 5f 6e 61 6d 65 28 7a 46 69 6c  e_tree_name(zFil
0d00: 65 2c 20 26 66 6e 61 6d 65 2c 20 31 29 3b 0d 0a  e, &fname, 1);..
0d10: 20 20 20 7a 4e 61 6d 65 20 3d 20 62 6c 6f 62 5f     zName = blob_
0d20: 73 74 72 28 26 66 6e 61 6d 65 29 3b 0d 0a 20 20  str(&fname);..  
0d30: 20 68 69 73 74 6f 72 69 63 61 6c 5f 76 65 72 73   historical_vers
0d40: 69 6f 6e 5f 6f 66 5f 66 69 6c 65 28 7a 46 72 6f  ion_of_file(zFro
0d50: 6d 2c 20 7a 4e 61 6d 65 2c 20 26 76 31 2c 20 30  m, zName, &v1, 0
0d60: 29 3b 0d 0a 20 20 20 68 69 73 74 6f 72 69 63 61  );..   historica
0d70: 6c 5f 76 65 72 73 69 6f 6e 5f 6f 66 5f 66 69 6c  l_version_of_fil
0d80: 65 28 7a 54 6f 2c 20 7a 4e 61 6d 65 2c 20 26 76  e(zTo, zName, &v
0d90: 32 2c 20 30 29 3b 0d 0a 2d 20 20 64 69 66 66 5f  2, 0);..-  diff_
0da0: 66 69 6c 65 5f 6d 65 6d 28 26 76 31 2c 20 26 76  file_mem(&v1, &v
0db0: 32 2c 20 7a 4e 61 6d 65 2c 20 7a 44 69 66 66 43  2, zName, zDiffC
0dc0: 6d 64 2c 20 69 67 6e 6f 72 65 45 6f 6c 57 73 29  md, ignoreEolWs)
0dd0: 3b 0d 0a 2b 20 20 64 69 66 66 5f 66 69 6c 65 5f  ;..+  diff_file_
0de0: 6d 65 6d 28 26 76 31 2c 20 26 76 32 2c 20 7a 4e  mem(&v1, &v2, zN
0df0: 61 6d 65 2c 20 7a 44 69 66 66 43 6d 64 2c 20 30  ame, zDiffCmd, 0
0e00: 29 3b 0d 0a 20 20 20 62 6c 6f 62 5f 72 65 73 65  );..   blob_rese
0e10: 74 28 26 76 31 29 3b 0d 0a 20 20 20 62 6c 6f 62  t(&v1);..   blob
0e20: 5f 72 65 73 65 74 28 26 76 32 29 3b 0d 0a 20 20  _reset(&v2);..  
0e30: 20 62 6c 6f 62 5f 72 65 73 65 74 28 26 66 6e 61   blob_reset(&fna
0e40: 6d 65 29 3b 0d 0a 2b 7d 0d 0a 2b 0d 0a 2b 2f 2a  me);..+}..+..+/*
0e50: 0d 0a 2b 2a 2a 20 4f 75 74 70 75 74 20 74 68 65  ..+** Output the
0e60: 20 64 69 66 66 65 72 65 6e 63 65 73 20 62 65 74   differences bet
0e70: 77 65 65 6e 20 74 77 6f 20 76 65 72 73 69 6f 6e  ween two version
0e80: 73 20 6f 66 20 73 6f 6d 65 20 73 70 65 63 69 66  s of some specif
0e90: 69 65 64 20 66 69 6c 65 73 2e 0d 0a 2b 2a 2a 20  ied files...+** 
0ea0: 7a 46 72 6f 6d 20 61 6e 64 20 7a 54 6f 20 61 72  zFrom and zTo ar
0eb0: 65 20 74 68 65 20 63 68 65 63 6b 2d 69 6e 73 20  e the check-ins 
0ec0: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
0ed0: 77 6f 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 73  wo file versions
0ee0: 2e 0d 0a 2b 2a 2a 20 54 68 65 73 65 20 66 69 6c  ...+** These fil
0ef0: 65 73 20 61 72 65 20 73 70 65 63 69 66 69 65 64  es are specified
0f00: 20 69 6e 20 61 7a 46 69 6c 65 2e 0d 0a 2b 2a 2a   in azFile...+**
0f10: 0d 0a 2b 2a 2a 20 4e 6f 74 69 63 65 3a 20 54 68  ..+** Notice: Th
0f20: 65 20 61 72 72 61 79 20 61 7a 46 69 6c 65 20 69  e array azFile i
0f30: 73 20 4e 55 4c 4c 20 74 65 6d 69 6e 61 74 65 64  s NULL teminated
0f40: 2e 0d 0a 2b 2a 2f 0d 0a 2b 73 74 61 74 69 63 20  ...+*/..+static 
0f50: 76 6f 69 64 20 64 69 66 66 5f 73 6f 6d 65 5f 74  void diff_some_t
0f60: 77 6f 5f 76 65 72 73 69 6f 6e 73 28 0d 0a 2b 20  wo_versions(..+ 
0f70: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a   const char **az
0f80: 46 69 6c 65 2c 20 20 20 20 20 20 20 20 20 20 20  File,           
0f90: 2f 2a 20 44 69 73 70 6c 61 79 20 6e 61 6d 65 20  /* Display name 
0fa0: 6f 66 20 74 68 65 73 65 20 66 69 6c 65 73 20 2a  of these files *
0fb0: 2f 0d 0a 2b 20 20 69 6e 74 20 6e 46 69 6c 65 2c  /..+  int nFile,
0fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fd0: 20 20 20 20 20 2f 2a 20 4d 61 78 20 6e 75 6d 62       /* Max numb
0fe0: 65 72 20 6f 66 20 66 69 6c 65 73 20 74 6f 20 62  er of files to b
0ff0: 65 20 63 6f 6d 70 61 72 65 64 20 2a 2f 0d 0a 2b  e compared */..+
1000: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46    const char *zF
1010: 72 6f 6d 2c 20 20 20 20 20 20 20 20 20 20 20 20  rom,            
1020: 20 2f 2a 20 20 2a 2f 0d 0a 2b 20 20 63 6f 6e 73   /*  */..+  cons
1030: 74 20 63 68 61 72 20 2a 7a 54 6f 2c 20 20 20 20  t char *zTo,    
1040: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 2a             /*  *
1050: 2f 0d 0a 2b 20 20 63 6f 6e 73 74 20 63 68 61 72  /..+  const char
1060: 20 2a 7a 44 69 66 66 43 6d 64 20 20 20 20 20 20   *zDiffCmd      
1070: 20 20 20 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20       /* Command 
1080: 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a  for comparison *
1090: 2f 0d 0a 2b 29 7b 0d 0a 2b 20 20 77 68 69 6c 65  /..+){..+  while
10a0: 28 20 61 7a 46 69 6c 65 20 26 26 20 2a 61 7a 46  ( azFile && *azF
10b0: 69 6c 65 20 26 26 20 6e 46 69 6c 65 3e 30 20 29  ile && nFile>0 )
10c0: 7b 0d 0a 2b 20 20 20 20 64 69 66 66 5f 6f 6e 65  {..+    diff_one
10d0: 5f 74 77 6f 5f 76 65 72 73 69 6f 6e 73 28 2a 61  _two_versions(*a
10e0: 7a 46 69 6c 65 2c 20 7a 46 72 6f 6d 2c 20 7a 54  zFile, zFrom, zT
10f0: 6f 2c 20 7a 44 69 66 66 43 6d 64 29 3b 0d 0a 2b  o, zDiffCmd);..+
1100: 0d 0a 2b 20 20 20 20 2b 2b 61 7a 46 69 6c 65 3b  ..+    ++azFile;
1110: 0d 0a 2b 20 20 20 20 2d 2d 6e 46 69 6c 65 3b 0d  ..+    --nFile;.
1120: 0a 2b 20 20 7d 0d 0a 20 7d 0d 0a 20 0d 0a 20 2f  .+  }.. }.. .. /
1130: 2a 0d 0a 20 2a 2a 20 4f 75 74 70 75 74 20 74 68  *.. ** Output th
1140: 65 20 64 69 66 66 65 72 65 6e 63 65 73 20 62 65  e differences be
1150: 74 77 65 65 6e 20 74 77 6f 20 63 68 65 63 6b 2d  tween two check-
1160: 69 6e 73 2e 0d 0a 20 2a 2f 0d 0a 20 73 74 61 74  ins... */.. stat
1170: 69 63 20 76 6f 69 64 20 64 69 66 66 5f 61 6c 6c  ic void diff_all
1180: 5f 74 77 6f 5f 76 65 72 73 69 6f 6e 73 28 0d 0a  _two_versions(..
1190: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
11a0: 46 72 6f 6d 2c 0d 0a 20 20 20 63 6f 6e 73 74 20  From,..   const 
11b0: 63 68 61 72 20 2a 7a 54 6f 2c 0d 0a 2d 20 20 63  char *zTo,..-  c
11c0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 69 66 66  onst char *zDiff
11d0: 43 6d 64 2c 0d 0a 2d 20 20 69 6e 74 20 69 67 6e  Cmd,..-  int ign
11e0: 6f 72 65 45 6f 6c 57 73 0d 0a 2b 20 20 63 6f 6e  oreEolWs..+  con
11f0: 73 74 20 63 68 61 72 20 2a 7a 44 69 66 66 43 6d  st char *zDiffCm
1200: 64 0d 0a 20 29 7b 0d 0a 20 20 20 4d 61 6e 69 66  d.. ){..   Manif
1210: 65 73 74 20 6d 46 72 6f 6d 2c 20 6d 54 6f 3b 0d  est mFrom, mTo;.
1220: 0a 20 20 20 69 6e 74 20 69 46 72 6f 6d 2c 20 69  .   int iFrom, i
1230: 54 6f 3b 0d 0a 20 0d 0a 20 20 20 6d 61 6e 69 66  To;.. ..   manif
1240: 65 73 74 5f 66 72 6f 6d 5f 6e 61 6d 65 28 7a 46  est_from_name(zF
1250: 72 6f 6d 2c 20 26 6d 46 72 6f 6d 29 3b 0d 0a 40  rom, &mFrom);..@
1260: 40 20 2d 33 35 34 2c 31 31 20 2b 33 39 35 2c 31  @ -354,11 +395,1
1270: 31 20 40 40 0d 0a 20 20 20 20 20 20 20 29 3b 0d  1 @@..       );.
1280: 0a 20 20 20 20 20 20 20 72 69 64 20 3d 20 75 75  .       rid = uu
1290: 69 64 5f 74 6f 5f 72 69 64 28 6d 46 72 6f 6d 2e  id_to_rid(mFrom.
12a0: 61 46 69 6c 65 5b 69 46 72 6f 6d 5d 2e 7a 55 75  aFile[iFrom].zUu
12b0: 69 64 2c 20 30 29 3b 0d 0a 20 20 20 20 20 20 20  id, 0);..       
12c0: 63 6f 6e 74 65 6e 74 5f 67 65 74 28 72 69 64 2c  content_get(rid,
12d0: 20 26 66 31 29 3b 0d 0a 20 20 20 20 20 20 20 72   &f1);..       r
12e0: 69 64 20 3d 20 75 75 69 64 5f 74 6f 5f 72 69 64  id = uuid_to_rid
12f0: 28 6d 54 6f 2e 61 46 69 6c 65 5b 69 54 6f 5d 2e  (mTo.aFile[iTo].
1300: 7a 55 75 69 64 2c 20 30 29 3b 0d 0a 20 20 20 20  zUuid, 0);..    
1310: 20 20 20 63 6f 6e 74 65 6e 74 5f 67 65 74 28 72     content_get(r
1320: 69 64 2c 20 26 66 32 29 3b 0d 0a 2d 20 20 20 20  id, &f2);..-    
1330: 20 20 64 69 66 66 5f 66 69 6c 65 5f 6d 65 6d 28    diff_file_mem(
1340: 26 66 31 2c 20 26 66 32 2c 20 6d 46 72 6f 6d 2e  &f1, &f2, mFrom.
1350: 61 46 69 6c 65 5b 69 46 72 6f 6d 5d 2e 7a 4e 61  aFile[iFrom].zNa
1360: 6d 65 2c 20 7a 44 69 66 66 43 6d 64 2c 20 69 67  me, zDiffCmd, ig
1370: 6e 6f 72 65 45 6f 6c 57 73 29 3b 0d 0a 2b 20 20  noreEolWs);..+  
1380: 20 20 20 20 64 69 66 66 5f 66 69 6c 65 5f 6d 65      diff_file_me
1390: 6d 28 26 66 31 2c 20 26 66 32 2c 20 6d 46 72 6f  m(&f1, &f2, mFro
13a0: 6d 2e 61 46 69 6c 65 5b 69 46 72 6f 6d 5d 2e 7a  m.aFile[iFrom].z
13b0: 4e 61 6d 65 2c 20 7a 44 69 66 66 43 6d 64 2c 20  Name, zDiffCmd, 
13c0: 30 29 3b 0d 0a 20 20 20 20 20 20 20 62 6c 6f 62  0);..       blob
13d0: 5f 72 65 73 65 74 28 26 66 31 29 3b 0d 0a 20 20  _reset(&f1);..  
13e0: 20 20 20 20 20 62 6c 6f 62 5f 72 65 73 65 74 28       blob_reset(
13f0: 26 66 32 29 3b 0d 0a 20 20 20 20 20 20 20 69 46  &f2);..       iF
1400: 72 6f 6d 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 69  rom++;..       i
1410: 54 6f 2b 2b 3b 0d 0a 20 20 20 20 20 7d 0d 0a 40  To++;..     }..@
1420: 40 20 2d 33 36 39 2c 31 31 20 2b 34 31 30 2c 31  @ -369,11 +410,1
1430: 32 20 40 40 0d 0a 20 0d 0a 20 2f 2a 0d 0a 20 2a  2 @@.. .. /*.. *
1440: 2a 20 43 4f 4d 4d 41 4e 44 3a 20 64 69 66 66 0d  * COMMAND: diff.
1450: 0a 20 2a 2a 20 43 4f 4d 4d 41 4e 44 3a 20 67 64  . ** COMMAND: gd
1460: 69 66 66 0d 0a 20 2a 2a 0d 0a 2d 2a 2a 20 55 73  iff.. **..-** Us
1470: 61 67 65 3a 20 25 66 6f 73 73 69 6c 20 64 69 66  age: %fossil dif
1480: 66 7c 67 64 69 66 66 20 3f 6f 70 74 69 6f 6e 73  f|gdiff ?options
1490: 3f 20 3f 46 49 4c 45 3f 0d 0a 2b 2a 2a 20 55 73  ? ?FILE?..+** Us
14a0: 61 67 65 3a 20 25 66 6f 73 73 69 6c 20 64 69 66  age: %fossil dif
14b0: 66 7c 67 64 69 66 66 20 3f 6f 70 74 69 6f 6e 73  f|gdiff ?options
14c0: 3f 20 3f 46 49 4c 45 2e 2e 2e 3f 0d 0a 2b 2a 2a  ? ?FILE...?..+**
14d0: 20 20 20 20 4f 72 3a 20 25 66 6f 73 73 69 6c 20      Or: %fossil 
14e0: 64 69 66 66 7c 67 64 69 66 66 20 2d 2d 66 72 6f  diff|gdiff --fro
14f0: 6d 7c 2d 72 20 56 45 52 53 49 4f 4e 20 2d 2d 74  m|-r VERSION --t
1500: 6f 20 56 45 52 53 49 4f 4e 20 2d 52 20 52 45 50  o VERSION -R REP
1510: 4f 53 49 54 4f 52 59 0d 0a 20 2a 2a 0d 0a 20 2a  OSITORY.. **.. *
1520: 2a 20 53 68 6f 77 20 74 68 65 20 64 69 66 66 65  * Show the diffe
1530: 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74 68  rence between th
1540: 65 20 63 75 72 72 65 6e 74 20 76 65 72 73 69 6f  e current versio
1550: 6e 20 6f 66 20 46 49 4c 45 20 28 61 73 20 69 74  n of FILE (as it
1560: 0d 0a 20 2a 2a 20 65 78 69 73 74 73 20 6f 6e 20  .. ** exists on 
1570: 64 69 73 6b 29 20 61 6e 64 20 74 68 61 74 20 73  disk) and that s
1580: 61 6d 65 20 66 69 6c 65 20 61 73 20 69 74 20 77  ame file as it w
1590: 61 73 20 63 68 65 63 6b 65 64 20 6f 75 74 2e 20  as checked out. 
15a0: 20 4f 72 0d 0a 20 2a 2a 20 69 66 20 74 68 65 20   Or.. ** if the 
15b0: 46 49 4c 45 20 61 72 67 75 6d 65 6e 74 20 69 73  FILE argument is
15c0: 20 6f 6d 69 74 74 65 64 2c 20 73 68 6f 77 20 74   omitted, show t
15d0: 68 65 20 75 6e 73 61 76 65 64 20 63 68 61 6e 67  he unsaved chang
15e0: 65 64 20 63 75 72 72 65 6e 74 6c 79 0d 0a 20 2a  ed currently.. *
15f0: 2a 20 69 6e 20 74 68 65 20 77 6f 72 6b 69 6e 67  * in the working
1600: 20 63 68 65 63 6b 2d 6f 75 74 2e 0d 0a 40 40 20   check-out...@@ 
1610: 2d 34 30 38 2c 32 35 20 2b 34 35 30 2c 32 35 20  -408,25 +450,25 
1620: 40 40 0d 0a 20 20 20 20 20 64 62 5f 6d 75 73 74  @@..     db_must
1630: 5f 62 65 5f 77 69 74 68 69 6e 5f 74 72 65 65 28  _be_within_tree(
1640: 29 3b 0d 0a 20 20 20 20 20 76 65 72 69 66 79 5f  );..     verify_
1650: 61 6c 6c 5f 6f 70 74 69 6f 6e 73 28 29 3b 0d 0a  all_options();..
1660: 20 20 20 20 20 69 66 28 20 21 69 73 49 6e 74 65       if( !isInte
1670: 72 6e 44 69 66 66 20 29 7b 0d 0a 20 20 20 20 20  rnDiff ){..     
1680: 20 20 7a 44 69 66 66 43 6d 64 20 3d 20 64 62 5f    zDiffCmd = db_
1690: 67 65 74 28 69 73 47 44 69 66 66 20 3f 20 22 67  get(isGDiff ? "g
16a0: 64 69 66 66 2d 63 6f 6d 6d 61 6e 64 22 20 3a 20  diff-command" : 
16b0: 22 64 69 66 66 2d 63 6f 6d 6d 61 6e 64 22 2c 20  "diff-command", 
16c0: 30 29 3b 0d 0a 20 20 20 20 20 7d 0d 0a 2d 20 20  0);..     }..-  
16d0: 20 20 69 66 28 20 67 2e 61 72 67 63 3d 3d 33 20    if( g.argc==3 
16e0: 29 7b 0d 0a 2d 20 20 20 20 20 20 64 69 66 66 5f  ){..-      diff_
16f0: 6f 6e 65 5f 61 67 61 69 6e 73 74 5f 64 69 73 6b  one_against_disk
1700: 28 7a 46 72 6f 6d 2c 20 7a 44 69 66 66 43 6d 64  (zFrom, zDiffCmd
1710: 2c 20 30 29 3b 0d 0a 2b 20 20 20 20 69 66 28 20  , 0);..+    if( 
1720: 67 2e 61 72 67 63 3e 3d 33 20 29 7b 0d 0a 2b 20  g.argc>=3 ){..+ 
1730: 20 20 20 20 20 64 69 66 66 5f 73 6f 6d 65 5f 61       diff_some_a
1740: 67 61 69 6e 73 74 5f 64 69 73 6b 28 26 67 2e 61  gainst_disk(&g.a
1750: 72 67 76 5b 32 5d 2c 20 67 2e 61 72 67 63 2d 32  rgv[2], g.argc-2
1760: 2c 20 7a 46 72 6f 6d 2c 20 7a 44 69 66 66 43 6d  , zFrom, zDiffCm
1770: 64 29 3b 0d 0a 20 20 20 20 20 7d 65 6c 73 65 7b  d);..     }else{
1780: 0d 0a 2d 20 20 20 20 20 20 64 69 66 66 5f 61 6c  ..-      diff_al
1790: 6c 5f 61 67 61 69 6e 73 74 5f 64 69 73 6b 28 7a  l_against_disk(z
17a0: 46 72 6f 6d 2c 20 7a 44 69 66 66 43 6d 64 2c 20  From, zDiffCmd, 
17b0: 30 29 3b 0d 0a 2b 20 20 20 20 20 20 64 69 66 66  0);..+      diff
17c0: 5f 61 6c 6c 5f 61 67 61 69 6e 73 74 5f 64 69 73  _all_against_dis
17d0: 6b 28 7a 46 72 6f 6d 2c 20 7a 44 69 66 66 43 6d  k(zFrom, zDiffCm
17e0: 64 29 3b 0d 0a 20 20 20 20 20 7d 0d 0a 20 20 20  d);..     }..   
17f0: 7d 65 6c 73 65 20 69 66 28 20 7a 46 72 6f 6d 3d  }else if( zFrom=
1800: 3d 30 20 29 7b 0d 0a 20 20 20 20 20 66 6f 73 73  =0 ){..     foss
1810: 69 6c 5f 66 61 74 61 6c 28 22 6d 75 73 74 20 75  il_fatal("must u
1820: 73 65 20 2d 2d 66 72 6f 6d 20 69 66 20 2d 2d 74  se --from if --t
1830: 6f 20 69 73 20 70 72 65 73 65 6e 74 22 29 3b 0d  o is present");.
1840: 0a 20 20 20 7d 65 6c 73 65 7b 0d 0a 20 20 20 20  .   }else{..    
1850: 20 64 62 5f 66 69 6e 64 5f 61 6e 64 5f 6f 70 65   db_find_and_ope
1860: 6e 5f 72 65 70 6f 73 69 74 6f 72 79 28 31 29 3b  n_repository(1);
1870: 0d 0a 20 20 20 20 20 76 65 72 69 66 79 5f 61 6c  ..     verify_al
1880: 6c 5f 6f 70 74 69 6f 6e 73 28 29 3b 0d 0a 20 20  l_options();..  
1890: 20 20 20 69 66 28 20 21 69 73 49 6e 74 65 72 6e     if( !isIntern
18a0: 44 69 66 66 20 29 7b 0d 0a 20 20 20 20 20 20 20  Diff ){..       
18b0: 7a 44 69 66 66 43 6d 64 20 3d 20 64 62 5f 67 65  zDiffCmd = db_ge
18c0: 74 28 69 73 47 44 69 66 66 20 3f 20 22 67 64 69  t(isGDiff ? "gdi
18d0: 66 66 2d 63 6f 6d 6d 61 6e 64 22 20 3a 20 22 64  ff-command" : "d
18e0: 69 66 66 2d 63 6f 6d 6d 61 6e 64 22 2c 20 30 29  iff-command", 0)
18f0: 3b 0d 0a 20 20 20 20 20 7d 0d 0a 2d 20 20 20 20  ;..     }..-    
1900: 69 66 28 20 67 2e 61 72 67 63 3d 3d 33 20 29 7b  if( g.argc==3 ){
1910: 0d 0a 2d 20 20 20 20 20 20 64 69 66 66 5f 6f 6e  ..-      diff_on
1920: 65 5f 74 77 6f 5f 76 65 72 73 69 6f 6e 73 28 7a  e_two_versions(z
1930: 46 72 6f 6d 2c 20 7a 54 6f 2c 20 7a 44 69 66 66  From, zTo, zDiff
1940: 43 6d 64 2c 20 30 29 3b 0d 0a 2b 20 20 20 20 69  Cmd, 0);..+    i
1950: 66 28 20 67 2e 61 72 67 63 3e 3d 33 20 29 7b 0d  f( g.argc>=3 ){.
1960: 0a 2b 20 20 20 20 20 20 64 69 66 66 5f 73 6f 6d  .+      diff_som
1970: 65 5f 74 77 6f 5f 76 65 72 73 69 6f 6e 73 28 26  e_two_versions(&
1980: 67 2e 61 72 67 76 5b 32 5d 2c 20 67 2e 61 72 67  g.argv[2], g.arg
1990: 63 2d 32 2c 20 7a 46 72 6f 6d 2c 20 7a 54 6f 2c  c-2, zFrom, zTo,
19a0: 20 7a 44 69 66 66 43 6d 64 29 3b 0d 0a 20 20 20   zDiffCmd);..   
19b0: 20 20 7d 65 6c 73 65 7b 0d 0a 2d 20 20 20 20 20    }else{..-     
19c0: 20 64 69 66 66 5f 61 6c 6c 5f 74 77 6f 5f 76 65   diff_all_two_ve
19d0: 72 73 69 6f 6e 73 28 7a 46 72 6f 6d 2c 20 7a 54  rsions(zFrom, zT
19e0: 6f 2c 20 7a 44 69 66 66 43 6d 64 2c 20 30 29 3b  o, zDiffCmd, 0);
19f0: 0d 0a 2b 20 20 20 20 20 20 64 69 66 66 5f 61 6c  ..+      diff_al
1a00: 6c 5f 74 77 6f 5f 76 65 72 73 69 6f 6e 73 28 7a  l_two_versions(z
1a10: 46 72 6f 6d 2c 20 7a 54 6f 2c 20 7a 44 69 66 66  From, zTo, zDiff
1a20: 43 6d 64 29 3b 0d 0a 20 20 20 20 20 7d 0d 0a 20  Cmd);..     }.. 
1a30: 20 20 7d 0d 0a 20 7d 0d 0a 0d 0a                   }.. }....