Fossil

Hex Artifact Content
Login

Artifact cf43d53bceca4ca4c28304bc2377870922038c65:

Attachment "patch-hook.txt" to ticket [77de516a] added by wolfgang 2010-10-16 15:13:45.
0000: 43 48 41 4e 47 45 44 20 73 72 63 2f 64 62 2e 63  CHANGED src/db.c
0010: 0d 0a 49 6e 64 65 78 3a 20 73 72 63 2f 64 62 2e  ..Index: src/db.
0020: 63 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  c..=============
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0050: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0060: 3d 3d 3d 3d 3d 3d 0d 0a 2d 2d 2d 20 73 72 63 2f  ======..--- src/
0070: 64 62 2e 63 0d 0a 2b 2b 2b 20 73 72 63 2f 64 62  db.c..+++ src/db
0080: 2e 63 0d 0a 40 40 20 2d 31 35 32 35 2c 31 30 20  .c..@@ -1525,10 
0090: 2b 31 35 32 35 2c 31 36 20 40 40 0d 0a 20 20 20  +1525,16 @@..   
00a0: 7b 20 22 68 74 74 70 2d 70 6f 72 74 22 2c 20 20  { "http-port",  
00b0: 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 20 20     0,           
00c0: 20 20 20 20 31 36 2c 20 22 38 30 38 30 22 20 20      16, "8080"  
00d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
00e0: 0d 0a 20 20 20 7b 20 22 6c 6f 63 61 6c 61 75 74  ..   { "localaut
00f0: 68 22 2c 20 20 20 20 20 30 2c 20 20 20 20 20 20  h",     0,      
0100: 20 20 20 20 20 20 20 20 20 20 30 2c 20 22 30 22            0, "0"
0110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0120: 20 20 20 7d 2c 0d 0a 20 20 20 7b 20 22 6d 74 69     },..   { "mti
0130: 6d 65 2d 63 68 61 6e 67 65 73 22 2c 20 30 2c 20  me-changes", 0, 
0140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30                 0
0150: 2c 20 22 30 22 20 20 20 20 20 20 20 20 20 20 20  , "0"           
0160: 20 20 20 20 20 20 20 20 7d 2c 0d 0a 20 20 20 7b          },..   {
0170: 20 22 70 67 70 2d 63 6f 6d 6d 61 6e 64 22 2c 20   "pgp-command", 
0180: 20 20 30 2c 20 20 20 20 20 20 20 20 20 20 20 20    0,            
0190: 20 20 20 33 32 2c 20 22 67 70 67 20 2d 2d 63 6c     32, "gpg --cl
01a0: 65 61 72 73 69 67 6e 20 2d 6f 20 22 20 7d 2c 0d  earsign -o " },.
01b0: 0a 20 20 20 7b 20 22 70 72 6f 78 79 22 2c 20 20  .   { "proxy",  
01c0: 20 20 20 20 20 20 20 30 2c 20 20 20 20 20 20 20         0,       
01d0: 20 20 20 20 20 20 20 20 33 32 2c 20 22 6f 66 66          32, "off
01e0: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
01f0: 20 20 7d 2c 0d 0a 2b 20 20 7b 20 22 70 75 73 68    },..+  { "push
0200: 2d 68 6f 6f 6b 2d 70 61 74 74 65 72 6e 2d 63 6c  -hook-pattern-cl
0210: 69 65 6e 74 22 2c 0d 0a 2b 20 20 20 20 20 20 20  ient",..+       
0220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c                0,
0230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 33                 3
0240: 32 2c 20 22 22 20 20 20 20 20 20 20 20 20 20 20  2, ""           
0250: 20 20 20 20 20 20 20 20 20 7d 2c 0d 0a 2b 20 20           },..+  
0260: 7b 20 22 70 75 73 68 2d 68 6f 6f 6b 2d 70 61 74  { "push-hook-pat
0270: 74 65 72 6e 2d 63 6d 64 22 2c 0d 0a 2b 20 20 20  tern-cmd",..+   
0280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0290: 20 20 30 2c 20 20 20 20 20 20 20 20 20 20 20 20    0,            
02a0: 20 20 20 33 32 2c 20 22 22 20 20 20 20 20 20 20     32, ""       
02b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0d               },.
02c0: 0a 2b 20 20 7b 20 22 70 75 73 68 2d 68 6f 6f 6b  .+  { "push-hook
02d0: 2d 70 61 74 74 65 72 6e 2d 73 65 72 76 65 72 22  -pattern-server"
02e0: 2c 0d 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20  ,..+            
02f0: 20 20 20 20 20 20 20 20 20 30 2c 20 20 20 20 20           0,     
0300: 20 20 20 20 20 20 20 20 20 20 33 32 2c 20 22 22            32, ""
0310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0320: 20 20 20 20 7d 2c 0d 0a 20 20 20 7b 20 22 73 73      },..   { "ss
0330: 68 2d 63 6f 6d 6d 61 6e 64 22 2c 20 20 20 30 2c  h-command",   0,
0340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 33                 3
0350: 32 2c 20 22 22 20 20 20 20 20 20 20 20 20 20 20  2, ""           
0360: 20 20 20 20 20 20 20 20 20 7d 2c 0d 0a 20 20 20           },..   
0370: 7b 20 22 77 65 62 2d 62 72 6f 77 73 65 72 22 2c  { "web-browser",
0380: 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 20 20     0,           
0390: 20 20 20 20 33 32 2c 20 22 22 20 20 20 20 20 20      32, ""      
03a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
03b0: 0d 0a 20 20 20 7b 20 30 2c 30 2c 30 2c 30 20 7d  ..   { 0,0,0,0 }
03c0: 0d 0a 20 7d 3b 0d 0a 20 0d 0a 40 40 20 2d 31 35  .. };.. ..@@ -15
03d0: 39 36 2c 31 30 20 2b 31 36 30 32 2c 32 36 20 40  96,10 +1602,26 @
03e0: 40 0d 0a 20 2a 2a 0d 0a 20 2a 2a 20 20 20 20 70  @.. **.. **    p
03f0: 72 6f 78 79 20 20 20 20 20 20 20 20 20 55 52 4c  roxy         URL
0400: 20 6f 66 20 74 68 65 20 48 54 54 50 20 70 72 6f   of the HTTP pro
0410: 78 79 2e 20 20 49 66 20 75 6e 64 65 66 69 6e 65  xy.  If undefine
0420: 64 20 6f 72 20 22 6f 66 66 22 20 74 68 65 6e 0d  d or "off" then.
0430: 0a 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  . **            
0440: 20 20 20 20 20 20 74 68 65 20 22 68 74 74 70 5f        the "http_
0450: 70 72 6f 78 79 22 20 65 6e 76 69 72 6f 6e 6d 65  proxy" environme
0460: 6e 74 20 76 61 72 69 61 62 6c 65 20 69 73 20 63  nt variable is c
0470: 6f 6e 73 75 6c 74 65 64 2e 0d 0a 20 2a 2a 20 20  onsulted... **  
0480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0490: 49 66 20 74 68 65 20 68 74 74 70 5f 70 72 6f 78  If the http_prox
04a0: 79 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61  y environment va
04b0: 72 69 61 62 6c 65 20 69 73 20 75 6e 64 65 66 69  riable is undefi
04c0: 6e 65 64 0d 0a 20 2a 2a 20 20 20 20 20 20 20 20  ned.. **        
04d0: 20 20 20 20 20 20 20 20 20 20 74 68 65 6e 20 61            then a
04e0: 20 64 69 72 65 63 74 20 48 54 54 50 20 63 6f 6e   direct HTTP con
04f0: 6e 65 63 74 69 6f 6e 20 69 73 20 75 73 65 64 2e  nection is used.
0500: 0d 0a 2b 2a 2a 0d 0a 2b 2a 2a 20 20 20 20 70 75  ..+**..+**    pu
0510: 73 68 2d 68 6f 6f 6b 2d 70 61 74 74 65 72 6e 2d  sh-hook-pattern-
0520: 63 6c 69 65 6e 74 0d 0a 2b 2a 2a 20 20 20 20 20  client..+**     
0530: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
0540: 73 65 74 2c 20 61 20 63 6c 69 65 6e 74 20 70 75  set, a client pu
0550: 73 68 20 77 69 6c 6c 20 73 65 6e 74 20 74 68 69  sh will sent thi
0560: 73 20 6d 65 73 73 61 67 65 20 74 6f 20 74 68 65  s message to the
0570: 0d 0a 2b 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ..+**           
0580: 20 20 20 20 20 20 20 73 65 72 76 65 72 2c 20 74         server, t
0590: 6f 20 61 63 74 69 76 61 74 65 20 74 68 65 20 70  o activate the p
05a0: 75 73 68 20 68 6f 6f 6b 20 63 6f 6d 6d 61 6e 64  ush hook command
05b0: 2e 0d 0a 2b 2a 2a 0d 0a 2b 2a 2a 20 20 20 20 70  ...+**..+**    p
05c0: 75 73 68 2d 68 6f 6f 6b 2d 70 61 74 74 65 72 6e  ush-hook-pattern
05d0: 2d 63 6d 64 0d 0a 2b 2a 2a 20 20 20 20 20 20 20  -cmd..+**       
05e0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
05f0: 69 73 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c  is the command l
0600: 69 6e 65 2c 20 74 68 61 74 20 77 69 6c 6c 20 62  ine, that will b
0610: 65 20 61 63 74 69 76 61 74 65 64 0d 0a 2b 2a 2a  e activated..+**
0620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0630: 20 20 61 73 20 70 75 73 68 20 68 6f 6f 6b 2e 20    as push hook. 
0640: 4f 75 74 70 75 74 20 72 65 64 69 72 65 63 74 73  Output redirects
0650: 20 73 68 6f 75 6c 64 20 62 65 20 61 64 64 65 64   should be added
0660: 20 74 6f 0d 0a 2b 2a 2a 20 20 20 20 20 20 20 20   to..+**        
0670: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 63            this c
0680: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 0d 0a 2b 2a  ommand line...+*
0690: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
06a0: 20 20 20 54 68 65 20 63 6f 6d 70 6c 65 74 65 20     The complete 
06b0: 70 61 74 74 65 72 6e 2c 20 73 65 6e 74 20 62 79  pattern, sent by
06c0: 20 74 68 65 20 63 6c 69 65 6e 74 20 77 69 6c 6c   the client will
06d0: 20 62 65 0d 0a 2b 2a 2a 20 20 20 20 20 20 20 20   be..+**        
06e0: 20 20 20 20 20 20 20 20 20 20 61 70 70 65 6e 64            append
06f0: 65 64 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e  ed to the comman
0700: 64 20 6c 69 6e 65 2e 0d 0a 2b 2a 2a 0d 0a 2b 2a  d line...+**..+*
0710: 2a 20 20 20 20 70 75 73 68 2d 68 6f 6f 6b 2d 70  *    push-hook-p
0720: 61 74 74 65 72 6e 2d 73 65 72 76 65 72 0d 0a 2b  attern-server..+
0730: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0740: 20 20 20 20 69 66 20 73 65 74 2c 20 61 6e 64 20      if set, and 
0750: 61 20 63 6c 69 65 6e 74 20 73 65 6e 64 20 74 68  a client send th
0760: 69 73 20 70 61 74 74 65 72 6e 20 61 74 20 74 68  is pattern at th
0770: 65 20 65 6e 64 20 6f 66 0d 0a 2b 2a 2a 20 20 20  e end of..+**   
0780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
0790: 20 70 75 73 68 2c 20 74 68 65 20 70 75 73 68 20   push, the push 
07a0: 68 6f 6f 6b 20 63 6f 6d 6d 61 6e 64 20 77 69 6c  hook command wil
07b0: 6c 20 62 65 20 65 78 65 63 75 74 65 64 2e 20 54  l be executed. T
07c0: 68 69 73 0d 0a 2b 2a 2a 20 20 20 20 20 20 20 20  his..+**        
07d0: 20 20 20 20 20 20 20 20 20 20 6d 69 67 68 74 20            might 
07e0: 62 65 20 61 20 70 72 65 66 69 78 20 6f 66 20 74  be a prefix of t
07f0: 68 65 20 70 61 74 74 65 72 6e 2c 20 73 65 6e 74  he pattern, sent
0800: 20 62 79 20 74 68 65 20 63 6c 69 65 6e 74 2e 0d   by the client..
0810: 0a 20 2a 2a 0d 0a 20 2a 2a 20 20 20 20 73 73 68  . **.. **    ssh
0820: 2d 63 6f 6d 6d 61 6e 64 20 20 20 43 6f 6d 6d 61  -command   Comma
0830: 6e 64 20 75 73 65 64 20 74 6f 20 74 61 6c 6b 20  nd used to talk 
0840: 74 6f 20 61 20 72 65 6d 6f 74 65 20 6d 61 63 68  to a remote mach
0850: 69 6e 65 20 77 69 74 68 0d 0a 20 2a 2a 20 20 20  ine with.. **   
0860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0870: 68 65 20 22 73 73 68 3a 2f 2f 22 20 70 72 6f 74  he "ssh://" prot
0880: 6f 63 6f 6c 2e 0d 0a 20 2a 2a 0d 0a 20 2a 2a 20  ocol... **.. ** 
0890: 20 20 20 77 65 62 2d 62 72 6f 77 73 65 72 20 20     web-browser  
08a0: 20 41 20 73 68 65 6c 6c 20 63 6f 6d 6d 61 6e 64   A shell command
08b0: 20 75 73 65 64 20 74 6f 20 6c 61 75 6e 63 68 20   used to launch 
08c0: 79 6f 75 72 20 70 72 65 66 65 72 72 65 64 0d 0a  your preferred..
08d0: 0d 0a 43 48 41 4e 47 45 44 20 73 72 63 2f 78 66  ..CHANGED src/xf
08e0: 65 72 2e 63 0d 0a 49 6e 64 65 78 3a 20 73 72 63  er.c..Index: src
08f0: 2f 78 66 65 72 2e 63 0d 0a 3d 3d 3d 3d 3d 3d 3d  /xfer.c..=======
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: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0930: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 2d 2d  ============..--
0940: 2d 20 73 72 63 2f 78 66 65 72 2e 63 0d 0a 2b 2b  - src/xfer.c..++
0950: 2b 20 73 72 63 2f 78 66 65 72 2e 63 0d 0a 40 40  + src/xfer.c..@@
0960: 20 2d 34 30 2c 31 30 20 2b 34 30 2c 33 32 20 40   -40,10 +40,32 @
0970: 40 0d 0a 20 20 20 69 6e 74 20 6e 44 65 6c 74 61  @..   int nDelta
0980: 52 63 76 64 3b 20 20 20 20 20 2f 2a 20 4e 75 6d  Rcvd;     /* Num
0990: 62 65 72 20 6f 66 20 64 65 6c 74 61 73 20 72 65  ber of deltas re
09a0: 63 65 69 76 65 64 20 2a 2f 0d 0a 20 20 20 69 6e  ceived */..   in
09b0: 74 20 6e 44 61 6e 67 6c 69 6e 67 46 69 6c 65 3b  t nDanglingFile;
09c0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64    /* Number of d
09d0: 61 6e 67 6c 69 6e 67 20 64 65 6c 74 61 73 20 72  angling deltas r
09e0: 65 63 65 69 76 65 64 20 2a 2f 0d 0a 20 20 20 69  eceived */..   i
09f0: 6e 74 20 6d 78 53 65 6e 64 3b 20 20 20 20 20 20  nt mxSend;      
0a00: 20 20 20 2f 2a 20 53 74 6f 70 20 73 65 6e 64 69     /* Stop sendi
0a10: 6e 67 20 22 66 69 6c 65 22 20 77 69 74 68 20 70  ng "file" with p
0a20: 4f 75 74 20 72 65 61 63 68 65 73 20 74 68 69 73  Out reaches this
0a30: 20 73 69 7a 65 20 2a 2f 0d 0a 20 7d 3b 0d 0a 20   size */.. };.. 
0a40: 0d 0a 2b 2f 2a 0d 0a 2b 2a 2a 20 4c 65 74 20 61  ..+/*..+** Let a
0a50: 20 73 65 72 76 65 72 2d 73 69 64 65 20 65 78 74   server-side ext
0a60: 65 72 6e 61 6c 20 61 67 65 6e 74 20 6b 6e 6f 77  ernal agent know
0a70: 20 74 68 61 74 20 61 20 70 75 73 68 20 68 61 73   that a push has
0a80: 20 63 6f 6d 70 6c 65 74 65 64 2e 20 2f 66 61 74   completed. /fat
0a90: 6d 61 6e 0d 0a 2b 2a 2f 0d 0a 2b 76 6f 69 64 20  man..+*/..+void 
0aa0: 70 6f 73 74 5f 70 75 73 68 5f 68 6f 6f 6b 28 63  post_push_hook(c
0ab0: 68 61 72 20 63 6f 6e 73 74 20 2a 20 63 6f 6e 73  har const * cons
0ac0: 74 20 7a 50 75 73 68 48 6f 6f 6b 4c 69 6e 65 29  t zPushHookLine)
0ad0: 7b 0d 0a 2b 20 20 2f 2a 0d 0a 2b 20 20 2a 2a 20  {..+  /*..+  ** 
0ae0: 54 4f 20 44 4f 3a 20 67 65 74 20 74 68 65 20 73  TO DO: get the s
0af0: 74 72 69 6e 67 20 63 6d 64 20 66 72 6f 6d 20 61  tring cmd from a
0b00: 20 63 6f 6e 66 69 67 20 66 69 6c 65 3f 20 4f 72   config file? Or
0b10: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6c 6f   the database lo
0b20: 63 61 6c 0d 0a 2b 20 20 2a 2a 20 73 65 74 74 69  cal..+  ** setti
0b30: 6e 67 73 2c 20 61 73 20 73 6f 6d 65 6f 6e 65 20  ngs, as someone 
0b40: 73 75 67 67 65 73 74 65 64 3f 20 44 69 74 74 6f  suggested? Ditto
0b50: 20 6f 75 74 70 75 74 20 61 6e 64 20 65 72 72 6f   output and erro
0b60: 72 20 6c 6f 67 73 2e 20 2f 66 61 74 6d 61 6e 0d  r logs. /fatman.
0b70: 0a 2b 20 20 2a 2f 0d 0a 2b 20 20 63 6f 6e 73 74  .+  */..+  const
0b80: 20 63 68 61 72 20 2a 7a 43 6d 64 20 3d 20 64 62   char *zCmd = db
0b90: 5f 67 65 74 28 22 70 75 73 68 2d 68 6f 6f 6b 2d  _get("push-hook-
0ba0: 70 61 74 74 65 72 6e 2d 63 6d 64 22 2c 20 22 22  pattern-cmd", ""
0bb0: 29 3b 0d 0a 2b 20 20 0d 0a 2b 20 20 69 66 28 20  );..+  ..+  if( 
0bc0: 7a 43 6d 64 20 26 26 20 7a 43 6d 64 5b 30 5d 20  zCmd && zCmd[0] 
0bd0: 29 7b 0d 0a 2b 20 20 20 20 69 6e 74 20 72 63 3b  ){..+    int rc;
0be0: 0d 0a 2b 20 20 20 20 63 68 61 72 20 2a 20 7a 43  ..+    char * zC
0bf0: 61 6c 6c 65 64 43 6d 64 3b 0d 0a 2b 0d 0a 2b 20  alledCmd;..+..+ 
0c00: 20 20 20 7a 43 61 6c 6c 65 64 43 6d 64 20 3d 20     zCalledCmd = 
0c10: 6d 70 72 69 6e 74 66 28 22 25 73 20 25 73 22 2c  mprintf("%s %s",
0c20: 7a 43 6d 64 2c 7a 50 75 73 68 48 6f 6f 6b 4c 69  zCmd,zPushHookLi
0c30: 6e 65 29 3b 0d 0a 2b 20 20 20 20 72 63 20 3d 20  ne);..+    rc = 
0c40: 73 79 73 74 65 6d 28 7a 43 61 6c 6c 65 64 43 6d  system(zCalledCm
0c50: 64 29 3b 0d 0a 2b 20 20 20 20 69 66 20 28 72 63  d);..+    if (rc
0c60: 20 21 3d 20 30 29 20 7b 0d 0a 2b 20 20 20 20 20   != 0) {..+     
0c70: 20 66 6f 73 73 69 6c 5f 70 72 69 6e 74 28 22 54   fossil_print("T
0c80: 68 65 20 70 6f 73 74 2d 70 75 73 68 2d 68 6f 6f  he post-push-hoo
0c90: 6b 20 63 6f 6d 6d 61 6e 64 20 5c 22 25 73 5c 22  k command \"%s\"
0ca0: 20 66 61 69 6c 65 64 2e 22 2c 20 7a 43 61 6c 6c   failed.", zCall
0cb0: 65 64 43 6d 64 29 3b 0d 0a 2b 20 20 20 20 7d 0d  edCmd);..+    }.
0cc0: 0a 2b 20 20 20 20 66 72 65 65 28 7a 43 61 6c 6c  .+    free(zCall
0cd0: 65 64 43 6d 64 29 3b 0d 0a 2b 20 20 7d 0d 0a 2b  edCmd);..+  }..+
0ce0: 7d 0d 0a 20 0d 0a 20 2f 2a 0d 0a 20 2a 2a 20 54  }.. .. /*.. ** T
0cf0: 68 65 20 69 6e 70 75 74 20 62 6c 6f 62 20 63 6f  he input blob co
0d00: 6e 74 61 69 6e 73 20 61 20 55 55 49 44 2e 20 20  ntains a UUID.  
0d10: 43 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20  Convert it into 
0d20: 61 20 72 65 63 6f 72 64 20 49 44 2e 0d 0a 20 2a  a record ID... *
0d30: 2a 20 43 72 65 61 74 65 20 61 20 70 68 61 6e 74  * Create a phant
0d40: 6f 6d 20 72 65 63 6f 72 64 20 69 66 20 6e 6f 20  om record if no 
0d50: 70 72 69 6f 72 20 72 65 63 6f 72 64 20 65 78 69  prior record exi
0d60: 73 74 73 20 61 6e 64 0d 0a 20 2a 2a 20 70 68 61  sts and.. ** pha
0d70: 6e 74 6f 6d 69 7a 65 20 69 73 20 74 72 75 65 2e  ntomize is true.
0d80: 0d 0a 40 40 20 2d 35 39 36 2c 31 30 20 2b 36 31  ..@@ -596,10 +61
0d90: 38 2c 31 33 20 40 40 0d 0a 20 20 20 69 6e 74 20  8,13 @@..   int 
0da0: 69 73 43 6c 6f 6e 65 20 3d 20 30 3b 0d 0a 20 20  isClone = 0;..  
0db0: 20 69 6e 74 20 6e 47 69 6d 6d 65 20 3d 20 30 3b   int nGimme = 0;
0dc0: 0d 0a 20 20 20 69 6e 74 20 73 69 7a 65 3b 0d 0a  ..   int size;..
0dd0: 20 20 20 69 6e 74 20 72 65 63 76 43 6f 6e 66 69     int recvConfi
0de0: 67 20 3d 20 30 3b 0d 0a 20 20 20 63 68 61 72 20  g = 0;..   char 
0df0: 2a 7a 4e 6f 77 3b 0d 0a 2b 20 20 63 6f 6e 73 74  *zNow;..+  const
0e00: 20 63 68 61 72 20 2a 7a 50 75 73 68 48 6f 6f 6b   char *zPushHook
0e10: 50 61 74 74 65 72 6e 20 3d 20 64 62 5f 67 65 74  Pattern = db_get
0e20: 28 22 70 75 73 68 2d 68 6f 6f 6b 2d 70 61 74 74  ("push-hook-patt
0e30: 65 72 6e 2d 73 65 72 76 65 72 22 2c 20 22 22 29  ern-server", "")
0e40: 3b 0d 0a 2b 20 20 69 6e 74 20 6c 65 6e 50 75 73  ;..+  int lenPus
0e50: 68 48 6f 6f 6b 50 61 74 74 65 72 6e 20 3d 20 28  hHookPattern = (
0e60: 7a 50 75 73 68 48 6f 6f 6b 50 61 74 74 65 72 6e  zPushHookPattern
0e70: 20 26 26 20 7a 50 75 73 68 48 6f 6f 6b 50 61 74   && zPushHookPat
0e80: 74 65 72 6e 5b 30 5d 29 0d 0a 2b 20 20 20 20 20  tern[0])..+     
0e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ea0: 20 20 20 20 20 20 20 3f 20 73 74 72 6c 65 6e 28         ? strlen(
0eb0: 7a 50 75 73 68 48 6f 6f 6b 50 61 74 74 65 72 6e  zPushHookPattern
0ec0: 29 20 3a 20 30 3b 0d 0a 20 0d 0a 20 20 20 69 66  ) : 0;.. ..   if
0ed0: 28 20 73 74 72 63 6d 70 28 50 44 28 22 52 45 51  ( strcmp(PD("REQ
0ee0: 55 45 53 54 5f 4d 45 54 48 4f 44 22 2c 22 50 4f  UEST_METHOD","PO
0ef0: 53 54 22 29 2c 22 50 4f 53 54 22 29 20 29 7b 0d  ST"),"POST") ){.
0f00: 0a 20 20 20 20 20 20 66 6f 73 73 69 6c 5f 72 65  .      fossil_re
0f10: 64 69 72 65 63 74 5f 68 6f 6d 65 28 29 3b 0d 0a  direct_home();..
0f20: 20 20 20 7d 0d 0a 20 20 20 6d 65 6d 73 65 74 28     }..   memset(
0f30: 26 78 66 65 72 2c 20 30 2c 20 73 69 7a 65 6f 66  &xfer, 0, sizeof
0f40: 28 78 66 65 72 29 29 3b 0d 0a 40 40 20 2d 36 31  (xfer));..@@ -61
0f50: 37 2c 31 31 20 2b 36 34 32 2c 31 39 20 40 40 0d  7,11 +642,19 @@.
0f60: 0a 20 20 20 29 3b 0d 0a 20 20 20 7a 4e 6f 77 20  .   );..   zNow 
0f70: 3d 20 64 62 5f 74 65 78 74 28 30 2c 20 22 53 45  = db_text(0, "SE
0f80: 4c 45 43 54 20 73 74 72 66 74 69 6d 65 28 27 25  LECT strftime('%
0f90: 25 59 2d 25 25 6d 2d 25 25 64 54 25 25 48 3a 25  %Y-%%m-%%dT%%H:%
0fa0: 25 4d 3a 25 25 53 27 2c 20 27 6e 6f 77 27 29 22  %M:%%S', 'now')"
0fb0: 29 3b 0d 0a 20 20 20 40 20 23 20 74 69 6d 65 73  );..   @ # times
0fc0: 74 61 6d 70 20 25 73 28 7a 4e 6f 77 29 0d 0a 20  tamp %s(zNow).. 
0fd0: 20 20 6d 61 6e 69 66 65 73 74 5f 63 72 6f 73 73    manifest_cross
0fe0: 6c 69 6e 6b 5f 62 65 67 69 6e 28 29 3b 0d 0a 20  link_begin();.. 
0ff0: 20 20 77 68 69 6c 65 28 20 62 6c 6f 62 5f 6c 69    while( blob_li
1000: 6e 65 28 78 66 65 72 2e 70 49 6e 2c 20 26 78 66  ne(xfer.pIn, &xf
1010: 65 72 2e 6c 69 6e 65 29 20 29 7b 0d 0a 2d 20 20  er.line) ){..-  
1020: 20 20 69 66 28 20 62 6c 6f 62 5f 62 75 66 66 65    if( blob_buffe
1030: 72 28 26 78 66 65 72 2e 6c 69 6e 65 29 5b 30 5d  r(&xfer.line)[0]
1040: 3d 3d 27 23 27 20 29 20 63 6f 6e 74 69 6e 75 65  =='#' ) continue
1050: 3b 0d 0a 2b 20 20 20 20 69 66 28 20 62 6c 6f 62  ;..+    if( blob
1060: 5f 62 75 66 66 65 72 28 26 78 66 65 72 2e 6c 69  _buffer(&xfer.li
1070: 6e 65 29 5b 30 5d 3d 3d 27 23 27 20 29 7b 0d 0a  ne)[0]=='#' ){..
1080: 2b 20 20 20 20 20 20 69 66 28 20 20 20 20 6c 65  +      if(    le
1090: 6e 50 75 73 68 48 6f 6f 6b 50 61 74 74 65 72 6e  nPushHookPattern
10a0: 0d 0a 2b 20 20 20 20 20 20 20 20 20 20 26 26 20  ..+          && 
10b0: 30 20 3d 3d 20 6d 65 6d 63 6d 70 28 62 6c 6f 62  0 == memcmp(blob
10c0: 5f 62 75 66 66 65 72 28 26 78 66 65 72 2e 6c 69  _buffer(&xfer.li
10d0: 6e 65 29 2b 31 2c 0d 0a 2b 20 20 20 20 20 20 20  ne)+1,..+       
10e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f0: 20 20 7a 50 75 73 68 48 6f 6f 6b 50 61 74 74 65    zPushHookPatte
1100: 72 6e 2c 20 6c 65 6e 50 75 73 68 48 6f 6f 6b 50  rn, lenPushHookP
1110: 61 74 74 65 72 6e 29 0d 0a 2b 20 20 20 20 20 20  attern)..+      
1120: 29 7b 0d 0a 2b 20 20 20 20 20 20 20 20 70 6f 73  ){..+        pos
1130: 74 5f 70 75 73 68 5f 68 6f 6f 6b 28 62 6c 6f 62  t_push_hook(blob
1140: 5f 62 75 66 66 65 72 28 26 78 66 65 72 2e 6c 69  _buffer(&xfer.li
1150: 6e 65 29 2b 31 29 3b 0d 0a 2b 20 20 20 20 20 20  ne)+1);..+      
1160: 7d 0d 0a 2b 20 20 20 20 20 20 63 6f 6e 74 69 6e  }..+      contin
1170: 75 65 3b 0d 0a 2b 20 20 20 20 7d 0d 0a 20 20 20  ue;..+    }..   
1180: 20 20 78 66 65 72 2e 6e 54 6f 6b 65 6e 20 3d 20    xfer.nToken = 
1190: 62 6c 6f 62 5f 74 6f 6b 65 6e 69 7a 65 28 26 78  blob_tokenize(&x
11a0: 66 65 72 2e 6c 69 6e 65 2c 20 78 66 65 72 2e 61  fer.line, xfer.a
11b0: 54 6f 6b 65 6e 2c 20 63 6f 75 6e 74 28 78 66 65  Token, count(xfe
11c0: 72 2e 61 54 6f 6b 65 6e 29 29 3b 0d 0a 20 0d 0a  r.aToken));.. ..
11d0: 20 20 20 20 20 2f 2a 20 20 20 66 69 6c 65 20 55       /*   file U
11e0: 55 49 44 20 53 49 5a 45 20 5c 6e 20 43 4f 4e 54  UID SIZE \n CONT
11f0: 45 4e 54 0d 0a 20 20 20 20 20 2a 2a 20 20 20 66  ENT..     **   f
1200: 69 6c 65 20 55 55 49 44 20 44 45 4c 54 41 53 52  ile UUID DELTASR
1210: 43 20 53 49 5a 45 20 5c 6e 20 43 4f 4e 54 45 4e  C SIZE \n CONTEN
1220: 54 0d 0a 20 20 20 20 20 2a 2a 0d 0a 40 40 20 2d  T..     **..@@ -
1230: 39 34 38 2c 31 30 20 2b 39 38 31 2c 31 32 20 40  948,10 +981,12 @
1240: 40 0d 0a 20 20 20 42 6c 6f 62 20 73 65 6e 64 3b  @..   Blob send;
1250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1260: 20 54 65 78 74 20 77 65 20 61 72 65 20 73 65 6e   Text we are sen
1270: 64 69 6e 67 20 74 6f 20 74 68 65 20 73 65 72 76  ding to the serv
1280: 65 72 20 2a 2f 0d 0a 20 20 20 42 6c 6f 62 20 72  er */..   Blob r
1290: 65 63 76 3b 20 20 20 20 20 20 20 20 20 20 20 20  ecv;            
12a0: 20 20 2f 2a 20 52 65 70 6c 79 20 77 65 20 67 6f    /* Reply we go
12b0: 74 20 62 61 63 6b 20 66 72 6f 6d 20 74 68 65 20  t back from the 
12c0: 73 65 72 76 65 72 20 2a 2f 0d 0a 20 20 20 58 66  server */..   Xf
12d0: 65 72 20 78 66 65 72 3b 20 20 20 20 20 20 20 20  er xfer;        
12e0: 20 20 20 20 20 20 2f 2a 20 54 72 61 6e 73 66 65        /* Transfe
12f0: 72 20 64 61 74 61 20 2a 2f 0d 0a 20 20 20 63 6f  r data */..   co
1300: 6e 73 74 20 63 68 61 72 20 2a 7a 53 43 6f 64 65  nst char *zSCode
1310: 20 3d 20 64 62 5f 67 65 74 28 22 73 65 72 76 65   = db_get("serve
1320: 72 2d 63 6f 64 65 22 2c 20 22 78 22 29 3b 0d 0a  r-code", "x");..
1330: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
1340: 50 43 6f 64 65 20 3d 20 64 62 5f 67 65 74 28 22  PCode = db_get("
1350: 70 72 6f 6a 65 63 74 2d 63 6f 64 65 22 2c 20 30  project-code", 0
1360: 29 3b 0d 0a 2b 20 20 63 6f 6e 73 74 20 63 68 61  );..+  const cha
1370: 72 20 2a 7a 50 75 73 68 48 6f 6f 6b 50 61 74 74  r *zPushHookPatt
1380: 65 72 6e 20 3d 20 64 62 5f 67 65 74 28 22 70 75  ern = db_get("pu
1390: 73 68 2d 68 6f 6f 6b 2d 70 61 74 74 65 72 6e 2d  sh-hook-pattern-
13a0: 63 6c 69 65 6e 74 22 2c 20 22 22 29 3b 0d 0a 2b  client", "");..+
13b0: 0d 0a 20 0d 0a 20 20 20 69 66 28 20 64 62 5f 67  .. ..   if( db_g
13c0: 65 74 5f 62 6f 6f 6c 65 61 6e 28 22 64 6f 6e 74  et_boolean("dont
13d0: 2d 70 75 73 68 22 2c 20 30 29 20 29 20 70 75 73  -push", 0) ) pus
13e0: 68 46 6c 61 67 20 3d 20 30 3b 0d 0a 20 20 20 69  hFlag = 0;..   i
13f0: 66 28 20 70 75 73 68 46 6c 61 67 20 2b 20 70 75  f( pushFlag + pu
1400: 6c 6c 46 6c 61 67 20 2b 20 63 6c 6f 6e 65 46 6c  llFlag + cloneFl
1410: 61 67 20 3d 3d 20 30 20 0d 0a 20 20 20 20 20 20  ag == 0 ..      
1420: 26 26 20 63 6f 6e 66 69 67 52 63 76 4d 61 73 6b  && configRcvMask
1430: 3d 3d 30 20 26 26 20 63 6f 6e 66 69 67 53 65 6e  ==0 && configSen
1440: 64 4d 61 73 6b 3d 3d 30 20 29 20 72 65 74 75 72  dMask==0 ) retur
1450: 6e 3b 0d 0a 20 0d 0a 40 40 20 2d 31 33 33 30 2c  n;.. ..@@ -1330,
1460: 31 34 20 2b 31 33 36 35 2c 32 32 20 40 40 0d 0a  14 +1365,22 @@..
1470: 20 20 20 20 20 7d 0d 0a 20 0d 0a 20 20 20 20 20       }.. ..     
1480: 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20 61 20  /* If this is a 
1490: 63 6c 6f 6e 65 2c 20 74 68 65 20 67 6f 20 61 74  clone, the go at
14a0: 20 6c 65 61 73 74 20 74 77 6f 20 72 6f 75 6e 64   least two round
14b0: 73 20 2a 2f 0d 0a 20 20 20 20 20 69 66 28 20 63  s */..     if( c
14c0: 6c 6f 6e 65 46 6c 61 67 20 26 26 20 6e 43 79 63  loneFlag && nCyc
14d0: 6c 65 3d 3d 31 20 29 20 67 6f 20 3d 20 31 3b 0d  le==1 ) go = 1;.
14e0: 0a 20 20 20 7d 3b 0d 0a 2b 20 20 69 66 20 28 70  .   };..+  if (p
14f0: 75 73 68 46 6c 61 67 20 26 26 20 6e 46 69 6c 65  ushFlag && nFile
1500: 53 65 6e 64 20 3e 20 30 29 20 7b 0d 0a 2b 20 20  Send > 0) {..+  
1510: 20 20 69 66 28 20 7a 50 75 73 68 48 6f 6f 6b 50    if( zPushHookP
1520: 61 74 74 65 72 6e 20 26 26 20 7a 50 75 73 68 48  attern && zPushH
1530: 6f 6f 6b 50 61 74 74 65 72 6e 5b 30 5d 20 29 7b  ookPattern[0] ){
1540: 0d 0a 2b 20 20 20 20 20 20 62 6c 6f 62 5f 61 70  ..+      blob_ap
1550: 70 65 6e 64 66 28 26 73 65 6e 64 2c 20 22 23 25  pendf(&send, "#%
1560: 73 5c 6e 22 2c 20 7a 50 75 73 68 48 6f 6f 6b 50  s\n", zPushHookP
1570: 61 74 74 65 72 6e 29 3b 0d 0a 2b 20 20 20 20 20  attern);..+     
1580: 20 68 74 74 70 5f 65 78 63 68 61 6e 67 65 28 26   http_exchange(&
1590: 73 65 6e 64 2c 20 26 72 65 63 76 2c 20 63 6c 6f  send, &recv, clo
15a0: 6e 65 46 6c 61 67 3d 3d 30 20 7c 7c 20 6e 43 79  neFlag==0 || nCy
15b0: 63 6c 65 3e 30 29 3b 0d 0a 2b 20 20 20 20 20 20  cle>0);..+      
15c0: 62 6c 6f 62 5f 72 65 73 65 74 28 26 73 65 6e 64  blob_reset(&send
15d0: 29 3b 0d 0a 2b 20 20 20 20 20 20 6e 43 61 72 64  );..+      nCard
15e0: 53 65 6e 74 2b 2b 3b 0d 0a 2b 20 20 20 20 7d 0d  Sent++;..+    }.
15f0: 0a 2b 20 20 7d 0d 0a 20 20 20 74 72 61 6e 73 70  .+  }..   transp
1600: 6f 72 74 5f 73 74 61 74 73 28 26 6e 53 65 6e 74  ort_stats(&nSent
1610: 2c 20 26 6e 52 63 76 64 2c 20 31 29 3b 0d 0a 20  , &nRcvd, 1);.. 
1620: 20 20 66 6f 73 73 69 6c 5f 70 72 69 6e 74 28 22    fossil_print("
1630: 54 6f 74 61 6c 20 6e 65 74 77 6f 72 6b 20 74 72  Total network tr
1640: 61 66 66 69 63 3a 20 25 64 20 62 79 74 65 73 20  affic: %d bytes 
1650: 73 65 6e 74 2c 20 25 64 20 62 79 74 65 73 20 72  sent, %d bytes r
1660: 65 63 65 69 76 65 64 5c 6e 22 2c 0d 0a 20 20 20  eceived\n",..   
1670: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 53 65               nSe
1680: 6e 74 2c 20 6e 52 63 76 64 29 3b 0d 0a 20 20 20  nt, nRcvd);..   
1690: 74 72 61 6e 73 70 6f 72 74 5f 63 6c 6f 73 65 28  transport_close(
16a0: 29 3b 0d 0a 20 20 20 74 72 61 6e 73 70 6f 72 74  );..   transport
16b0: 5f 67 6c 6f 62 61 6c 5f 73 68 75 74 64 6f 77 6e  _global_shutdown
16c0: 28 29 3b 0d 0a 20 20 20 64 62 5f 6d 75 6c 74 69  ();..   db_multi
16d0: 5f 65 78 65 63 28 22 44 52 4f 50 20 54 41 42 4c  _exec("DROP TABL
16e0: 45 20 6f 6e 72 65 6d 6f 74 65 22 29 3b 0d 0a 20  E onremote");.. 
16f0: 20 20 6d 61 6e 69 66 65 73 74 5f 63 72 6f 73 73    manifest_cross
1700: 6c 69 6e 6b 5f 65 6e 64 28 29 3b 0d 0a 20 20 20  link_end();..   
1710: 64 62 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 69  db_end_transacti
1720: 6f 6e 28 30 29 3b 0d 0a 20 7d 0d 0a 0d 0a        on(0);.. }....